Index: doc/LaTeXmacros/enumitem/README
===================================================================
--- doc/LaTeXmacros/enumitem/README	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,106 +1,0 @@
-Enumitem 3.5.2
-~~~~~~~~~~~~~~
-
-A package to customize the three basic lists (enumerate,
-itemize and description) by means of a set of parameters,
-and to clone them to define new "logical" lists.
-It provides most of the flexibility you may want to
-design your own lists:
-- fancy labels and fancy refs,
-- leftmargin, labelsep and labelwidth automatically set,
-- changes applied globally or only in one of the three
-  types or even in a single list (including topsep) by
-  means of a sort of "inheritance",
-- inline lists,
-- several description styles (which fix some bad
-  spacing, too),
-- starting value and counter resuming,
-- trivlists properly formatted,
-- control on page breaking,
-- gathering of lists to be treated like a unit.
-
-Recent changes (3.0)
-~~~~~~~~~~~~~~~~~~~~
-
-1) Inline lists, with keys to set how items are joined (ie, the
-punctuation between items).  Two modes are provided: `boxed' an
-`unboxed' -- with the former (the default) a different punctuation
-before the last item is allowed.
-2) \setlist is calc-savvy (eg, for use in loops), and you can set
-diferent lists and levels at once.
-3) All lengths related to labels can take the value * (and not only
-labelsep and leftmargin).  Its behaviour has been made consistent and
-there is new value !  which does not compute the widest label.
-4) With \restartlist{list-name}, list counters can be restarted (in
-case you are using `resume').
-5) `resume*' can be combined with other keys.
-6) Lists can be gathered globally using series, so that they are
-considered a single list.  To start a series just use
-series=<series-name> and then resume it with resume=<series-name> or
-resume*=<series-name>.
-7) The ``experimental'' fullwidth has been replaced by a new key
-`wide'.
-8) \SetLabelAlign defines new align values.
-9) You can define ``abstract'' values (eg, label=numeric) and
-new keys.
-
-Bug fixes (3.0)
-~~~~~~~~~~~~~~~
-
-- Star values (eg, leftmargin=*) could not be overriden
-and new values were ignored.
-- nolistsep as the first of several keys was not always
-recognized and therefore treated like a short label
-(ie, nol\roman*stsep).
-- labelwidth didn't always work (when there was a prior
-`widest' and *)
-- With align=right the label and the following text could
-overlap.
-- description didn't get the correct list level.
-- At some point (2.x?) \value* stopped working.
-
-3.1
-~~~
-- Fixed incompatibility with xkeyval
-
-3.2
-~~~
-- start and widest* are calc-savvy.
-- \value can be used with widest*
-- Some internal restrictions in \arabic and the like has been removed.
-It is more flexible at the cost of having a more ``relaxed'' error
-checking.
-
-3.3
-~~~
-- Using *-values with itemize and description didn't work.
-
-3.4
-~~~
-- New key nosep, replacing nolistsep, which didn't work as
-documented.
-- Fixed spacing in inline boxed lists.
-- Fixed (hopefully) the bug with noitemsep and shorlabels.
-
-3.5.0
-~~~~~
-- Fixed the fix related to inline lists (spacefactor).
-- Fixed some problems in nested boxed inline lists.
-(- And sub-sub-versions are introduced.)
-
-3.5.1
-~~~~~
-- resume* only worked once, and subsequent ones
-behaved like resume.
-
-3.5.2
-~~~~~
-- \setlist* didn't work.
-
-_________________________________________________________________
-Javier Bezos                    | http://www.tex-tipografia.com
-.................................................................
-2011-09-28
-
-
-
Index: doc/LaTeXmacros/enumitem/enumitem.sty
===================================================================
--- doc/LaTeXmacros/enumitem/enumitem.sty	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,1593 +1,0 @@
-% +--------------------------------------------------+
-% | Typeset enumitem.tex to get the documentation.   |
-% +--------------------------------------------------+
-%
-% Copyright (c) 2003-2011 by Javier Bezos.
-% All Rights Reserved.
-%
-% This file is part of the enumitem distribution release 3.5.2
-% -----------------------------------------------------------
-% 
-% It may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-%   http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2003/12/01 or later.
-% 
-% This work has the LPPL maintenance status "maintained".
-% 
-% The Current Maintainer of this work is Javier Bezos.
-%
-% Notes
-% ~~~~~
-%
-% The tag enit@ is used through the style
-%
-% To do:
-% ~~~~~~
-% - ref*, for adding stuff in the same fashion as label*
-% - option ams, to force upshape, but I have to investigate
-% how to do it.
-% - labelled descriptions (ie, label, title, body)
-% - A true nextline (far from trivial and perhaps solved with
-%   labelled descriptions).
-% - Improved \AddEnumerateCounter
-% - Compatibility with interfaces and zref-enumitem
-% - "Pausing" somehow inline boxed text.
-% - \@enumctr <-> \@listctr?
-% - Define keys with values
-% - Revise @nobreak
-%
-% Release
-% ~~~~~~~
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{enumitem}[2011/09/28 v3.5.2 Customized lists]
-
-% +=============================+
-% |      EMULATING KEYVAL       |
-% +=============================+
-%
-% "Thanks" to xkeyval, which use the same macros names as
-% keyval :-(, the latter has to be replicated in full here
-% to ensure it works as intended. The original work if by
-% David Carlisle, under license LPPL. Once the code is here,
-% it could be optimized by adpting it to the specific needs
-% of titlesec (to do).
-
-\def\enitkv@setkeys#1#2{%
-  \def\enitkv@prefix{enitkv@#1@}%
-  \let\@tempc\relax
-  \enitkv@do#2,\relax,}
-
-\def\enitkv@do#1,{%
- \ifx\relax#1\empty\else
-  \enitkv@split#1==\relax
-  \expandafter\enitkv@do\fi}
-
-\def\enitkv@split#1=#2=#3\relax{%
-  \enitkv@@sp@def\@tempa{#1}%
-  \ifx\@tempa\@empty\else
-    \expandafter\let\expandafter\@tempc
-      \csname\enitkv@prefix\@tempa\endcsname
-    \ifx\@tempc\relax
-      \enitkv@errx{\@tempa\space undefined}%
-    \else
-      \ifx\@empty#3\@empty
-        \enitkv@default
-      \else
-        \enitkv@@sp@def\@tempb{#2}%
-        \expandafter\@tempc\expandafter{\@tempb}\relax
-      \fi
-    \fi
-  \fi}
-
-\def\enitkv@default{%
-  \expandafter\let\expandafter\@tempb
-    \csname\enitkv@prefix\@tempa @default\endcsname
-  \ifx\@tempb\relax
-    \enitkv@err{No value specified for \@tempa}%
-  \else
-    \@tempb\relax
-  \fi}
-
-\def\enitkv@errx#1{\enit@error{#1}\@ehc}
-
-\let\enitkv@err\enitkv@errx
-
-\def\@tempa#1{%
-  \def\enitkv@@sp@def##1##2{%
-    \futurelet\enitkv@tempa\enitkv@@sp@d##2\@nil\@nil#1\@nil\relax##1}%
-  \def\enitkv@@sp@d{%
-    \ifx\enitkv@tempa\@sptoken
-      \expandafter\enitkv@@sp@b
-    \else
-      \expandafter\enitkv@@sp@b\expandafter#1%
-    \fi}%
-  \def\enitkv@@sp@b#1##1 \@nil{\enitkv@@sp@c##1}}
-
-\@tempa{ }
-
-\def\enitkv@@sp@c#1\@nil#2\relax#3{\enitkv@toks@{#1}\edef#3{\the\enitkv@toks@}}
-
-\@ifundefined{KV@toks@}
-   {\newtoks\enitkv@toks@}
-   {\let\enitkv@toks@\KV@toks@}
-
-\def\enitkv@key#1#2{%
-  \@ifnextchar[{\enitkv@def{#1}{#2}}{\@namedef{enitkv@#1@#2}####1}}
-
-\def\enitkv@def#1#2[#3]{%
-  \@namedef{enitkv@#1@#2@default\expandafter}\expandafter
-    {\csname enitkv@#1@#2\endcsname{#3}}%
-  \@namedef{enitkv@#1@#2}##1}
-
-% +=============================+
-% |        DEFINITIONS          |
-% +=============================+
-%
-% (1) The package uses a token register very often. To be on the
-%   safe side, instead of \toks@, etc., a new one is declared.
-% (2) \enit@inbox is the box storing the items in boxed inline
-%   lists.
-% (3) \enit@outerparindent is used to save the outer parindent 
-%   so that it can be used in the key parindent 
-% (4) \enit@type has three values: 0 = enum, 1 = item, 2 = desc.
-% (5) \enit@calc stores which dimen is to be computed:
-%   0=labelindent, 1=labelwidth, 2=labelsep, 3=leftmargin,
-%   4=itemindent
-% (6) \enit@resuming has four values: 0 = none, 1 = series,
-%   2 = resume* series (computed in group enumitem-resume),
-%   3 = resume* list (ie, with no value).
-
-\chardef  \enit@iv=4
-\newlength\labelindent
-\newdimen \enit@outerparindent
-\newtoks  \enit@toks
-\newbox   \enit@inbox
-
-\newif\ifenit@boxmode
-\newif\ifenit@sepfrommargin
-\newif\ifenit@lblfrommargin
-\newif\ifenit@calcwidest
-\newif\ifenit@nextline
-\newif\ifenit@boxdesc
-
-% An alias (calc-savvy):
-
-\let\c@enit@cnt\@tempcnta
-
-\def\enit@meaning{\expandafter\strip@prefix\meaning}
-\def\enit@noexcs#1{\expandafter\noexpand\csname#1\endcsname}
-
-% Miscelaneous errors
-% ===================
-
-\def\enit@error{\PackageError{enumitem}}
-  
-\def\enit@checkerror#1#2{%
-  \enit@error{Unknown value `#2' for key `#1'}%
-      {See the manual for valid values}} 
-
-\def\enit@itemerror{%
-  \enit@error{Misplaced \string\item}%
-      {Either there is some text before the first\MessageBreak
-       item or the last item has no text}} 
-
-\def\enit@noserieserror#1{%
-  \enit@error{Series `#1' not started}%
-      {You are trying to continue a series\MessageBreak
-       which has not been started with series}} 
-
-\def\enit@checkseries#1{%
-  \ifcase\enit@resuming
-    \enit@error{Misplaced key `#1'}%
-      {`series' and `resume*' must be used\MessageBreak
-       in the optional argument of lists}%
-  \fi}
-
-\def\enit@checkseries@m{%
-  \ifcase\enit@resuming\else
-    \enit@error{Uncompatible series settings}%
-      {`series' and `resume*' must not be used\MessageBreak
-       at the same time}%
-  \fi}
-
-\let\enit@toodeep\@toodeep
-
-\def\@toodeep{%
-  \ifnum\@listdepth>\enit@listdepth\relax
-    \enit@toodeep
-  \else
-    \count@\@listdepth
-    \global\advance\@listdepth\@ne
-    \@ifundefined{@list\romannumeral\the\@listdepth}%
-      {\expandafter\let
-         \csname @list\romannumeral\the\@listdepth\expandafter\endcsname
-         \csname @list\romannumeral\the\count@\endcsname}{}%
-  \fi}
-
-
-% +=============================+
-% |            KEYS             |
-% +=============================+
-%
-% Including code executed by keys.
-%
-% There are 2 keyval groups: enumitem, and enumitem-delayed.
-% The latter is used to make sure a prioritary key is the
-% latest one; eg, ref, so that the ref format set by label
-% is overriden. So, when this key is found in enumitem,
-% nothing is done, except the key/value is moved to 
-% enumitem-delayed.
-%
-% A further group (enumitem-resume) catches resume* and
-% series in optional arguments in lists.
-%
-% Vertical spacing
-% ================
-
-\enitkv@key{enumitem}{topsep}{%
-  \setlength\topsep{#1}}
-
-\enitkv@key{enumitem}{itemsep}{%
-  \setlength\itemsep{#1}}
-
-\enitkv@key{enumitem}{parsep}{%
-  \setlength\parsep{#1}}
-
-\enitkv@key{enumitem}{partopsep}{%
-  \setlength\partopsep{#1}}
-
-% Horizontal spacing
-% ==================
-%
-% There are 3 cases: *, ! and a value. The latter also
-% cancels widest with the sequence key=* ... key=value
-% \string is used, just in case some package changes the
-% catcodes.
-
-\def\enit@calcset#1#2#3{%
-  \if\string*\string#3%
-    \enit@calcwidesttrue
-    \let\enit@calc#2%
-  \else\if\string!\string#3%
-    \enit@calcwidestfalse
-    \let\enit@calc#2%
-  \else
-    \ifnum\enit@calc=#2%
-      \enit@calcwidestfalse
-      \let\enit@calc\z@
-    \fi
-    \setlength#1{#3}%
-  \fi\fi}
-
-\def\enitkv@enumitem@widest#1{%
-  \expandafter\let\csname enit@cw@\@enumctr\endcsname\relax
-  \@namedef{enit@widest@\@enumctr}##1{#1}}
-
-\def\enitkv@enumitem@widest@default{%
-  \expandafter\let\csname enit@cw@\@enumctr\endcsname\relax
-  \expandafter\let\csname enit@widest@\@enumctr\endcsname\relax}
-
-\enitkv@key{enumitem}{widest*}{%
-  \setcounter{enit@cnt}{#1}%
-  \expandafter\edef\csname enit@cw@\@enumctr\endcsname
-    {\the\c@enit@cnt}%
-  \expandafter\edef\csname enit@widest@\@enumctr\endcsname##1%
-    {##1{\the\c@enit@cnt}}}
-
-\enitkv@key{enumitem}{labelindent*}{%
-  \enit@lblfrommargintrue
-  \ifnum\enit@calc=\z@
-    \enit@calcwidestfalse
-  \fi
-  \setlength\labelindent{#1}%
-  \advance\labelindent\leftmargin}
-
-\enitkv@key{enumitem}{labelindent}{%
-  \enit@lblfrommarginfalse
-  \enit@calcset\labelindent\z@{#1}}
-
-\enitkv@key{enumitem}{labelwidth}{%
-  \enit@calcset\labelwidth\@ne{#1}}
-
-\enitkv@key{enumitem}{leftmargin}{%
-  \edef\enit@c{\the\leftmargin}%
-  \enit@calcset\leftmargin\thr@@{#1}%
-  \ifenit@lblfrommargin
-    \advance\labelindent-\enit@c\relax
-    \advance\labelindent\leftmargin
-  \fi}
-
-\enitkv@key{enumitem}{itemindent}{%
-  \edef\enit@c{\the\itemindent}%
-  \enit@calcset\itemindent\enit@iv{#1}%
-  \ifenit@sepfrommargin
-    \advance\labelsep-\enit@c\relax
-    \advance\labelsep\itemindent
-  \fi}
-
-\enitkv@key{enumitem}{listparindent}{%
-  \setlength\listparindent{#1}}
-
-\enitkv@key{enumitem}{rightmargin}{%
-  \setlength\rightmargin{#1}}
-
-% labelsep, from itemindent; labelsep*, from leftmargin
-
-\enitkv@key{enumitem}{labelsep*}{%
-  \enit@sepfrommargintrue
-  \ifnum\enit@calc=\tw@
-    \enit@calcwidestfalse
-    \let\enit@calc\z@
-  \fi
-  \setlength\labelsep{#1}%
-  \advance\labelsep\itemindent}
-
-\enitkv@key{enumitem}{labelsep}{%
-  \enit@sepfrommarginfalse
-  \enit@calcset\labelsep\tw@{#1}}
-
-% Series, resume and start
-% ========================
-
-\enitkv@key{enumitem-resume}{series}{%
-  \enit@checkseries@m
-  \let\enit@resuming\@ne
-  \@ifundefined{enitkv@enumitem@#1}{}%
-    {\enit@error{Invalid series name `#1'}%
-       {Do not name a series with an existing key}}%
-  \def\enit@series{#1}}
-
-\enitkv@key{enumitem}{series}{%
-  \enit@checkseries{series}}
-
-\def\enitkv@enumitem@resume#1{%
-  \edef\enit@series{#1}%
-  \@nameuse{enit@resume@series@#1}\relax}
-
-\def\enitkv@enumitem@resume@default{%
-  \@nameuse{enit@resume@\@currenvir}\relax}
-  
-\@namedef{enitkv@enumitem-resume@resume*}#1{%
-  \enit@checkseries@m
-  \let\enit@resuming\tw@
-  \edef\enit@series{#1}%
-  \@ifundefined{enit@resumekeys@series@#1}%
-    {\enit@noserieserror{#1}}%
-    {\expandafter\let\expandafter\enit@resumekeys
-         \csname enit@resumekeys@series@#1\endcsname}}
-
-\@namedef{enitkv@enumitem-resume@resume*@default}{%
-  \let\enit@resuming\thr@@
-  \expandafter\let\expandafter\enit@resumekeys
-    \csname enit@resumekeys@\@currenvir\endcsname
-  \@nameuse{enit@resume@\@currenvir}\relax}
-
-\enitkv@key{enumitem}{resume*}[]{%
-  \enit@checkseries{resume*}}
-
-\newcommand\restartlist[1]{%
-  \@ifundefined{end#1}%
-    {\enit@error{Undefined list `#1'}%
-      {No list has been defined with that name.}}%
-    {\expandafter\let
-     \csname enit@resume@#1\endcsname\@empty}}
-
-\enitkv@key{enumitem}{start}[\@ne]{%
-  \setcounter{\@listctr}{#1}%
-  \advance\@nameuse{c@\@listctr}\m@ne}
-
-% Penalties
-% =========
-  
-\enitkv@key{enumitem}{beginpenalty}{%
-  \@beginparpenalty#1\relax}
-  
-\enitkv@key{enumitem}{midpenalty}{%
-  \@itempenalty#1\relax}
-
-\enitkv@key{enumitem}{endpenalty}{%
-  \@endparpenalty#1\relax}
-   
-% Font/Format
-% ===========
-
-\enitkv@key{enumitem}{format}{%
-  \def\enit@format{#1}}
-
-\enitkv@key{enumitem}{font}{%
-  \def\enit@format{#1}}
-
-% Description styles
-% ==================
-
-\enitkv@key{enumitem}{style}[normal]{%
-  \@ifundefined{enit@style@#1}%
-    {\enit@checkerror{style}{#1}}%
-    {\enit@nextlinefalse
-     \enit@boxdescfalse
-     \@nameuse{enit@style@#1}%
-     \edef\enit@descstyle{\enit@noexcs{enit@#1style}}}}
-
-\def\enit@style@standard{%
-  \enit@boxdesctrue
-  \enit@calcset\itemindent\enit@iv!}
-
-\let\enit@style@normal\enit@style@standard
-
-\def\enit@style@unboxed{%
-  \enit@calcset\itemindent\enit@iv!}
-
-\def\enit@style@sameline{%
-  \enit@calcset\labelwidth\@ne!}
-
-\def\enit@style@multiline{%
-  \enit@align@parleft
-  \enit@calcset\labelwidth\@ne!}
-
-\def\enit@style@nextline{%
-  \enit@nextlinetrue
-  \enit@calcset\labelwidth\@ne!}
-
-% Labels and refs
-% ===============
-
-% Aligment
-% --------
-
-\enitkv@key{enumitem}{align}{%
-  \@ifundefined{enit@align@#1}%
-    {\enit@checkerror{align}{#1}}%
-    {\csname enit@align@#1\endcsname}}
-
-% \nobreak for unboxed label with color. See below.
-
-\newcommand\SetLabelAlign[2]{%
-  \enit@toks{#2}%
-  \expandafter\edef\csname enit@align@#1\endcsname
-    {\def\noexpand\enit@align####1{\nobreak\the\enit@toks}}}
-
-\def\enit@align@right{%
-  \def\enit@align##1{\nobreak\hss\llap{##1}}}
-
-\def\enit@align@left{%
-  \def\enit@align##1{\nobreak##1\hfil}}
-
-\def\enit@align@parleft{%
-  \def\enit@align##1{%
-    \nobreak
-    \strut\smash{\parbox[t]\labelwidth{\raggedright##1}}}}
-
-% \enit@ref has three possible definitions:
-% (1) \relax, if there is neither label nor ref (ie, use
-%   LaTeX settings).
-% (2) set ref to @itemlabel, if there is label but not ref
-% (3) set ref to ref, if there is ref (with or without label)
-
-\enitkv@key{enumitem}{label}{%
-  \expandafter\def\@itemlabel{#1}%
-  \def\enit@ref{\expandafter\enit@reflabel\@itemlabel\z@}}
-
-\enitkv@key{enumitem}{label*}{%
-  \ifnum\enit@depth=\@ne
-    \expandafter\def\@itemlabel{#1}%
-  \else % no level 0
-    \advance\enit@depth\m@ne
-    \enit@toks{#1}%
-    \expandafter\edef\@itemlabel{%
-      \enit@noexcs{label\enit@prevlabel}%
-      \the\enit@toks}%
-    \advance\enit@depth\@ne  
-  \fi
-  \def\enit@ref{\expandafter\enit@reflabel\@itemlabel\z@}}
-
-% ref is set by label, except if there is an explicit ref
-% in the same hierarchy level. Explicit refs above the
-% current hierarchy level are overriden by label (besides ref),
-% too. Since an explicit ref has preference, it's delayed.
-  
-\enitkv@key{enumitem}{ref}{%
-  \g@addto@macro\enit@delayedkeys{,ref=#1}}
-
-\enitkv@key{enumitem-delayed}{ref}{%
-  \def\enit@ref{\enit@reflabel{#1}\@ne}}
-
-% #2=0 don't "normalize" (ie, already normalized)
-%   =1 "normalize" (in key ref)
-% Used thru \enit@ref
-
-\def\enit@reflabel#1#2{%
-  \ifnum\enit@depth=\@ne\else % no level 0
-    \advance\enit@depth\@ne
-    \@namedef{p@\@enumctr}{}% Don't accumulate labels
-    \advance\enit@depth\m@ne
-  \fi
-  \ifcase#2%
-    \@namedef{the\@enumctr}{{#1}}%
-  \else
-    \enit@normlabel{\csname the\@enumctr\endcsname}{#1}%
-  \fi}
-
-% \xxx* in counters (refstar) and widest (calcdef)
-% ------------------------------------------------
-% \enit@labellist contains a list of
-% \enit@elt{widest}\count\@count\enit@sc@@count
-% \enit@elt is either \enit@getwidth or \enit@refstar, defined
-% below
-% The current implementation is sub-optimal -- labels are stored in 
-% labellist, counters defined again when processing labels, and
-% modifying it is almost impossible.
-
-\let\enit@labellist\@empty 
-
-\newcommand\AddEnumerateCounter{%
-  \@ifstar\enit@addcounter@s\enit@addcounter}
-
-\def\enit@addcounter#1#2#3{%
-  \enit@toks\expandafter{%
-    \enit@labellist
-    \enit@elt{#3}}%
-  \edef\enit@labellist{%
-    \the\enit@toks
-    \enit@noexcs{\expandafter\@gobble\string#1}%
-    \enit@noexcs{\expandafter\@gobble\string#2}%
-    \enit@noexcs{enit@sc@\expandafter\@gobble\string#2}}}
-
-\def\enit@addcounter@s#1#2#3{%
-  \enit@addcounter{#1}{#2}%
-    {\@nameuse{enit@sc@\expandafter\@gobble\string#2}{#3}}}
-
-% The 5 basic counters:
-
-\AddEnumerateCounter\arabic\@arabic{0}
-\AddEnumerateCounter\alph\@alph{m}
-\AddEnumerateCounter\Alph\@Alph{M}
-\AddEnumerateCounter\roman\@roman{viii}
-\AddEnumerateCounter\Roman\@Roman{VIII}
-
-% Inline lists
-% ============
-%
-% Labels
-% ------
-
-\enitkv@key{enumitem}{itemjoin}{%
-  \def\enit@itemjoin{#1}}
-
-\enitkv@key{enumitem}{itemjoin*}{%
-  \def\enit@itemjoin@s{#1}}
-
-\enitkv@key{enumitem}{afterlabel}{%
-  \def\enit@afterlabel{#1}}
-
-% Mode
-% ----
-
-\enitkv@key{enumitem}{mode}{%
-  \@ifundefined{enit@mode#1}%
-    {\enit@checkerror{mode}{#1}}%
-    {\csname enit@mode#1\endcsname}}
-
-\let\enit@modeboxed\enit@boxmodetrue
-\let\enit@modeunboxed\enit@boxmodefalse
-
-% Short Labels
-% ============
-
-\let\enit@marklist\@empty
-
-% shorthand, expansion:
-
-\newcommand\SetEnumerateShortLabel[2]{%
-  \let\enit@a\@empty
-  \def\enit@elt##1##2{%
-    \def\enit@b{#1}\def\enit@c{##1}%
-    \ifx\enit@b\enit@c\else
-      \expandafter\def\expandafter\enit@a\expandafter{%
-        \enit@a
-        \enit@elt{##1}{##2}}%
-    \fi}%
-  \enit@marklist
-  \expandafter\def\expandafter\enit@a\expandafter{%
-    \enit@a
-    \enit@elt{#1}{#2}}%
-  \let\enit@marklist\enit@a}
-
-\SetEnumerateShortLabel{a}{\alph*}
-\SetEnumerateShortLabel{A}{\Alph*}
-\SetEnumerateShortLabel{i}{\roman*}
-\SetEnumerateShortLabel{I}{\Roman*}
-\SetEnumerateShortLabel{1}{\arabic*}
-
-% This is called \enit@first one,two,three,\@nil\@@nil. If there
-% are just one element #2 is \@nil, otherwise we have to remove
-% the trailing ,\@nil with enit@first@x
-% Called with the keys in \enit@c
-% Returns enit@toks
-
-\def\enit@first#1,#2\@@nil{%
-  \in@{=}{#1}% Quick test, if contains =, it's key=value
-  \ifin@\else
-    \enitkv@@sp@def\enit@a{#1}%
-    \@ifundefined{enitkv@enumitem@\enit@meaning\enit@a}%
-      {\ifnum\enit@type=\z@
-         \def\enit@elt{\enit@replace\enit@a}%
-         \enit@marklist % Returns \enit@toks
-       \else
-         \enit@toks{#1}%
-       \fi
-       \ifx\@nil#2%
-         \ifx,#1,\else
-           \edef\enit@c{label=\the\enit@toks}%
-         \fi
-       \else
-         \@temptokena\expandafter{\enit@first@x#2}%
-         \edef\enit@c{label=\the\enit@toks,\the\@temptokena}%
-       \fi}%
-     {}%
-  \fi
-  \enit@toks\expandafter{\enit@c}}
-
-\def\enit@first@x#1,\@nil{#1}
-
-\def\enit@replace#1#2#3{%
-  \enit@toks{}%
-  \def\enit@b##1#2##2\@@nil{%
-    \ifx\@nil##2%
-      \addto@hook\enit@toks{##1}%
-    \else
-      \edef\enit@a{\the\enit@toks}%
-      \ifx\enit@a\@empty\else
-        \enit@error{Extra short label ignored}%
-           {There are more than one short label}%
-      \fi
-      \addto@hook\enit@toks{##1#3}%
-      \enit@b##2\@@nil
-    \fi}%
-  \expandafter\enit@b#1#2\@nil\@@nil
-  \edef#1{\the\enit@toks}}
-
-% Pre and post code
-% =================
-
-\enitkv@key{enumitem}{before}{%
-  \def\enit@before{#1}}
-
-\enitkv@key{enumitem}{after}{%
-  \def\enit@after{#1}}
-
-\enitkv@key{enumitem}{before*}{%
-  \expandafter\def\expandafter\enit@before\expandafter
-    {\enit@before#1}}
-
-\enitkv@key{enumitem}{after*}{%
-  \expandafter\def\expandafter\enit@after\expandafter
-    {\enit@after#1}}
-
-% Miscelaneous keys
-% ================
-  
-\enitkv@key{enumitem}{nolistsep}[true]{%
-  \partopsep=\z@skip
-  \topsep=\z@ plus .1pt
-  \itemsep=\z@skip
-  \parsep=\z@skip}
-
-\enitkv@key{enumitem}{nosep}[true]{%
-  \partopsep=\z@skip
-  \topsep=\z@skip
-  \itemsep=\z@skip
-  \parsep=\z@skip}
-
-
-\enitkv@key{enumitem}{noitemsep}[true]{%
-  \itemsep=\z@skip
-  \parsep=\z@skip}
-
-\enitkv@key{enumitem}{wide}[\parindent]{%
-  \enit@align@left
-  \leftmargin\z@
-  \labelwidth\z@
-  \setlength\labelindent{#1}%
-  \listparindent\labelindent
-  \enit@calcset\itemindent\enit@iv!}
-
-% The following is deprecated in favour of wide:
-
-\enitkv@key{enumitem}{fullwidth}[true]{%
-  \leftmargin\z@
-  \labelwidth\z@
-  \def\enit@align##1{\hskip\labelsep##1}}
-
-% "Abstract" layer
-% ================
-%
-% Named values
-% ------------
-
-\newcommand\SetEnumitemValue[2]{% Implicit #3
-  \@ifundefined{enit@enitkv@#1}%
-    {\@ifundefined{enitkv@enumitem@#1}%
-       {\enit@error{Wrong key `#1' in \string\SetEnumitemValue}%
-          {Perhaps you have misspelled it}}{}%
-     \expandafter\let\csname enit@enitkv@#1\expandafter\endcsname
-       \csname enitkv@enumitem@#1\endcsname}{}%
-  \@namedef{enitkv@enumitem@#1}##1{%
-    \def\enit@a{##1}%
-    \@ifundefined{enit@enitkv@#1@\enit@meaning\enit@a}%
-      {\@nameuse{enit@enitkv@#1}{##1}}%
-      {\@nameuse{enit@enitkv@#1\expandafter\expandafter\expandafter}%
-         \expandafter\expandafter\expandafter
-         {\csname enit@enitkv@#1@##1\endcsname}}{}}%
-  \@namedef{enit@enitkv@#1@#2}}
-
-% Defining keys
-% -------------
-
-\newcommand\SetEnumitemKey[2]{%
-  \@ifundefined{enitkv@enumitem@#1}%
-    {\enitkv@key{enumitem}{#1}[]{\enitkv@setkeys{enumitem}{#2}}}%
-    {\enit@error{Duplicated key `#1' in \string\SetEnumitemKey}%
-       {There already exists a key with that name}}}
-
-% +=============================+
-% |       PROCESSING KEYS       |
-% +=============================+
-%
-% Set keys
-% ========
-
-\def\enit@setkeys#1{%
-  \@ifundefined{enit@@#1}{}%
-    {\expandafter\expandafter\expandafter
-     \enit@setkeys@i\csname enit@@#1\endcsname\@@}}
-
-% The following is used directly in resumeset:
-
-\def\enit@setkeys@i#1\@@{%
-  \let\enit@delayedkeys\@empty
-  \enit@shl{#1}% is or returns \enit@toks
-  \expandafter\enit@setkeys@ii\the\enit@toks\@@}
-
-\def\enit@setkeys@ii#1\@@{%
-  \enitkv@setkeys{enumitem}{#1}%
-  \enit@toks\expandafter{\enit@delayedkeys}%
-  \edef\enit@a{%
-    \noexpand\enitkv@setkeys{enumitem-delayed}{\the\enit@toks}}%
-  \enit@a}
-
-% Handling * and ! values
-% =======================
-%
-% \@gobbletwo removes \c from \c@counter.
-
-\def\enit@getwidth#1#2#3#4{%
-  \let#4#3%
-  \def#3##1{%
-    \@ifundefined{enit@widest\expandafter\@gobbletwo\string##1}% if no widest=key
-      {#1}%
-      {\csname enit@widest\expandafter\@gobbletwo\string##1\endcsname{#4}}}}
-
-\def\enit@valueerror#1{\z@ % if after an assignment, but doesn't catch \ifnum
-   \enit@error{No default \string\value\space for `#1'}%
-     {You can provide one with widest*}}%
-
-\let\enit@values\@empty
-
-\def\enit@calcwidth{%
-  \ifenit@calcwidest
-    \ifnum\enit@type=\z@ % ie, enum
-      \@ifundefined{enit@cw@\@enumctr}%
-        {\@namedef{enit@cv@\@enumctr}{\enit@valueerror\@enumctr}}%
-        {\edef\enit@values{%
-           \enit@values
-           \@nameuse{c@\@enumctr}\@nameuse{enit@cw@\@enumctr}\relax}%
-         \expandafter
-         \edef\csname enit@cv@\@enumctr\endcsname
-           {\@nameuse{c@\@enumctr}}}%
-    \fi
-    \begingroup
-      \enit@values
-      \def\value##1{\csname enit@cv@##1\endcsname}%
-      \let\enit@elt\enit@getwidth
-      \enit@labellist
-      \settowidth\labelwidth{\@itemlabel}%
-      \xdef\enit@a{\labelwidth\the\labelwidth\relax}%
-    \endgroup
-    \enit@a
-  \fi
-  \advance\dimen@-\labelwidth}
-
-\def\enit@calcleft{%
-  \dimen@\leftmargin
-  \advance\dimen@\itemindent
-  \advance\dimen@-\labelsep
-  \advance\dimen@-\labelindent
-  \ifcase\enit@calc % = 0 = labelindent
-    \enit@calcwidth
-    \advance\labelindent\dimen@
-  \or % = 1 = labelwidth, so no \enit@calcwidth
-    \labelwidth\dimen@
-  \or % = 2 = labelsep
-    \enit@calcwidth
-    \advance\labelsep\dimen@
-  \or % = 3 = leftmargin
-    \enit@calcwidth
-    \advance\leftmargin-\dimen@
-  \or % = 4 =itemindent
-    \enit@calcwidth
-    \advance\itemindent-\dimen@
-  \fi}
-
-% "Normalizing" labels
-% ====================
-%
-% Replaces \counter* by \counter{level} (those in \enit@labellist).
-%
-% #1 is either \csname...\endcsmame or the container \@itemlabel --
-% hence \expandafter
-
-\def\enit@refstar@i#1#2{%
-  \if*#2\@empty
-    \noexpand#1{\@enumctr}%
-  \else
-    \noexpand#1{#2}%
-  \fi}%
-
-\def\enit@refstar#1#2#3#4{%
-  \def#2{\enit@refstar@i#2}%
-  \def#3{\enit@refstar@i#3}}
-
-\def\enit@normlabel#1#2{%
-  \begingroup
-    \def\value{\enit@refstar@i\value}%
-    \let\enit@elt\enit@refstar
-    \enit@labellist
-    \protected@xdef\enit@a{{#2}}% Added braces as \ref is in the 
-  \endgroup
-  \expandafter\let#1\enit@a}                    % global scope. 
-
-% Preliminary settings and default values
-% =======================================
-
-\def\enit@prelist#1#2#3{%
-  \let\enit@type#1%
-  \def\enit@depth{#2}%
-  \edef\enit@prevlabel{#3\romannumeral#2}%
-  \advance#2\@ne}
-     
-\def\enit@preset#1#2#3{%
-   \enit@sepfrommarginfalse
-   \enit@calcwidestfalse
-   \let\enit@resuming\z@
-   \let\enit@series\relax
-   \enit@boxmodetrue
-   \def\enit@itemjoin{ }%
-   \let\enit@itemjoin@s\relax
-   \let\enit@afterlabel\nobreakspace
-   \let\enit@before\@empty
-   \let\enit@after\@empty
-   \let\enit@format\@firstofone % and NOT empty
-   \let\enit@ref\relax
-   \labelindent\z@skip
-   \ifnum\@listdepth=\@ne
-     \enit@outerparindent\parindent
-   \else
-     \parindent\enit@outerparindent
-   \fi
-   \enit@setkeys{list}%
-   \enit@setkeys{list\romannumeral\@listdepth}%
-   \enit@setkeys{#1}%
-   \enit@setkeys{#1\romannumeral#2}%
-   \enit@setresume{#3}}
-
-% keyval "error" in enumitem-resume: all undefined keys (ie, all
-% except resume*) are ignored, but <series> is treated like
-% resume*=<series>
-
-\def\enitkv@err@a#1{%
-   \@ifundefined{enit@resumekeys@series@\@tempa}{}%
-     {\@nameuse{enitkv@enumitem-resume@resume*\expandafter}%
-        \expandafter{\@tempa}}}
-
-% keyval "error" in the optional argument: all undefined keys are
-% passed to the keyval error, but <series> is ignored (already
-% processed in enumitem-resume
-
-\def\enitkv@err@b#1{%
-   \@ifundefined{enit@resumekeys@series@\@tempa}%
-     {\enit@savekverr{#1}}%
-     {}}
-
-% Process keys in optional argument:
-
-\def\enit@setresume#1{%
-  \enit@shl{#1}% Returns enit@toks
-  \edef\enit@savekeys{\the\enit@toks}%
-  \let\enit@savekverr\enitkv@errx
-  \let\enitkv@errx\enitkv@err@a
-  \edef\enit@b{%
-    \noexpand\enitkv@setkeys{enumitem-resume}{\the\enit@toks}}%
-  \enit@b
-  \let\enitkv@errx\enitkv@err@b
-  \ifcase\enit@resuming\or\or % = 2
-    \expandafter
-    \enit@setkeys@i\enit@resumekeys,resume=\enit@series\@@
-  \or % = 3
-    \expandafter
-    \enit@setkeys@i\enit@resumekeys,resume\@@
-  \fi
-  \expandafter\enit@setkeys@i\enit@savekeys\@@
-  \let\enitkv@errx\enit@savekverr}
-
-% +=============================+
-% |         LIST TYPES          |
-% +=============================+
-%
-% Displayed lists
-% ===============
-% #1 #2 implicit
-
-\def\enit@dylist{%
-  \enit@align@right
-  \list}
-
-\def\enit@endlist{%
-  \enit@after
-  \endlist
-  \ifx\enit@series\relax\else % discards resume*, too
-    \ifnum\enit@resuming=\@ne % ie, series=
-      \enit@setresumekeys{series@\enit@series}\global\global
-    \else % ie, resume=, resume*= (save count, but not keys)
-      \enit@setresumekeys{series@\enit@series}\@gobblefour\global
-    \fi
-    \enit@afterlist
-  \fi
-  \ifnum\enit@resuming=\thr@@ % ie, resume* list (save count only)
-    \enit@setresumekeys\@currenvir\@gobblefour\global
-  \else
-    \enit@setresumekeys\@currenvir\@empty\@empty
-  \fi
-  \aftergroup\enit@afterlist}
-
-% #1 = either \@currenvir or series@<series>
-% #2(keys) #3(counter) are \global, \@gobblefour or \@empty
-
-\def\enit@setresumekeys#1#2#3{%
-  \enit@toks\expandafter{\enit@savekeys}%
-  \xdef\enit@afterlist{%
-    #2\def\enit@noexcs{enit@resumekeys@#1}{\the\enit@toks}%
-    \ifnum\enit@type=\z@ % ie, enum
-      #3\def\enit@noexcs{enit@resume@#1}{%
-        \csname c@\@listctr\endcsname
-        \the\csname c@\@listctr\endcsname}%
-    \fi}}
-
-% Inline lists
-% ============
-
-% Definition of \@trivlist inside inline lists.  So, when
-% \@trivlist is found in any displayed list (including quote,
-% center, verbatim...) the default \@item is restored.
-
-\def\enit@intrivlist{%
-  \enit@changed@itemfalse
-  \let\@item\enit@outer@item
-  \let\par\@@par
-  \let\@trivlist\enit@outer@triv
-  \@trivlist}
-
-% Keep track of \@item and \item changes
-
-\newif\ifenit@changed@item
-\enit@changed@itemfalse
-
-\newif\ifenit@changeditem
-\enit@changeditemfalse
-
-% List
-% ----
-
-% Arguments, as before:
-% \enitdp@<name>, <name>, <max-depth>, <format>
-% About @newlist, see @initem.
-
-\def\enit@inlist#1#2{%
-  \ifnum\@listdepth>\enit@listdepth\relax
-    \@toodeep
-  \else
-    \global\advance\@listdepth\@ne
-  \fi
-  \let\enit@align\@firstofone
-  \def\@itemlabel{#1}%
-  \@nmbrlistfalse
-  \ifenit@changed@item\else
-    \enit@changed@itemtrue
-    \let\enit@outer@triv\@trivlist
-    \let\@trivlist\enit@intrivlist
-    \@setpar\@empty
-    \let\enit@outer@item\@item
-  \fi
-  #2\relax
-  \global\@newlisttrue
-  \ifenit@boxmode
-    \ifenit@changeditem\else
-      \enit@changeditemtrue
-      \let\enit@outeritem\item
-    \fi
-    \let\@item\enit@boxitem
-  \else
-    \let\@item\enit@noboxitem
-    \ifx\enit@itemjoin@s\relax\else
-      \PackageWarning{enumitem}%
-         {itemjoin* discarded in mode unboxed\MessageBreak}%
-    \fi
-  \fi
-  \let\enit@calcleft\relax
-  \let\enit@afteritem\relax
-  \ifenit@boxmode
-    \global\setbox\enit@inbox\hbox\bgroup\color@begingroup
-      \let\item\enit@endinbox
-  \fi
-  \ignorespaces}
-
-\def\enit@endinlist{%
-  \ifenit@boxmode
-      \unskip
-      \xdef\enit@afteritem{%
-        \ifhmode\spacefactor\the\spacefactor\relax\fi}%
-      \color@endgroup
-    \egroup
-    \ifdim\wd\enit@inbox=\z@
-      \enit@itemerror
-    \else
-      \ifenit@noinitem\else
-        \ifhmode\unskip\fi
-        \@ifundefined{enit@itemjoin@s}%
-          {\enit@itemjoin}%
-          {\enit@itemjoin@s}%
-      \fi
-      \unhbox\@labels
-      \enit@afterlabel
-      \unhbox\enit@inbox
-      \enit@afteritem
-    \fi
-  \else
-    \unskip
-    \if@newlist
-      \enit@itemerror
-    \fi
-  \fi
-  \enit@after
-  \global\advance\@listdepth\m@ne
-  \global\@inlabelfalse
-  \if@newlist
-    \global\@newlistfalse
-    \@noitemerr
-  \fi
-  \ifx\enit@series\relax\else % discards resume* list, too
-    \ifnum\enit@resuming=\@ne % ie, series
-      \enit@setresumekeys{series@\enit@series}\global\global
-    \else % ie, resume, resume* (save count, but not keys)
-      \enit@setresumekeys{series@\enit@series}\@gobblefour\global
-    \fi
-    \enit@afterlist
-  \fi
-  \ifnum\enit@resuming=\thr@@ % ie, resume* list (save count only)
-    \enit@setresumekeys\@currenvir\@gobblefour\global
-  \else
-    \enit@setresumekeys\@currenvir\@empty\@empty
-  \fi
-  \aftergroup\enit@afterlist}
-
-% \@item: unboxed
-% ---------------
-
-\def\enit@noboxitem[#1]{%
-  \if@newlist
-    \leavevmode % ships pending labels out
-    \global\@newlistfalse
-  \else
-    \ifhmode
-      \unskip
-      \enit@itemjoin
-    \else
-      \noindent
-    \fi
-  \fi
-  \if@noitemarg
-    \@noitemargfalse
-    \if@nmbrlist
-      \refstepcounter{\@listctr}% after \unskip (hyperref)
-    \fi
-  \fi
-  \mbox{\makelabel{#1}}%
-  \enit@afterlabel
-  \ignorespaces}
-
-% \@item: boxed
-% ------------
-%
-% We don't want \item to be executed locally, because it sets a flag
-% (and hyperref adds another flag, too).  So, we redefine it inside
-% the box to \enit@endinbox which ends the box and then use the actual
-% (outer) \item.  labels are stored in another box, to detect empty
-% boxes, ie, misplaced \item's.  Note the 2nd \item ends collecting
-% the 1st item and ships it out, while the 3rd \item ends collecting
-% the 2nd item, puts the itemjoin and then ships the 2nd item out.
-% The flag enit@noinitem keeps track of that.
-
-\newif\ifenit@noinitem
-
-\def\enit@endinbox{%
-    \unskip
-    \xdef\enit@afteritem{%
-      \ifhmode\spacefactor\the\spacefactor\relax\fi}%
-    \color@endgroup
-  \egroup
-  \enit@outeritem}
-
-\def\enit@boxitem[#1]{%
-  \if@newlist
-    \global\@newlistfalse
-    \ifdim\wd\enit@inbox>\z@
-       \enit@itemerror
-    \fi
-    \enit@noinitemtrue
-    \leavevmode % ships pending labels out
-  \else
-    \ifdim\wd\enit@inbox=\z@
-      \enit@itemerror
-    \else
-      \ifenit@noinitem
-        \enit@noinitemfalse
-      \else
-        \ifhmode\unskip\fi
-        \enit@itemjoin
-      \fi
-      \unhbox\@labels
-      \enit@afterlabel
-      \unhbox\enit@inbox
-      \enit@afteritem
-    \fi
-  \fi
-  \if@noitemarg
-    \@noitemargfalse
-    \if@nmbrlist
-      \refstepcounter{\@listctr}%
-    \fi
-  \fi
-  \sbox\@labels{\makelabel{#1}}%
-  \let\enit@afteritem\relax
-  \setbox\enit@inbox\hbox\bgroup\color@begingroup
-    \let\item\enit@endinbox
-    \hskip1sp % in case the first thing is \label
-    \ignorespaces} 
-
-% Pause item
-% ----------
-%
-% To do.
-%
-% The three types
-% ===============
-%
-% enumerate and enumerate*
-% ------------------------
-%
-% The following has 4 arguments, which in enumerate are:
-% \@enumdepth, enum, \thr@@, <format>.
-% In user defined environments they are:
-% \enitdp@<name>, <name>, <max-depth>, <format>
-
-\def\enit@enumerate{%
-  \let\enit@list\enit@dylist
-  \enit@enumerate@i}
-
-\@namedef{enit@enumerate*}{%
-  \let\enit@list\enit@inlist
-  \enit@enumerate@i}
-
-\def\enit@enumerate@i#1#2#3#4{%
-  \ifnum#1>#3\relax
-    \enit@toodeep
-  \else
-    \enit@prelist\z@{#1}{#2}%
-    \edef\@enumctr{#2\romannumeral#1}%
-    \expandafter
-    \enit@list
-      \csname label\@enumctr\endcsname
-      {\usecounter\@enumctr
-       \let\enit@calc\z@
-       \def\makelabel##1{\enit@align{\enit@format{##1}}}%
-       \enit@preset{#2}{#1}{#4}%
-       \enit@normlabel\@itemlabel\@itemlabel
-       \enit@ref
-       \enit@calcleft
-       \enit@before}%
-  \fi}
-
-\let\enit@endenumerate\enit@endlist
-\@namedef{enit@endenumerate*}{\enit@endinlist}
-
-% itemize and itemize*
-% --------------------
-%
-% The following has 4 arguments, which in itemize are:
-% \@itemdepth, item, \thr@@, <format>.
-% In user defined environments they are:
-% \enitdp@<name>, <name>, <max-depth>, <format>
-
-\def\enit@itemize{%
-  \let\enit@list\enit@dylist
-  \enit@itemize@i}
-
-\@namedef{enit@itemize*}{%
-  \let\enit@list\enit@inlist
-  \enit@itemize@i}
-  
-\def\enit@itemize@i#1#2#3#4{%
-  \ifnum#1>#3\relax
-    \enit@toodeep
-  \else
-    \enit@prelist\@ne{#1}{#2}%
-    \edef\@itemitem{label#2\romannumeral#1}%
-    \expandafter
-    \enit@list
-      \csname\@itemitem\endcsname
-       {\let\enit@calc\z@
-        \def\makelabel##1{\enit@align{\enit@format{##1}}}%
-        \enit@preset{#2}{#1}{#4}% 
-        \enit@calcleft
-        \enit@before}%
-  \fi}
-
-\let\enit@enditemize\enit@endlist
-\@namedef{enit@enditemize*}{\enit@endinlist}
-
-% description and description*
-% ----------------------------
-%
-% Make sure \descriptionlabel exists:
-
-\providecommand*\descriptionlabel[1]{%
-  \hspace\labelsep
-  \normalfont\bfseries#1}
-
-\@namedef{enit@description*}{%
-  \let\enit@list\enit@inlist
-  \enit@description@i}
-
-\def\enit@description{%
-  \let\enit@list\enit@dylist
-  \enit@description@i}
-
-\def\enit@description@i#1#2#3#4{%
-  \ifnum#1>#3\relax
-    \enit@toodeep
-  \else
-    \enit@list{}%
-      {\let\enit@type\tw@
-       \advance#1\@ne
-       \labelwidth\z@
-       \enit@align@left
-       \let\makelabel\descriptionlabel
-       \enit@style@standard
-       \enit@preset{#2}{#1}{#4}%
-       \enit@calcleft
-       \let\enit@svlabel\makelabel
-       \def\makelabel##1{%
-         \labelsep\z@
-         \ifenit@boxdesc
-           \enit@svlabel{\enit@align{\enit@format{##1}}}%
-         \else
-           \nobreak
-           \enit@svlabel{\enit@format{##1}}%
-           \aftergroup\enit@postlabel
-         \fi}%
-       \enit@before}%
-  \fi}
-
-\let\enit@enddescription\enit@endlist
-\@namedef{enit@enddescription*}{\enit@endinlist}
-
-% trivlist
-% ========
-
-\def\enit@trivlist{%
-  \let\enit@type\tw@
-  \parsep\parskip
-  \csname @list\romannumeral\the\@listdepth\endcsname
-  \@nmbrlistfalse
-  \enit@setkeys{trivlist}%
-  \enit@setkeys{trivlist\romannumeral\@listdepth}%
-  \@trivlist
-  \labelwidth\z@
-  \leftmargin\z@
-  \itemindent\z@
-  \let\@itemlabel\@empty
-  \def\makelabel##1{##1}}
-
-% Description styles
-% ==================
-%
-% the next definition is somewhat tricky because labels are boxed.
-% That's fine when the label is just placed at the begining of a line
-% of text, but when the box is placed without horizontal material,
-% leading is killed.  So, we need change somehow \box to \unhbox, but
-% I don't want to modify \@item.  The code below presumes \@item has
-% not been changed and arguments gobble the part setting \@labels,
-% which is replaced by a new one.
-%
-% The default value in description is itemindent=!, but some styles
-% (those whose item text begin at a fixed place, ie, nextline,
-% multiline and sameline) change it to labelwidth=!.
-%
-% We must be careful with the group and the whatsit added by color to
-% boxes.  Alignment is applied here and some adjustments in skips are
-% necessary to get proper line breaks (including a \nobreak at the
-% beginning of \enit@align, ie, after the first whatsit, see above).
-% To "pass" the inner group added by color to the box, \enit@postlabel
-% ckecks if the following is }.  ie, \egroup -- if not, the box has
-% not reached yet its end.
-
-\def\enit@postlabel{%
-  \@ifnextchar\egroup
-    {\aftergroup\enit@postlabel}%
-    {\enit@postlabel@i}}
-
-\def\enit@postlabel@i#1#2#3#4#5{%
-  \def\enit@lblpenalty{\penalty\z@\hskip\skip@}%
-  \ifenit@nextline
-    \ifdim\wd\@tempboxa>\labelwidth
-      \def\enit@lblpenalty{\newline\@nobreaktrue}%
-    \fi
-  \fi
-  \everypar{%
-    \@minipagefalse
-    \global\@newlistfalse
-    \if@inlabel
-      \global\@inlabelfalse
-      {\setbox\z@\lastbox
-       \ifvoid\z@
-         \kern-\itemindent
-       \fi}%
-      \unhbox\@labels
-      \skip@\lastskip % Save last \labelsep
-      \unskip % Remove it 
-      \enit@lblpenalty % Restore it, after penalty
-    \fi
-    \if@nobreak
-      \@nobreakfalse
-      \clubpenalty\@M
-    \else
-      \clubpenalty\@clubpenalty
-      \everypar{}%
-    \fi}%
-  \def\enit@a{#1#2#3#4}%
-  \def\enit@b{\global\setbox\@labels\hbox}%
-  \ifx\enit@a\enit@b\else
-    \enit@error{Non standard \string\item}%
-      {A class or a package has redefined \string\item\MessageBreak
-       and I do not know how to continue}%
-  \fi
-  \global\setbox\@labels\hbox{%
-    \unhbox\@labels
-    \hskip\itemindent
-    \hskip-\labelwidth
-    \hskip-\labelsep
-    \ifdim\wd\@tempboxa>\labelwidth
-      \enit@align{\unhbox\@tempboxa}\unskip % Removes (typically) \hfil
-    \else
-      \leavevmode\hbox to\labelwidth{\enit@align{\unhbox\@tempboxa}}%
-    \fi
-    \hskip\labelsep}}
-
-% +=============================+
-% |     (RE)DEFINING LISTS      |
-% +=============================+
-%
-% Set keys/values
-% ===============
-% Remember \romannumeral0 expands to nothing.
-% #1 = list name, #2 = level, #3 = flag if star, #4 = keys/values
-
-\def\enit@saveset#1#2#3#4{%
-  \setcounter{enit@cnt}{#2}%
-  \ifcase#3%
-    \expandafter
-    \def\csname enit@@#1\romannumeral\c@enit@cnt\endcsname{#4}%
-  \or
-    \expandafter\let\expandafter\enit@b
-      \csname enit@@#1\romannumeral\c@enit@cnt\endcsname
-    \ifx\enit@b\relax
-      \let\enit@b\@empty
-    \fi
-    \expandafter\def
-      \csname enit@@#1\romannumeral\c@enit@cnt\expandafter\endcsname
-      \expandafter{\enit@b,#4}%
-  \fi}
-
-% To do: more robust tests (catch wrong names, but not easy)
-
-% Internally, LaTeX uses a short name for enumerate (enum)
-% and itemize (item). To be consistent with this convention,
-% a couple of macros provide a "translation". I'm not very
-% happy with the current implementation.
-
-\def\enit@shortenumerate{enum}
-\def\enit@shortitemize{item}
-
-\newcommand\setlist{%
-  \@ifstar{\enit@setlist\@ne}{\enit@setlist\z@}}
-
-\def\enit@setlist#1{%
-  \@ifnextchar[{\enit@setlist@x#1}{\enit@setlist@i#1\@empty}}
-
-% Let's accept \setlist[]*{}, too, because an error in <=3.5.1
-
-\def\enit@setlist@x#1[#2]{%
-  \@ifstar{\enit@setlist@i\@ne{#2}}{\enit@setlist@i#1{#2}}}
-
-% #1 list names/levels, #2 keys/values
-
-% #1 star flag, #2 list names/levels, #3 keys/values
-
-\def\enit@setlist@i#1#2#3{%
-  \let\enit@eltnames\relax
-  \let\enit@b\@empty
-  \let\enit@eltlevels\relax
-  \let\enit@c\@empty
-  \protected@edef\enit@a{#2}%
-  \@for\enit@a:=\enit@a\do{% the 2nd enit@a is first expanded
-    \@ifundefined{enitdp@\enit@meaning\enit@a}%
-      {\edef\enit@c{\enit@c\enit@eltlevels{\enit@a}}}%
-      {\@ifundefined{enit@short\enit@meaning\enit@a}%
-         \@empty
-         {\edef\enit@a{\@nameuse{enit@short\enit@a}}}%
-       \edef\enit@b{\enit@b\enit@eltnames{\enit@a}}}}%
-  \ifx\enit@b\@empty
-     \def\enit@b{\enit@eltnames{list}}%
-  \fi
-  \ifx\enit@c\@empty
-     \def\enit@c{\enit@eltlevels{0}}%
-  \fi
-  \def\enit@eltnames##1{%
-    \def\enit@a{##1}%
-    \enit@c}%
-  \def\enit@eltlevels##1{%
-    \enit@saveset\enit@a{##1}#1{#3}}%
-  \enit@b}%
-
-% Deprecated:
-
-\newcommand\setdisplayed[1][0]{\setlist[trivlist,#1]}
-\let\enitdp@trivlist\@empty % dummy, let know it exists
-\newcommand\setenumerate[1][0]{\setlist[enumerate,#1]}
-\newcommand\setitemize[1][0]{\setlist[itemize,#1]}
-\newcommand\setdescription[1][0]{\setlist[description,#1]}
-
-% New lists
-% =========
-
-% When defining a list, \label... and counters must be defined
-% for each level, too:
-
-\def\enit@xset@itemize{%
-  \@namedef{label\enit@c\romannumeral\count@}{%
-    \enit@error{Undefined label}%
-      {You have defined a list, but labels have
-       not been setup.\MessageBreak
-       You can set the label field with \string\setlist.}}}
-\@namedef{enit@xset@itemize*}{\enit@xset@itemize}
-
-\def\enit@xset@enumerate{%
-  \enit@xset@itemize
-  \@ifundefined{c@\enit@c\romannumeral\count@}%
-    {\@definecounter{\enit@c\romannumeral\count@}}{}}
-\@namedef{enit@xset@enumerate*}{\enit@xset@enumerate}
-
-\let\enit@xset@description\@empty
-\@namedef{enit@xset@description*}{\enit@xset@description}
-
-\newcommand\newlist{\enit@newlist\newenvironment}
-\newcommand\renewlist{\enit@newlist\renewenvironment}
-
-% <new/renew>, <name>, <type>, <max-depth>
-
-\def\enit@newlist#1#2#3#4{%
-  \@ifundefined{enit@xset@#3}%
-    {\enit@error{Unknown list type `#3')}%
-          {Valid types are:
-           enumerate, itemize, description,\messageBreak
-           enumerate*, itemize*, description*}}%
-    {}%
-  \setcounter{enit@cnt}{#4}%
-  \count@\@ne
-  \@ifundefined{enit@short#2}%
-    {\def\enit@c{#2}}%
-    {\edef\enit@c{\csname enit@short#2\endcsname}}%
-  \loop
-    \@nameuse{enit@xset@#3}% Uses \enit@c
-    \ifnum\count@<\c@enit@cnt
-    \advance\count@\@ne
-  \repeat
-  \@ifundefined{enitdp@#2}%
-    {\expandafter\newcount\csname enitdp@#2\endcsname}{}%
-  \csname enitdp@#2\endcsname\z@
-  \advance\c@enit@cnt\m@ne
-  \edef\enit@a{%
-    \noexpand#1{#2}[1][]%
-      {\enit@noexcs{enit@#3}%
-       \enit@noexcs{enitdp@#2}%
-       {\enit@c}%
-       {\the\c@enit@cnt}%
-       {####1}}%
-      {\enit@noexcs{enit@end#3}}}%
-  \enit@a}
-
-% Changing the default nesting limit
-% ----------------------------------
-
-\newcommand\setlistdepth{\def\enit@listdepth}
-\setlistdepth{5}
-
-% +=============================+
-% |       PACKAGE OPTIONS       |
-% +=============================+
-
-\newif\ifenit@loadonly
-
-\DeclareOption{ignoredisplayed}{\let\enit@trivlist\trivlist}
-\DeclareOption{loadonly}{\enit@loadonlytrue}
-\DeclareOption{shortlabels}
-  {\def\enit@shl#1{%
-     \ifnum\enit@type=\tw@
-       \enit@toks{#1}%
-     \else
-       \def\enit@c{#1}%
-       \enit@first#1,\@nil\@@nil % Returns enit@toks
-    \fi}}
-\DeclareOption{inline}
-  {\newenvironment{enumerate*}[1][]%
-     {\@nameuse{enit@enumerate*}\enitdp@enumerate{enum}\thr@@{#1}}
-     {\@nameuse{enit@endenumerate*}}
-   \newenvironment{itemize*}[1][]%
-     {\@nameuse{enit@itemize*}\enitdp@itemize{item}\thr@@{#1}}
-     {\@nameuse{enit@enditemize*}}
-   \newenvironment{description*}[1][]%
-     {\@nameuse{enit@description*}\enitdp@description{description}\@M{#1}}
-     {\@nameuse{enit@enddescription*}}}
-
-\let\enit@shl\enit@toks
-
-\ProcessOptions
-
-\let\trivlist\enit@trivlist
-
-% If there is no loadonly, redefine the basic lists:
-
-\ifenit@loadonly\else
-
-\let\enitdp@enumerate\@enumdepth
-\renewenvironment{enumerate}[1][]
-  {\enit@enumerate\enitdp@enumerate{enum}\thr@@{#1}}
-  {\enit@endenumerate}
-
-\let\enitdp@itemize\@itemdepth
-\renewenvironment{itemize}[1][]
-  {\enit@itemize\enitdp@itemize{item}\thr@@{#1}}
-  {\enit@enditemize}
-
-\newcount\enitdp@description
-\renewenvironment{description}[1][]
-  {\enit@description\enitdp@description{description}\@M{#1}}
-  {\enit@enddescription}
-
-\fi
-
-\endinput
Index: doc/LaTeXmacros/enumitem/enumitem.tex
===================================================================
--- doc/LaTeXmacros/enumitem/enumitem.tex	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,1467 +1,0 @@
-% +--------------------------------------------------+
-% | Typeset this file to document enumitem.sty       |
-% +--------------------------------------------------+
-%
-% Copyright (c) 2003-2011 by Javier Bezos.
-% All Rights Reserved.
-%
-% This file is part of the enumitem distribution release 3.5.2
-% ------------------------------------------------------------
-% 
-% It may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-%   http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2003/12/01 or later.
-% 
-% This work has the LPPL maintenance status "maintained".
-% 
-% The Current Maintainer of this work is Javier Bezos.
-
-\documentclass[a4paper]{ltxguide}
-
-\makeatletter
-\newenvironment{desc}
-  {\if@nobreak
-     \vskip-\lastskip
-     \vspace*{-2.5ex}%
-   \fi
-   \decl}
-  {\enddecl}
-\makeatother
-
-\newcommand\3{\unskip\enspace\fbox{\fontsize{4}{4}\selectfont NEW 3.0}}
-
-\usepackage{hyperref}
-
-%\usepackage{pslatex}
-
-\title{Customizing lists\\with the\\\textsf{enumitem} package}
-
-\author{Javier Bezos\footnote{For bug reports, comments and
-suggestions go to \href{http://www.tex-tipografia.com/enumitem.html}%
-{\texttt{http://www.tex-tipografia.com/enumitem.html}}.
-English is not my strong point, so contact me when you
-find mistakes in the manual. Other packages by the same author:
-\textsf{gloss} (with Jos\'e Luis D\'{\i}az), \textsf{accents,
-tensind, esindex, dotlessi, titlesec, titletoc}.}}
-
-\date{Version 3.5.2\\2011-09-28}
-
-\IfFileExists{enumitem.sty}{\usepackage{enumitem}}{}
-
-\addtolength{\topmargin}{-3pc}
-\addtolength{\textwidth}{6pc}
-\addtolength{\oddsidemargin}{-2pc}
-\addtolength{\textheight}{7pc}
-
-\raggedright
-\parindent1.8em
-\parskip0pt
-
-\begin{document}
-
-\maketitle
-
-\section{Introduction}
-
-When I began to use \LaTeX{} several year ago, two particular points
-annoyed me because I found customizing them was very complicated
----headlines/footlines and lists.  A new way to redefine the former is
-accomplished in my own \textsf{titlesec} package, but none was
-available to customize the latter except:
-\begin{itemize}
-\item \textsf{enumerate}, which just allows to change the label and
-it does it pretty well.
-
-\item \textsf{mdwlist}, which only ``provides some vaguely useful
-list-related commands and environments,'' as its manual states,
-and not a coherent way of handling lists.
-
-\item \textsf{paralist}, which provides lists within a paragraph (the
-original purpose of this package), a few other hard-wired
-specific changes and the optional argument of \textsf{enumerate}.
-\end{itemize}
-
-One of the main drawbacks of the standard |list| is its weird
-parameters, whose meaning is not always obvious.  In order to provide
-a cleaner interface two approaches were possible: either defining new
-lists, or introducing a new syntax making the standard lists easier to
-customize.  For marks I took the first approach in titlesec, just
-because I did not manage to find a satisfactory solution with the
-\LaTeX{} internal macros, but since lists are in some sense more
-``complete'' than sections and marks, I have taken here the second
-approach.
-
-In the interface a sort of ``inheritance'' is used. You can
-set globally the behaviour of lists and then override several
-parameters of, say, enumerate and then in turn override
-a few paremeters of a particular instance. The values will
-be searched in the hierarchy.
-
-\section{The package}
-
-This package is intended to ease customizing the three
-basic list environments: |enumerate|, |itemize| and
-|description|. It extends their syntax to allow
-an optional argument where a set of parameters in the
-form |key=value| are available:
-\begin{itemize}
-\item
-Vertical spacing:
-\begin{itemize}
-\item |topsep|
-\item |partopsep|
-\item |parsep|
-\item |itemsep|
-\end{itemize}
-\item
-Horizontal spacing:
-\begin{itemize}
-\item |leftmargin|
-\item |rightmargin|
-\item |listparindent|
-\item |labelwidth|
-\item |labelsep|
-\item |itemindent|
-\end{itemize}
-\end{itemize}
-
-For example:
-\begin{verbatim}
-\begin{itemize}[itemsep=1ex,leftmargin=1cm]
-\end{verbatim}
-
-The keys above are equivalent to the well known list parameters---see a
-\LaTeX{} manual for a description of them.  Next sections explains the
-extensions provided by |enumitem|.
-
-\section{Keys}
-
-This section describes the keys in displayed lists. Most of them are 
-available in inline lists, where further keys are available (see 
-\ref{s.inline}).
-
-\subsection{Label and cross references format}
-
-\begin{desc}
-|label=<commands>|
-\end{desc}
-
-Sets the label to be used in the current level.
-A set of starred versions of |\alph|, |\Alph|,
-|\arabic|, |\roman| and |\Roman|, without argument
-stand for the current counter in |enumerate|.\footnote{Actually,
-the asterisk is currently the argument but things may change.
-Consider them as starred variants and follow the corresponding
-syntax.} Thus
-\begin{verbatim}
-\begin{enumerate}[label=\emph{\alph*})]
-\end{verbatim}
-prints \textit{a}), \textit{b}), and so on (this is a
-standard style in Spanish, and formerly used by Chicago, too).
-
-It works with |\value|, too (provided the widest label is not to be
-computed or \verb|widest*| is used, see below).  A fancier example
-(which looks ugly, but it is intended only to illustrate what is
-possible; requires \textsf{color} and \textsf{pifont}):
-\begin{verbatim}
-\begin{enumerate}[label=\protect\fcolorbox{blue}{yellow}{\protect\ding{\value*}},
-                  start=172]
-\end{verbatim}
-
-The value of |label| is a moving argument, and fragile commands must
-be protected \textit{except} the counters.  Because of that, use of
-\verb|\value| is somewhat tricky, because \verb|\the| or \verb|\ifnum|
-expects an actual value, which is not the case when \verb|label| is
-being processed to replace internally the \verb|*| by the form with
-the counter argument.  The best solution is usually encapsulating the
-logic inside a new ``counter'' with the help of
-\verb|\AddEnumerateCounter|.\footnote{Which is admittedly somewhat
-convoluted.  A better way to accomplish this is on the way.}
-
-If you prefer setting labels like the \textsf{enumerate} package, use 
-``short labels'' (see section \ref{s.short}).
-
-\begin{desc}
-|label*=<commands>|
-\end{desc}
-
-Like |label| but its value is appended to the parent label.  For example, the follollowing defines a |legal| list (1.,
-1.1., 1.1.1., and so on):
-\begin{verbatim}
-\newlist{legal}{enumerate}{10}
-\setlist[legal]{label*=\arabic*.}
-\end{verbatim}
-
-\begin{desc}
-|ref=<commands>|
-\end{desc}
-
-By default, |label| sets also the form of cross references and
-|\the...| (overriding the settings in previous hierarchical
-levels), but you can define a different format with this key.  For
-example, to remove the right parethesis:
-\begin{verbatim}
-\begin{enumerate}[label=\emph{\alph*}),ref=\emph{\alph*}]
-\end{verbatim}
-In both |label| and |ref|, the counters can be
-used as usual:
-\begin{verbatim}
-\begin{enumerate}[label=\theenumi.\arabic*.]
-\end{verbatim}
-or
-\begin{verbatim}
-\begin{enumerate}[label=\arabic{enumi}.\arabic*.]
-\end{verbatim}
-(provided the current level is the second one).
-
-Note the |label|s are \textit{not} accumulated to form
-the reference. If you want, say, something like 1.\textit{a}
-from 1) as first level and \textit{a}) as second level,
-you must set it with |ref|. You may use
-|\ref{level1}.\ref{level2}| with appropiate |ref|
-settings, but as Robin Fairbairns points out in the \TeX{} FAQ
-\begin{quote}
-\dots{} [that] would be both tedious and error-prone. What is more, it 
-would be undesirable, since you would be constructing a visual 
-representation which is inflexible (you could not change all the 
-references to elements of a list at one fell swoop).
-\end{quote}
-This is sensible and I recommend to follow the advice, but sometimes
-you might want something like:
-\begin{verbatim}
-... subitem \ref{level2} of item \ref{level1} ...
-\end{verbatim}
-
-The value of |ref| is a moving argument, and fragile
-commands must be protected \textit{except} the counters.
-
-\begin{desc}
-|font=<commands>|\qquad\verb|format=<commands>|
-\end{desc}
-
-Sets the label font.  Useful when the label is changed with the
-optional argument of |\item| and in \texttt{description}.  The last
-command in |<commands>| can take an argument with the item label.  In
-\texttt{description} class setting are in force, so you may want begin
-with \verb|\normalfont|. A synonymous is \texttt{format}.
-
-\begin{desc}
-|align=left|\qquad |align=right|\qquad |align=parleft|\3
-\end{desc}
-
-How the label is aligned (with relation to the label box edges).
-Three values are possible: |left|, the default |right| and
-\verb|parleft| (a parbox of width \verb|\labelwidth| with flush left
-text).  The parameters controlling the label spacing should be
-properly set, either by hand or more conveniently with the |*|
-settings (see below):
-\begin{verbatim}
-\begin{enumerate}[label=\Roman*., align=left, leftmargin=*]
-\end{verbatim}
-(When the label box is supposed to have its natural width, use
-|left|.) 
-
-\begin{desc}
-|\SetLabelAlign{<value>}{<commands>}|\3
-\end{desc}
-
-New align types can be defined (or the existing ones redefined) with
-|\SetLabelAlign|; the predefined values are equivalent
-to:\footnote{Prior to version 3.0 the left alignments was incorrectly
-defined and the label and the text could overlap.}
-\begin{verbatim}
-\SetLabelAlign{right}{\hss\llap{#1}}
-\SetLabelAlign{left}{#1\hfil}
-\SetLabelAlign{parleft}{\strut\smash{\parbox[t]\labelwidth{\raggedright##1}}}
-\end{verbatim}
-
-If the last thing in the definition is a skip (typically \verb|\hfil|), it is
-removed sometimes by description. If for some reason you want to avoid
-this, just add \verb|\null| at the end.
-
-Although primarily intended for the alignment, this commands has other
-uses (as in the provided \verb|parleft|).  For example, with the
-following all labels with |align=right| are set as superscripts:
-\begin{verbatim}
-\SetLabelAlign{right}{\hss\llap{\textsuperscript{#1}}}
-\end{verbatim}
-(A new name is also possible, of course.)
-
-If you want the internal settings for \texttt{align} and \texttt{font}
-be ignored, you can override the \textsf{enumitem} definition of
-\verb|\makelabel| in \texttt{before}:
-\begin{verbatim}
-\begin{description}[before={\renewcommand\makelabel[1]{\ref{##1}}}]
-\end{verbatim}
-(Alternatively, define a macro and use \verb|\let|.) 
-
-\subsection{Horizontal spacing of labels}
-
-\begin{desc}
-|labelindent=<length>|\\
-\verb|\labelindent|
-\end{desc}
-
-This  parameter is added in \textsf{enumitem} for the blank space from
-the margin of the enclosing list/text to the left edge of the label box.  This
-means there is a redundancy because one of the parameters depends on
-the others, i.e., it has to be computed from the other values, as
-described below.  There is a new counter length |\labelindent| which
-defaults to 0 pt. The five parameteres are related in the following 
-way:
-\[
-\verb|\leftmargin|+\verb|\itemindent| = 
-\verb|\labelindent|+\verb|\labelwidth|+\verb|\labelsep|
-\]
-
-\begin{desc}
-|leftmargin=!|\qquad|itemindent=!|\qquad|labelsep=!|
-\qquad|labelwidth=!|\qquad|labelindent=!|\3
-\end{desc}
-
-Sets which value is to be computed from the others. This is done 
-after \textit{all} keys has been read. Explicit values are not lost, and
-so with the following hierarchical settings:
-\begin{verbatim}
-leftmargin=2em
-labelindent=1em,leftmargin=!
-labelindent=!
-\end{verbatim}
-|leftmargin| is again 2em and |labelindent| is the computed parameter.
-The default is |labelindent=!|, but note some keys sets another value 
-(\verb|wide| and description \verb|style|s).
-
-With |align=right| (the default), |labelindent=!| and
-|labelwidth=!| behave similarly in practice. 
-
-\begin{desc}
-|leftmargin=*|\qquad|itemindent=*|\qquad|labelsep=*|
-\qquad|labelwidth=*|\qquad|labelindent=*|
-\end{desc}
-
-Like before, but |labelwidth| is set to the width of the current
-label, using the default value of \textit{0} in |\arabic*|,
-\textit{viii} in |\roman*|, \textit{m} in |\alph*| and
-similarly in uppercase forms (these values can be changed with
-|widest|, see below).  Examples are:
-\begin{verbatim}
-\begin{itemize}[label=\textbullet, leftmargin=*]
-\begin{enumerate}[label=\roman*), leftmargin=*, widest=iii]
-\begin{itemize}[label=\textbullet,
-                leftmargin=2pc, labelsep=*]
-\begin{enumerate}[label=\arabic*., leftmargin=2\parindent, 
-                  labelindent=\parindent, labelsep=*]
-\end{verbatim}
-
-The most useful are |labelsep=*| and |leftmargin=*|.
-With the former the item body begins at a fixed place (namely,
-|leftmargin|), while with the latter begins at a variable place
-depending on the label (but always the same within a list, of course).
-Most of times, what you would want is |leftmargin=*|.
-
-Unfortunately, \LaTeX{} does not define a default |labelsep| to
-be applied to all lists---simply the current value is used.  With
-\textsf{enumitem} you can set default values for every list, as
-described below, and so, if you want to make sure |labelsep| is
-under your control, all you need is something like:
-\begin{verbatim}
-\setlist{itemsep=.5em}
-\end{verbatim}
-
-|labelwidth=*| and |labelwidth=!| are synonymous.
-
-\begin{desc}
-|widest=<string>|\qquad|widest*=<integer>|\3\qquad|widest|
-\end{desc}
-
-To be used in conjunction with the \texttt{*}-values, if
-desired.  It overrides the default value for the widest
-printed counter.  Sometimes, if lists are not very long, a value of
-|a| for |\alph| is more sensible than the default |m|:
-\begin{verbatim}
-\begin{enumerate}[leftmargin=*,widest=a] % Assume standard 2nd level
-\end{verbatim}
-With no value, the default is restored. With |widest*|, the string is 
-built using |<integer>| as the value of the counter (e.g., with 
-\verb|\roman|, 
-\verb|widest=viii| and \verb|widest*=8| are the same).
-
-Since |\value| does not return a string but a number, 
-|widest| and the \verb|*| values cannot be used with it. 
-However, with \verb|widest*|, being a number, it is allowed.
-
-\subsection{More on horizontal spacing}
-
-Since |\parindent| is not used as such inside lists, but instead
-is set internally to either |\itemindent| or |\listparindent|,
-when used as the value of a parameter \textsf{enumitem} returns the
-global value, i.  e., the value it has outside the outermost list.
-
-The horizontal space in the left margin of the current level is
-distributed in the following way:\footnote{Admittedly, these figures
-are not exactly the clearest possible, and I intend to improve them in
-a future release}
-\begin{center}
-\begin{tabular}{cc}
-\fbox{\fbox{\strut \texttt{labelindent}}
-  \fbox{\strut \texttt{labelwidth}}
-  \fbox{\strut \texttt{labelsep} $-$ \texttt{itemintent}}}
-&
-\fbox{\strut\texttt{itemindent}}\\
-\texttt{leftmargin}
-\end{tabular}
-\end{center}
-
-\begin{desc}
-\verb|labelsep*=<length>|\3
-\end{desc}
-
-Remember |labelsep| spans part of |leftmargin| and
-|itemindent| if the latter is not zero.  This is often somewhat
-confusing, so a new key is provided---with \texttt{labelsep*} the
-value is reckoned from the left margin (it just sets |\labelsep| 
-and then adds |\itemindent| to it, but in addition later changes to
-|itemindent| are taken into account):
-\begin{center}
-\begin{tabular}{cc}
-\fbox{\fbox{\strut \texttt{labelindent}}
-  \fbox{\strut \texttt{labelwidth}}
-  \fbox{\strut \texttt{labelsep*}}}
-&
-\fbox{\strut\texttt{itemindent}}\\
-\texttt{leftmargin}
-\end{tabular}
-\end{center}
-
-\begin{desc}
-|labelindent*=<length>|\3
-\end{desc}
-
-Like |labelindent|, but it is reckoned from the left margin in 
-the current list and not from that in the enclosing list/text.
-
-\subsection{Numbering, stopping, and resuming}
-
-\begin{desc}
-|start=<integer>|
-\end{desc}
-Sets the number of the first item.
-
-\begin{desc}
-|resume|
-\end{desc}
-
-The counter continues from the previous |enumerate|,
-instead of being reset to 1.
-\begin{verbatim}
-\begin{enumerate}
-\item First item.
-\item Second item.
-\end{enumerate}
-Text.
-\begin{enumerate}[resume]
-\item Third item 
-\end{enumerate}
-\end{verbatim}
-
-This is done locally. If you want global resuming, see next section on series.
-
-\begin{desc}
-|resume*|
-\end{desc}
-
-Like |resume| but the options from the previous list are used,
-too.  This option must be restricted to the optional argument in a
-environment (this is the only place where it makes sense).  It should
-be used sparingly---if you are using it often, then very likely you
-want to define a new list (see \ref{s.clone}).  Further keys are allowed, and
-in this case the saved options are overriden by those in the current
-list (i.e., the position of \texttt{resume*} does not matters).  For
-example:
-\begin{verbatim}
-\begin{enumerate}[resume*,start=1] % or [start=1,resume*]
-\end{verbatim}
-uses the keys in the previuos \texttt{enumerate}, but restarts the
-counter.  If there is a series of a certain list with
-\texttt{resume*}, options are taken from the list previous to the
-first one, except for \texttt{start}.
-
-\subsection{Series}
-
-\begin{desc}
-|series=<series-name>|\3\\
-|<series-name>|\qquad|resume*=<series-name>|
-\qquad|resume=<series-name>|\3
-\end{desc}
-
-A new method (3.0) of continuing lists is by means of the key
-\texttt{series}, so that they behave like a unit.  A list with key
-\texttt{series} is considered the starting list and its settings are
-stored \textit{globally}, so that they can be used later with
-\texttt{resume}/\texttt{resume*}.  All these keys take a value with
-the series name (which must be different from existing keys):
-\begin{itemize}
-\item |resume=<series-name>| just continue numbering items in the
-series,
-\item |resume*=<series>| also applies the settings of the 
-starting list,
-\item |<series>|, i.e., the series name used as a key, is an 
-alternative to |resume*=<series>|.
-\end{itemize}
-For example:
-\begin{verbatim}
-\begin{enumerate}[label=\arabic*(a),leftmargin=1cm,series=lafter]
-\item A
-\item B
-\end{enumerate}
-\end{verbatim}
-You get: 1(a)  2(a). You can continue with:
-\begin{verbatim}
-\begin{enumerate}[label=\arabic*(b),resume*=lafter]
-                 % or [label=\arabic*(b),lafter]
-\item A
-\item B
-\end{enumerate}
-\end{verbatim}
-You get: 3(b)  4(b). (But you can use |start=1|, if you like.)
-
-Note you can add further arguments, which are executed after those
-saved at the starting list and therefore take precedence over them --
-in particular, |resume*| itself takes precedence over a
-|start| (e.g., |start=1|) in the the starting list.
-
-Every time a series is started, several commands are defined 
-internally, so to avoid wasting resources and use the same name for 
-non-overlapping series.
-
-
-\subsection{Penalties}
-
-\begin{desc}
-|beginpenalty=<integer>|\qquad
-|midpenalty=<integer>|\qquad |endpenalty=<integer>|
-\end{desc}
-
-Set the penalty at the beginning of a list, between items and at the
-end of the list, respectively.  Please, refer to your \LaTeX{} or
-\TeX{} manual about how penalties control page breaks.  Unlike other
-parameters, when a list starts their values are not reset to the
-default, thus they apply to the child lists.
-\begin{desc}
-|before=<code>| \qquad |before*=<code>|
-\end{desc}
-
-Execute code before the list starts (more precisely, in the second
-argument of the |list| environment used to define them).  The
-unstarred form sets the code to be executed, overriding any previous
-value, while the starred one adds the code to the existing one (in
-the setting hierarchy, see below, \textit{not} with relation to the
-enclosing list/text).  It can contain, say, rules and text, but this
-has not been extensively tested.  All calculations have been finished,
-and you can access and manipulate the list parameters.  For example,
-to have both margins (left and right) set to the widest label:
-\begin{verbatim}
-\setlist{leftmargin=*,before=\setlength{\rightmargin}{\leftmargin}}
-\end{verbatim}
-
-\begin{desc}
-|after=<code>|\qquad|after*=<code>|
-\end{desc}
-
-Same, but just before the list ends.
-
-\subsection{Description styles}
-
-A key available in |description|.
-\begin{desc}
-|style=<name>|
-\end{desc}
-
-Sets the description \textit{style}. |<name>| can be any of the 
-following:
-\begin{itemize}
-
-\item |standard|: like |description| in standard classes, although
-with other classes it could be somewhat different.  The label is
-boxed.  Sets \verb|itemindent=!|.
-
-\item |unboxed|: much like the standard |description|, but 
-the label is not boxed to avoid uneven spacing and unbroken labels if 
-they are long. Sets \verb|itemindent=!|.
-
-\item |nextline|: if the label does not fit in the margin, the text
-continues in the next line, otherwise it is placed in a box of width
-|\leftmargin| $-$ |\labelsep|, i.e., the item body never sticks into
-the left margin.  Sets \verb|labelwidth=!|.
-
-\item |sameline|: like |nextline| but if the label does not 
-fit in the margin the text continues in the same line. Same as
-\verb|style=unboxed,labelwidth=!|.
-
-\item |multiline|: the label is placed in a parbox whose width is 
-|leftmargin|, with several lines if 
-necessary. Same as \verb|style=standard,align=parleft,labelwidth=!|.
-
-Three caveats: (1) mixing boxed and unboxed labels has not a
-well-defined behaviour, (2) when nesting list all combinations are
-allowed but not all make sense, and (3) nesting \verb|nextline| lists
-is not supported (it works, but its behaviour might change in the
-future, because the current one is not what one could expect).
-
-
-
-\end{itemize}
-
-
-\subsection{Compact lists}
-
-\begin{desc}
-|noitemsep|\qquad|nosep|
-\end{desc}
-
-The key |noitemsep| kills the space between items and paragraphs
-(i.e., |itemsep=0pt| and |parsep=0pt|), while
-|nosep| kills all vertical spacing.\footnote{The key 
-\texttt{nolistsep}, now deprecated, introduced a thin stretch, which 
-was not the intended behaviour.}
-
-\subsection{``Wide'' lists}
-
-\begin{desc}
-\verb|wide|\3\\
-\verb|wide=<parindent>|
-\end{desc}
-
-With this convenience key, the leftmargin is null and the label is
-part of the text---in other word, the items look like ordinary
-paragraphs.\footnote{\texttt{fullwidth} is deprecated.} Here |labelsep|
-sets the separation between the label and the first word.  It is
-equivalent to
-\begin{verbatim}
-align=left, leftmargin=0pt, labelindent=\parindent,
-listparindent=\parindent, labelwidth=0pt, itemindent=!
-\end{verbatim}
-With |wide=<parindent>| you may set at once another value instead of
-|\parindent|.  Of course, these keys can be overriden after
-\verb|wide|, too; for example, remembering that with left-aligned labels
-the text is pushed if the they are wider than |labelwidth|, you
-can set |labelwidth=1.5em| for a minimal width, or instead of
-|itemindent=!| you may prefer |itemindent=*|, which sets the
-minimal width to that of widest label.  In level 2 you may prefer
-|labelindent=2\parindent|, and so on.  You may also want to
-combine it with |noitemsep| or |nolistsep|.
-
-\section{Inline lists}
-\label{s.inline}
-
-\3
-
-Inline lists are ``horizontal'' lists set as ordinary text inside a
-paragraph.  With this package you can create inline lists, as
-explained below, with \verb|\newlist|, which have their own labels and
-counters.  However, in most cases inline versions of standard lists,
-with the same labelling schema, will be enough -- the package option
-\verb|inline| does that.
-
-
-\begin{desc}
-|inline| \qquad(package option)\\
-\texttt{enumerate*}\qquad\texttt{itemize*}\qquad
-\texttt{description*} \qquad(environments)
-\end{desc}
-
-With the package option \texttt{inline}, three environments for inline
-lists are defined: \texttt{enumerate*}, \texttt{itemize*}, and
-\texttt{description*}.  They emulate the behaviour of
-\textsf{paralist} and \textsf{shortlst} in that labels and settings
-are shared with the displayed (ie, ``normal'') lists \texttt{enumerate},
-\texttt{itemize} and \texttt{description}, respectively (however,
-remember resuming is based on environment names, not on list types).  This applies
-only to those created with \texttt{inline} -- inline lists created
-with |\newlist| as described below are independent and use their
-own labels and settings. Note as well \verb|inline| is not required 
-if you needn't inline versions of standard lists.
-
-\begin{desc}
-|itemjoin=<string>|\qquad|itemjoin*=<string>|
-\qquad|afterlabel=<string>|
-\end{desc}
-
-Format is set with keys \texttt{itemjoin} (default is a space), and
-\texttt{afterlabel} (default is |\nobreakspace|, ie, |~|).
-An additional key is \texttt{itemjoin*}, which, if set, is used
-instead of \texttt{itemjoin} before the last item.  So, with
-\begin{verbatim}
-before=\unskip{: }, itemjoin={{; }}, itemjoin*={{, and }}
-\end{verbatim}
-the following punctuation between items is used:
-\begin{quote}
-Blah blah: (a) one; (b) two; (c) three, and (d) four. Blah blah
-\end{quote}
-
-\verb|itemjoin| is ignored in vertical mode (i.e., in mode unboxed
-and just after a quote, a displayed list and the like).
-
-\begin{desc}
-|mode=unboxed|\qquad|mode=boxed|
-\end{desc}
-
-Items are boxed, so floats are lost and nested lists are not allowed
-(remember many displayed elements are defined as lists).  If using
-floats or lists inside inline lists is important, use an alternative
-``mode'', which you can activate with
-\texttt{mode=unboxed} (the default is \texttt{mode=boxes}).  With it
-floats may be used freely, but misplaced |\item|s are not catched and
-\texttt{itemjoin*} is ignored (a warning is written to the log about
-this fact).
-
-\section{Global settings}
-
-Global changes, to be applied to all of these list, are also
-possible:
-\begin{desc}
-|\setlist[enumerate,<levels>]{<format>}|\\
-|\setlist[itemize,<levels>]{<format>}|\\
-|\setlist[description,<levels>]{<format>}|\\
-|\setlist[<levels>]{<format>}|
-\end{desc}
-Where |<level>| is the list level (one or more) in |list|, and the
-corresponding levels in |enumerate| and 
-|itemize|.\footnote{\verb|\string\setenumerate|, 
-\verb|\string\setitemize| and \verb|\string\setdescription| are 
-deprecated.}  With no
-|<levels>|, the format applies to all of them.  Here list does not
-mean any list but only the three ones handled by this package and
-those redefined by this package or defined with |\newlist| (see
-below).  For example:
-\begin{verbatim}
-\setlist{noitemsep}
-\setlist[1]{\labelindent=\parindent} % << Usually a good idea
-\setlist[itemize]{leftmargin=*}
-\setlist[itemize,1]{label=$\triangleleft$}
-\setlist[enumerate]{labelsep=*, leftmargin=1.5pc}
-\setlist[enumerate,1]{label=\arabic*., ref=\arabic*}
-\setlist[enumerate,2]{label=\emph{\alph*}),
-                      ref=\theenumi.\emph{\alph*}}
-\setlist[enumerate,3]{label=\roman*), ref=\theenumii.\roman*}
-\setlist[description]{font=\sffamily\bfseries}
-\end{verbatim}
-These setting are read in the following order: list, list at the
-current level, enumerate/itemize/description, and
-enumerate/itemize/description at the current level; if a key appears
-several times with different values, the last one, i.e.,  the most
-specific one, is applied.  If we are resuming a series or a list with
-\texttt{resume*}, the saved keys are then applied.  Finally, the
-optional argument (except \texttt{resume*}), if any, is applied.
-
-\LaTeX{} provides a set of macros to change many of these parameters,
-but setting them with the package is more consistent and sometimes
-more flexible at the cost of being more ``explicit'' (and verbose).
-
-The list specification can contain variables and counters, provided
-they are expandable, and counters are \textsf{calc}-savvy, so that if
-you load this package you can write things like:
-\begin{verbatim}
-\newcount{toplist}
-\setcount{toplist}{1}
-\newcommand{\mylistname}{enumerate}
-\setlist[\mylistname,\value{toplist}+1]{labelsep=\itemindent+2em]
-\end{verbatim}
-This allows defining lists within loops.
-
-Currently, a way to discriminate the font size is not provided
-(|\normalsize|, |\small|\dots).
-
-\section{\textsf{enumerate}-like labels}
-\label{s.short}
-
-\begin{desc}
-|shortlabels| (package option)
-\end{desc}
-
-With the package option \texttt{shortlabels} you can use an
-\textsf{enumerate}-like syntax, where |A|, |a|, |I|,
-|i| and |1| stand for |\Alph*|, |\alph*|,
-|\Roman*|, |\roman*| and |\arabic*|.  This is intended
-mainly as a sort of compatibility mode with the \textsf{enumerate}
-package, and therefore the following special rule applies: if the very
-first option (at any level) is not recognized as a valid key, then it
-will be considered a label with the \textsf{enumerate}-like syntax.  For
-example:
-\begin{verbatim}
-\begin{enumerate}[i), labelindent=\parindent]
-...
-\end{enumerate}
-\end{verbatim}
-Although perhaps not so useful, you can omit |label=| in the
-itemize environment under similar conditions, too:
-\begin{verbatim}
-\begin{itemize}[\textbullet]
-...
-\end{itemize}
-\end{verbatim}
-
-\begin{desc}
-|\SetEnumerateShortLabel{<key>}{<replacement>}|
-\end{desc}
-
-With this command, you can define new keys (or redefine them), which is
-particularly useful for enumerate to be adapted to especific
-typographical rules or to extend it for non-Latin scrips. Here
-|<replacement>| contains one of the starred versions of 
-counters. For example:
-\begin{verbatim}
-\SetEnumerateShortLabel{i}{\textsc{\roman*}}
-\end{verbatim}
-redefines |i| so that items using this key are numbered with
-small caps roman numerals. The key has to be a single letter.
-
-\section{Cloning the basic lists}
-\label{s.clone}
-
-\begin{desc}
-|\newlist{<name>}{<type>}{<max-depth>}|\\
-|\renewlist{<name>}{<type>}{<max-depth>}|
-\end{desc}
-
-The three lists can be cloned so that you can define ``logical''
-environments behaving like them.  To define a new lists (or redefine a
-existing one), use |\newlist| (or |\renewlist|), where |<type>| is
-|enumerate|, |itemize| or |description|.
-
-If <type> is |enumerate|, a set of counters with names |<name>i|,
-|<name>ii|, |<name>iii|, |<name>iv|, etc.  (depending on <max-depth>)
-is defined.  Don't use an arbitrarily large number for <max-depth>, to
-avoid creating too many counters.  Then you can use those counters in
-labels; e.  g., if you have defined a list named \texttt{steps}, you
-can define a label with:
-\begin{verbatim}
-label=\arabic{stepsii}.\arabic{stepsi}
-\end{verbatim}
-
-\begin{desc}
-\verb|\setlist[<names>,<levels>]{<keys/values>}|\\
-\verb|\setlist*[<names>,<levels>]{<keys/values>}|
-\end{desc}
-
-After creating a list, you can (in fact you
-must, at least the label) set the new list with |\setlist|:
-\begin{verbatim}
-\newlist{ingredients}{itemize}{1}
-\setlist[ingredients]{label=\textbullet}
-\newlist{steps}{enumerate}{2}
-\setlist[steps,1,2]{label=(\arabic*)}
-\end{verbatim}
-Names in the optional argument of |\setlist| say which lists applies the
-settings to, and numbers say the level (it is calc-savvy).  Several
-lists and/or several levels can be given, and all combinations are
-set; e.g.:
-\begin{verbatim}
-\setlist[enumerate,itemize,2,3]{...}
-\end{verbatim}
-\noindent sets enumerate/2, enumerate/3, itemize/2 and itemize/3. 
-No number (or 0) means ``all levels'' and no name means ``all lists''; no 
-optional argument means ``all lists at all levels''.
-
-The three inline lists have types \texttt{enumerate*},
-\texttt{itemize*}, and \texttt{description*}, which are available
-always, even without the package option |inline| (which just defines
-three environments with these names).
-
-The starred form \verb|\setlist*| adds the settings to previous ones.
-
-\begin{desc}
-\verb|\setlistdepth{<integer>|\3
-\end{desc}
-
-By default, \LaTeX{} has a limit of 5 nesting levels, but when 
-cloning list this value may be too short, and therefore you may want 
-to set a new value. In levels below the 5th (or the deepest defined by a 
-class), the settings of the last are used (i.e., \verb|\@listvi|).
-
-\section{More about counters}
-
-\subsection{New counter representation}
-
-\begin{desc}
-\verb|\AddEnumerateCounter{<LaTeX command>}{<internal command>}{<widest label>}|
-\end{desc}
-
-``Registers'' a counter representation so that \textsf{enumitem}
-recognizes it.  Intended mainly for non Latin scripts, but also useful
-in Latin scripts.  For example:
-\begin{verbatim}
-\makeatletter
-\def\ctext#1{\expandafter\@ctext\csname c@#1\endcsname}
-\def\@ctext#1{\ifcase#1\or First\or Second\or Third\or
-Fourth\or Fifth\or Sixth\fi}
-\makeatother
-\AddEnumerateCounter{\ctext}{\@ctext}{Second}
-\end{verbatim}
-A starred variant allows to give a number instead of a string as the 
-widest label; for example, if the widest label is that corresponding 
-to the value 2:\3
-\begin{verbatim}
-\AddEnumerateCounter*{\ctext}{\@ctmoreext}{2}
-\end{verbatim}
-This variant is to be preferred if the representation is not a plain 
-string but it is styled, e.g.,
-with small caps. (The counter names can contain |@| even if not a letter.) 
-
-\subsection{Restarting \texttt{enumerate}s}
-
-\begin{desc}
-|\restartlist{<list-name>}|\3
-\end{desc}
-
-Currently, with
-\begin{verbatim}
-\setlist[enumerate]{resume}
-\end{verbatim}
-you can get a continuous numbering through a document.  A new command has
-been added for restarting the counter in the middle of the document:
-\begin{verbatim}
-\restartlist{<list-name>}
-\end{verbatim}
-
-It is based solely in the list name, not the list type, which means
-\texttt{enumerate*} as defined with the package option \texttt{inline}
-is not the same as \texttt{enumerate}, because its name is different.
-
-\section{Generic keys and values}
-
-\begin{desc}
-|\SetEnumitemKey{<key>}{<replacement>}|\3
-\end{desc}
-
-With this command you can create your own (valueless) keys.  For
-example:
-\begin{verbatim}
-\SetEnumitemKey{midsep}{topsep=3pt,partopsep=0pt}
-\end{verbatim}
-
-Keys so defined can then be used like the others. Another example is
-multicolumn lists, with \textsf{multicol}:
-\begin{verbatim}
-\SetEnumitemKey{twocol}{
-  itemsep=1\itemsep,
-  parsep=1\parsep,
-  before=\raggedcolumns\begin{multicols}{2},
-  after=\end{multicols}}
-\end{verbatim}
-
-(The settings for \texttt{itemsep} and \texttt{parsep} kill the
-stretch and shrink parts.  Of course, you may want to define a
-new list.)
-
-Note the package may introduce new keys in the future, so
-\verb|\SetEnumitemKey| is a potential source of forward
-incompatibilities.  However, it's safe using a non-letter character
-other than hyphen or star in the key name (e.g., \verb|:name| or 
-\verb|2_col|).
-
-\begin{desc}
-|\SetEnumitemValue{<key>}{<string-value>}{<replacement>}|\3
-\end{desc}
-
-This commands provides a further abstraction layer for the
-|<key>=<value>| pairs.  With it you can define logical names which
-are translated to the actual value.  For example, with:
-\begin{verbatim}
-\SetEnumitemValue{label}{numeric}{\arabic*.}
-\SetEnumitemValue{leftmargin}{standard}{\parindent}
-\end{verbatim}
-you might say:
-\begin{verbatim}
-\begin{enumerate}[label=numeric,leftmargin=standard]
-\end{verbatim}
-So, you can left to the final design what |label=numeric| means.
-
-\section{Package options}
-
-Besides \verb|inline|, \verb|ignoredisplayed|, and \verb|shortlabels|,
-the following option is available.
-
-\begin{desc}
-\verb|loadonly|
-\end{desc}
-
-With this package option the package is loaded but the three
-lists are not redefined. You can create your own lists, yet, or
-even redefine the existing ones.
-
-\section{Three patterns}
-
-Three list layouts could be considered very
-frequent. Let us apply the parameters above to define them. (Below 
-are samples.)
-
-The first pattern aligns the label with the surrounding
-|\parindent| while the item body is indented depending
-on the label and a fixed |labelsep|:
-\begin{verbatim}
-labelindent=\parindent,
-leftmargin=*
-\end{verbatim}
-A fairly frequent variant is aligning the label with the
-surrounding text (rememeber |labelindent| is |0pt| by
-default):
-\begin{verbatim}
-leftmargin=*
-\end{verbatim}
-The former looks better in the first level while the latter
-seems preferable in subsequent ones. That can be easily
-set with
-\begin{verbatim}
-\setlist{leftmargin=*}
-\setlist[1]{labelindent=\parindent} % Only the level 1
-\end{verbatim}
-
-The second pattern aligns the item body with the surrounding
-|\parindent|. In this case:
-\begin{verbatim}
-leftmargin=\parindent
-\end{verbatim}
-
-A third pattern would be to align the label with |\parindent|
-and the item body with |2\parindent|:
-\begin{verbatim}
-labelindent=\parindent,
-leftmargin=2\parindent,
-itemsep=*
-\end{verbatim}
-Again, a variant would be to align the label with the surrounding
-text and the itembody with |\parindent|:
-\begin{verbatim}
-leftmargin=\parindent,
-itemsep=*
-\end{verbatim}
-
-Note here |\parindent| means the global value applied
-to normal paragraphs.
-
-\section{The trivlist issue}
-
-\LaTeX{} uses a simplified version of |list| named |trivlist| to set
-displayed material, like |center|, |verbatim|, \verb|tabbing|,
-\verb|theorem|, etc., even if conceptually they are not lists.
-Unfortunately, |trivlist| uses the current list settings, which has
-the odd side effect that changing the vertical spacing of lists also
-changes sometimes the spacing in these environments.
-
-This package modifies |trivlist| so that the default settings for 
-the current level (ie, those set by the corresponding |clo| 
-files) are set again. In standard \LaTeX{} that is usually redundand, 
-but if we want to fine tune lists, not resetting the default values 
-could be a real issue (particularly if you use the |nolistsep| 
-option).
-
-A minimal control of vertical spacing has been made possible 
-with\footnote{\verb|\string\setdisplayed| is deprecated.}
-\begin{itemize}
-\item |\setlist[trivlist,<level>]{<keys/values>}|
-\end{itemize}
-but |trivlist| itself, which is not used directly very
-often, does not accept an optional argument. This feature
-is not intended as a full-fledge |trivlist| formatter.
-
-If for some reason you do not want to change |trivlist|
-and preserve the original definition, you can use the
-package option |ignoredisplayed|.
-
-\section{Samples}
-
-\expandafter\ifx\csname setenumerate\endcsname\relax
-
-Please, install first the package and then typeset this
-document again.
-
-\else
-
-In these samples we set |\setlist{noitemsep}|
-
-\setlist{noitemsep}
-\small
-
-\newcommand{\newsample}{\vskip6pt\goodbreak\hrule height 1pt\vskip6pt}
-\newcommand{\samplesep}{\vskip6pt\goodbreak\hrule\vskip6pt}
-\newbox\vsep
-\setbox\vsep\hbox{\vrule height 2ex depth 16ex width 1pt}
-\dp\vsep0pt
-\newcommand\showsep{\leavevmode\llap{\copy\vsep}}
-
-\newsample
-
-\begin{verbatim}
-En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{enumerate}[labelindent=\parindent,leftmargin=*]
-  \item lanza en astillero,
-  \item adarna antigua,
-  \item roc\'{\i}n flaco, y
-  \item galgo corredor.
-\end{enumerate}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-\end{verbatim}
-
-The rule shows \verb|labelindent|. 
-
-\samplesep
-
-\showsep En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{enumerate}[labelindent=\parindent,leftmargin=*]
-\item lanza en astillero,
-\item adarna antigua,
-\item roc\'{\i}n flaco, y
-\item galgo corredor.
-\end{enumerate}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-
-\newsample
-
-With |\begin{enumerate}[leftmargin=*] % labelindent=0pt by default|. 
-
-The rule shows \verb|labelindent|.
-
-\samplesep
-
-\noindent\showsep\hskip\parindent En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{enumerate}[leftmargin=*]
-\item lanza en astillero,
-\item adarna antigua,
-\item roc\'{\i}n flaco, y
-\item galgo corredor.
-\end{enumerate}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-
-\newsample
-
-With |\begin{enumerate}[leftmargin=\parindent]|.
-
-The rule shows \verb|leftmargin|.
-
-\samplesep
-
-\showsep En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{enumerate}[leftmargin=\parindent]
-\item lanza en astillero,
-\item adarna antigua,
-\item roc\'{\i}n flaco, y
-\item galgo corredor.
-\end{enumerate}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-
-\newsample
-
-With |\begin{enumerate}[labelindent=\parindent,|\allowbreak
-| leftmargin=*,|\allowbreak| label=\Roman*.,|\allowbreak
-| widest=IV,|\allowbreak| align=left]|.
-
-The rule shows \verb|labelindent|.
-
-\samplesep
-
-\showsep En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{enumerate}[labelindent=\parindent, leftmargin=*,
-                  label=\Roman*., widest=IV, align=left]
-\item lanza en astillero,
-\item adarna antigua,
-\item roc\'{\i}n flaco, y
-\item galgo corredor.
-\end{enumerate}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-
-\newsample
-
-With |\begin{enumerate}[label=\fbox{\arabic*}]|. A reference to
-the first item is \ref{i:first}
-
-\samplesep
-
-En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{enumerate}[label=\fbox{\arabic*}]
-\item \label{i:first}lanza en astillero,
-\item adarna antigua,
-\item roc\'{\i}n flaco, y
-\item galgo corredor.
-\end{enumerate}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-
-\newsample
-
-With nested lists.
-
-\samplesep
-
-\begin{verbatim}
-En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{enumerate}[label=(\alph*), labelindent=\parindent,
-     leftmargin=*, start=12]
-\item lanza en astillero,
-\begin{enumerate}[label=(\alph{enumi}.\roman*), leftmargin=*, start=7]
-\item adarna antigua,
-\end{enumerate}
-\item roc\'{\i}n flaco, y
-\begin{enumerate}[label=(\alph{enumi}.\roman*), leftmargin=*, resume]
-\item galgo corredor.
-\end{enumerate}
-\end{enumerate}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-\end{verbatim}
-
-En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{enumerate}[label=(\alph*), labelindent=\parindent,
-     leftmargin=*, start=12]
-\item lanza en astillero,
-\begin{enumerate}[label=(\alph{enumi}.\roman*), leftmargin=*, start=7]
-\item adarna antigua,
-\end{enumerate}
-\item roc\'{\i}n flaco, y
-\begin{enumerate}[label=(\alph{enumi}.\roman*), leftmargin=*, resume]
-\item galgo corredor.
-\end{enumerate}
-\end{enumerate}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-
-\newsample
-
-\begin{verbatim}
-En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{description}[font=\sffamily\bfseries, leftmargin=3cm,
-    style=nextline]
-  \item[Lo primero que ten\'{\i}a el Quijote] lanza en astillero,
-  \item[Lo segundo] adarna antigua,
-  \item[Lo tercero] roc\'{\i}n flaco, y
-  \item[Y por \'{u}ltimo, lo cuarto] galgo corredor.
-\end{description}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-\end{verbatim}
-
-\samplesep
-
-En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{description}[font=\sffamily\bfseries, leftmargin=3cm,
-    style=nextline]
-\item[Lo primero que ten\'{\i}a el Quijote] lanza en astillero,
-\item[Lo segundo] adarna antigua,
-\item[Lo tercero] roc\'{\i}n flaco, y
-\item[Y por \'{u}ltimo, lo cuarto] galgo corredor.
-\end{description}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-
-\newsample
-
-Same, but with |sameline|.
-
-\samplesep
-
-En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{description}[font=\sffamily\bfseries, leftmargin=3cm,
-    style=sameline]
-\item[Lo primero que ten\'{\i}a el Quijote] lanza en astillero,
-\item[Lo segundo] adarna antigua,
-\item[Lo tercero] roc\'{\i}n flaco, y
-\item[Y por \'{u}ltimo, lo cuarto] galgo corredor.
-\end{description}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-
-\newsample
-
-Same, but with |multiline|. Note the text overlaps if
-the item body is too short.
-
-\samplesep
-
-En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{description}[font=\sffamily\bfseries, leftmargin=3cm,
-    style=multiline]
-\item[Lo primero que ten\'{\i}a el Quijote] lanza en astillero,
-\item[Lo segundo] adarna antigua,
-\item[Lo tercero] roc\'{\i}n flaco, y
-\item[Y por \'{u}ltimo, lo cuar] galgo corredor.
-\end{description}
-Una olla de algo m\'{a}s vaca que carnero, salpic\'{o}n las m\'{a}s
-noches, duelos y quebrantos los s\'{a}bados...
-
-\fi
-
-\normalsize
-
-\section{Afterword}
-
-\subsection{\LaTeX{} lists}
-
-As it is well known, \LaTeX{} predefines three lists:
-\texttt{enumerate}, \texttt{itemize} and \texttt{description}.  This
-is a very frequent classification which can also be found in, say,
-HTML. However, there is a more general model based in three
-fields---namely, label, title, and body---, so that enumerate and
-itemize has label (numbered and unnumbered) but no title, while
-description has title but no label.  In this model, one can have a
-description with entries marked with labels, as for example (of 
-course, this simple solution is far from satistactory):
-\begin{verbatim}
-\newcommand\litem[1]{\item{\bfseries #1,\enspace}}
-\begin{itemize}[label=\textbullet]
-\litem{Lo primero que ten\'{\i}a el Quijote} lanza en astillero,
-... etc.
-\end{verbatim}
-
-\vskip6pt
-\goodbreak
-\hrule
-\vskip6pt
-
-\newcommand\litem[1]{\item{\bfseries #1,\enspace}}
-En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
-no ha mucho tiempo que viv\'{\i}a un hidalgo de los de
-\begin{itemize}[label=\textbullet]
-\litem{Lo primero que ten\'{\i}a el Quijote} lanza en astillero,
-\litem{Lo segundo} adarna antigua,
-\litem{Lo tercero} roc\'{\i}n flaco, y
-\litem{Y por \'{u}ltimo, lo cuarto} galgo corredor.
-\end{itemize}
-
-\vskip6pt
-\goodbreak
-\hrule
-\vskip6pt
-
-This format in not infrequent at all and a tool for defining them is 
-on the way and at a very advanced stage. It has not been include in 
-version 3.0 because I'm not sure if the proper place is this package 
-or \textsf{titlesec} and it is not stable enough yet.
-
-\subsection{Known issues}
-
-\begin{itemize}
-
-\item
-List resuming is based on environment names, and when a
-|\newenvironment| contains a list you may want to use |\begin| and
-|\end|.  Using the corresponding commands, however, is not an error,
-but it is your responsability to make sure the result is correct.
-
-\item
-It seems there is no way to catch a misspelled name in |\setlist|
-and a meaningless error ``Missing number, treated as zero'' is raised.
-
-\item The behaviour of mixed boxed labels (including enumerate and
-itemize) and unboxed labels is not well-defined.  The same applies to
-boxed and unboxed inline lists (which could even raise an error).
-Similarly, resuming a series and a list at the same time is allowed,
-too, but again its behaviour is not well-defined.
-
-\item (3.5.2) An incompatibility with 2.x has popped up -- if you were
-using the optional argument to pass a value to a \verb|\ref| or other 
-macro requiring expandable macros, an error is raised. A quick fix 
-is letting \verb|\makelabel| to |\descriptionlabel| in \texttt{before}.
-
-\end{itemize}
-
-\subsection{What's new in 3.0}
-
-\begin{itemize}
-\item Inline lists, with keys to set how items are joined (ie, the
-punctuation between items).  Two modes are provided: \verb|boxed|  and
-\verb|unboxed|.
-
-\item \verb|\setlist| is \textsf{calc}-savvy (eg, for use in loops),
-and you can set diferent lists and levels at once.  \item All lengths
-related to labels can take the value \verb|*| (and not only
-\verb|labelsep| and \verb|leftmargin|).  Its behaviour has been made
-consistent and there is new value \verb|!| which does not compute the
-widest label.
-
-\item With \verb|\restartlist{<list-name>}|, list counters can be restarted (in
-case you are using \verb|resume|).
-
-\item \verb|resume*| can be combined with other keys.
-
-\item Lists can be gathered globally using series, so that they are
-considered a single list.  To start a series just use
-|series=<series-name>| and then resume it with |resume=<series-name>| or
-|resume*=<series-name>|.
-
-\item The ``experimental'' \verb|fullwidth| has been replaced by a new key
-\verb|wide|.
-
-\item|\SetLabelAlign| defines new align values.
-
-\item You can define ``abstract'' values (eg, \verb|label=numeric|) and
-new keys.
-\end{itemize}
-
-\begin{itemize}
-\item (3.2) \verb|start| and \verb|widest*| are \textsf{calc}-savvy.
-\item (3.2) \verb|\value| can be used with \verb|widest*|.
-\item (3.2) Some internal restrictions in \verb|\arabic| and the like
-has been removed.  It is more flexible at the cost of having a more
-``relaxed'' error checking.
-\end{itemize}
-\subsection{Bug fixes}
-
-\begin{itemize}
-\item Star values (eg, \verb|leftmargin=*|) could not be overriden
-and new values were ignored.
-\item \verb|nolistsep| as the first of several keys was not always
-recognized and therefore treated like a short label
-(i.e., \verb|nol\roman*stsep|).
-\item \verb|labelwidth| did not always work (when there was a prior
-\verb|widest| and \verb|*|)
-\item With \verb|align=right| the label and the following text could
-overlap.
-\item \verb|description| did not get the correct list level.
-\item At some point (2.x?) \verb|\value*| stopped working.
-\item (3.1) Unfortunately, \textsf{xkeyval} ``kills'' 
-\textsf{keyval}, so the lattest has been replicated in 
-\textsf{enumitem}.
-\item (3.3) Fixes a serious bug -- with \verb|*| neither 
-\verb|itemize| nor \verb|description| worked.
-\item (3.4) Fixes bad spacing in mode boxed (misplaced \verb|\unskip| 
-before the first item and wrong spacefactor between items).
-\item (3.4) \verb|nolistsep| did not work as intended, but since the
-error has been there for several years, a new key \verb|nosep| is
-provided.
-\item (3.4) The issue with \verb|nolistsep| with \verb|shortlabels| 
-(see above) was not fixed in all cases. Hopefully now it is.
-\item (3.5.0) Fixed the fix related to the spacefactor between items.
-\item (3.5.0) Fixed a problem with nested boxed inline lists.
-\item (3.5.1) \texttt{resume*} only worked once, and subsequent ones
-bahaved like \texttt{resume}.
-\item (3.5.2) Fixed |\setlist*|, which didn't work.
-\end{itemize}
-
-
-\subsection{Acknowledgements}
-
-I wish to thank particularly the comments and suggestions from Lars
-Madsen, who has found some bugs, too.
-
-\end{document}
Index: doc/LaTeXmacros/listings/README
===================================================================
--- doc/LaTeXmacros/listings/README	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,18 +1,0 @@
-Listings package
-
-Copyright 1996--2004 Carsten Heinz (the package)
-Copyright 1996--2007 individual authors (language drivers)
-Copyright 2006--2007 Brooks Moses (continued maintenance)
-Copyright 2013--     Jobst Hoffmann (continued maintenance)
-
-$Id: README 38 2013-06-16 19:03:21Z j_hoffmann $
-
-Released under the LaTeX Project Public License 1.3 or later
-
-The `listings' package is a source code printer for LaTeX.
-You can typeset stand alone files as well as listings with
-an environment similar to `verbatim' as well as you can
-print code snippets using a command similar to \verb'.
-Many parameters control the output and if your preferred
-programming language isn't already supported, you can make
-your own definition.
Index: doc/LaTeXmacros/listings/listings-acm.prf
===================================================================
--- doc/LaTeXmacros/listings/listings-acm.prf	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,53 +1,0 @@
-%%
-%% This is file `listings-acm.prf',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% lstdrvrs.dtx  (with options: `acm-prf')
-%% 
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\ProvidesFile{listings-acm.prf}
-    [2015/06/04 1.6 listings language file]
-\usepackage[rgb, x11names]{xcolor}
-
-\definecolor{Comments}{rgb}{0.00,0.50,0.00}
-\definecolor{KeyWords}{rgb}{0.00,0.00,0.63}
-\definecolor{Strings}{rgb}{0.84,0.00,0.00}
-
-\lstdefinestyle{ACM}{%
-  basicstyle=\scriptsize\ttfamily,%
-  keywordstyle=\color{KeyWords},%
-  showstringspaces=false,%
-  identifierstyle=\color{black},%
-  commentstyle=\color{Comments},%
-  stringstyle=\color{Strings},%
-  frame=shadowbox,%             % for ACM-Code scrartcl commented out
-  rulesepcolor=\color{black},%
-  numbers=left,%                % left
-  firstnumber=1,%
-  stepnumber=5,%
-  columns=fixed,%               % to prevent inserting spaces
-  fontadjust=true,%
-  basewidth=0.5em,%
-  captionpos=t,%
-  abovecaptionskip=\smallskipamount,% same amount as default
-  belowcaptionskip=\smallskipamount,% in caption package
-}%
-\endinput
-%%
-%% End of file `listings-acm.prf'.
Index: doc/LaTeXmacros/listings/listings-bash.prf
===================================================================
--- doc/LaTeXmacros/listings/listings-bash.prf	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,66 +1,0 @@
-%%
-%% This is file `listings-bash.prf',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% lstdrvrs.dtx  (with options: `bash-prf')
-%% 
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\ProvidesFile{listings-bash.prf}
-    [2015/06/04 1.6 listings language file]
-\usepackage[rgb, x11names]{xcolor}
-
-\lstset{%
-  frame=tlb,%      the frame is open on the right side
-  resetmargins=false,%
-  rulesepcolor=\color{black},%
-  numbers=left,%                % left
-  numberstyle=\tiny,%
-  numbersep=5pt,%
-  firstnumber=1,%
-  stepnumber=5,%
-  columns=fixed,%               % to prevent inserting spaces
-  fontadjust=true,%
-  keepspaces=true,%
-  basewidth=0.5em,%
-  captionpos=t,%
-  abovecaptionskip=\smallskipamount,% same amount as default
-  belowcaptionskip=\smallskipamount,% in caption package
-}
-\lstdefinestyle{bash}{%
-  backgroundcolor=\color{yellow!10},%
-  basicstyle=\small\ttfamily,%
-  identifierstyle=\color{black},%
-  keywordstyle=\color{blue},%
-  keywordstyle={[2]\color{cyan}},%
-  keywordstyle={[3]\color{olive}},%
-  stringstyle=\color{teal},%
-  commentstyle=\itshape\color{orange},%
-}%
-\lstdefinestyle{bashbw}{%
-  backgroundcolor={},%
-  basicstyle=\small\ttfamily,%
-  identifierstyle={},%
-  keywordstyle=\bfseries,%
-  stringstyle=\itshape,%
-  commentstyle=\slshape,%
-  rulesepcolor=\color{black},%
-}%
-\endinput
-%%
-%% End of file `listings-bash.prf'.
Index: doc/LaTeXmacros/listings/listings-fortran.prf
===================================================================
--- doc/LaTeXmacros/listings/listings-fortran.prf	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,66 +1,0 @@
-%%
-%% This is file `listings-fortran.prf',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% lstdrvrs.dtx  (with options: `fortran-prf')
-%% 
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\ProvidesFile{listings-fortran.prf}
-    [2015/06/04 1.6 listings language file]
-\usepackage[rgb, x11names]{xcolor}
-
-\lstset{%
-  frame=tlb,%      the frame is open on the right side
-  resetmargins=false,%
-  rulesepcolor=\color{black},%
-  numbers=left,%                % left
-  numberstyle=\tiny,%
-  numbersep=5pt,%
-  firstnumber=1,%
-  stepnumber=5,%
-  columns=fixed,%               % to prevent inserting spaces
-  fontadjust=true,%
-  keepspaces=true,%
-  basewidth=0.5em,%
-  captionpos=t,%
-  abovecaptionskip=\smallskipamount,% same amount as default
-  belowcaptionskip=\smallskipamount,% in caption package
-}
-\lstdefinestyle{fortran}{%
-  backgroundcolor=\color{yellow!10},%
-  basicstyle=\small\ttfamily,%
-  identifierstyle=\color{black},%
-  keywordstyle=\color{blue},%
-  keywordstyle={[2]\color{cyan}},%
-  keywordstyle={[3]\color{olive}},%
-  stringstyle=\color{teal},%
-  commentstyle=\itshape\color{orange},%
-}%
-\lstdefinestyle{fortranbw}{%
-  backgroundcolor={},%
-  basicstyle=\small\ttfamily,%
-  identifierstyle={},%
-  keywordstyle=\bfseries,%
-  stringstyle=\itshape,%
-  commentstyle=\slshape,%
-  rulesepcolor=\color{black},%
-}%
-\endinput
-%%
-%% End of file `listings-fortran.prf'.
Index: doc/LaTeXmacros/listings/listings-lua.prf
===================================================================
--- doc/LaTeXmacros/listings/listings-lua.prf	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,39 +1,0 @@
-%%
-%% This is file `listings-lua.prf',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% lstdrvrs.dtx  (with options: `lua-prf')
-%% 
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\ProvidesFile{listings-lua.prf}
-    [2015/06/04 1.6 listings language file]
-\usepackage[rgb, x11names]{xcolor}
-\lstdefinestyle{Lua}{%
-  language=[5.2]Lua,
-  basicstyle=\ttfamily,
-  columns=spaceflexible,
-  keywordstyle=\bfseries\color{Blue4},% language keywords
-  keywordstyle=[2]\bfseries\color{RoyalBlue3},% std. library identifiers
-  keywordstyle=[3]\bfseries\color{Purple3},% labels
-  stringstyle=\bfseries\color{Coral4},% strings
-  commentstyle=\itshape\color{Green4},% comments
-}
-\endinput
-%%
-%% End of file `listings-lua.prf'.
Index: doc/LaTeXmacros/listings/listings-python.prf
===================================================================
--- doc/LaTeXmacros/listings/listings-python.prf	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,49 +1,0 @@
-%%
-%% This is file `listings-python.prf',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% lstdrvrs.dtx  (with options: `python-prf')
-%% 
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\ProvidesFile{listings-python.prf}
-    [2015/06/04 1.6 listings language file]
-\usepackage{xcolor}
-\usepackage{textcomp}
-
-%% Actual colors from idlelib/config-highlight.def --> corrected to ``web-safe''
-%% strings  = #00aa00 / 0,170,0      (a darker green)
-%% builtins = #900090 / 144,0,144    (purple-ish)
-%% keywords = #FF7700 / 255,119,0    (quite close to plain `orange')
-%% Corrected to ``web-safe''
-\definecolor{purple2}{RGB}{153,0,153} % there's actually no standard purple
-\definecolor{green2}{RGB}{0,153,0} % a darker green
-
-\lstdefinestyle{python-idle-code}{%
-  language=Python,                   % the language
-  basicstyle=\normalsize\ttfamily,   % size of the fonts for the code
-  % Color settings to match IDLE style
-  keywordstyle=\color{orange},       % core keywords
-  keywordstyle={[2]\color{purple2}}, % built-ins
-  stringstyle=\color{green2},
-  commentstyle=\color{red},
-  upquote=true,                      % requires textcomp
-}
-\endinput
-%%
-%% End of file `listings-python.prf'.
Index: doc/LaTeXmacros/listings/listings.cfg
===================================================================
--- doc/LaTeXmacros/listings/listings.cfg	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,49 +1,0 @@
-%%
-%% This is file `listings.cfg',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% lstdrvrs.dtx  (with options: `config')
-%% 
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\ProvidesFile{listings.cfg}[2015/06/04 1.6 listings configuration]
-\def\lstlanguagefiles
-    {lstlang0.sty,lstlang1.sty,lstlang2.sty,lstlang3.sty}
-\lstset{defaultdialect=[R/3 6.10]ABAP,
-        defaultdialect=[2005]Ada,
-        defaultdialect=[68]Algol,
-        defaultdialect=[gnu]Awk,
-        defaultdialect=[ANSI]C,
-        defaultdialect=[light]Caml,
-        defaultdialect=[1985]Cobol,
-        defaultdialect=[WinXP]command.com,
-        defaultdialect=[ISO]C++,
-        defaultdialect=[95]Fortran,
-        defaultdialect=[5.2]Mathematica,
-        defaultdialect=[OMG]OCL,
-        defaultdialect=[Standard]Pascal,
-        defaultdialect=[67]Simula,
-        defaultdialect=[plain]TeX,
-        defaultdialect=[97]VRML}
-\lstalias[]{TclTk}[tk]{tcl}
-\lstalias[6.1]{ABAP}[R/3 6.10]{ABAP}
-\lstalias[3.1]{ABAP}[R/3 3.1C]{ABAP}
-\lstalias[4.6]{ABAP}[R/3 4.6C]{ABAP}
-\endinput
-%%
-%% End of file `listings.cfg'.
Index: doc/LaTeXmacros/listings/listings.dtx
===================================================================
--- doc/LaTeXmacros/listings/listings.dtx	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,16660 +1,0 @@
-% \iffalse
-%
-% Trademarks appear throughout this documentation without any trademark
-% symbol, so you can't assume that a name is free. There is no intention
-% of infringement; the usage is to the benefit of the trademark owner.
-%
-%
-%  S O F T W A R E   L I C E N S E
-% =================================
-%
-% The files  listings.dtx  and  listings.ins  and all files generated
-% from only these two files are referred to as `the listings package'
-% or simply `the package'. lstdrvrs.dtx  and the files generated from
-% that file are `drivers'.
-%
-% The listings package is copyright 1996--2004 Carsten Heinz, and
-% continued maintenance on the package is copyright 2006--2007 Brooks
-% Moses. From 2013 on copyright is Jobst Hoffmann, who is the maintainer
-% since july 2013. The drivers are copyright 1997/1998/1999/2000/2001/
-% 2002/2003/2004/2006/2007/2013 any individual author listed in the
-% driver files.
-%
-% The listings package and its drivers may be distributed and/or modified
-% under the conditions of the LaTeX Project Public License, either version
-% 1.3 of this license or (at your option) any later version.
-% The latest version of this license is in
-%   http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2003/12/01 or later.
-%
-% The package has the LPPL maintenance status "maintained".
-%
-% $Id: listings.dtx 201 2015-06-04 20:25:39Z j_hoffmann $
-%
-% The Current Maintainer is Jobst Hoffmann <j.hoffmann(at)fh-aachen.de>.
-%
-% end of software license
-%
-%
-%<*driver>
-\documentclass[a4paper]{ltxdoc}
-\DisableCrossrefs
-\OnlyDescription
-
-\usepackage{lstdoc,textcomp}
-\usepackage{mdframed}           % frames for external files
-\usepackage{moreverb}           % writing external files
-\usepackage{xcolor}             % because of colouring the background
-
-\makeindex
-
-\begin{document}
-    \DocInput{listings.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-%^^A
-%^^A  Command/key to aspect relation
-%^^A ================================
-%^^A
-%\lstisaspect[strings]{string,morestring,deletestring,stringstyle,showstringspaces}
-%\lstisaspect[comments]{comment,morecomment,deletecomment,commentstyle}
-%\lstisaspect[comment styles]{b,d,l,n,s,ib,id,il,in,is}
-%\lstisaspect[pod]{printpod,podcomment}
-%\lstisaspect[escape]{texcl,escapebegin,escapeend,escapechar,escapeinside,mathescape}
-%\lstisaspect[keywords]{sensitive,classoffset,keywords,morekeywords,deletekeywords,keywordstyle,ndkeywords,morendkeywords,deletendkeywords,ndkeywordstyle,keywordsprefix,otherkeywords}
-%\lstisaspect[emph]{emph,moreemph,deleteemph,emphstyle}
-%\lstisaspect[tex]{texcs,moretexcs,deletetexcs,texcsstyle}
-%\lstisaspect[directives]{directives,moredirectives,deletedirectives,directivestyle}
-%\lstisaspect[html]{tag,usekeywordsintag,tagstyle,markfirstintag}
-%\lstisaspect[keywordcomments]{keywordcomment,morekeywordcomment,deletekeywordcomment,keywordcommentsemicolon}
-%\lstisaspect[index]{index,moreindex,deleteindex,indexstyle,\string\lstindexmacro}
-%\lstisaspect[procnames]{procnamestyle,indexprocnames,procnamekeys,moreprocnamekeys,deleteprocnamekeys}
-%\lstisaspect[style]{style,\string\lstdefinestyle,\string\lst@definestyle,\string\lststylefiles}
-%\lstisaspect[language]{language,alsolanguage,defaultdialect,\string\lstalias,\string\lstdefinelanguage,\string\lst@definelanguage,\string\lstloadlanguages,\string\lstlanguagefiles}
-%\lstisaspect[formats]{format,fmtindent,\string\lstdefineformat,\string\lst@defineformat,\string\lstformatfiles}
-%\lstisaspect[labels]{numbers,numberstyle,numbersep,stepnumber,numberblanklines,firstnumber,\string\thelstnumber,numberfirstline}
-%\lstisaspect[lineshape]{xleftmargin,xrightmargin,resetmargins,linewidth,lineskip,breaklines,breakindent,breakautoindent,prebreak,postbreak,breakatwhitespace}
-%\lstisaspect[frames]{framexleftmargin,framexrightmargin,framextopmargin,framexbottommargin,backgroundcolor,fillcolor,rulecolor,rulesepcolor,rulesep,framerule,framesep,frameshape,frameround,frame}
-%\lstisaspect[make]{makemacrouse}
-%\lstisaspect[fancyvrb]{fancyvrb,fvcmdparams,morefvcmdparams}
-%\lstisaspect[lgrind]{lgrindef,\string\lstlgrindeffile}
-%\lstisaspect[hyper]{hyperref,morehyperref,deletehyperref,hyperanchor,hyperlink}
-%\lstisaspect[kernel]{basewidth,fontadjust,columns,flexiblecolumns,identifierstyle,^^A
-%   tabsize,showtabs,tab,showspaces,keepspaces,formfeed,SelectCharTable,^^A
-%   MoreSelectCharTable,extendedchars,alsoletter,alsodigit,alsoother,excludedelims,^^A
-%   literate,basicstyle,print,firstline,lastline,linerange,nolol,captionpos,abovecaptionskip,^^A
-%   belowcaptionskip,label,title,caption,\string\lstlistingname,boxpos,float,^^A
-%   floatplacement,aboveskip,belowskip,everydisplay,showlines,emptylines,gobble,name,^^A
-%   \string\lstname,\string\lstlistlistingname,\string\lstlistoflistings,^^A
-%   \string\lstnewenvironment,\string\lstinline,\string\lstinputlisting,lstlisting,^^A
-%   \string\lstloadaspects,\string\lstset,\string\thelstlisting,\string\lstaspectfiles,^^A
-%   inputencoding,delim,moredelim,deletedelim,upquote,numberbychapter,^^A
-%   \string\lstMakeShortInline,\string\lstDeleteShortInline}
-%\lstisaspect[doc]{lstsample,lstxsample}^^A environment
-%\lstisaspect[experimental]{includerangemarker,rangebeginprefix,rangebeginsuffix,rangeendprefix,rangeendsuffix,rangeprefix,rangesuffix}
-%
-%^^A
-%^^A  The long awaited beginning of documentation
-%^^A =============================================
-%^^A
-%\newbox\abstractbox
-%\setbox\abstractbox=\vbox{
-%	\begin{abstract}
-%	The \packagename{listings} package is a source code printer for \LaTeX.
-%	You can typeset stand alone files as well as listings with an environment
-%   similar to \texttt{verbatim} as well as you can print code snippets using
-%   a command similar to |\verb|.
-%	Many parameters control the output and if your preferred programming
-%   language isn't already supported, you can make your own definition.
-%	\end{abstract}}
-%
-% \title{\vspace*{-2\baselineskip}The \textsf{Listings} Package}
-% \author{Copyright 1996--2004, Carsten Heinz%
-%    \\ Copyright 2006--2007, Brooks Moses
-%    \\ Copyright 2013--, Jobst Hoffmann
-%    \\ Maintainer: Jobst Hoffmann\thanks{Jobst %
-%       Hoffmann became the maintainer of the \packagename{listings}
-%       package in 2013; see the Preface for details.}~ %
-%    \textless\lstemail\textgreater}
-% \date{2015/06/04\enspace\enspace Version 1.6\ \box\abstractbox}
-% \def\lstemail{\href{mailto:j.hoffmann@fh-aachen.de}{\texttt{j.hoffmann(at)fh-aachen.de}}}
-% \ifhyper
-%    \hypersetup{pdfsubject=Package guide,pdfauthor=Jobst Hoffmann <j.hoffmann(at)fh-aachen.de>}
-% \fi
-%
-% \csname @twocolumntrue\endcsname
-% \maketitle
-%^^A \enlargethispage{2\baselineskip}
-% \csname @starttoc\endcsname{toc}
-% \onecolumn
-%
-%
-% \section*{Preface}
-%
-% \paragraph{Transition of package maintenance}
-% The \TeX\ world lost contact with Carsten Heinz in late 2004, shortly after
-% he released version 1.3b of the \packagename{listings} package.  After many
-% attempts to reach him had failed, Hendri Adriaens took over maintenance of
-% the package in accordance with the LPPL's procedure for abandoned packages.
-% He then passed the maintainership of the package to Brooks Moses, who had
-% volunteered for the position while this procedure was going through. The
-% result is known as listings version 1.4.
-%
-% This release, version 1.5, is a minor maintenance release since
-% I accepted maintainership of the package.  I would like to thank Stephan
-% Hennig who supported the Lua language definitions. He is the one who
-% asked for the integration of a new language and gave the impetus to me to
-% become the maintainer of this package.
-%
-%
-% \paragraph{News and changes}
-% Version 1.5 is the fifth bugfix release.  There are no changes
-% in this version, but two extensions: support of modern Fortran (2003,
-% 2008) and Lua.
-%
-%
-% \vfill
-% \paragraph{Thanks}
-% There are many people I have to thank for fruitful communication, posting
-% their ideas, giving error reports, adding programming languages to
-% \texttt{lstdrvrs.dtx}, and so on. Their names are listed in section
-% \ref{uClosingAndCredits}.
-%
-% \paragraph{Trademarks}
-% Trademarks appear throughout this documentation without any trademark
-% symbol; they are the property of their respective trademark owner.
-% There is no intention of infringement; the usage is to the benefit of the
-% trademark owner.
-%
-%
-% \clearpage
-%
-%
-% \part{User's guide}
-%
-%
-% \section{Getting started}\label{uGettingStarted}
-%
-%
-% \subsection{A minimal file}\label{uAMinimalFile}
-%
-% Before using the \packagename{listings} package, you should be familiar with
-% the \LaTeX\ typesetting system. You need not to be an expert.
-% Here is a minimal file for \packagename{listings}.
-% \begin{verbatim}
-%    \documentclass{article}
-%    \usepackage{listings}
-%
-%    \begin{document}
-%    \lstset{language=Pascal}
-%
-%      % Insert Pascal examples here.
-%
-%    \end{document}\end{verbatim}
-% Now type in this first example and run it through \LaTeX.
-% \begin{advise}
-% \item Must I do that really?
-%       \advisespace
-%       Yes and no. Some books about programming say this is good.
-%       What a mistake! Typing takes time---which is wasted if the code is clear to
-%       you. And if you need that time to understand what is going on, the
-%       author of the book should reconsider the concept of presenting the
-%       crucial things---you might want to say that about this guide even---or
-%       you're simply inexperienced with programming. If only the latter case
-%       applies, you should spend more time on reading (good) books about
-%       programming, (good) documentations, and (good) source code from other
-%       people. Of course you should also make your own experiments.
-%       You will learn a lot. However, running the example through \LaTeX\
-%       shows whether the \packagename{listings} package is installed correctly.
-% \item The example doesn't work.
-%       \advisespace
-%       Are the two packages \packagename{listings} and \packagename{keyval}
-%       installed on your system? Consult the administration tool of your
-%       \TeX\ distribution, your system administrator, the local \TeX\ and
-%       \LaTeX\ guides, a \TeX\ FAQ, and section \ref{rInstallation}---in
-%       that order. If you've checked \emph{all} these sources and are
-%       still helpless, you might want to write a post to a \TeX\ newsgroup
-%       like \texttt{comp.text.tex}.
-% \item Should I read the software license before using the package?
-%       \advisespace
-%       Yes, but read this \emph{Getting started} section first to decide
-%       whether you are willing to use the package.^^A ;-)
-% \end{advise}
-%
-%
-% \subsection{Typesetting listings}
-%
-% Three types of source codes are supported: code snippets, code segments, and
-% listings of stand alone files.  Snippets are placed inside paragraphs and the
-% others as separate paragraphs---the difference is the same as between text
-% style and display style formulas.
-% \begin{advise}
-% \item No matter what kind of source you have, if a listing contains national
-%       characters like \'e, \L, \"a, or whatever, you must tell the
-%       package about it! Section \lstref{uSpecialCharacters} discusses this issue.
-% \end{advise}
-%
-% \paragraph{Code snippets}
-% The well-known \LaTeX\ command |\verb| typesets code snippets verbatim.
-% The new command |\lstinline| pretty-prints the code, for example
-%`\lstinline!var i:integer;!' is typeset by
-%`{\rstyle|\lstinline|}|!var i:integer;!|'. The exclamation marks delimit
-% the code and can be replaced by any character not in the code;
-% |\lstinline$var i:integer;$| gives the same result.
-%
-% \paragraph{Displayed code}
-% The \texttt{lstlisting} environment typesets the enclosed source code. Like
-% most examples, the following one shows verbatim \LaTeX\ code on the right
-% and the result on the left. You might take the right-hand side, put it into
-% the minimal file, and run it through \LaTeX.
-% \begin{lstsample}[lstlisting]{}{}
-%    \begin{lstlisting}
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%
-%    Write('Case insensitive ');
-%    WritE('Pascal keywords.');
-%    \end{lstlisting}
-% \end{lstsample}
-% It can't be easier.
-% \begin{advise}
-% \item That's not true. The name `\texttt{listing}' is shorter.
-%       \advisespace
-%       Indeed. But other packages already define environments with that name.
-%       To be compatible with such packages, all commands and environments of
-%       the \packagename{listings} package use the prefix `\texttt{lst}'.
-% \end{advise}
-% The environment provides an optional argument. It tells the package to
-% perform special tasks, for example, to print only the lines 2--5:
-% \begin{lstsample}{\lstset{frame=trbl,framesep=0pt}\label{gFirstKey=ValueList}}{}
-%    \begin{lstlisting}[firstline=2,
-%                       lastline=5]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%
-%    Write('Case insensitive ');
-%    WritE('Pascal keywords.');
-%    \end{lstlisting}
-% \end{lstsample}
-% \begin{advise}
-% \item Hold on! Where comes the frame from and what is it good for?
-%       \advisespace
-%       You can put frames around all listings except code snippets.
-%       You will learn how later. The frame shows that empty lines at the end
-%       of listings aren't printed. This is line 5 in the example.
-% \item Hey, you can't drop my empty lines!
-%       \advisespace
-%       You can tell the package not to drop them:
-%       The key `\ikeyname{showlines}' controls these empty lines and is
-%       described in section \ref{rTypesettingListings}. Warning: First
-%       read ahead on how to use keys in general.
-% \item I get obscure error messages when using `\ikeyname{firstline}'.
-%       \advisespace
-%       That shouldn't happen. Make a bug report as described in section
-%       \lstref{uTroubleshooting}.
-% \end{advise}
-%
-% \paragraph{Stand alone files}
-% Finally we come to |\lstinputlisting|, the command used to pretty-print
-% stand alone files. It has one optional and one file name argument.
-% Note that you possibly need to specify the relative path to the file.
-% Here now the result is printed below the verbatim code since both together
-% don't fit the text width.
-% \begin{lstsample}{\lstset{comment=[l]\%,columns=fullflexible}}{\lstset{alsoletter=\\,emph=\\lstinputlisting,emphstyle=\rstyle}\lstaspectindex{\lstinputlisting}{}}
-%    \lstinputlisting[lastline=4]{listings.sty}
-% \end{lstsample}
-% \begin{advise}
-% \item The spacing is different in this example.
-%       \advisespace
-%       Yes. The two previous examples have aligned columns, i.e.~columns with
-%       identical numbers have the same horizontal position---this package
-%       makes small adjustments only. The columns in the example here are not
-%       aligned. This is explained in section \ref{uFixedAndFlexibleColumns}
-%       (keyword: full flexible column format).
-% \end{advise}
-%
-% Now you know all pretty-printing commands and environments. It remains
-% to learn the parameters which control the work of the \packagename{listings}
-% package. This is, however, the main task. Here are some of them.
-%
-%
-% \subsection{Figure out the appearance}\label{gFigureOutTheAppearance}
-%
-% Keywords are typeset bold, comments in italic shape, and spaces in strings
-% appear as \textvisiblespace. You don't like these settings? Look at this:
-%\ifcolor
-% \begin{lstxsample}[basicstyle,keywordstyle,identifierstyle,commentstyle,stringstyle,showstringspaces]
-%    \lstset{% general command to set parameter(s)
-%        basicstyle=\small,          % print whole listing small
-%        keywordstyle=\color{black}\bfseries\underbar,
-%                                    % underlined bold black keywords
-%        identifierstyle=,           % nothing happens
-%        commentstyle=\color{white}, % white comments
-%        stringstyle=\ttfamily,      % typewriter type for strings
-%        showstringspaces=false}     % no special string spaces
-% \end{lstxsample}
-%\else
-% \begin{lstxsample}[basicstyle,keywordstyle,identifierstyle,commentstyle,stringstyle,showstringspaces]
-%    \lstset{% general command to set parameter(s)
-%        basicstyle=\small,          % print whole listing small
-%        keywordstyle=\bfseries\underbar,
-%                                    % underlined bold keywords
-%        identifierstyle=,           % nothing happens
-%        commentstyle=\itshape,      % default
-%        stringstyle=\ttfamily,      % typewriter type for strings
-%        showstringspaces=false}     % no special string spaces
-% \end{lstxsample}
-%\fi
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%
-%    Write('Case insensitive ');
-%    WritE('Pascal keywords.');
-%    \end{lstlisting}
-% \end{lstsample}
-%\ifcolor
-% \begin{advise}
-% \item You've requested white coloured comments, but I can see the comment
-%       on the left side.
-%       \advisespace
-%       There are a couple of possible reasons:
-%       (1) You've printed the documentation on nonwhite paper.
-%       (2) If you are viewing this documentation as a \texttt{.dvi}-file, your
-%           viewer seems to have problems with colour specials. Try to print
-%           the page on white paper.
-%       (3) If a printout on white paper shows the comment, the colour
-%           specials aren't suitable for your printer or printer driver.
-%           Recreate the documentation and try it again---and ensure that
-%           the \packagename{color} package is well-configured.
-% \end{advise}
-%\fi
-% The styles use two different kinds of commands. |\ttfamily| and |\bfseries|
-% both take no arguments but |\underbar| does; it underlines the following
-% argument. In general, the \emph{very last} command may read exactly one
-% argument, namely some material the package typesets. There's one exception.
-% The last command of \ikeyname{basicstyle} \emph{must not} read any
-% tokens---or you will get deep in trouble.
-% \begin{advise}
-% \item `|basicstyle=\small|' looks fine, but comments look really bad with
-%       `|commentstyle=\tiny|' and empty basic style, say.
-%       \advisespace
-%       Don't use different font sizes in a single listing.
-% \item But I really want it!
-%       \advisespace
-%       No, you don't.
-%^^A       The package adjusts internal data after selecting the basic style at
-%^^A       the beginning of each listing. This is a problem if you change the
-%^^A       font size for comments or strings, for example.
-%^^A       Section \ref{rColumnAlignment} shows how to overcome this.
-%^^A       But once again: Don't use different font sizes in a single listing
-%^^A       unless you really know what you are doing.
-% \end{advise}
-%
-% \paragraph{Warning}\label{wStrikingStyles}
-% You should be very careful with striking styles; the recent example is rather
-% moderate---it can get horrible. \emph{Always use decent highlighting.}
-% Unfortunately it is difficult to give more recommendations since they depend
-% on the type of document you're creating. Slides or other presentations often
-% require more striking styles than books, for example.
-% In the end, it's \emph{you} who have to find the golden mean!
-%
-%
-% \subsection{Seduce to use}\label{gSeduceToUse}
-%
-% You know all pretty-printing commands and some main parameters. Here now
-% comes a small and incomplete overview of other features. The table of
-% contents and the index also provide information.
-%
-% \paragraph{Line numbers}
-% are available for all displayed listings, e.g.~tiny numbers on the left, each
-% second line, with 5pt distance to the listing:
-% \begin{lstxsample}[numbers,numberstyle,stepnumber,numbersep]
-%    \lstset{numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt}
-% \end{lstxsample}
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%
-%    Write('Case insensitive ');
-%    WritE('Pascal keywords.');
-%    \end{lstlisting}
-% \end{lstsample}
-% \begin{advise}
-% \item I can't get rid of line numbers in subsequent listings.
-%       \advisespace
-%       `|numbers=none|' turns them off.
-% \item Can I use these keys in the optional arguments?
-%       \advisespace
-%       Of course. Note that optional arguments modify values for one
-%       particular listing only: you change the appearance, step or distance
-%       of line numbers for a single listing. The previous values are
-%       restored afterwards.
-% \end{advise}
-% The environment allows you to interrupt your listings: you can end a listing
-% and continue it later with the correct line number even if there are other
-% listings in between. Read section \ref{uLineNumbers} for a thorough
-% discussion.
-%
-% \paragraph{Floating listings}
-% Displayed listings may float:
-% \begin{lstsample}{\lstset{frame=tb}}{}
-%    \begin{lstlisting}[float,caption=A floating example]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%
-%    Write('Case insensitive ');
-%    WritE('Pascal keywords.');
-%    \end{lstlisting}
-% \end{lstsample}
-% Don't care about the parameter \ikeyname{caption} now. And if you put the
-% example into the minimal file and run it through \LaTeX, please don't wonder:
-% you'll miss the horizontal rules since they are described elsewhere.
-% \begin{advise}
-% \item \LaTeX's float mechanism allows one to determine the placement of floats.
-%       How can I do that with these?
-%       \advisespace
-%       You can write `|float=tp|', for example.
-% \end{advise}
-%
-% \paragraph{Other features}
-% There are still features not mentioned so far: automatic breaking of long
-% lines, the possibility to use \LaTeX\ code in listings, automated indexing,
-% or personal language definitions.
-% One more little teaser? Here you are. But note that the result is not
-% produced by the \LaTeX\ code on the right alone. The main parameter is
-% hidden.
-% \begin{lstsample}{\lstset{literate={:=}{{$\gets$}}1 {<=}{{$\leq$}}1 {>=}{{$\geq$}}1 {<>}{{$\neq$}}1}}{}
-%    \begin{lstlisting}
-%    if (i<=0) then i := 1;
-%    if (i>=0) then i := 0;
-%    if (i<>0) then i := 0;
-%    \end{lstlisting}
-% \end{lstsample}
-%
-% You're not sure whether you should use \packagename{listings}?
-% Read the next section!
-%
-%
-% \subsection{Alternatives}
-%
-% \begin{advise}
-% \item Why do you list alternatives?
-%       \advisespace
-%       Well, it's always good to know the competitors.^^A :-)
-% \item I've read the descriptions below and the \packagename{listings} package
-%       seems to incorporate all the features. Why should I use one of the
-%       other programs?
-%       \advisespace
-%       Firstly, the descriptions give a taste and not a complete overview,
-%       secondly, \packagename{listings} lacks some properties, and, ultimately,
-%       you should use the program matching your needs most precisely.
-% \end{advise}
-% This package is certainly not the final utility for typesetting source code.
-% Other programs do their job very well, if you are not satisfied with
-% \packagename{listings}. Some are independent of \LaTeX, others come as
-% separate program plus \LaTeX\ package, and others are packages which
-% don't pretty-print the source code. The second type includes converters,
-% cross compilers, and preprocessors. Such programs create \LaTeX\ files
-% you can use in your document or stand alone ready-to-run \LaTeX\ files.
-%
-% Note that I'm not dealing with any literate programming tools here, which
-% could also be alternatives. However, you should have heard of the
-% \texttt{WEB} system, the tool Prof.~Donald E.~Knuth developed and made use
-% of to document and implement \TeX.
-%
-% \paragraph{\href{http://www.infres.enst.fr/~demaille/a2ps}{\packagename{a2ps}}}
-% started as `ASCII to PostScript' converter, but today you can invoke the
-% program with \texttt{--pretty-print=}\meta{language} option. If your
-% favourite programming language is not already supported, you can write your
-% own so-called style sheet. You can request line numbers, borders, headers,
-% multiple pages per sheet, and many more. You can even print symbols like
-% $\forall$ or $\alpha$ instead of their verbose forms. If you just want
-% program listings and not a document with some listings, this is the best
-% choice.
-%
-% \paragraph{\href{http://www.ctan.org/tex-archive/nonfree/support/lgrind}{\packagename{LGrind}}}
-% is a cross compiler and comes with many predefined programming languages.
-% For example, you can put the code on the right in your document, invoke
-% \packagename{LGrind} with \texttt{-e} option (and file names), and run the
-% created file through \LaTeX. You should get a result similar to the
-% left-hand side:
-% \begin{center}
-% \begin{minipage}{0.45\linewidth}
-%\iflgrind
-%    \LGindent=0pt
-%    \LGinlinefalse\LGbegin\lgrinde
-%    \L{\LB{\K{for}_\V{i}:=\V{maxint}_\K{to}_\N{0}_\K{do}}}
-%    \L{\LB{\K{begin}}}
-%    \L{\LB{____\C{}\{_do_nothing_\}\CE{}}}
-%    \L{\LB{\K{end};}}
-%    \L{\LB{}}
-%    \L{\LB{\V{Write}(\S{}{'}Case_insensitive_{'}\SE{});}}
-%    \L{\LB{\V{WritE}(\S{}{'}Pascal_keywords.{'}\SE{});}}
-%    \endlgrinde\LGend
-%\else
-%    \packagename{LGrind} not installed.
-%\fi
-% \end{minipage}
-% \begin{minipage}{0.45\linewidth}
-% \begin{verbatim}
-% %[
-% for i:=maxint to 0 do
-% begin
-%     { do nothing }
-% end;
-%
-% Write('Case insensitive ');
-% WritE('Pascal keywords.');
-% %]\end{verbatim}
-% \end{minipage}
-% \end{center}
-% If you use |%(| and |%)| instead of |%[| and |%]|, you get a code snippet
-% instead of a displayed listing. Moreover you can get line numbers to the
-% left or right, use arbitrary \LaTeX\ code in the source code, print symbols
-% instead of verbose names, make font setup, and more. You will (have to)
-% like it (if you don't like \packagename{listings}).
-%
-% Note that \packagename{LGrind} contains code with a no-sell license and is
-% thus nonfree software.
-%
-% \paragraph{\href{ftp://axp3.sv.fh-mannheim.de/cvt2latex}{\packagename{cvt2ltx}}}
-% is a family of `source code to \LaTeX' converters for C, Objective C, \Cpp,
-% IDL and Perl. Different styles, line numbers and other qualifiers can be
-% chosen by command-line option. Unfortunately it isn't documented how other
-% programming languages can be added.
-%
-% \paragraph{\href{http://www.ctan.org/tex-archive/support/C++2LaTeX-1_1pl1}{\packagename{\Cpp2\LaTeX}}}
-% is a C/\Cpp\ to \LaTeX\ converter. You can specify the fonts for comments,
-% directives, keywords, and strings, or the size of a tabulator. But as far as
-% I know you can't number lines.
-%
-% \paragraph{\href{http://www.ctan.org/tex-archive/support/slatex}{\packagename{S\LaTeX}}}
-% is a pretty-printing Scheme program (which invokes \LaTeX\ automatically)
-% especially designed for Scheme and other Lisp dialects. It supports stand
-% alone files, text and display listings, and you can even nest the
-% commands/environments if you use \LaTeX\ code in comments, for example.
-% Keywords, constants, variables, and symbols are definable and use of
-% different styles is possible. No line numbers.
-%
-% \paragraph{\href{http://www.ctan.org/tex-archive/support/tiny_c2l}{\packagename{tiny\textunderscore c2ltx}}}
-% is a C/\Cpp/Java to \LaTeX\ converter based on \packagename{cvt2ltx} (or the
-% other way round?). It supports line numbers, block comments, \LaTeX\ code
-% in/as comments, and smart line breaking. Font selection and tabulators are
-% hard-coded, i.e.~you have to rebuild the program if you want to change the
-% appearance.
-%
-% \paragraph{\href{http://www.ctan.org/tex-archive/macros/latex/contrib/misc}{\packagename{listing}}}
-% ---note the missing \packagename{s}---is not a pretty-printer and the
-% aphorism about documentation at the end of \texttt{listing.sty} is not
-% true.\space ^^A :-)
-% It defines |\listoflistings| and a nonfloating environment for listings.
-% All font selection and indention must be done by hand. However, it's
-% useful if you have another tool doing that work, e.g.~\packagename{LGrind}.
-%
-% \paragraph{\href{http://www.ctan.org/tex-archive/macros/latex/contrib/alg}{\packagename{alg}}}
-% provides essentially the same functionality as \packagename{algorithms}.
-% So read the next paragraph and note that the syntax will be different.
-%
-% \paragraph{\href{http://www.ctan.org/tex-archive/macros/latex/contrib/algorithms}{\packagename{algorithms}}}
-% goes a quite different way. You describe an algorithm and the package
-% formats it, for example
-% \begin{center}
-% \begin{minipage}{0.45\linewidth}
-%\ifalgorithmicpkg
-%    \begin{algorithmic}
-%    \IF {$i\leq0$}
-%    \STATE $i\gets1$
-%    \ELSE\IF {$i\geq0$}
-%    \STATE $i\gets0$
-%    \ENDIF\ENDIF
-%    \end{algorithmic}
-%\else
-%    \packagename{algorithms} not installed.
-%\fi
-% \end{minipage}
-% \begin{minipage}{0.45\linewidth}
-% \begin{verbatim}
-%\begin{algorithmic}
-%\IF{$i\leq0$}
-%\STATE $i\gets1$
-%\ELSE\IF{$i\geq0$}
-%\STATE $i\gets0$
-%\ENDIF\ENDIF
-%\end{algorithmic}\end{verbatim}
-% \end{minipage}
-% \end{center}
-% As this example shows, you get a good looking algorithm even from a bad
-% looking input. The package provides a lot more constructs like |for|-loops,
-% |while|-loops, or comments. You can request line numbers, `ruled', `boxed'
-% and floating algorithms, a list of algorithms, and you can customize the
-% terms \textbf{if}, \textbf{then}, and so on.
-%
-% \paragraph{\href{http://www.mimuw.edu.pl/~wolinski/pretprin.html}{\packagename{pretprin}}}
-% is a package for pretty-printing texts in formal languages---as the title
-% in TUGboat, Volume 19 (1998), No.~3 states. It provides environments which
-% pretty-print \emph{and} format the source code. Analyzers for Pascal and
-% Prolog are defined; adding other languages is easy---if you are or get a bit
-% familiar with automatons and formal languages.
-%
-% \paragraph{\packagename{alltt}}
-% defines an environment similar to \texttt{verbatim} except that |\|, |{| and
-% |}| have their usual meanings. This means that you can use commands in the
-% verbatims, e.g.~select different fonts or enter math mode.
-%
-% \paragraph{\href{http://www.ctan.org/tex-archive/macros/latex/contrib/moreverb}{\packagename{moreverb}}}
-% requires \packagename{verbatim} and provides verbatim output to a file,
-% `boxed' verbatims and line numbers.
-%
-% \paragraph{\packagename{verbatim}}
-% defines an improved version of the standard \texttt{verbatim} environment and
-% a command to input files verbatim.
-%
-% \paragraph{\href{http://www.ctan.org/tex-archive/macros/latex/contrib/fancyvrb}{\packagename{fancyvrb}}}
-% is, roughly speaking, a superset of \packagename{alltt},
-% \packagename{moreverb}, and \packagename{verbatim}, but many more parameters
-% control the output. The package provides frames, line numbers on the left or
-% on the right, automatic line breaking (difficult), and more. For example, an
-% interface to \packagename{listings} exists, i.e.~you can pretty-print source
-% code automatically.
-% The package \packagename{fvrb-ex} builds on \packagename{fancyvrb} and
-% defines environments to present examples similar to the ones in this guide.
-%
-%
-% \section{The next steps}\label{uTheNextSteps}
-%
-% Now, before actually using the \packagename{listings} package, you should
-% \emph{really} read the software license. It does not cost much time and
-% provides information you probably need to know.
-%
-%
-% \subsection{Software license}\label{uSoftwareLicense}
-%
-% The files \texttt{listings.dtx} and \texttt{listings.ins} and all
-% files generated from only these two files are referred to as `the
-% \packagename{listings} package' or simply `the package'.
-% \texttt{lstdrvrs.dtx} and the files generated from that file are
-% `drivers'.
-%
-% \paragraph{Copyright}
-%   The \packagename{listings} package is copyright 1996--2004 Carsten Heinz,
-%   and copyright 2006 Brooks Moses.  The drivers are copyright any individual
-%   author listed in the driver files.
-%
-% \paragraph{Distribution and modification}
-%   The \packagename{listings} package and its drivers may be distributed
-%   and/or modified under the conditions of the LaTeX Project Public License,
-%   either version 1.3 of this license or (at your option) any later version.
-%   The latest version of this license is in
-%      \href{http://www.latex-project.org/lppl.txt}{http://www.latex-project.org/lppl.txt}
-%   and version 1.3 or later is part of all distributions of LaTeX version
-%  2003/12/01 or later.
-%
-% \paragraph{Contacts}
-%   Read section \lstref{uTroubleshooting} on how to submit a bug report.
-%   Send all other comments, ideas, and additional programming languages to
-%   \lstemail\ using \texttt{listings} as part of the subject.
-%
-%
-% \subsection{Package loading}\label{uPackageLoading}
-%
-% As usual in \LaTeX, the package is loaded by
-%    |\usepackage[|\meta{options}|]{listings}|,
-% where |[|\meta{options}|]| is optional and gives a comma separated list of
-% options. Each either loads an additional \packagename{listings} aspect, or
-% changes default properties. Usually you don't have to take care of such
-% options. But in some cases it could be necessary: if you want to compile
-% documents created with an earlier version of this package or if you use
-% special features. Here's an incomplete list of possible options.
-% \begin{advise}
-% \item Where is a list of all of the options?
-%       \advisespace
-%       In the developer's guide since they were introduced to debug the
-%       package more easily. Read section \ref{uHowTos} on how to get that
-%       guide.
-% \end{advise}
-% \begin{description}
-% \item[\normalfont\texttt{0.21}]\leavevmode
-%
-%       invokes a compatibility mode for compiling documents written for
-%       \packagename{listings} version 0.21.
-%
-% \item[\normalfont\texttt{draft}]\leavevmode
-%
-%       The package prints no stand alone files, but shows the captions and
-%       defines the corresponding labels.
-%       Note that a global |\documentclass|-option \texttt{draft} is
-%       recognized, so you don't need to repeat it as a package option.
-%
-% \item[\normalfont\texttt{final}]\leavevmode\label{uoption:final}
-%
-%       Overwrites a global \texttt{draft} option.
-%
-% \item[\normalfont\texttt{savemem}]\leavevmode
-%
-%       tries to save some of \TeX's memory. If you switch between languages
-%       often, it could also reduce compile time. But all this depends on the
-%       particular document and its listings.
-% \end{description}
-% Note that various experimental features also need explicit loading via
-% options. Read the respective lines in section \ref{rExperimentalFeatures}.
-%
-% \medbreak
-% After package loading it is recommend to load all used dialects of programming
-% languages with the following command. It is faster to load several languages
-% with one command than loading each language on demand.
-% \begin{syntax}
-% \item {\rstyle\icmdname\lstloadlanguages}\marg{comma separated list of languages}
-%
-%       Each language is of the form \oarg{dialect}\meta{language}. Without
-%       the optional \oarg{dialect} the package loads a default dialect. So
-%       write `|[Visual]C++|' if you want Visual \Cpp\ and `|[ISO]C++|' for
-%       ISO \Cpp. Both together can be loaded by the command
-%       |\lstloadlanguages{[Visual]C++,[ISO]C++}|.
-%
-%       Table \ref{uPredefinedLanguages} on page \pageref{uPredefinedLanguages}
-%       shows all defined languages and their dialects.
-% \end{syntax}
-%^^A After or even before language loading, you might want to define default
-%^^A dialects---just to be independent of configuration files.
-%
-%
-% \subsection{The key=value interface}\label{uTheKey=ValueInterface}
-%
-% This package uses the \packagename{keyval} package from the
-% \packagename{graphics} bundle by David Carlisle. Each parameter is
-% controlled by an associated key and a user supplied value. For example,
-% \ikeyname{firstline} is a key and |2| a valid value for this key.
-%
-% The command {\rstyle\icmdname\lstset} gets a comma separated list of
-% ``key|=|value'' pairs. The first list with more than a single entry is on
-% page \pageref{gFirstKey=ValueList}: |firstline=2,lastline=5|.
-% \begin{advise}
-% \item So I can write `|\lstset{firstline=2,lastline=5}|' once for all?
-%       \advisespace
-%       No. `\ikeyname{firstline}' and `\ikeyname{lastline}' belong to a small
-%       set of
-%       keys which are only used on individual listings. However, your command is
-%       not illegal---it has no effect. You have to use these keys inside the
-%       optional argument of the environment or input command.
-% \item What's about a better example of a key|=|value list?
-%       \advisespace
-%       There is one in section \ref{gFigureOutTheAppearance}.
-% \item `|language=[77]Fortran|' does not work inside an optional argument.
-%       \advisespace
-%       You must put braces around the value if a value with optional argument
-%       is used inside an optional argument. In the case here write
-%       `|language={[77]Fortran}|' to select Fortran 77.
-% \item If I use the `\ikeyname{language}' key inside an optional argument, the
-%       language isn't active when I typeset the next listing.
-%       \advisespace
-%       All parameters set via `|\lstset|' keep their values up to the end of
-%       the current environment or group. Afterwards the previous values are
-%       restored. The optional parameters of the two pretty-printing commands
-%       and the `\texttt{lstlisting}' environment take effect on the particular
-%       listing only, i.e.~values are restored immediately. For example, you
-%       can select a main language and change it for special listings.
-% \item \icmdname\lstinline\ has an optional argument?
-%       \advisespace
-%       Yes. And from this fact comes a limitation: you can't use the left
-%       bracket `|[|' as delimiter unless you specify at least an empty
-%       optional argument as in `|\lstinline[][var i:integer;[|'.
-%       If you forget this, you will either get a ``runaway argument'' error
-%       from \TeX, or an error message from the \packagename{keyval} package.
-% \end{advise}
-%
-%
-% \subsection{Programming languages}\label{uProgrammingLanguages}
-%
-% You already know how to activate programming languages---at least Pascal.
-% An optional parameter selects particular dialects of a language. For example,
-% |language=[77]Fortran| selects Fortran 77 and |language=[XSC]Pascal| does the
-% same for Pascal XSC. The general form is
-%    {\rstyle\ikeyname{language}}|=|\oarg{dialect}\meta{language}.
-% If you want to get rid of keyword, comment, and string detection, use
-% |language={}| as an argument to |\lstset| or as optional argument.
-%
-% Table \ref{uPredefinedLanguages} shows all predefined languages and dialects.
-% Use the listed names as \meta{language} and \meta{dialect}, respectively. If
-% no dialect or `empty' is given in the table, just don't specify a dialect.
-% Each underlined dialect is default; it is selected if you leave out
-% the optional argument. The predefined defaults are the newest language
-% versions or standard dialects.
-%^^A
-%^^A  Make table of predefined languages.
-%^^A
-%\let\lstlanguages\empty
-%\makeatletter
-%\@for\lst@temp:={lstlang1.sty,lstlang2.sty,lstlang3.sty}\do
-%    {\IfFileExists\lst@temp{}{\let\lstlanguages\relax}}
-%\makeatother
-%\ifx\lstlanguages\relax
-%    \PackageWarningNoLine{Listings}
-%        {Standard drivers not available.\MessageBreak
-%         Please check your installation.\MessageBreak
-%         Compilation aborted}
-%    \csname @@end\expandafter\endcsname
-%\fi
-%\lstscanlanguages\lstlanguages{lstlang1.sty,lstlang2.sty,lstlang3.sty}{}^^A
-%\def\topfigrule{\hrule\kern-0.4pt\relax}^^A
-%\let\botfigrule\topfigrule
-%\belowcaptionskip=\smallskipamount
-% \begin{table}[tbhp]
-% \small
-% \caption{Predefined languages.
-%          Note that some definitions are preliminary, for example HTML and XML.
-%          Each underlined dialect is the default dialect.}^^A
-%          \label{uPredefinedLanguages}^^A
-% \makeatletter
-% \setbox\@tempboxa\hbox{^^A
-%    \InputIfFileExists{listings.cfg}{\lst@InputCatcodes}{}}^^A
-% \lstprintlanguages\lstlanguages
-% \end{table}
-%^^A
-%^^A end of table
-%^^A
-%\lstset{defaultdialect=[doc]Pascal}^^A restore
-% \begin{advise}
-% \item How can I define default dialects?
-%       \advisespace
-%       Check section \ref{rLanguagesAndStyles} for `\keyname{defaultdialect}'.
-% \item I have C code mixed with assembler lines. Can \packagename{listings}
-%       pretty-print such source code, i.e.~highlight keywords and comments of
-%       both languages?
-%       \advisespace
-%       `\ikeyname{alsolanguage}|=|\oarg{dialect}\meta{language}' selects a
-%       language additionally to the active one. So you only have to write a
-%       language definition for your assembler dialect, which doesn't interfere
-%       with the definition of C, say. Moreover you might want to use the key
-%       `\keyname{classoffset}' described in section \ref{rLanguagesAndStyles}.
-% \item How can I define my own language?
-%       \advisespace
-%       This is discussed in section \ref{rLanguageDefinitions}. And if you
-%       think that other people could benefit by your definition, you might
-%       want to send it to the address in section \ref{uSoftwareLicense}.
-%       Then it will be published under the \LaTeX\ Project Public License.
-% \end{advise}
-% Note that the arguments \meta{language} and \meta{dialect} are case
-% insensitive and that spaces have no effect.
-%
-% There is at least one language (VDM, Vienna Development Language,
-% \url{http://www.vdmportal.org}) which is not directly supported by the
-% \packagename{listings} package. It needs a package for its own:
-% \packagename{vdmlisting}. On the other hand \packagename{vdmlisting} uses
-% the \packagename{listings} package and so it should be mentioned in this
-% context.
-%
-%
-% \subsubsection{Preferences}\label{uPreferences}
-%
-% Sometimes authors of language support provide their own configuration
-% preferences. These may come either from their personal experience or
-% from the settings in an IDE and can be defined as a \packagename{listings}
-% style. From version 1.5b of the \packagename{listings} package on these
-% styles are provided as files with the name
-% |listings-|\meta{language}|.prf|, \meta{language} is the name of the
-% supported programming language in lowercase letters.
-%
-% So if an user of the \packagename{listings} package wants to use these
-% preferences, she/he can say for example when using Python
-% \begin{quote}
-%     |\input{listings-python.prf}|
-% \end{quote}
-% at the end of her/his |listings.cfg| configuration file as long as the
-% file |listings-python.prf| resides in the \TeX{} search path. Of course
-% that file can be changed according to the user's preferences.
-%
-% At the moment there are five such preferences files:
-% \begin{enumerate}
-%   \item |listings-acm.prf|
-%   \item |listings-bash.prf|
-%   \item |listings-fortran.prf|
-%   \item |listings-lua.prf|
-%   \item |listings-python.prf|
-% \end{enumerate}
-% All contributors are invited to supply more personal preferences.
-%
-%
-% \subsection{Special characters}\label{uSpecialCharacters}
-%
-%
-% \paragraph{Tabulators}
-% You might get unexpected output if your sources contain tabulators.
-% The package assumes tabulator stops at columns 9, 17, 25, 33, and so on.
-% This is predefined via |tabsize=8|. If you change the eight to the number
-% $n$, you will get tabulator stops at columns $n+1,2n+1,3n+1,$ and so on.
-% \begin{lstsample}[tabsize]{}{}
-%    \lstset{tabsize=2}
-%    \begin{lstlisting}
-%    123456789
-%    	{ one tabulator }
-%    		{ two tabs }
-%    123		{ 123 + two tabs }
-%    \end{lstlisting}
-% \end{lstsample}
-% For better illustration, the left-hand side uses |tabsize=2| but the verbatim
-% code |tabsize=4|. Note that |\lstset| modifies the values for all following
-% listings in the same environment or group. This is no problem here since the
-% examples are typeset inside minipages. If you want to change settings for a
-% single listing, use the optional argument.
-%
-%
-% \paragraph{Visible tabulators and spaces}
-% One can make spaces and tabulators visible:
-% \begin{lstsample}[showspaces,showtabs,tab]{}{}
-%    \lstset{showspaces=true,
-%            showtabs=true,
-%            tab=\rightarrowfill}
-%    \begin{lstlisting}
-%        for i:=maxint to 0 do
-%        begin
-%    	{ do nothing }
-%        end;
-%    \end{lstlisting}
-% \end{lstsample}
-% If you request \ikeyname{showspaces} but no \ikeyname{showtabs},
-% tabulators are converted to visible spaces.
-% The default definition of \ikeyname{tab} produces a `wide visible space'
-% \lstinline[showtabs]!	!. So you might want to use |$\to$|, |$\dashv$|
-% or something else instead.
-% \begin{advise}
-% \item Some sort of advice: (1) You should really indent lines of source code
-%       to make listings more readable. (2) Don't indent some lines with
-%       spaces and others via tabulators. Changing the tabulator size (of your
-%       editor or pretty-printing tool) completely disturbs the columns.
-%       (3) As a consequence, never share your files with differently tab sized
-%       people!^^A true only if you use tabulators, just :-)
-% \item To make the \LaTeX\ code more readable, I indent the environments'
-%       program listings. How can I remove that indention in the output?
-%       \advisespace
-%       Read `How to gobble characters' in section \ref{uHowTos}.
-% \end{advise}
-%
-%
-% \paragraph{Form feeds}
-% Another special character is a form feed causing an empty line by default.
-% {\rstyle\ikeyname{formfeed}}|=\newpage| would result in a new page every
-% form feed. Please note that such definitions (even the default) might get
-% in conflict with frames.
-%
-%
-% \paragraph{National characters}
-% If you type in such characters directly as characters of codes 128--255 and
-% use them also in listings, let the package know it---or you'll get really
-% funny results. {\rstyle\ikeyname{extendedchars}}|=true| allows and
-% |extendedchars=false| prohibits \packagename{listings} from handling
-% extended characters in listings. If you use them, you should load
-% \packagename{fontenc}, \packagename{inputenc} and/or
-% any other package which defines the characters.
-% \begin{advise}
-% \item I have problems using \packagename{inputenc} together with
-%       \packagename{listings}.
-%       \advisespace
-%       This could be a compatibility problem. Make a bug report as described
-%       in section \lstref{uTroubleshooting}.
-% \end{advise}
-% The extended characters don't cover Arabic, Chinese, Hebrew, Japanese, and so
-% on---specifically, any encoding which uses multiple bytes per character.
-%
-% Thus, if you use the a package that supports multibyte characters, such as
-% the \packagename{CJK} or \packagename {ucs} packages for Chinese and
-% UTF-8 characters, you must avoid letting \packagename{listings}
-% process the extended characters.  It is generally best to also specify
-% |extendedchars=false| to avoid having \packagename{listings} get entangled
-% in the other package's extended-character treatment.
-%
-% If you do have a listing contained within a CJK environment, and want to have
-% CJK characters inside the listing, you can place them within a comment that
-% escapes to \LaTeX -- see section \ref{rEscapingToLaTeX} for how to do that.
-% (If the listing is not inside a CJK environment, you can simply put a small
-% CJK environment within the escaped-to-\LaTeX portion of the comment.)
-%
-% Similarly, if you are using UTF-8 extended characters in a listing, they must
-% be placed within an escape to \LaTeX.
-%
-% Also, section \ref{uNationalCharacters} has a few details on how to work with
-% extended characters in the context of $\Lambda$.
-%
-%
-% \subsection{Line numbers}\label{uLineNumbers}
-%
-% You already know the keys \ikeyname{numbers}, \ikeyname{numberstyle},
-% \ikeyname{stepnumber}, and \ikeyname{numbersep} from section
-% \ref{gSeduceToUse}. Here now we deal with continued listings.
-% You have two options to get consistent line numbering across listings.
-%
-% \begin{lstsample}[firstnumber]{\lstset{numbers=left,numberstyle=\tiny,stepnumber=2,numbersep=5pt}}{}
-%    \begin{lstlisting}[firstnumber=100]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%
-%    \end{lstlisting}
-%    And we continue the listing:
-%    \begin{lstlisting}[firstnumber=last]
-%    Write('Case insensitive ');
-%    WritE('Pascal keywords.');
-%    \end{lstlisting}
-% \end{lstsample}
-% In the example, \ikeyname{firstnumber} is initially set to 100; some lines
-% later the value is \texttt{last}, which continues the numbering of the last
-% listing. Note that the empty line at the end of the first part is not printed
-% here, but it counts for line numbering. You should also notice that you can
-% write |\lstset{firstnumber=last}| once and get consecutively numbered code
-% lines---except you specify something different for a particular listing.
-%
-% On the other hand you can use |firstnumber=auto| and name your listings.
-% Listings with identical names (case sensitive!) share a line counter.
-% \begin{lstsample}[name]{\lstset{numbers=left,numberstyle=\tiny,stepnumber=2,numbersep=5pt}}{}
-%    \begin{lstlisting}[name=Test]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%
-%    \end{lstlisting}
-%    And we continue the listing:
-%    \begin{lstlisting}[name=Test]
-%    Write('Case insensitive ');
-%    WritE('Pascal keywords.');
-%    \end{lstlisting}
-% \end{lstsample}
-% The next |Test| listing goes on with line number {\makeatletter\lstno@Test},
-% no matter whether there are other listings in between.
-% \begin{advise}
-% \item Okay. And how can I get decreasing line numbers?
-%       \advisespace
-%       Sorry, what?
-%       \advisespace
-%       Decreasing line numbers as on page \pageref{rDecreasingLabels}.
-%       \advisespace
-%       May I suggest to demonstrate your individuality by other means?
-%       If you differ, you should try a negative `\ikeyname{stepnumber}'
-%       (together with `\ikeyname{firstnumber}').
-% \end{advise}
-%
-% Read section \ref{uHowTos} on how to reference line numbers.
-%
-%
-% \subsection{Layout elements}
-%
-% It's always a good idea to structure the layout by vertical space,
-% horizontal lines, or different type sizes and typefaces. The best to stress
-% whole listings are---not all at once---colours, frames, vertical space, and
-% captions. The latter are also good to refer to listings, of course.
-%
-% \paragraph{Vertical space}
-% The keys {\rstyle\ikeyname{aboveskip}} and {\rstyle\ikeyname{belowskip}}
-% control the vertical space above and below displayed listings. Both keys get
-% a dimension or skip as value and are initialized to |\medskipamount|.
-%
-% \paragraph{Frames}
-% The key \ikeyname{frame} takes the verbose values \keyvalue{none},
-% \keyvalue{leftline}, \keyvalue{topline}, \keyvalue{bottomline},
-% \keyvalue{lines} (top and bottom), \keyvalue{single} for single frames, or
-% \keyvalue{shadowbox}.
-% \begin{lstsample}[frame]{}{}
-%    \begin{lstlisting}[frame=single]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% \begin{advise}
-% \item The rules aren't aligned.
-%       \advisespace
-%       This could be a bug of this package or a problem with your
-%       \texttt{.dvi} driver. \emph{Before} sending a bug report to the package
-%       author, modify the parameters described in section \ref{rFrames}
-%       heavily. And do this step by step!
-%       For example, begin with `|framerule=10mm|'. If the rules are
-%       misaligned by the same (small) amount as before, the problem does not
-%       come from the rule width. So continue with the next parameter.  Also,
-%       Adobe Acrobat sometimes has single-pixel rounding errors which can
-%       cause small misalignments at the corners when PDF files are displayed
-%       on screen; these are unfortunately normal.
-% \end{advise}
-% Alternatively you can control the rules at the \texttt{t}op, \texttt{r}ight,
-% \texttt{b}ottom, and \texttt{l}eft directly by using the four initial letters
-% for single rules and their upper case versions for double rules.
-% \begin{lstsample}[frame]{}{}
-%    \begin{lstlisting}[frame=trBL]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% Note that a corner is drawn if and only if both adjacent rules are requested.
-% You might think that the lines should be drawn up to the edge, but what's
-% about round corners? The key \ikeyname{frameround} must get exactly four
-% characters as value. The first character is attached to the upper right
-% corner and it continues clockwise. `\texttt{t}' as character makes the
-% corresponding corner round.
-% \begin{lstsample}[frameround]{}{}
-%    \lstset{frameround=fttt}
-%    \begin{lstlisting}[frame=trBL]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% Note that \ikeyname{frameround} has been used together with |\lstset| and thus
-% the value affects all following listings in the same group or environment.
-% Since the listing is inside a \texttt{minipage} here, this is no problem.
-% \begin{advise}
-% \item Don't use frames all the time, and in particular not with short listings.
-%       This would emphasize nothing. Use frames for $10\%$ or even less of
-%       your listings, for your most important ones.
-% \item If you use frames on floating listings, do you really want frames?
-%       \advisespace
-%       No, I want to separate floats from text.
-%       \advisespace
-%       Then it is better to redefine \LaTeX's `|\topfigrule|' and
-%       `|\botfigrule|'. For example, you could write
-%       `|\renewcommand*\topfigrule{\hrule\kern-0.4pt\relax}|' and make the
-%       same definition for |\botfigrule|.
-% \end{advise}
-%
-% \paragraph{Captions}
-% Now we come to \ikeyname{caption} and \ikeyname{label}. You might guess
-% (correctly) that they can be used in the same manner as \LaTeX's |\caption|
-% and |\label| commands, although here it is also possible to have a caption
-% regardless of whether or not the listing is in a float:
-% \begin{lstsample}[caption,label]{\lstset{xleftmargin=.05\linewidth}}{}
-%    \begin{lstlisting}[caption={Useless code},label=useless]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% Afterwards you could refer to the listing via |\ref{useless}|. By default
-% such a listing gets an entry in the list of listings, which can be printed
-% with the command {\rstyle\icmdname\lstlistoflistings}. The key
-% {\rstyle\ikeyname{nolol}} suppresses an entry for both the environment or
-% the input command. Moreover, you can specify a short caption for the list
-% of listings:
-%    \keyname{caption}|={|\oarg{short}\meta{long}|}|.
-% Note that the whole value is enclosed in braces since an optional value is
-% used in an optional argument.
-%
-% If you don't want the label \texttt{\lstlistingname} plus number, you should
-% use \ikeyname{title}:
-% \begin{lstsample}[title]{\lstset{xleftmargin=.05\linewidth}}{}
-%    \begin{lstlisting}[title={`Caption' without label}]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% \begin{advise}
-% \item Something goes wrong with `\keyname{title}' in my document: in front of
-%       the title is a delimiter.
-%       \advisespace
-%       The result depends on the document class; some are not compatible.
-%       Contact the package author for a work-around.
-% \end{advise}
-%
-% \paragraph{Colours}
-% One more element. You need the \packagename{color} package and can then
-% request coloured background via
-% \ikeyname{backgroundcolor}|=|\meta{color command}.
-% \begin{advise}
-% \item Great! I love colours.
-%       \advisespace
-%       Fine, yes, really. And I like to remind you of the warning about
-%       striking styles on page \pageref{wStrikingStyles}.
-% \end{advise}
-%\ifcolor
-% \begin{lstxsample}[backgroundcolor]
-%    \lstset{backgroundcolor=\color{yellow}}
-% \end{lstxsample}
-%\else
-% \begin{verbatim}
-%    color package not installed\end{verbatim}
-%\fi
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}[frame=single,
-%                       framerule=0pt]
-%    for i:=maxint to 0 do
-%    begin
-%        j:=square(root(i));
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% The example also shows how to get coloured space around the whole listing:
-% use a frame whose rules have no width.
-%
-%
-% \subsection{Emphasize identifiers}\label{uEmphasizeIdentifiers}
-%
-% Recall the pretty-printing commands and environment. |\lstinline| prints
-% code snippets, |\lstinputlisting| whole files, and \texttt{lstlisting}
-% pieces of code which reside in the \LaTeX\ file. And what are these
-% different `types' of source code good for? Well, it just happens that a
-% sentence contains a code fragment. Whole files are typically included in or
-% as an appendix. Nevertheless some books about programming also include such
-% listings in normal text sections---to increase the number of pages.
-% Nowadays source code should be shipped on disk or CD-ROM and only the main
-% header or interface files should be typeset for reference. So, please, don't
-% misuse the \packagename{listings} package. But let's get back to the topic.
-%
-% Obviously `\texttt{lstlisting} source code' isn't used to make an executable
-% program from. Such source code has some kind of educational purpose or even
-% didactic.
-% \begin{advise}
-% \item What's the difference between educational and didactic?
-%       \advisespace
-%       Something educational can be good or bad, true or false.
-%       Didactic is true by definition.^^A :-)
-% \end{advise}
-% Usually \emph{keywords} are highlighted when the package typesets a piece of
-% source code. This isn't necessary for readers who know the programming
-% language well. The main matter is the presentation of interface, library or
-% other functions or variables. If this is your concern, here come the right
-% keys. Let's say, you want to emphasize the functions |square| and |root|,
-% for example, by underlining them. Then you could do it like this:
-% \begin{lstxsample}[emph,emphstyle]
-%    \lstset{emph={square,root},emphstyle=\underbar}
-% \end{lstxsample}
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    for i:=maxint to 0 do
-%    begin
-%        j:=square(root(i));
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% \begin{advise}
-% \item Note that the list of identifiers |{square,root}| is enclosed in
-%       braces. Otherwise the \packagename{keyval} package would complain
-%       about an undefined key \keyname{root} since the comma finishes the
-%       key=value pair.
-%       Note also that you \emph{must} put braces around the value if you
-%       use an optional argument of a key inside an optional argument of a
-%       pretty-printing command. Though it is not necessary, the following
-%       example uses these braces. They are typically forgotten when they
-%       become necessary,
-% \end{advise}
-%
-% Both keys have an optional \meta{class number} argument for multiple
-% identifier lists:
-%\ifcolor
-% \begin{lstxsample}[emph,emphstyle]
-%    \lstset{emph={square},      emphstyle=\color{red},
-%            emph={[2]root,base},emphstyle={[2]\color{blue}}}
-% \end{lstxsample}
-%\else
-% \begin{lstxsample}[emph,emphstyle]
-%    \lstset{emph={square},      emphstyle=\underbar,
-%            emph={[2]root,base},emphstyle={[2]\fbox}}
-% \end{lstxsample}
-%\fi
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    for i:=maxint to 0 do
-%    begin
-%        j:=square(root(i));
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% \begin{advise}
-% \item What is the maximal \meta{class number}?
-%       \advisespace
-%       $2^{31}-1=2\,147\,483\,647$. But \TeX's memory will exceed before you
-%       can define so many different classes.
-% \end{advise}
-%
-% One final hint: Keep the lists of identifiers disjoint. Never use a keyword
-% in an `emphasize' list or one name in two different lists. Even if your
-% source code is highlighted as expected, there is no guarantee that it is
-% still the case if you change the order of your listings or if you use the
-% next release of this package.
-%
-%
-%\iffalse
-% \subsection{*Listing alignment}\label{uListingAlignment}
-%
-% The examples are typeset with centered \texttt{minipage}s. That's the reason
-% why you can't see that line numbers are printed in the margin. Now we
-% separate the minipage margin and the minipage by a vertical rule:
-% \begin{lstsample}{\lstset{frame=l,framesep=0pt,numberstyle=\tiny,stepnumber=2,numbersep=5pt}}{}
-%    Some text before
-%    \begin{lstlisting}
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% The listing is lined up with the normal text. The parameter \ikeyname{xleftmargin}
-% moves the listing to the right (or left if the dimension is negative).
-% \begin{lstsample}{\lstset{frame=l,framesep=0pt,numberstyle=\tiny,stepnumber=2,numbersep=5pt}}{}
-%    Some text before
-%    \begin{lstlisting}[xleftmargin=15pt]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-%
-%    \begin{lstlisting}{ }
-%    Write('Insensitive');
-%    WritE('keywords.');
-%    \end{lstlisting}
-% \end{lstsample}
-% Note again that optional arguments change settings for single listings.
-%
-% If you use environments like \texttt{itemize} or \texttt{enumerate}, there
-% is `natural' indention coming from these environments. By default the
-% \packagename{listings} package respects this. But you might use
-% |resetmargins=true| (or |false|) to make your own decision. You can use it
-% together with |xleftmargin|, of course.
-% \begin{advise}
-% \item I get heavy overfull |\hbox|es from some listings.
-%       \advisespace
-%       This comes from long lines in your listings. You have some options
-%       to get rid of the overful |\hbox|es. Firstly I recommend to typeset
-%       listings in smaller fonts than the surrounding text, for example
-%       `|basicstyle=\small|'. Secondly you might want to use the flexible
-%       column format. Thirdly you can increase the line width or set it
-%       explicitly, refer section \ref{rMarginsAndLineShape}.
-%       If all this doesn't help, you might want to change
-%       `\ikeyname{basewidth}', but be careful! The two unknown items are
-%       explained in the next section.
-% \end{advise}
-%
-% You might need to control the vertical position of listings with the
-% \ikeyname{boxpos} key, for example, if you use them in \texttt{minipage} or
-% \texttt{tabular} environments. Here `listings' means \texttt{lstlisting} or
-% |\lstinputlisting|. As the following example shows, you can even place such
-% listings inside paragraphs, but you must force the package to do this by
-% enclosing the listing in |\hbox{| and |}|.
-% \begin{advise}
-% \item Is it good form to use the \TeX-primitive `|\hbox|' in a \LaTeX\
-%       document?
-%       \advisespace
-%       No, it's not. But \LaTeX's `|\mbox|' does not work in this example:
-% \end{advise}
-% \begin{lstsample}{}{}
-%    Here are some multi-line listings inside a paragraph.
-%    The `boxpos' key controls their vertical alignment:
-%    \hbox{\begin{lstlisting}[boxpos=c]
-%    center
-%    center
-%    \end{lstlisting}}
-%    \hbox{\begin{lstlisting}[boxpos=b]
-%    bottom baseline
-%    bottom baseline
-%    \end{lstlisting}}
-%    \hbox{\begin{lstlisting}[boxpos=t]
-%    top baseline
-%    top baseline
-%    \end{lstlisting}}
-% \end{lstsample}
-%\fi
-%
-%
-% \subsection{Indexing}\label{uIndexing}
-%
-% Indexing is just like emphasizing identifiers---I mean the usage:
-% \begin{lstxsample}[index]
-%    \lstset{index={square},index={[2]root}}
-% \end{lstxsample}
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    for i:=maxint to 0 do
-%    begin
-%        j:=square(root(i));
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% Of course, you can't see anything here. You will have to look at the index.
-% \begin{advise}
-% \item Why is the `\ikeyname{index}' key able to work with multiple identifier
-%       lists?
-%       \advisespace
-%       This question is strongly related to the `{\rstyle\ikeyname{indexstyle}}'
-%       key. Someone might want to create multiple indexes or want to insert
-%       prefixes like `|constants|', `|functions|', `|keywords|', and so on.
-%       The `\ikeyname{indexstyle}' key works like the other style keys except
-%       that the last token \emph{must} take an argument, namely the
-%       (printable form of the) current identifier.
-%
-%       You can define `|\newcommand\indexkeywords[1]{\index{keywords, #1}}|'
-%       and make similar definitions for constant or function names. Then
-%       `|indexstyle=[1]\indexkeywords|' might meet your purpose. This becomes
-%       easier if you want to create multiple indexes with the
-%       \href{http://www.ctan.org/tex-archive/macros/latex/contrib/camel}
-%       {\packagename{index}} package.
-%       If you have defined appropriate new indexes, it is possible to write
-%       `|indexstyle=\index[keywords]|', for example.
-%
-% \item Let's say, I want to index all keywords. It would be annoying to
-%       type in all the keywords again, specifically if the used programming
-%       language changes frequently.
-%       \advisespace
-%       Just read ahead.
-% \end{advise}
-% The \ikeyname{index} key has in fact two optional arguments. The first is the
-% well-known \meta{class number}, the second is a comma separated list of other
-% keyword classes whose identifiers are indexed. The indexed identifiers then
-% change automatically with the defined keywords---not automagically, it's not
-% an illusion.^^A :-)
-%
-% Eventually you need to know the names of the keyword classes. It's usually
-% the key name followed by a class number, for example, |emph2|, |emph3|,
-% \ldots, |keywords2| or |index5|. But there is no number for the first order
-% classes |keywords|, |emph|, |directives|, and so on.
-% \begin{advise}
-% \item `|index=[keywords]|' does not work.
-%       \advisespace
-%       The package can't guess which optional argument you mean. Hence you
-%       must specify both if you want to use the second one. You should try
-%       `|index=[1][keywords]|'.
-% \end{advise}
-%
-%
-% \subsection{Fixed and flexible columns}\label{uFixedAndFlexibleColumns}
-%
-% The first thing a reader notices---except different styles for keywords,
-% etc.---is the column alignment. Arne John Glenstrup invented the flexible
-% column format in 1997. Since then some efforts were made to develop this
-% branch farther. Currently four column formats are provided: fixed, flexible,
-% space-flexible, and full flexible. Take a close look at the following
-% examples.
-% \begin{center}
-% \lstset{style={},language={}}
-% \def\sample{\begin{lstlisting}^^J WOMEN\ \ are^^A
-%                               ^^J \ \ \ \ \ \ \ MEN^^A
-%                               ^^J WOMEN are^^A
-%                               ^^J better MEN^^J \end{lstlisting}}
-% \begin{tabular}{@{}c@{\qquad\quad}c@{\qquad\quad}c@{\qquad\quad}c@{}}
-% {\rstyle\ikeyname{columns}}|=| & \texttt{fixed} & \texttt{flexible} & \texttt{fullflexible}\\
-%          & (at {\makeatletter\lst@widthfixed})
-%          & (at {\makeatletter\lst@widthflexible})
-%          & (at {\makeatletter\lst@widthflexible})\\
-% \noalign{\medskip}
-%   \lstset{basicstyle=\ttfamily,basewidth=0.51em}\sample
-% & \lstset{columns=fixed}\sample
-% & \lstset{columns=flexible}\sample
-% & \lstset{columns=fullflexible}\sample
-% \end{tabular}
-% \end{center}
-% \begin{advise}
-% \item Why are women better men?
-%       \advisespace
-%       Do you want to philosophize? Well, have I ever said that the
-%       statement ``women are better men'' is true? I can't even remember this
-%       about ``women are men'' \ldots . ^^A ;-)
-% \end{advise}
-% In the abstract one can say: The fixed column format ruins the spacing
-% intended by the font designer, while the flexible formats ruin the column
-% alignment (possibly) intended by the programmer. Common to all is that the
-% input characters are translated into a sequence of basic output units like
-% \begingroup \lstset{gobble=6,xleftmargin=\leftmargini}
-% \makeatletter
-%^^A  Make \fbox around each output unit.
-% \fboxsep=0pt
-% \def\lst@alloverstyle#1{\fbox{\kern-\fboxrule\strut#1}\kern-\fboxrule}
-% \begin{lstlisting}[basewidth=1em]
-%     if x=y then write('align')
-%            else print('align');
-% \end{lstlisting}
-% Now, the fixed format puts $n$ characters into a box of width $n\times{}
-% $`base width', where the base width is {\makeatletter\lst@widthfixed} in the
-% example. The format shrinks and stretches the space between the characters
-% to make them fit the box. As shown in the example, some character strings look
-%    \hbox to 2em{b\hss a\hss d}
-% or
-%    \hbox to 2em{w\hss o\hss r\hss s\hss e},
-% but the output is vertically aligned.
-% \endgroup
-%
-% If you don't need or like this, you should use a flexible format. All
-% characters are typeset at their natural width. In particular, they never
-% overlap. If a word requires more space than reserved, the rest of the line
-% simply moves to the right. The difference between the three formats is that
-% the full flexible format cares about nothing else, while the normal flexible
-% and space-flexible formats try to fix the column alignment if a character
-% string needs less space than `reserved'.  The normal flexible format will
-% insert make-up space to fix the alignment at spaces, before and after
-% identifiers, and before and after sequences of other characters; the
-% space-flexible format will only insert make-up space by stretching
-% existing spaces.  In the flexible example above, the two MENs are vertically
-% aligned since some space has been inserted in the fourth line to fix the
-% alignment. In the full flexible format, the two MENs are not aligned.
-%
-% Note that both flexible modes printed the two blanks in the first line as a
-% single blank, but for different reasons: the normal flexible format fixes
-% the column alignment (as would the space-flexible format), and the full
-% flexible format doesn't care about the second space.
-%
-%
-% \section{Advanced techniques}\label{uAdvancedTechniques}
-%
-%
-% \subsection{Style definitions}
-%
-% It is obvious that a pretty-printing tool like this requires some kind of
-% language selection and definition. The first has already been described and
-% the latter is convered by the next section. However, it is very convenient
-% to have the same for printing styles: at a central place of your document
-% they can be modified easily and the changes take effect on all listings.
-%
-% Similar to languages,
-%    {\rstyle\ikeyname{style}}|=|\meta{style name}
-% activates a previously defined style. A definition is as easy:
-%    {\rstyle|\lstdefinestyle|}\marg{style name}\marg{key=value list}.
-% Keys not used in such a definition are untouched by the corresponding style
-% selection, of course. For example, you could write
-% \begin{verbatim}
-%   \lstdefinestyle{numbers}
-%       {numbers=left, stepnumber=1, numberstyle=\tiny, numbersep=10pt}
-%   \lstdefinestyle{nonumbers}
-%       {numbers=none}\end{verbatim}
-% and switch from listings with line numbers to listings without ones and vice
-% versa simply by |style=nonumbers| and |style=numbers|, respectively.
-% \begin{advise}
-% \item You could even write
-%           `|\lstdefinestyle{C++}{language=C++,style=numbers}|'.
-%       Style and language names are independent of each other and so might
-%       coincide. Moreover it is possible to activate other styles.
-%
-% \item It's easy to crash the package using styles. Write
-%       '|\lstdefinestyle{crash}{style=crash}|' and '|\lstset{style=crash}|'.
-%       \TeX's capacity will exceed, sorry [parameter stack size]. Only bad
-%       boys use such recursive calls, but only good girls use this package.
-%       Thus the problem is of minor interest.^^A :-)
-% \end{advise}
-%
-%
-% \subsection{Language definitions}\label{uLanguageDefinitions}
-%
-% These are like style definitions except for an optional dialect name and an
-% optional base language---and, of course, a different command name and
-% specialized keys. In the simple case it's
-%    {\rstyle|\lstdefinelanguage|}\marg{language name}\marg{key=value list}.
-% For many programming languages it is sufficient to specify keywords and
-% standard function names, comments, and strings. Let's look at an example.
-% \begin{lstxsample}[morekeywords,sensitive,morecomment,morestring]
-%    \lstdefinelanguage{rock}
-%      {morekeywords={one,two,three,four,five,six,seven,eight,
-%          nine,ten,eleven,twelve,o,clock,rock,around,the,tonight},
-%       sensitive=false,
-%       morecomment=[l]{//},
-%       morecomment=[s]{/*}{*/},
-%       morestring=[b]",
-%      }
-% \end{lstxsample}
-% \begingroup \csname lst@EndWriteFile\endcsname
-% \bigbreak
-%
-% \noindent
-% There isn't much to say about keywords. They are defined like identifiers
-% you want to emphasize. Additionally you need to specify whether they are
-% case sensitive or not. And yes: you could insert |[2]| in front of the
-% keyword \texttt{one} to define the keywords as `second order' and print them
-% in |keywordstyle={[2]...}|.
-% \begin{advise}
-% \item I get a `\texttt{Missing = inserted for }|\ifnum|' error when I select
-%       my language.
-%       \advisespace
-%       Did you forget the comma after `|keywords={...}|'? And if you encounter
-%       unexpected characters after selecting a language (or style), you have
-%       probably forgotten a different comma or you have given to many
-%       arguments to a key, for example, |morecomment=[l]{--}{!}|.
-% \end{advise}
-%
-% So let's turn to comments and strings. Each value starts with a
-% \emph{mandatory} \oarg{type} argument followed by a changing number of
-% opening and closing delimiters. Note that each delimiter (pair) requires a
-% key=value on its own, even if types are equal. Hence, you'll need to insert
-% \texttt{morestring=[b]'} if single quotes open and close string or character
-% literals in the same way as double quotes do in the example.
-%
-% Eventually you need to know the types and their numbers of delimiters. The
-% reference guide contains full lists, here we discuss only the most common.
-% For strings these are {\rstyle\texttt{b}} and {\rstyle\texttt{d}} with one
-% delimiter each. This delimiter opens and closes the string and inside a
-% string it is either escaped by a \texttt backslash or it is \texttt doubled.
-% The comment type {\rstyle\texttt{l}} requires exactly one delimiter, which
-% starts a comment on any column. This comment goes up to the end of line.
-% The other two most common comment types are {\rstyle\texttt{s}} and
-% {\rstyle\texttt{n}} with two delimiters each. The first delimiter opens a
-% comment which is terminated by the second delimiter. In contrast to the
-% \texttt s-type, \texttt n-type comments can be nested.
-% \begin{lstxsample}[b,d,l,s,n]
-%    \lstset{morecomment=[l]{//},
-%            morecomment=[s]{/*}{*/},
-%            morecomment=[n]{(*}{*)},
-%            morestring=[b]",
-%            morestring=[d]'}
-% \end{lstxsample}
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    "str\"ing "    not a string
-%    'str''ing '    not a string
-%    // comment line
-%    /* comment/**/ not a comment
-%    (* nested (**) still comment
-%       comment  *) not a comment
-%    \end{lstlisting}
-% \end{lstsample}
-% \begin{advise}
-% \item Is it \emph{that} easy?
-%       \advisespace
-%       Almost. There are some troubles you can run into. For example, if
-%       `\texttt{-*}' starts a comment line and `\texttt{-*-}' a string
-%       (unlikely but possible), then you must define the shorter delimiter
-%       first.
-%       Another problem: by default some characters are not allowed inside
-%       keywords, for example `\texttt{-}', `\texttt{:}', `\texttt{.}', and
-%       so on. The reference guide covers this problem by introducing some
-%       more keys, which let you adjust the standard character table
-%       appropriately. But note that white space characters are prohibited
-%       inside keywords.
-% \end{advise}
-% Finally remember that this section is only an introduction to language
-% definitions. There are more keys and possibilities.
-%
-%
-% \subsection{Delimiters}\label{uDelimiters}
-%
-% You already know two special delimiter classes: comments and strings.
-% However, their full syntax hasn't been described so far. For example,
-% \ikeyname{commentstyle} applies to all comments---unless you specify
-% something different. The \emph{optional} \oarg{style} argument follows the
-% \emph{mandatory} \oarg{type} argument.
-%\ifcolor
-% \begin{lstxsample}
-%    \lstset{morecomment=[l][keywordstyle]{//},
-%            morecomment=[s][\color{white}]{/*}{*/}}
-% \end{lstxsample}
-%\else
-% \begin{lstxsample}
-%    \lstset{morecomment=[l][keywordstyle]{//},
-%            morecomment=[s][\underbar]{/*}{*/}}
-% \end{lstxsample}
-%\fi
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    // bold comment line
-%    a single /* comment */
-%    \end{lstlisting}
-% \end{lstsample}
-% As you can see, you have the choice between specifying the style explicitly
-% by \LaTeX\ commands or implicitly by other style keys. But, you're right,
-% some implicitly defined styles have no seperate keys, for example the second
-% order keyword style. Here---and never with the number 1---you just append
-% the order to the base key: \texttt{keywordstyle2}.
-%
-% You ask for an application? Here you are: one can define different printing
-% styles for `subtypes' of a comment, for example
-%\ifcolor
-% \begin{lstxsample}
-%    \lstset{morecomment=[s][\color{blue}]{/*+}{*/},
-%            morecomment=[s][\color{red}]{/*-}{*/}}
-% \end{lstxsample}
-%\else
-% \begin{lstxsample}
-%    \lstset{morecomment=[s][\upshape]{/*+}{*/},
-%            morecomment=[s][\bfseries]{/*-}{*/}}
-% \end{lstxsample}
-%\fi
-% \begin{lstsample}{\lstset{morecomment=[s]{/*}{*/}}}{}
-%    \begin{lstlisting}
-%    /*  normal comment */
-%    /*+    keep cool   */
-%    /*-     danger!    */
-%    \end{lstlisting}
-% \end{lstsample}
-% Here, the comment style is not applied to the second and third line.
-% \begin{advise}
-% \item Please remember that both `extra' comments must be defined \emph{after}
-%       the normal comment, since the delimiter `\texttt{/*}' is a substring of
-%       `\texttt{/*+}' and `\texttt{/*-}'.
-%
-% \item I have another question. Is `\texttt{language=}\meta{different
-%       language}' the only way to remove such additional delimiters?
-%       \advisespace
-%       Call {\rstyle\ikeyname{deletecomment}} and/or
-%       {\rstyle\ikeyname{deletestring}} with the same arguments to remove
-%       the delimiters (but you don't need to provide the optional style
-%       argument).
-% \end{advise}
-% Eventually, you might want to use the prefix \texttt{i} on any comment type.
-% Then the comment is not only invisible, it is completely discarded from the
-% output!
-% \begin{lstxsample}[is]
-%    \lstset{morecomment=[is]{/*}{*/}}
-% \end{lstxsample}
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    begin /* comment */ end
-%    begin/* comment */end
-%    \end{lstlisting}
-% \end{lstsample}
-%
-% Okay, and now for the real challenges. More general delimiters can be defined
-% by the key {\rstyle\ikeyname{moredelim}}. Legal types are {\rstyle\texttt{l}}
-% and {\rstyle\texttt{s}}. These types can be preceded by an \texttt{i}, but
-% this time \emph{only the delimiters} are discarded from the output. This way
-% you can select styles by markers.
-% \begin{lstxsample}
-%    \lstset{moredelim=[is][\ttfamily]{|}{|}}
-% \end{lstxsample}
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    roman |typewriter|
-%    \end{lstlisting}
-% \end{lstsample}
-% You can even let the package detect keywords, comments, strings, and other
-% delimiters inside the contents.
-% \begin{lstxsample}
-%    \lstset{moredelim=*[s][\itshape]{/*}{*/}}
-% \end{lstxsample}
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    /* begin
-%      (* comment *)
-%       ' string ' */
-%    \end{lstlisting}
-% \end{lstsample}
-% Moreover, you can force the styles to be applied cumulatively.
-% \begin{lstxsample}
-%    \lstset{moredelim=**[is][\ttfamily]{|}{|}, % cumulative
-%            moredelim=*[s][\itshape]{/*}{*/}}  % not so
-% \end{lstxsample}
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    /* begin
-%       ' string '
-%       |typewriter| */
-%
-%    | begin
-%     ' string '
-%     /*typewriter*/ |
-%    \end{lstlisting}
-% \end{lstsample}
-% Look carefully at the output and note the differences. The second
-% \texttt{begin} is not printed in bold typewriter type since standard
-% \LaTeX\ has no such font.
-%
-% This suffices for an introduction. Now go and find some more applications.
-%
-%
-% \subsection{Closing and credits}\label{uClosingAndCredits}
-%
-% You've seen a lot of keys but you are far away from knowing all of them.
-% The next step is the real use of the \packagename{listings} package.
-% Please take the following advice. Firstly, look up the known commands and
-% keys in the reference guide to get a notion of the notation there. Secondly,
-% poke around with these keys to learn some other parameters. Then, hopefully,
-% you'll be prepared if you encounter any problems or need some special things.
-%
-% \begin{advise}
-% \item
-% There is one question `you' haven't asked all the last pages: who is to
-% blame. Carsten Heinz wrote the guides, coded the \packagename{listings}
-% package and wrote some language drivers. Brooks Moses currently maintains
-% the package.  Other people defined more languages
-% or contributed their ideas; many others made bug reports, but only the first
-% bug finder is listed.
-%^^A
-%^^A Thanks for error reports (first bug finder only), new programming
-%^^A languages, etc.
-%^^A Special thanks for communication which lead to kernel extensions, and to
-%^^A Hendri Adriaens for reviving maintenance on the package.
-%^^A
-% Special thanks go to (alphabetical order)
-% \begin{quote}
-% \hyphenpenalty=10000\relax \rightskip=0pt plus \linewidth
-%   \lstthanks{Hendri~Adriaens}{-},
-%   \lstthanks{Andreas~Bartelt}{Andreas.Bartelt@Informatik.Uni-Oldenburg.DE},
-%   \lstthanks{Jan~Braun}{Jan.Braun@tu-bs.de},
-%   \lstthanks{Denis~Girou}{Denis.Girou@idris.fr},
-%   \lstthanks{Arne~John~Glenstrup}{panic@diku.dk},
-%   \lstthanks{Frank~Mittelbach}{frank.mittelbach@latex-project.org},
-%   \lstthanks{Rolf~Niepraschk}{niepraschk@PTB.DE},
-%   \lstthanks{Rui~Oliveira}{rco@di.uminho.pt},
-%   \lstthanks{Jens~Schwarzer}{schwarzer@schwarzer.dk}, and
-%   \lstthanks{Boris~Veytsman}{boris@plmsc.psu.edu}.
-% \end{quote}
-% Moreover we wish to thank
-% \begin{quote}
-% \hyphenpenalty=10000\relax \rightskip=0pt plus \linewidth
-%   \lstthanks{Bj{\o}rn~{\AA}dlandsvik}{bjorn@imr.no},
-%   \lstthanks{Omair-Inam~Abdul-Matin}{-},
-%   \lstthanks{Gaurav~Aggarwal}{gaurav@ics.uci.edu},
-%   \lstthanks{Jason~Alexander}{jalex@ea.oac.uci.edu},
-%   \lstthanks{Andrei~Alexandrescu}{-},
-%   \lstthanks{Holger~Arndt}{-},
-%   \lstthanks{Donald~Arseneau}{ASND@erich.triumf.ca},
-%   \lstthanks{David~Aspinall}{David.Aspinall@ed.ac.uk},
-%   \lstthanks{Frank~Atanassow}{-},
-%   \lstthanks{Claus~Atzenbeck}{Claus.Atzenbeck@stud.uni-regensburg.de},
-%   \lstthanks{Michael~Bachmann}{-},
-%   \lstthanks{Luca~Balzerani}{-},
-%   \lstthanks{Peter~Bartke}{bartke@inf.fu-berlin.de} (big thankyou), ^^A beta tester
-%   \lstthanks{Heiko~Bauke}{-},
-%   \lstthanks{Oliver~Baum}{oli.baum@web.de},
-%   \lstthanks{Ralph~Becket}{rbeck@microsoft.com},
-%   \lstthanks{Andres~Becerra~Sandoval}{abecerra@univalle.edu.co},
-%   \lstthanks{Kai~Below}{below@tu-harburg.de},
-%   \lstthanks{Matthias~Bethke}{-},
-%   \lstthanks{Javier~Bezos}{javier.bezos@bancoval.es},
-%   \lstthanks{Olaf~Trygve~Berglihn}{olafb@pvv.org}, ^^A {1999/11/29}{3-char comment delimiter don't work (Python)}
-%   \lstthanks{Geraint~Paul~Bevan}{geraint@users.sf.net},
-%   \lstthanks{Peter~Biechele}{peter.biechele@physik.uni-freiburg.de},
-%   \lstthanks{Beat~Birkhofer}{beat@birkhofer.ch},
-%   \lstthanks{Fr\'ed\'eric~Boulanger}{Frederic.Boulanger@supelec.fr},
-%   \lstthanks{Joachim~Breitner}{-},
-%   \lstthanks{Martin~Brodbeck}{Martin.Brodbeck@gmx.de},
-%   \lstthanks{Walter~E.~Brown}{WB@fnal.gov},
-%   \lstthanks{Achim~D.~Brucker}{brucker@informatik.uni-freiburg.de},
-%   \lstthanks{J\'an Bu\v{s}a}{-},
-%   \lstthanks{Thomas~ten~Cate}{-},
-%   \lstthanks{David~Carlisle}{davidc@nag.co.uk},
-%   \lstthanks{Bradford~Chamberlain}{brad@cs.washington.edu},
-%   \lstthanks{Brian~Christensen}{-},
-%   \lstthanks{Neil~Conway}{-},
-%   \lstthanks{Patrick~Cousot}{Patrick.Cousot@wanadoo.fr},
-%   \lstthanks{Xavier~Cr\'egut}{cregut@enseeiht.fr},
-%   \lstthanks{Christopher~Creutzig}{-},
-%   \lstthanks{Holger~Danielsson}{dani@fbg.schwerte.de},
-%   \lstthanks{Andreas~Deininger}{deininger@uni-kassel.de},
-%   \lstthanks{Robert~Denham}{Robert.Denham@dnr.qld.gov.au},
-%   \lstthanks{Detlev~Dr\"oge}{droege@informatik.uni-koblenz.de},
-%   \lstthanks{Anders~Edenbrandt}{Anders.Edenbrandt@dna.lth.se},
-%   \lstthanks{Mark~van~Eijk}{mark@luon.net},
-%   \lstthanks{Norbert~Eisinger}{Norbert.Eisinger@informatik.uni-muenchen.de},
-%   \lstthanks{Brian~Elmegaard}{-},
-%   \lstthanks{Jon~Ericson}{Jon.Ericson@jpl.nasa.gov},
-%   \lstthanks{Thomas~Esser}{te@dbs.uni-hannover.de},
-%   \lstthanks{Chris~Edwards}{edwch00p@infoscience.otago.ac.nz},
-%   \lstthanks{David~John~Evans}{Matrix.Software@dial.pipex.com},
-%   \lstthanks{Tanguy~Fautr\'e}{tfautre@pandora.be},
-%   \lstthanks{Ulrike~Fischer}{-},
-%   \lstthanks{Robert~Frank}{rf7@ukc.ac.uk},
-%   \lstthanks{Michael~Franke}{-},
-%   \lstthanks{Ignacio~Fern\'andez~Galv\'an}{-},
-%   \lstthanks{Martine~Gautier}{-}
-%   \lstthanks{Daniel~Gazard}{gazard_d@epita.fr},
-%   \lstthanks{Daniel~Gerigk}{Daniel.Gerigk@ePost.de},
-%   \lstthanks{Dr.~Christoph~Giess}{-},
-%   \lstthanks{KP~Gores}{kp.gores@web.de},
-%   \lstthanks{Adam~Grabowski}{adam@mizar.org},
-%   \lstthanks{Jean-Philippe~Grivet}{grivet@cnrs-orleans.fr},
-%   \lstthanks{Christian~Gudrian}{Christian.Gudrian@kawo1.rwth-aachen.de},
-%   \lstthanks{Jonathan~de~Halleux}{dehalleux@auto.ucl.ac.be},
-%   \lstthanks{Carsten~Hamm}{carsten.hamm@siemens.com},
-%   \lstthanks{Martina~Hansel}{Martina.Hansel@fhtw-berlin.de},
-%   \lstthanks{Harald~Harders}{h.harders@tu-bs.de},
-%   \lstthanks{Christian~Haul}{haul@dvs1.informatik.tu-darmstadt.de},
-%   \lstthanks{Aidan~Philip~Heerdegen}{Aidan.Heerdegen@anu.edu.au},
-%   \lstthanks{Jim~Hefferon}{Hefferon9@aol.com},
-%   \lstthanks{Heiko~Heil}{info@heiko-heil.de},
-%   \lstthanks{J\"urgen~Heim}{heim@astro.uni-tuebingen.de},
-%   \lstthanks{Martin~Heller}{-},
-%   \lstthanks{Stephan~Hennig}{-},
-%   \lstthanks{Alvaro~Herrera}{alvherre@dcc.uchile.cl},
-%   \lstthanks{Richard~Hoefter}{hoefter@gmx.de},
-%   \lstthanks{Dr.~Jobst~Hoffmann}{HOFFMANN@rz.rwth-aachen.de},
-%   \lstthanks{Torben~Hoffmann}{toho@it.dtu.dk},
-%   \lstthanks{Morten~H\o gholm}{-},
-%   \lstthanks{Berthold~H\"ollmann}{bhoel@starship.python.net},
-%   \lstthanks{G\'erard~Huet}{-},
-%   \lstthanks{Hermann~H\"uttler}{hermann.huettler@gmx.net},
-%   \lstthanks{Ralf~Imh\"auser}{snoopy@tribal.line.org},
-%   \lstthanks{R.~Isernhagen}{R.Isernhagen@FH-Wolfenbuettel.DE},
-%   \lstthanks{Oldrich~Jedlicka}{ojedlick@students.zcu.cz},
-%   \lstthanks{Dirk~Jesko}{jesko@iti.cs.uni-magdeburg.de},
-%   \lstthanks{Lo\"\i c~Joly}{-},
-%   \lstthanks{Christian~Kaiser}{chk@combit.net},
-%   \lstthanks{Bekir~Karaoglu}{karabekirus@yahoo.com},
-%   \lstthanks{Marcin~Kasperski}{Marcin.Kasperski@softax.com.pl},
-%   \lstthanks{Christian~Kindinger}{chkind@uni-wuppertal.de},
-%   \lstthanks{Steffen~Klupsch}{steffen@vlsi.informatik.tu-darmstadt.de},
-%   \lstthanks{Markus~Kohm}{-},
-%   \lstthanks{Peter~K\"oller}{pkoeller@metaprojekt.de} (big thankyou), ^^A beta tester
-%   \lstthanks{Reinhard~Kotucha}{Reinhard.Kotucha@web.de},
-%   \lstthanks{Stefan~Lagotzki}{info@lagotzki.de},
-%   \lstthanks{Tino~Langer}{langer@tournex.de},
-%   \lstthanks{Rene~H.~Larsen}{rhl@traceroute.dk},
-%   \lstthanks{Olivier~Lecarme}{ol@i3s.unice.fr},
-%   \lstthanks{Thomas~Leduc}{Thomas.Leduc@lsv.ens-cachan.fr},
-%   \lstthanks{Dr.~Peter~Leibner}{Peter.Leibner@sta.siemens.de},
-%   \lstthanks{Thomas~Leonhardt}{leonhardt@informatik.tu-darmstadt.de} (big thankyou), ^^A beta tester
-%   \lstthanks{Magnus~Lewis-Smith}{Magnus.Lewis-Smith@pace.co.uk},
-%   \lstthanks{Knut~Lickert}{knut.lickert@gmx.de},
-%   \lstthanks{Benjamin~Lings}{-},
-%   \lstthanks{Dan~Luecking}{luecking@uark.edu},
-%   \lstthanks{Peter~L\"offler}{-},
-%   \lstthanks{Markus~Luisser}{-},
-%   \lstthanks{Kris~Luyten}{no email available},
-%   \lstthanks{Jos\'e~Romildo~Malaquias}{romildo@urano.iceb.ufop.br},
-%   \lstthanks{Andreas~Matthias}{amat@kabsi.at},
-%   \lstthanks{Patrick~TJ~McPhee}{ptjm@interlog.com},
-%   ^^A \lstthanks{Brooks~Moses}{-},
-%   \lstthanks{Riccardo~Murri}{riccardo.murri@gmx.it},
-%   \lstthanks{Knut~M\"uller}{knut@physik3.gwdg.de},
-%   \lstthanks{Svend~Tollak~Munkejord}{svendm@efisms.energy.sintef.no},
-%   \lstthanks{Gerd~Neugebauer}{gerd.neugebauer@gmx.de},
-%   \lstthanks{Torsten~Neuer}{tneuer@inwise.de},
-%   \lstthanks{Enzo~Nicosia}{-},
-%   \lstthanks{Michael~Niedermair}{m.g.n@gmx.de},
-%   \lstthanks{Xavier~Noria}{fxn@hashref.com},
-%   \lstthanks{Heiko~Oberdiek}{oberdiek@ruf.uni-freiburg.de},
-%   \lstthanks{Xavier~Olive}{-},
-%   \lstthanks{Alessio~Pace}{-},
-%   \lstthanks{Markus~Pahlow}{pahlowm@mar.dfo-mpo.gc.ca},
-%   \lstthanks{Morten~H.~Pedersen}{mhp@dadlnet.dk},
-%   \lstthanks{Xiaobo~Peng}{-},
-%   \lstthanks{Zvezdan~V.~Petkovic}{zpetkovic@acm.org},
-%   \lstthanks{Michael~Piefel}{piefel@informatik.hu-berlin.de},
-%   \lstthanks{Michael~Piotrowski}{mxp@linguistik.uni-erlangen.de},
-%   \lstthanks{Manfred~Piringer}{sz0490@rrze.uni-erlangen.de},
-%   \lstthanks{Vincent~Poirriez}{Vincent.Poirriez@univ-valenciennes.fr},
-%   \lstthanks{Adam~Prugel-Bennett}{apb@ecs.soton.ac.uk},
-%   \lstthanks{Ralf~Quast}{rquast@hs.uni-hamburg.de},
-%   \lstthanks{Aslak~Raanes}{araanes@ifi.ntnu.no},
-%   \lstthanks{Venkatesh~Prasad~Ranganath}{vranganath@cox.net},
-%   \lstthanks{Tobias~Rapp}{-},
-%   \lstthanks{Jeffrey~Ratcliffe}{-},
-%   \lstthanks{Georg~Rehm}{Georg.Rehm@germanistik.uni-giessen.de},
-%   \lstthanks{Fermin~Reig}{reig@ics.uci.edu},
-%   \lstthanks{Detlef~Reimers}{dreimers@aol.com},
-%   \lstthanks{Stephen~Reindl}{stephen.reindl@vodafone.com},
-%   \lstthanks{Franz~Rinnerthaler}{-},
-%   \lstthanks{Peter~Ruckdeschel}{Peter.Ruckdeschel@uni-bayreuth.de},
-%   \lstthanks{Magne~Rudshaug}{magne@ife.no},
-%   \lstthanks{Jonathan~Sauer}{jonathan.sauer@gmx.de},
-%   \lstthanks{Vespe~Savikko}{vespe@cs.tut.fi},
-%   \lstthanks{Mark~Schade}{-},
-%   \lstthanks{Gunther~Schmidl}{gschmidl@gmx.at},
-%   \lstthanks{Andreas~Schmidt}{-},
-%   \lstthanks{Walter~Schmidt}{wschmi@arcor.de},
-%   \lstthanks{Christian~Schneider}{-},
-%   \lstthanks{Jochen~Schneider}{jschneider@ds3.etech.haw-hamburg.de},
-%   \lstthanks{Benjamin~Schubert}{benjamin.schubert@berlin.de},
-%   \lstthanks{Sebastian~Schubert}{-},
-%   \lstthanks{Uwe~Siart}{uwe.siart@ei.tum.de},
-%   \lstthanks{Axel~Sommerfeldt}{axel@sommerfeldt.net},
-%   \lstthanks{Richard~Stallman}{-},
-%   \lstthanks{Nigel~Stanger}{nstanger@infoscience.otago.ac.nz},
-%   \lstthanks{Martin~Steffen}{ms@informatik.uni-kiel.de},
-%   \lstthanks{Andreas~Stephan}{Andreas.Stephan@victoria.de},
-%   \lstthanks{Stefan~Stoll}{stoll@phys.chem.ethz.ch},
-%   \lstthanks{Enrico~Straube}{no email available},
-%   \lstthanks{Werner~Struckmann}{struck@ips.cs.tu-bs.de},
-%   \lstthanks{Martin~S\"u\ss kraut}{Edon.Myder@web.de},
-%   \lstthanks{Gabriel~Tauro}{gabriel@informatik.uni-jena.de},
-%   \lstthanks{Winfried~Theis}{theis@statistik.uni-dortmund.de},
-%   \lstthanks{Jens~T.~Berger~Thielemann}{jensthi@ifi.uio.no},
-%   \lstthanks{William~Thimbleby}{-},
-%   \lstthanks{Arnaud~Tisserand}{arnaud.tisserand@ens-lyon.fr},
-%   \lstthanks{Jens~Troeger}{-},
-%   \lstthanks{Kalle~Tuulos}{kalle.tuulos@nic.fi},
-%   \lstthanks{Gregory~Van~Vooren}{Gregory.VanVooren@rug.ac.be},
-%   \lstthanks{Timothy~Van~Zandt}{tvz@econ.insead.edu},
-%   \lstthanks{J\"org~Viermann}{-},
-%   \lstthanks{Thorsten~Vitt}{vitt@informatik.hu-berlin.de},
-%   \lstthanks{Herbert~Voss}{voss@perce.de} (big thankyou), ^^A beta tester
-%   \lstthanks{Edsko~de~Vries}{devriese@tcd.ie},
-%   \lstthanks{Herfried~Karl~Wagner}{hirf@gmx.at},
-%   \lstthanks{Dominique~de~Waleffe}{ddw@miscrit.be},
-%   \lstthanks{Bernhard~Walle}{-},
-%   \lstthanks{Jared~Warren}{warren@cs.queensu.ca},
-%   \lstthanks{Michael~Weber}{mweber@informatik.hu-berlin.de},
-%   \lstthanks{Sonja~Weidmann}{Sonja.Weidmann@gmx.de},
-%   \lstthanks{Andreas~Weidner}{-},
-%   \lstthanks{Herbert~Weinhandl}{weinhand@grz08u.unileoben.ac.at},
-%   \lstthanks{Robert~Wenner}{robert.wenner@gmx.de},
-%   \lstthanks{Michael~Wiese}{wiese@itwm.uni-kl.de},
-%   \lstthanks{James~Willans}{-},
-%   \lstthanks{J\"orn~Wilms}{wilms@rocinante.colorado.edu},
-%   \lstthanks{Kai~Wollenweber}{kai@ece.WPI.EDU},
-%   \lstthanks{Ulrich~G.~Wortmann}{uliw@erdw.ethz.ch},
-%   \lstthanks{Cameron~H.G.~Wright}{-},
-%   \lstthanks{Andrew~Zabolotny}{-}, and
-%   \lstthanks{Florian~Z\"ahringer}{-}.
-% \end{quote}
-% There are probably other people who contributed to this package.
-% If I've missed your name, send an email.
-% \end{advise}
-%
-%
-% \part{Reference guide}
-%
-%
-% \section{Main reference}\label{rMainReference}
-%
-% Your first training is completed. Now that you've left the User's guide, the
-% friend telling you what to do has gone. Get more practice and become a
-% journeyman!^^A :-)
-% \begin{advise}
-% \item Actually, the friend hasn't gone. There are still some advices, but
-%       only from time to time.
-% \end{advise}
-%
-%
-% \subsection{How to read the reference}
-%
-% Commands, keys and environments are presented as follows.
-% \begin{syntax}
-% \item[1.0,default,hints] \texttt{command}, \texttt{environment} or
-%       \keyname{key} with \meta{parameters}
-%
-%       This field contains the explanation; here we describe the other fields.
-%
-%       If present, the label in the left margin provides extra information:
-%       `\textit{addon}' indicates additionally introduced functionality,
-%       `\textit{changed}' a modified key, `\textit{data}' a command just
-%       containing data (which is therefore adjustable via |\renewcommand|),
-%       and so on. Some keys and functionality are `\emph{bug}'-marked or
-%       with a \dag-sign. These features might change in future or could be
-%       removed, so use them with care.
-%
-%       If there is verbatim text touching the right margin, it is the
-%       predefined value. Note that some keys default to this value every
-%       listing, namely the keys which can be used on individual listings only.
-% \end{syntax}
-% Regarding the parameters, please keep in mind the following:
-% \begin{enumerate}
-% \item A list always means a comma separated list. You must put braces around
-%       such a list. Otherwise you'll get in trouble with the
-%       \packagename{keyval} package; it complains about an undefined key.
-% \item You must put parameter braces around the whole value of a key if you
-%       use an \oarg{optional argument} of a key inside an optional
-%       \oarg{key=value list}:
-%       |\begin{lstlisting}[caption=|{\rstyle|{|}|[one]two|{\rstyle|}|}|]|.
-% \item Brackets `|[ ]|' usually enclose optional arguments and must be typed
-%       in verbatim. Normal brackets `[ ]' always indicate an optional argument
-%       and must not be typed in. Thus |[*]| must be typed in exactly as is,
-%       but [|*|] just gets |*| if you use this argument.
-% \item A vertical rule indicates an alternative, e.g.~^^A
-%       \meta{\alternative{true,false}} allows either \texttt{true} or
-%       \texttt{false} as arguments.
-% \item If you want to enter one of the special characters |{}#%\|, this
-%       character must be escaped with a backslash. This means that you must
-%       write |\}| for the single character `right brace'---but of course not
-%       for the closing paramater character.
-% \end{enumerate}
-%
-%
-% \subsection{Typesetting listings}\label{rTypesettingListings}
-%
-% \begin{syntax}
-% \item[0.19] \rcmdname\lstset\marg{key=value list}
-%
-%       sets the values of the specified keys, see also section
-%       \ref{uTheKey=ValueInterface}.
-%       The parameters keep their values up to the end of the current group.
-%       In contrast, all optional \meta{key=value list}s below modify the
-%       parameters for single listings only.
-%
-% \item[0.18] \rcmdname\lstinline\oarg{key=value list}\meta{character}\meta{source code}\meta{same character}
-%
-%       works like |\verb| but respects the active language and style. These
-%       listings use flexible columns unless requested differently in the
-%       optional argument, and do not support frames or background colors.
-%       You can write `|\lstinline!var i:integer;!|' and get
-%       `\lstinline!var i:integer;!'.
-%
-%       Since the command first looks ahead for an optional argument, you must
-%       provide at least an empty one if you want to use |[| as
-%       \meta{character}.
-%
-%       \dag\ An experimental implementation has been done to support the
-%       syntax |\lstinline|\oarg{key=value list}\marg{source code}. Try it if
-%       you want and report success and failure. A known limitation is that
-%       inside another argument the last source code token must not be an
-%       explicit space token---and, of course, using a listing inside another
-%       argument is itself experimental, see section
-%       \ref{rListingsInsideArguments}.
-%
-%       Another limitation is that this feature can't be used in cells of a
-%       |tabular|-environment. See \section{uListingsArguments} for a
-%       workaround.
-%
-%       See also section \ref{rShortInline} for commands to create short analogs
-%       for the |\lstinline| command.
-%
-% \item[0.15] |\begin{|\texttt{\rstyle lstlisting}|}|\oarg{key=value list}
-%
-%       \leavevmode\hspace*{-\leftmargini}|\end{|\texttt{\rstyle lstlisting}|}|
-%
-%       typesets the code in between as a displayed listing.
-%
-%       In contrast to the environment of the \packagename{verbatim} package,
-%       \LaTeX\ code on the same line and after the end of environment is
-%       typeset respectively executed.
-%
-% \item[0.1] \rcmdname\lstinputlisting\oarg{key=value list}\marg{file name}
-%
-%       typesets the stand alone source code file as a displayed listing.
-% \end{syntax}
-%
-%
-% \subsection{Space and placement}
-%
-% \begin{syntax}
-% \item[0.20,floatplacement] \rkeyname{float}|=|[|*|]\meta{subset of \textup{\texttt{tbph}}}\syntaxor\rkeyname{float}
-%
-%       makes sense on individual displayed listings only and lets them float.
-%       The argument controls where \LaTeX\ is \emph{allowed} to put the float:
-%       at the top or bottom of the current/next page, on a separate page, or
-%       here where the listing is.
-%
-%       The optional star can be used to get a double-column float in a
-%       two-column document.
-%
-% \item[0.21,tbp] \rkeyname{floatplacement}|=|\meta{place specifiers}
-%
-%       is used as place specifier if \keyname{float} is used without value.
-%
-% \item[0.21,\medskipamount] \rkeyname{aboveskip}|=|\meta{dimension}
-% \item[0.21,\medskipamount] \rkeyname{belowskip}|=|\meta{dimension}
-%
-%       define the space above and below displayed listings.
-%
-% \item[0.17,0pt,\dag] \rkeyname{lineskip}|=|\meta{dimension}
-%
-%       specifies additional space between lines in listings.
-%
-% \item[0.18,c,\dag] \rkeyname{boxpos}|=|\meta{\alternative{b,c,t}}
-%
-%       Sometimes the \packagename{listings} package puts a |\hbox| around a
-%       listing---or it couldn't be printed or even processed correctly.
-%       The key determines the vertical alignment to the surrounding material:
-%       bottom baseline, centered or top baseline.
-% \end{syntax}
-%
-%
-% \subsection{The printed range}
-%
-% \begin{syntax}
-% \item[0.12,true] \rkeyname{print}|=|\meta{\alternative{true,false}}\syntaxor\rkeyname{print}
-%
-%       controls whether an individual displayed listing is typeset. Even if
-%       set false, the respective caption is printed and the label is defined.
-%
-%       Note: If the package is loaded without the \texttt{draft} option, you
-%       can use this key together with |\lstset|. In the other case the key
-%       can be used to typeset particular listings despite using the
-%       \texttt{draft} option.
-%
-% \item[0.1,1] \rkeyname{firstline}|=|\meta{number}
-% \item[0.1,9999999] \rkeyname{lastline}|=|\meta{number}
-%
-%       can be used on individual listings only. They determine the physical
-%       input lines used to print displayed listings.
-%
-% \item[1.2] \rkeyname{linerange}|={|\meta{first1}\texttt-\meta{last1}\texttt,\meta{first2}\texttt-\meta{last2}\texttt, and so on|}|\label{uoption:linerange}
-%
-%       can be used on individual listings only. The given line ranges
-%       of the listing are displayed. The intervals must be sorted and must
-%       not intersect.
-%
-% \item[0.20,false] \rkeyname{showlines}|=|\meta{\alternative{true,false}}\syntaxor\rkeyname{showlines}
-%
-%       If true, the package prints empty lines at the end of listings.
-%       Otherwise these lines are dropped (but they count for line numbering).
-%
-% \item[1.0] \rkeyname{emptylines}|=|[|*|]\meta{number}
-%
-%       sets the maximum of empty lines allowed. If there is a block of more
-%       than \meta{number} empty lines, only \meta{number} ones are printed.
-%       Without the optional star, line numbers can be disturbed when blank
-%       lines are omitted; with the star, the lines keep their original
-%       numbers.
-%
-% \item[0.19,0] \rkeyname{gobble}|=|\meta{number}
-%
-%       gobbles \meta{number} characters at the beginning of each
-%       \emph{environment} code line. This key has no effect on \cs{lstinline}
-%       or \cs{lstinputlisting}.
-%
-%       Tabulators expand to \ikeyname{tabsize} spaces before they are gobbled.
-%       Code lines with fewer than \ikeyname{gobble} characters are considered
-%       empty.  Never indent the end of environment by more characters.
-% \end{syntax}
-%
-%
-% \subsection{Languages and styles}\label{rLanguagesAndStyles}
-%
-% Please note that the arguments \meta{language}, \meta{dialect}, and
-% \meta{style name} are case insensitive and that spaces have no effect.
-% \begin{syntax}
-% \item[0.18,{{}}] \rkeyname{style}|=|\meta{style name}
-%
-%       activates the key=value list stored with |\lstdefinestyle|.
-%
-% \item[0.19] \rcmdname\lstdefinestyle\marg{style name}\marg{key=value list}
-%
-%       stores the key=value list.
-%
-% \item[0.17,{{}}] \rkeyname{language}|=|\oarg{dialect}\meta{language}
-%
-%       activates a (dialect of a) programming language. The `empty' default
-%       language detects no keywords, no comments, no strings, and so on; it
-%       may be useful for typesetting plain text.
-%       If \meta{dialect} is not specified, the package chooses the default
-%       dialect, or the empty dialect if there is no default dialect.
-%
-%       Table \ref{uPredefinedLanguages} on page \pageref{uPredefinedLanguages}
-%       lists all languages and dialects provided by \texttt{lstdrvrs.dtx}.
-%       The predefined default dialects are underlined.
-%
-% \item[0.21] \rkeyname{alsolanguage}|=|\oarg{dialect}\meta{language}
-%
-%       activates a (dialect of a) programming language in addition to the
-%       current active one. Note that some language definitions interfere with
-%       each other and are plainly incompatible; for instance, if one is case
-%       sensitive and the other is not.
-%
-%       Take a look at the \ikeyname{classoffset} key in section
-%       \ref{rFigureOutTheAppearance} if you want to highlight the keywords
-%       of the languages differently.
-%
-% \item[0.19] \rkeyname{defaultdialect}|=|\oarg{dialect}\meta{language}
-%
-%       defines \meta{dialect} as default dialect for \meta{language}.
-%       If you have defined a default dialect other than empty, for example
-%       |defaultdialect=[iama]fool|, you can't select the empty dialect, even
-%       not with |language=[]fool|.
-% \end{syntax}
-%
-% Finally, here's a small list of language-specific keys.
-% \begin{syntax}
-% \item[0.19,false,optional] \rkeyname{printpod}|=|\meta{\alternative{true,false}}
-%
-%       prints or drops PODs in Perl.
-%
-% \item[0.20,true,{renamed,optional}] \rkeyname{usekeywordsintag}|=|\meta{\alternative{true,false}}\label{uoption:usekeywordsintag}
-%
-%       The package either use the first order keywords in tags or prints all
-%       identifiers inside |<>| in keyword style.
-%
-% \item[1.1,{{}},optional] \rkeyname{tagstyle}|=|\meta{style}\label{uoption:tagstyle}
-%
-%       determines the style in which tags and their content is printed.
-%
-% \item[1.1,false,optional] \rkeyname{markfirstintag}|=|\meta{style}\label{uoption:markfirstintag}
-%
-%       prints the first name in tags with keyword style.
-%
-% \item[0.20,true,optional] \rkeyname{makemacrouse}|=|\meta{\alternative{true,false}}
-%
-%       Make specific: Macro use of identifiers, which are defined as first
-%       order keywords, also prints the surrounding |$(| and |)| in keyword
-%       style. e.g.~you could get
-%           \textbf{\textdollar(}\textbf{strip} \textdollar(BIBS)\textbf{)}.
-%       If deactivated you get
-%           \textdollar(\textbf{strip} \textdollar(BIBS)).
-% \end{syntax}
-%
-%
-% \subsection{Figure out the appearance}\label{rFigureOutTheAppearance}
-%
-% \begin{syntax}
-% \item[0.18,{{}}] \rkeyname{basicstyle}|=|\meta{basic style}
-%
-%       is selected at the beginning of each listing. You could use
-%       |\footnotesize|, |\small|, |\itshape|, |\ttfamily|, or something like
-%       that. The last token of \meta{basic style} must not read any following
-%       characters.
-%
-% \item[0.18,{{}}] \rkeyname{identifierstyle}|=|\meta{style}
-% \item[0.11,\itshape] \rkeyname{commentstyle}|=|\meta{style}
-% \item[0.12,{{}}] \rkeyname{stringstyle}|=|\meta{style}
-%
-%       determines the style for non-keywords, comments, and strings. The
-%       \emph{last} token can be an one-parameter command like |\textbf| or
-%       |\underbar|.
-%
-% \item[0.11,\bfseries,addon] \rkeyname{keywordstyle}|=|\oarg{number}[\textasteriskcentered]\meta{style}\label{roption:keywordstyle}
-%
-%       is used to print keywords.  The optional \meta{number} argument is the
-%       class number to which the style should be applied.
-%
-%       Add-on: If you use the optional star after the (optional) class number, the
-%       keywords are printed uppercase\,---\,even if a language is case
-%       sensitive and defines lowercase keywords only. Maybe there should also be an
-%       option for lowercase keywords \ldots
-%
-% \item[0.19,keywordstyle,deprecated] \rkeyname{ndkeywordstyle}|=|\meta{style}
-%
-%       is equivalent to |keywordstyle=2|\meta{style}.
-%
-% \item[1.0,0] \rkeyname{classoffset}|=|\meta{number}
-%
-%       is added to all class numbers before the styles, keywords, identifiers,
-%       etc.~are assigned. The example below defines the keywords directly;
-%       you could do it indirectly by selecting two different languages.
-% \end{syntax}
-%\ifcolor
-% \begin{lstxsample}
-%    \lstset{classoffset=0,
-%            morekeywords={one,three,five},keywordstyle=\color{red},
-%            classoffset=1,
-%            morekeywords={two,four,six},keywordstyle=\color{blue},
-%            classoffset=0}% restore default
-% \end{lstxsample}
-%\else
-% \begin{lstxsample}
-%    \lstset{classoffset=0,
-%            morekeywords={one,three,five},keywordstyle=\itshape,
-%            classoffset=1,
-%            morekeywords={two,four,six},keywordstyle=\bfseries},
-%            classoffset=0}% restore default
-% \end{lstxsample}
-%\fi
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}
-%    one two three
-%    four five six
-%    \end{lstlisting}
-% \end{lstsample}
-%
-% \begin{syntax}
-% \item[0.20,keywordstyle,{addon,bug,optional}] \rkeyname{texcsstyle}|=|[|*|]\oarg{class number}\meta{style}\label{roption:texcsstyle}
-% \item[0.20,keywordstyle,optional] \rkeyname{directivestyle}|=|\meta{style}
-%
-%       determine the style of \TeX\ control sequences and directives.
-%       Note that these keys are present only if you've chosen an appropriate
-%       language.
-%
-%       The optional star of |texcsstyle| also highlights the backslash in
-%       front of the control sequence name. Note that this option is set for
-%       all |texcs| lists.
-%
-%       Bug: \texttt{texcs\ldots} interferes with other keyword lists. If, for
-%       example, \texttt{emph} contains the word \texttt{foo}, then the control
-%       sequence |\foo| will show up in \texttt{emphstyle}.
-%
-% \item[0.21] \rkeyname{emph}|=|\oarg{number}\marg{identifier list}
-% \item[0.21] \rkeyname{moreemph}|=|\oarg{number}\marg{identifier list}
-% \item[0.21] \rkeyname{deleteemph}|=|\oarg{number}\marg{identifier list}
-% \item[0.21] \rkeyname{emphstyle}|=|\oarg{number}\marg{style}
-%
-%       respectively define, add or remove the \meta{identifier list} from
-%       `emphasize class \meta{number}', or define the style for that class.
-%       If you don't give an optional argument, the package assumes
-%       \meta{number}$\,=1$.
-%
-%       These keys are described more detailed in section
-%       \ref{uEmphasizeIdentifiers}.
-%
-% \item[1.0] \rkeyname{delim}|=|[\texttt*[\texttt*]]\texttt[\meta{type}\texttt][\texttt[\meta{style}\texttt]]\meta{delimiter\textup(s\textup)}
-% \item[1.0] \rkeyname{moredelim}|=|[\texttt*[\texttt*]]\texttt[\meta{type}\texttt][\texttt[\meta{style}\texttt]]\meta{delimiter\textup(s\textup)}
-% \item[1.0] \rkeyname{deletedelim}|=|[\texttt*[\texttt*]]\texttt[\meta{type}\texttt]\meta{delimiter\textup(s\textup)}
-%
-%       define, add, or remove user supplied delimiters.  (Note that this does
-%       not affect strings or comments.)
-%
-%       In the first two cases \meta{style} is used to print the delimited
-%       code (and the delimiters). Here, \meta{style} could be something like
-%       |\bfseries| or |\itshape|, or it could refer to other styles via
-%       \texttt{keywordstyle}, \texttt{keywordstyle2}, \texttt{emphstyle},
-%       etc.
-%
-%       Supported types are \texttt{l} and \texttt{s}, see the comment keys in
-%       section \ref{uLanguageDefinitions} for an explanation. If you use the
-%       prefix \texttt i, i.e.~\texttt{il} or \texttt{is}, the delimiters are
-%       not printed, which is some kind of invisibility.
-%
-%       If you use one optional star, the package will detect keywords,
-%       comments, and strings inside the delimited code. With both optional
-%       stars, aditionally the style is applied cumulatively; see section
-%       \ref{uDelimiters}.
-% \end{syntax}
-%
-%
-% \subsection{Getting all characters right}
-%
-% \begin{syntax}
-% \item[0.18,true] \rkeyname{extendedchars}|=|\meta{\alternative{true,false}}\syntaxor\rkeyname{extendedchars}
-%
-%       allows or prohibits extended characters in listings, that means
-%       (national) characters of codes 128--255. If you use extended
-%       characters, you should load \packagename{fontenc} and/or
-%       \packagename{inputenc}, for example.
-%
-% \item[1.0,{{}}] \rkeyname{inputencoding}|=|\meta{encoding}
-%
-%       determines the input encoding. The usage of this key requires the
-%       \packagename{inputenc} package; nothing happens if it's not loaded.
-%
-% \item[1.1,false] \rkeyname{upquote}|=|\meta{\alternative{true,false}}\label{uoption:upquote}
-%
-%       determines whether the left and right quote are printed |`'| or
-%       \texttt{\textasciigrave\textquotesingle}.
-%       This key requires the \packagename{textcomp} package if true.
-%
-% \item[0.12,8] \rkeyname{tabsize}|=|\meta{number}
-%
-%       sets tabulator stops at columns $\meta{number}+1$, $2\cdot\meta{number}+1$, $3\cdot\meta{number}+1$, and so on.
-%       Each tabulator in a listing moves the current column to the next
-%       tabulator stop.
-%
-% \item[0.20,false] \rkeyname{showtabs}|=|\meta{\alternative{true,false}}
-%
-%       make tabulators visible or invisible. A visible tabulator looks like
-%       \lstinline[showtabs]!	!, but that can be changed. If you choose
-%       invisible tabulators but visible spaces, tabulators are converted to
-%       an appropriate number of spaces.
-%
-% \item[0.20] \rkeyname{tab}|=|\meta{tokens}
-%
-%       \meta{tokens} is used to print a visible tabulator. You might want to use |$\to$|, |$\mapsto$|, |$\dashv$| or something like that instead of the strange default definition.
-%
-% \item[0.20,false] \rkeyname{showspaces}|=|\meta{\alternative{true,false}}
-%
-%       lets all blank spaces appear {\textvisiblespace} or as blank spaces.
-%
-% \item[0.12,true] \rkeyname{showstringspaces}|=|\meta{\alternative{true,false}}
-%
-%       lets blank spaces in strings appear {\textvisiblespace} or as blank
-%       spaces.
-%
-% \item[0.19,\bigbreak] \rkeyname{formfeed}|=|\meta{tokens}
-%
-%       Whenever a listing contains a form feed, \meta{tokens} is executed.
-% \end{syntax}
-%
-%
-% \subsection{Line numbers}\label{rLineNumbers}
-%
-% \begin{syntax}
-% \item[1.0,none] \rkeyname{numbers}|=|\meta{\alternative{none,left,right}}
-%
-%       makes the package either print no line numbers, or put them on the
-%       left or the right side of a listing.
-%
-% \item[0.16,1] \rkeyname{stepnumber}|=|\meta{number}
-%
-%       All lines with ``line number $\equiv 0$ modulo \meta{number}'' get a
-%       line number.
-%       If you turn line numbers on and off with \keyname{numbers}, the
-%       parameter \keyname{stepnumber} will keep its value. Alternatively you
-%       can turn them off via |stepnumber=0| and on with a nonzero number, and
-%       keep the value of \keyname{numbers}.
-%
-% \item[1.1,false] \rkeyname{numberfirstline}|=|\meta{\alternative{true,false}}\label{uoption:numberfirstline}
-%
-%       The first line of each listing gets numbered (if numbers are on at all)
-%       even if the line number is not divisible by \keyname{stepnumber}.
-%
-% \item[0.16,{{}}] \rkeyname{numberstyle}|=|\meta{style}
-%
-%       determines the font and size of the numbers.
-%
-% \item[0.19,10pt] \rkeyname{numbersep}|=|\meta{dimension}
-%
-%       is the distance between number and listing.
-%
-% \item[1.0,true] \rkeyname{numberblanklines}|=|\meta{\alternative{true,false}}
-%
-%       If this is set to false, blank lines get no printed line number.
-%
-% \item[0.20,auto] \rkeyname{firstnumber}|=|\meta{\alternative{auto,last,\normalfont\meta{number}}}
-%
-%       \texttt{auto} lets the package choose the first number: a new listing
-%       starts with number one, a named listing continues the most recent
-%       same-named listing (see below), and a stand alone file begins with
-%       the number corresponding to the first input line.
-%
-%       \texttt{last} continues the numbering of the most recent listing and
-%       \meta{number} sets it to the number.
-%
-% \item[1.0] \rkeyname{name}|=|\meta{name}
-%
-%       names a listing. Displayed environment-listings with the same name
-%       share a line counter if |firstnumber=auto| is in effect.
-%
-% \item[0.20,\arabic{lstnumber},data] \rcmdname\thelstnumber
-%
-%       prints the lines' numbers.
-% \end{syntax}
-% We show an example on how to redefine |\thelstnumber|. But if you test it,
-% you won't get the result shown on the left.
-% \begin{lstxsample}
-%    \renewcommand*\thelstnumber{\oldstylenums{\the\value{lstnumber}}}
-% \end{lstxsample}
-% \begin{lstsample}{\lstset{stepnumber=-1}\label{rDecreasingLabels}}{}
-%    \begin{lstlisting}[numbers=left,
-%                       firstnumber=753]
-%    begin { empty lines }
-%
-%
-%
-%
-%
-%
-%    end; { empty lines }
-%    \end{lstlisting}
-% \end{lstsample}
-%
-% \begin{advise}
-% \item
-% The example shows a sequence $n,n+1,\ldots,n+7$ of 8 three-digit figures such that the sequence contains each digit $0,1,\ldots,9$.
-% But 8 is not minimal with that property.
-% Find the minimal number and prove that it is minimal.
-% How many minimal sequences do exist?
-%
-% Now look at the generalized problem:
-% Let $k\in\{1,\ldots,10\}$ be given.
-% Find the minimal number $m\in\{1,\ldots,10\}$ such that there is a sequence $n,{n+1},\ldots,\allowbreak{n+m-1}$ of $m$ $k$-digit figures which contains each digit $\{0,\ldots,9\}$.
-% Prove that the number is minimal.
-% How many minimal sequences do exist?
-%
-% If you solve this problem with a computer, write a \TeX\ program!
-% \end{advise}
-%
-%
-% \subsection{Captions}
-%
-% In despite of \LaTeX\ standard behaviour, captions and floats are independent
-% from each other here; you can use captions with non-floating listings.
-% \begin{syntax}
-% \item[0.21] \rkeyname{title}|=|\meta{title text}
-%
-%       is used for a title without any numbering or label.
-%
-% \item[0.20] \rkeyname{caption}|={|\oarg{short}\meta{caption text}|}|
-%
-%       The caption is made of \cs{lstlistingname} followed by a running
-%       number, a seperator, and \meta{caption text}. Either the caption text
-%       or, if present, \meta{short} will be used for the list of listings.
-%
-% \item[0.21] \rkeyname{label}|=|\meta{name}
-%
-%       makes a listing referable via |\ref|\marg{name}.
-%
-% \item[0.16] \rcmdname\lstlistoflistings
-%
-%       prints a list of listings. Each entry is with descending priority
-%       either the short caption, the caption, the file name or the name of the
-%       listing, see also the key \keyname{name} in section \ref{rLineNumbers}.
-%
-% \item[1.0] \rkeyname{nolol}|=|\meta{\alternative{true,false}}\syntaxor\rkeyname{nolol}
-%
-%       If true, the listing does not make it into the list of listings.
-%
-% \item[0.16,Listings,data] \rcmdname\lstlistlistingname
-%
-%       The header name for the list of listings.
-%
-% \item[0.20,Listing,data] \rcmdname\lstlistingname
-%
-%       The caption label for listings.
-%
-% \item[0.20,\arabic{lstlisting},data] \rcmdname\thelstlisting
-%
-%       prints the running number of the caption.
-%
-% \item[1.4,true] \rkeyname{numberbychapter}|=|\meta{\alternative{true,false}}
-%
-%       If true, and |\thechapter| exists, listings are numbered by chapter.
-%       Otherwise, they are numbered sequentially from the beginning of the
-%       document.  This key can only be used before |\begin{document}|.
-%
-% \item[0.19] \rcmdname\lstname
-%
-%       prints the name of the current listing which is either the file name or
-%       the name defined by the \keyname{name} key. This command can be used to
-%       define a caption or title template, for example by
-%       |\lstset{caption=\lstname}|.
-%
-% \item[0.20,t] \rkeyname{captionpos}|=|\meta{subset of \textup{\texttt{tb}}}
-%
-%       specifies the positions of the caption: top and/or bottom of the
-%       listing.
-%
-% \item[0.20,\smallskipamount] \rkeyname{abovecaptionskip}|=|\meta{dimension}
-% \item[0.20,\smallskipamount] \rkeyname{belowcaptionskip}|=|\meta{dimension}
-%
-%       is the vertical space respectively above or below each caption.
-% \end{syntax}
-%
-%
-% \subsection{Margins and line shape}\label{rMarginsAndLineShape}
-%
-% \begin{syntax}
-% \item[0.21,\linewidth] \rkeyname{linewidth}|=|\meta{dimension}
-%
-%       defines the base line width for listings. The following three keys are
-%       taken into account additionally.
-%
-% \item[0.19,0pt] \rkeyname{xleftmargin}|=|\meta{dimension}
-% \item[1.0,0pt] \rkeyname{xrightmargin}|=|\meta{dimension}
-%
-%       The dimensions are used as extra margins on the left and right. Line
-%       numbers and frames are both moved accordingly.
-%
-% \item[0.19,false] \rkeyname{resetmargins}|=|\meta{\alternative{true,false}}
-%
-%       If true, indention from list environments like \texttt{enumerate} or
-%       \texttt{itemize} is reset, i.e.~not used.
-%
-% \item[0.20,false] \rkeyname{breaklines}|=|\meta{\alternative{true,false}}\syntaxor\rkeyname{breaklines}
-%
-%       activates or deactivates automatic line breaking of long lines.
-%
-% \item[1.2,false] \rkeyname{breakatwhitespace}|=|\meta{\alternative{true,false}}\syntaxor\rkeyname{breakatwhitespace}\label{uoption:breakatwhitespace}
-%
-%       If true, it allows line breaks only at white space.
-%
-% \item[0.20,{{}}] \rkeyname{prebreak}|=|\meta{tokens}
-% \item[0.20,{{}}] \rkeyname{postbreak}|=|\meta{tokens}
-%
-%       \meta{tokens} appear at the end of the current line respectively at the beginning of the next (broken part of the) line.
-%
-%       You must not use dynamic space (in particular spaces) since internally we use |\discretionary|.
-%       However |\space| is redefined to be used inside \meta{tokens}.
-%
-% \item[0.20,20pt] \rkeyname{breakindent}|=|\meta{dimension}
-%
-%       is the indention of the second, third, \ldots\ line of broken lines.
-%
-% \item[0.20,true] \rkeyname{breakautoindent}|=|\meta{\alternative{true,false}}\syntaxor\rkeyname{breakautoindent}
-%
-%       activates or deactivates automatic indention of broken lines. This
-%       indention is used additionally to \ikeyname{breakindent}, see the
-%       example below.
-%       Visible spaces or visible tabulators might set this auto
-%       indention to zero.
-% \end{syntax}
-% In the following example we use tabulators to create long lines, but the
-% verbatim part uses |tabsize=1|.
-% \begin{lstxsample}
-%    \lstset{postbreak=\space, breakindent=5pt, breaklines}
-% \end{lstxsample}
-% \begin{lstsample}{\lstset{string=[d]",tabsize=6}}{\lstset{tabsize=1}\hfuzz=1in}
-%    \begin{lstlisting}
-%    		"A long string is broken!"
-%    			"Another long line."
-%    \end{lstlisting}
-%
-%    \begin{lstlisting}[breakautoindent
-%                                 =false]
-%    		{ Now auto indention is off. }
-%    \end{lstlisting}
-% \end{lstsample}
-%
-%
-% \subsection{Frames}\label{rFrames}
-%
-% \begin{syntax}
-% \item[1.0,none] \rkeyname{frame}|=|\meta{\alternative{none,leftline,topline,bottomline,lines,single,shadowbox}}
-%
-%       draws either no frame, a single line on the left, at the top, at the
-%       bottom, at the top and bottom, a whole single frame, or a shadowbox.
-%
-%       Note that \packagename{fancyvrb} supports the same frame types except
-%       \texttt{shadowbox}. The shadow color is \keyname{rulesepcolor}, see
-%       below.
-%
-% \item[0.19,{{}}] \rkeyname{frame}|=|\meta{subset of \textup{\texttt{trblTRBL}}}
-%
-%		The characters \texttt{trblTRBL} designate lines at the top and
-%       bottom of a listing and to lines on the right and left. Upper case
-%       characters are used to draw double rules. So |frame=tlrb| draws a
-%       single frame and |frame=TL| double lines at the top and on the left.
-%
-%       Note that frames usually reside outside the listing's space.
-%
-% \item[0.20,ffff] \rkeyname{frameround}|=|\meta{\alternative{t,f}}\meta{\alternative{t,f}}\meta{\alternative{t,f}}\meta{\alternative{t,f}}
-%
-%       The four letters designate the top right, bottom right, bottom
-%       left and top left corner. In this order. \texttt{t} makes the
-%       according corner round. If you use round corners, the rule width is
-%       controlled via |\thinlines| and |\thicklines|.
-%
-%       Note: The size of the quarter circles depends on \keyname{framesep}
-%       and is independent of the extra margins of a frame. The size is
-%       possibly adjusted to fit \LaTeX's circle sizes.
-%
-% \item[0.19,3pt] \rkeyname{framesep}|=|\meta{dimension}
-% \item[0.19,2pt] \rkeyname{rulesep}|=|\meta{dimension}
-%
-%		control the space between frame and listing and between double rules.
-%
-% \item[0.19,0.4pt] \rkeyname{framerule}|=|\meta{dimension}
-%
-%		controls the width of the rules.
-%
-% \item[1.0,0pt] \rkeyname{framexleftmargin}|=|\meta{dimension}
-% \item[1.0,0pt] \rkeyname{framexrightmargin}|=|\meta{dimension}
-% \item[1.0,0pt] \rkeyname{framextopmargin}|=|\meta{dimension}
-% \item[1.0,0pt] \rkeyname{framexbottommargin}|=|\meta{dimension}
-%
-%       are the dimensions which are used additionally to \keyname{framesep}
-%       to make up the margin of a frame.
-%
-% \item[0.21] \rkeyname{backgroundcolor}|=|\meta{color command}
-% \item[0.21] \rkeyname{rulecolor}|=|\meta{color command}
-% \item[1.0] \rkeyname{fillcolor}|=|\meta{color command}
-% \item[1.0] \rkeyname{rulesepcolor}|=|\meta{color command}
-%
-%       specify the colour of the background, the rules, the space between
-%       `text box' and first rule, and of the space between two rules,
-%       respectively.
-%       Note that the value requires a |\color| command, for example
-%       \keyname{rulecolor}|=\color{blue}|.
-% \end{syntax}
-% \ikeyname{frame} does not work with |fancyvrb=true| or when the package
-% internally makes a |\hbox| around the listing! And there are certainly more
-% problems with other commands; please take the time to make a (bug) report.
-%\ifcolor
-% \begin{lstxsample}
-%    \lstset{framexleftmargin=5mm, frame=shadowbox, rulesepcolor=\color{blue}}
-% \end{lstxsample}
-%\else
-%    \lstset{framexleftmargin=5mm, frame=shadowbox}
-%\fi
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}[numbers=left]
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-%
-% Note here the use of |framexleftmargin| to include the line numbers inside
-% the frame.
-%
-% Do you want exotic frames? Try the following key if you want, for example,
-% \begin{lstsample}{\lstset{frameshape={RYRYNYYYY}{yny}{yny}{RYRYNYYYY}}}{}
-%    \begin{lstlisting}
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% \begin{syntax}
-% \item[0.20,,\dag] \rkeyname{frameshape}|=|\marg{top shape}\marg{left shape}\marg{right shape}\marg{bottom shape}
-%
-%       gives you full control over the drawn frame parts.
-%       The arguments are not case sensitive.
-%
-%       Both \meta{left shape} and \meta{right shape} are `left-to-right'
-%       \alternative{y,n} character sequences (or empty). Each |y| lets the
-%       package draw a rule, otherwise the rule is blank. These vertical rules
-%       are drawn `left-to-right' according to the specified shapes.
-%       The example above uses |yny|.
-%
-%       \meta{top shape} and \meta{bottom shape} are `left-rule-right'
-%       sequences (or empty). The first `left-rule-right' sequence is attached
-%       to the most inner rule, the second to the next, and so on.
-%       Each sequence has three characters: `rule' is either |y| or |n|;
-%       `left' and `right' are |y|, |n| or |r| (which makes a corner round).
-%       The example uses |RYRYNYYYY| for both shapes:
-%       |RYR| describes the most inner (top and bottom) frame shape, |YNY|
-%       the middle, and |YYY| the most outer.
-% \end{syntax}
-% To summarize, the example above used
-% \begin{verbatim}
-%    \lstset{frameshape={RYRYNYYYY}{yny}{yny}{RYRYNYYYY}}\end{verbatim}
-% Note that you are not resticted to two or three levels.
-% However you'll get in trouble if you use round corners when they are too big.
-%
-%
-% \subsection{Indexing}
-%
-% \begin{syntax}
-% \item[0.19] \rkeyname{index}|=|\oarg{number}\oarg{keyword classes}\marg{identifiers}
-% \item[0.21] \rkeyname{moreindex}|=|\oarg{number}\oarg{keyword classes}\marg{identifiers}
-% \item[0.21] \rkeyname{deleteindex}|=|\oarg{number}\oarg{keyword classes}\marg{identifiers}
-%
-%       define, add and remove \meta{identifiers} and \meta{keyword classes}
-%       from the index class list \meta{number}. If you don't specify the
-%       optional number, the package assumes \meta{number} $=1$.
-%
-%		Each appearance of the explicitly given identifiers and each appearance
-%       of the identifiers of the specified \meta{keyword classes} is indexed.
-%       For example, you could write |index=[1][keywords]| to index all
-%       keywords. Note that |[1]| is required here---otherwise we couldn't use
-%       the second optional argument.
-%
-% \item[0.19,\lstindexmacro] \rkeyname{indexstyle}|=|\oarg{number}\meta{tokens \textup(one-parameter command\textup)}
-%
-%       \meta{tokens} actually indexes the identifiers for the list
-%       \meta{number}. In contrast to the style keys, \meta{tokens}
-%       \emph{must} read exactly one parameter, namely the identifier.
-%       Default definition is\icmdname{\lstindexmacro}\vspace*{-\itemsep}
-% \begin{verbatim}
-%    \newcommand\lstindexmacro[1]{\index{{\ttfamily#1}}}\end{verbatim}
-%       \vspace*{-\itemsep}which you shouldn't modify.
-%       Define your own indexing commands and use them as argument to this key.
-% \end{syntax}
-% Section \ref{uIndexing} describes this feature in detail.
-%
-%
-% \subsection{Column alignment}\label{rColumnAlignment}
-%
-% \begin{syntax}
-% \item[1.0,{[c]fixed}] \rkeyname{columns}|=|\oarg{\alternative{c,l,r}}\meta{alignment}
-%
-%       selects the column alignment.  The \meta{alignment} can be |fixed|,
-%       |flexible|, |spaceflexible|, or |fullflexible|; see section
-%       \ref{uFixedAndFlexibleColumns} for details.
-%
-%       The optional |c|, |l|, or |r| controls the horizontal orientation of
-%       smallest output units (keywords, identifiers, etc.). The arguments work
-%       as follows, where vertical bars visualize the effect:
-%           $\vert$\lstinline[columns={[c]fixed}]!listing!$\vert$,
-%           $\vert$\lstinline[columns={[l]fixed}]!listing!$\vert$, and
-%           $\vert$\lstinline[columns={[r]fixed}]!listing!$\vert$
-%       in fixed column mode,
-%           $\vert$\lstinline[columns={[c]flexible}]!listing!$\vert$,
-%           $\vert$\lstinline[columns={[l]flexible}]!listing!$\vert$, and
-%           $\vert$\lstinline[columns={[r]flexible}]!listing!$\vert$
-%       with flexible columns, and
-%           $\vert$\lstinline[columns={[c]fullflexible}]!listing!$\vert$,
-%           $\vert$\lstinline[columns={[l]fullflexible}]!listing!$\vert$, and
-%           $\vert$\lstinline[columns={[r]fullflexible}]!listing!$\vert$
-%       with space-flexible or full flexible columns (which ignore the
-%       optional argument, since they do not add extra space around
-%       printable characters).
-%
-% \item[0.18,false] \rkeyname{flexiblecolumns}|=|\meta{\alternative{true,false}}\syntaxor\rkeyname{flexiblecolumns}
-%
-%       selects the most recently selected flexible or fixed column format,
-%       refer to section \ref{uFixedAndFlexibleColumns}.
-%
-% \item[0.21,false,\dag] \rkeyname{keepspaces}|=|\meta{\alternative{true,false}}
-%
-%       |keepspaces=true| tells the package not to drop spaces to fix column
-%       alignment and always converts tabulators to spaces.
-%
-% \item[0.16] \rkeyname{basewidth}|=|\meta{dimension}\syntaxor
-% \item[0.18,{{0.6em,0.45em}}] \rkeyname{basewidth}|={|\meta{fixed}|,|\meta{flexible mode}|}|
-%
-%       sets the width of a single character box for fixed and flexible column
-%       mode (both to the same value or individually).
-%
-% \item[0.20,false] \rkeyname{fontadjust}|=|\meta{\alternative{true,false}}\syntaxor\rkeyname{fontadjust}
-%
-%       If true the package adjusts the base width every font selection.
-%       This makes sense only if \ikeyname{basewidth} is given in font specific
-%       units like `em' or `ex'---otherwise this boolean has no effect.
-%
-%       After loading the package, it doesn't adjust the width every font
-%       selection: it looks at \ikeyname{basewidth} each listing and uses the
-%       value for the whole listing. This is possibly inadequate if the style
-%       keys in section \ref{rFigureOutTheAppearance} make heavy font size
-%       changes, see the example below.
-%
-%       Note that this key might disturb the column alignment and might have an
-%       effect on the keywords' appearance!
-% \end{syntax}
-% \begin{lstsample}{\lstset{basicstyle=\normalsize}}{}
-%    \lstset{commentstyle=\scriptsize}
-%    \begin{lstlisting}
-%    { scriptsize font
-%      doesn't look good }
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-% \begin{lstsample}{\lstset{basicstyle=\normalsize,commentstyle=\scriptsize}}{}
-%    \begin{lstlisting}[fontadjust]
-%    { scriptsize font
-%      looks better now }
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{lstlisting}
-% \end{lstsample}
-%
-%
-% \subsection{Escaping to \LaTeX}\label{rEscapingToLaTeX}
-%
-% \textbf{Note:} {\itshape Any escape to \LaTeX\ may disturb the column
-% alignment since the package can't control the spacing there.}
-% \begin{syntax}
-% \item[0.18,false] \rkeyname{texcl}|=|\meta{\alternative{true,false}}\syntaxor\rkeyname{texcl}
-%
-%       activates or deactivates \LaTeX\ comment lines. If activated, comment
-%       line delimiters are printed as usual, but the comment line text (up to
-%       the end of line) is read as \LaTeX\ code and typeset in comment style.
-% \end{syntax}
-% The example uses \Cpp\ comment lines (but doesn't say how to define them).
-% Without |\upshape| we would get \textit{calculate} since the comment style
-% is |\itshape|.
-% \begin{lstsample}{\lstset{morecomment=[l]//}}{}
-%    \begin{lstlisting}[texcl]
-%    // \upshape calculate $a_{ij}$
-%      A[i][j] = A[j][j]/A[i][j];
-%    \end{lstlisting}
-% \end{lstsample}
-%
-% \begin{syntax}
-% \item[0.19,false] \rkeyname{mathescape}|=|\meta{\alternative{true,false}}
-%
-%       activates or deactivates special behaviour of the dollar sign.
-%       If activated a dollar sign acts as \TeX's text math shift.
-%
-%       This key is useful if you want to typeset formulas in listings.
-%
-% \item[0.19,{{}}] \rkeyname{escapechar}|=|\meta{character}\syntaxor\rkeyname{escapechar}|={}|
-%
-%       If not empty the given character escapes the user to \LaTeX: all code
-%       between two such characters is interpreted as \LaTeX\ code. Note that
-%       \TeX's special characters must be entered with a preceding backslash,
-%       e.g.~|escapechar=\%|.
-%
-% \item[0.20,{{}}] \rkeyname{escapeinside}|=|\meta{character}\meta{character}\syntaxor\rkeyname{escapeinside}|={}|
-%
-%       Is a generalization of \ikeyname{escapechar}. If the value is not
-%       empty, the package escapes to \LaTeX\ between the first and second
-%       character.
-%
-% \item[0.20,{{}}] \rkeyname{escapebegin}|=|\meta{tokens}
-% \item[0.20,{{}}] \rkeyname{escapeend}|=|\meta{tokens}
-%
-%       The tokens are executed at the beginning respectively at the end of
-%       each escape, in particular for \ikeyname{texcl}.
-%       See section \ref{uNationalCharacters} for an application.
-% \end{syntax}
-%
-% \begin{lstsample}{\lstset{morecomment=[l]//}}{}
-%    \begin{lstlisting}[mathescape]
-%    // calculate $a_{ij}$
-%      $a_{ij} = a_{jj}/a_{ij}$;
-%    \end{lstlisting}
-% \end{lstsample}
-%
-% \begin{lstsample}{\lstset{morecomment=[l]//}}{}
-%    \begin{lstlisting}[escapechar=\%]
-%    // calc%ulate $a_{ij}$%
-%      %$a_{ij} = a_{jj}/a_{ij}$%;
-%    \end{lstlisting}
-% \end{lstsample}
-%
-% \begin{lstsample}{\lstset{morecomment=[l]//}}{}
-%    \lstset{escapeinside=`'}
-%    \begin{lstlisting}
-%    // calc`ulate $a_{ij}$'
-%      `$a_{ij} = a_{jj}/a_{ij}$';
-%    \end{lstlisting}
-% \end{lstsample}
-% In the first example the comment line up to $a_{ij}$ has been typeset by the
-% \packagename{listings} package in comment style. The $a_{ij}$ itself is
-% typeset in `\TeX\ math mode' without comment style. About half of the
-% comment line of the second example has been typeset by this package, and
-% the rest is in `\LaTeX\ mode'.
-%
-% To avoid problems with the current and future version of this package:
-% \begin{enumerate}
-% \item Don't use any commands of the \packagename{listings} package when you
-%       have escaped to \LaTeX.
-% \item Any environment must start and end inside the same escape.
-% \item You might use |\def|, |\edef|, etc., but do not assume that the
-%       definitions are present later, unless they are |\global|.
-% \item |\if \else \fi|, groups, math shifts |$| and |$$|, \ldots\ must be
-%       balanced within each escape.
-% \item \ldots
-% \end{enumerate}
-% Expand that list yourself and mail me about new items.
-%
-%
-% \subsection{Interface to \textsf{fancyvrb}}
-%
-% The \packagename{fancyvrb} package---fancy verbatims---from Timothy van Zandt
-% provides macros for reading, writing and typesetting verbatim code. It has
-% some remarkable features the \packagename{listings} package doesn't have.
-% (Some are possible, but you must find somebody who will implement them |;-)|.
-% \begin{syntax}
-% \item[0.19] \rkeyname{fancyvrb}|=|\meta{\alternative{true,false}}
-%
-%       activates or deactivates the interface. If active, verbatim code is
-%       read by \packagename{fancyvrb} but typeset by \packagename{listings},
-%       i.e.~with emphasized keywords, strings, comments, and so on.
-%       Internally we use a very special definition of |\FancyVerbFormatLine|.
-%
-%       This interface works with |Verbatim|, |BVerbatim| and |LVerbatim|.
-%       But you shouldn't use \packagename{fancyvrb}'s \keyname{defineactive}.
-%       (As far as I can see it doesn't matter since it does nothing at all,
-%       but for safety \ldots .)
-%       If \packagename{fancyvrb} and \packagename{listings} provide similar
-%       functionality, you should use \packagename{fancyvrb}'s.
-%
-% \item[1.1,{\overlay 1}] \rkeyname{fvcmdparams}|=|\meta{command$_1$}\meta{number$_1$}\ldots\label{uoption:fvcmdparams}
-% \item[1.1] \rkeyname{morefvcmdparams}|=|\meta{command$_1$}\meta{number$_1$}\ldots\label{uoption:morefvcmdparams}
-%
-%       If you use \packagename{fancyvrb}'s \keyname{commandchars}, you must
-%       tell the \packagename{listings} package how many arguments each command
-%       takes. If a command takes no arguments, there is nothing to do.
-%
-%       The first (third, fifth, \ldots) parameter to the keys is the command
-%       and the second (fourth, sixth, \ldots) is the number of arguments
-%       that command takes. So, if you want to use |\textcolor{red}{keyword}|
-%       with the \packagename{fancyvrb}-\packagename{listings} interface, you
-%       should write |\lstset{morefvcmdparams=\textcolor 2}|.
-% \end{syntax}
-%
-% \iffancyvrb
-% \begin{lstsample}{}{}
-%    \lstset{morecomment=[l]\ }% :-)
-%    \fvset{commandchars=\\\{\}}
-%
-%    \begin{BVerbatim}
-%    First verbatim line.
-%    \fbox{Second} verbatim line.
-%    \end{BVerbatim}
-%
-%    \par\vspace{72.27pt}
-%
-%    \lstset{fancyvrb}
-%    \begin{BVerbatim}
-%    First verbatim line.
-%    \fbox{Second} verbatim line.
-%    \end{BVerbatim}
-%    \lstset{fancyvrb=false}
-% \end{lstsample}
-% The lines typeset by the \packagename{listings} package are wider since the
-% default \ikeyname{basewidth} doesn't equal the width of a single typewriter type
-% character. Moreover, note that the first space begins a comment as defined at
-% the beginning of the example.
-% \else
-% \begin{center}
-%    \packagename{fancyvrb} seems to be unavailable on your platform, thus the
-%    example couldn't be printed here.
-% \end{center}
-% \fi
-%
-%
-% \subsection{Environments}\label{rEnvironments}
-%
-% If you want to define your own pretty-printing environments, try the
-% following command. The syntax comes from \LaTeX's |\newenvironment|.
-% \begin{syntax}
-% \item[0.19] \rcmdname\lstnewenvironment\\
-%       \marg{name}\oarg{number}\oarg{opt.~default~arg.}\\
-%       |{|\meta{starting code}|}|\\
-%       |{|\meta{ending code}|}|
-% \end{syntax}
-% As a simple example we could just select a particular language.
-% \begin{lstxsample}
-%    \lstnewenvironment{pascal}
-%        {\lstset{language=pascal}}
-%        {}
-% \end{lstxsample}
-% \begin{lstsample}{}{}
-%    \begin{pascal}
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    \end{pascal}
-% \end{lstsample}
-% Doing other things is as easy, for example, using more keys and adding an
-% optional argument to adjust settings each listing:
-% \begin{verbatim}
-%\lstnewenvironment{pascalx}[1][]
-%    {\lstset{language=pascal,numbers=left,numberstyle=\tiny,float,#1}}
-%    {}\end{verbatim}
-%
-%
-% \subsection{Short Inline Listing Commands}\label{rShortInline}
-%
-% Short equivalents of |\lstinline| can also be defined, in a manner similar
-% to the short verbatim macros provided by \packagename{shortvrb}.
-%
-% \begin{syntax}
-% \item[1.4] \rcmdname\lstMakeShortInline[\oarg{options}]\meta{character}
-%
-%       defines \meta{character} to be an equivalent of
-%       |\lstinline|[\oarg{options}]\meta{character},
-%       allowing for a convenient syntax when using lots of inline listings.
-%
-% \item[1.4] \rcmdname\lstDeleteShortInline\meta{character}
-%
-%       removes a definition of \meta{character} created by |\lstMakeShortInline|,
-%       and returns \meta{character} to its previous meaning.
-% \end{syntax}
-%
-%
-% \subsection{Language definitions}\label{rLanguageDefinitions}
-%
-% You should first read section \ref{uLanguageDefinitions} for an introduction
-% to language definitions. Otherwise you're probably unprepared for the full
-% syntax of |\lstdefinelanguage|.
-% \begin{syntax}
-% \item[0.19] \rcmdname\lstdefinelanguage\syntaxnewline[\oarg{dialect}]\marg{language}\syntaxnewline[\oarg{base dialect}\marg{and base language}]\syntaxnewline\marg{key=value list}\syntaxnewline[\oarg{list of required aspects \textup(keywordcomments,texcs,etc.\textup)}]
-%
-%		defines the (given dialect of the) programming language \meta{language}.
-%       If the language definition is based on another definition, you must
-%       specify the whole \oarg{base dialect}\marg{and base language}. Note
-%       that an empty \meta{base dialect} uses the default dialect!
-%
-%       The last optional argument should specify all required aspects. This is
-%       a delicate point since the aspects are described in the developer's
-%       guide. You might use existing languages as templates. For example,
-%       ANSI C uses \aspectname{keywords}, \aspectname{comments},
-%       \aspectname{strings} and \aspectname{directives}.
-%
-%       \icmdname{\lst@definelanguage} has the same syntax and is used to
-%       define languages in the driver files.
-%
-% \begin{advise}
-% \item Where should I put my language definition?
-%       \advisespace
-%       If you need the language for one particular document, put it into
-%       the preamble of that document. Otherwise create the local file
-%       `\texttt{lstlang0.sty}' or add the definition to that file, but use
-%       `|\lst@definelanguage|' instead of `|\lstdefinelanguage|'.
-%       However, you might want to send the definition to the address in
-%       section \ref{uSoftwareLicense}. Then it will be included with the
-%       rest of the languages distributed with the package, and published under
-%       the \LaTeX\ Project Public License.
-% \end{advise}
-%
-% \item[0.18] \rcmdname\lstalias\marg{alias}\marg{language}
-%
-%       defines an alias for a programming language. Each \meta{alias} is
-%       redirected to the same dialect of \meta{language}.
-%       It's also possible to define an alias for one particular dialect only:
-%
-% \item[0.18] \rcmdname\lstalias\oarg{alias dialect}\marg{alias}\oarg{dialect}\marg{language}
-%
-%       Here all four parameters are \emph{nonoptional} and an alias with empty
-%       \meta{dialect} will select the default dialect. Note that aliases
-%       cannot be chained: The two aliases `|\lstalias{foo1}{foo2}|' and
-%       `|\lstalias{foo2}{foo3}|' will \emph{not} redirect |foo1| to |foo3|.
-% \end{syntax}
-% All remaining keys in this section are intended for building language
-% definitions. \emph{No other key should be used in such a definition!}
-%
-%
-% \paragraph{Keywords}
-% We begin with keyword building keys. Note: {\itshape If you want to enter
-% {\upshape|\|, |{|, |}|, |%|, |#|} or {\upshape|&|} as (part of) an argument
-% to the keywords below, you must do it with a preceding backslash!}
-% \begin{syntax}
-% \item[1.0,,{\dag bug}] \rkeyname{keywordsprefix}|=|\meta{prefix}
-%
-%       All identifiers starting with \meta{prefix} will be printed as first
-%       order keywords.
-%
-%       Bugs: Currently there are several limitations.
-%       (1) The prefix is always case sensitive.
-%       (2) Only one prefix can be defined at a time.
-%       (3) If used `standalone' outside a language definition, the key might
-%           work only after selecting a nonempty language (and switching back to
-%           the empty language if necessary).
-%       (4) The key does not respect the value of \keyname{classoffset} and
-%           has no optional class \meta{number} argument.
-%
-% \item[0.11] \rkeyname{keywords}|=|\oarg{number}\marg{list of keywords}
-% \item[0.11] \rkeyname{morekeywords}|=|\oarg{number}\marg{list of keywords}
-% \item[0.18] \rkeyname{deletekeywords}|=|\oarg{number}\marg{list of keywords}
-%
-%       define, add to or remove the keywords from keyword list \meta{number}.
-%       The use of \keyname{keywords} is discouraged since it deletes all
-%       previously defined keywords in the list and is thus incompatible with
-%       the \keyname{alsolanguage} key.
-%
-%       Please note the keys \ikeyname{alsoletter} and \ikeyname{alsodigit}
-%       below if you use unusual charaters in keywords.
-%
-% \item[0.19,,deprecated] \rkeyname{ndkeywords}|=|\marg{list of keywords}
-% \item[0.19,,deprecated] \rkeyname{morendkeywords}|=|\marg{list of keywords}
-% \item[0.19,,deprecated] \rkeyname{deletendkeywords}|=|\marg{list of keywords}
-%
-%       define, add to or remove the keywords from keyword list 2; note that
-%       this is equivalent to |keywords=[2]|\ldots etc.
-%       The use of \keyname{ndkeywords} is strongly discouraged.
-%
-% \item[0.19,,{addon,optional}] \rkeyname{texcs}|=|\oarg{class number}\marg{list of control sequences \textup(without backslashes\textup)}
-% \item[0.20,,{addon,optional}] \rkeyname{moretexcs}|=|\oarg{class number}\marg{list of control sequences \textup(without backslashes\textup)}
-% \item[0.21,,{addon,optional}] \rkeyname{deletetexcs}|=|\oarg{class number}\marg{list of control sequences \textup(without backslashes\textup)}
-%
-%       Ditto for control sequences in \TeX\ and \LaTeX.
-%
-% \item[0.18,,optional] \rkeyname{directives}|=|\marg{list of compiler directives}
-% \item[0.21,,optional] \rkeyname{moredirectives}|=|\marg{list of compiler directives}
-% \item[0.21,,optional] \rkeyname{deletedirectives}|=|\marg{list of compiler directives}
-%
-%       defines compiler directives in C, \Cpp, Objective-C, and POV.
-%
-% \item[0.14] \rkeyname{sensitive}|=|\meta{\alternative{true,false}}
-%
-%       makes the keywords, control sequences, and directives case sensitive
-%       and insensitive, respectively. This key affects the keywords, control
-%       sequences, and directives only when a listing is processed. In all
-%       other situations they are case sensitive, for example,
-%       |deletekeywords={save,Test}| removes `save' and `Test', but neither
-%       `SavE' nor `test'.
-%
-% \item[0.19] \rkeyname{alsoletter}|=|\marg{character sequence}
-% \item[0.19] \rkeyname{alsodigit}|=|\marg{character sequence}
-% \item[0.19] \rkeyname{alsoother}|=|\marg{character sequence}
-%
-%       All identifiers (keywords, directives, and such) consist of a letter
-%       followed by alpha-numeric characters (letters and digits).
-%       For example, if you write
-%           |keywords={one-two,\#include}|,
-%       the minus sign must become a digit and the sharp a letter since the
-%       keywords can't be detected otherwise.
-%
-%       Table \ref{rStdCharTable} show the standard configuration of the
-%       \packagename{listings} package. The three keys overwrite the default
-%       behaviour. Each character of the sequence becomes a letter, digit
-%       and other, respectively.
-%
-% \item[0.20] \rkeyname{otherkeywords}|=|\marg{keywords}
-%
-%       Defines keywords that contain other characters, or start with digits.
-%       Each given `keyword' is printed in keyword style, but without changing
-%       the `letter', `digit' and `other' status of the characters. This key
-%       is designed to define keywords like |=>|, |->|, |-->|, |--|, |::|, and
-%       so on. If one keyword is a subsequence of another (like |--| and
-%       |-->|), you must specify the shorter first.
-%
-% \item[0.20,,{renamed,optional}] \rkeyname{tag}|=|\meta{character}\meta{character}\syntaxor\rkeyname{tag}|={}|\label{uoption:tag}
-%
-%       The first order keywords are active only between the first and second
-%       character. This key is used for HTML.
-% \end{syntax}
-%
-% \begin{table}[tb]
-% \caption{Standard character table}\label{rStdCharTable}
-% \begin{tabular}{ll}
-% class & characters\\
-% \noalign{\smallskip}
-% letter & \texttt{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}\\
-%        & \texttt{a b c d e f g h i j k l m n o p q r s t u v w x y z}\\
-%        & \texttt{@ \textdollar\ } |_|\\
-% digit  & \texttt{0 1 2 3 4 5 6 7 8 9}\\
-% other  & \texttt{!\ " \#\ \%\ \&\ ' ( ) * + , - .\ / :\ ; < = > ?}\\
-%        & {\catcode`\|=12\texttt{[ \char92\ ] \textasciicircum\ \char123\ | \char125\ \textasciitilde}}\\
-% space  & chr(32)\\
-% tabulator & chr(9)\\
-% form feed & chr(12)\\
-% \noalign{\smallskip}
-% \end{tabular}
-% \par\noindent
-% Note: Extended characters of codes 128--255 (if defined) are \emph{currently}
-% letters.
-% \end{table}
-%
-%
-% \paragraph{Strings}
-% \begin{syntax}
-% \item[0.12] \rkeyname{string}|=|\oarg{\alternative{b,d,m,bd,s}}\marg{delimiter \textup(character\textup)}
-% \item[0.21] \rkeyname{morestring}|=|\oarg{\alternative{b,d,m,bd,s}}\marg{delimiter}
-% \item[0.21] \rkeyname{deletestring}|=|\oarg{\alternative{b,d,m,bd,s}}\marg{delimiter}
-%
-%       define, add to or delete the delimiter from the list of string
-%       delimiters. Starting and ending delimiters are the same, i.e.~in the
-%       source code the delimiters must match each other.
-%
-%       The optional argument is the type and controls the how the delimiter
-%       itself is represented in a string or character literal: it is escaped by a
-%       |b|ackslash, |d|oubled (or both is allowed via |bd|).  Alternately, the
-%       type can refer to an unusual form of delimiter: |s|tring delimiters (akin
-%       to the |s| comment type) or |m|atlab-style delimiters.  The latter is a
-%       special type for Ada and Matlab and possibly other languages where the
-%       string delimiters are also used for other purposes.  It is equivalent
-%       to |d|, except that a string does not start after a letter, a right
-%       parenthesis, a right bracket, or some other characters.
-% \end{syntax}
-%
-%
-% \paragraph{Comments}
-% \begin{syntax}
-% \item[0.13] \rkeyname{comment}|=|\oarg{type}\meta{delimiter\textup(s\textup)}
-% \item[0.21] \rkeyname{morecomment}|=|\oarg{type}\meta{delimiter\textup(s\textup)}
-% \item[0.21] \rkeyname{deletecomment}|=|\oarg{type}\meta{delimiter\textup(s\textup)}
-%
-%       Ditto for comments, but some types require more than a single
-%       delimiter. The following overview uses \keyname{morecomment} as the
-%       example, but the examples apply to \keyname{comment} and \keyname{deletecomment}
-%       as well.
-%
-% \item[0.13] \keyname{morecomment}|=[l]|\meta{delimiter}
-%
-%       The delimiter starts a comment line, which in general starts with the
-%       delimiter and ends at end of line. If the character sequence |//|
-%       should start a comment line (like in \Cpp, Comal 80 or Java),
-%       |morecomment=[l]//| is the correct declaration. For Matlab it
-%       would be |morecomment=[l]\%|---note the preceding backslash.
-%
-% \item[0.13] \keyname{morecomment}|=[s]|\marg{delimiter}\marg{delimiter}
-%
-%       Here we have two delimiters. The second ends a comment starting with
-%       the first delimiter. If you require two such comments you can use this
-%       type twice. C, Java, PL/I, Prolog and SQL all define single comments
-%       via |morecomment=[s]{/*}{*/}|, and Algol does it with
-%       |morecomment=[s]{\#}{\#}|, which means that the sharp delimits both
-%       beginning and end of a single comment.
-%
-% \item[0.13] \keyname{morecomment}|=[n]|\marg{delimiter}\marg{delimiter}
-%
-%       is similar to type |s|, but comments can be nested. Identical arguments
-%       are not allowed---think a while about it!
-%       Modula-2 and Oberon-2 use |morecomment=[n]{(*}{*)}|.
-%
-% \item[0.18] \keyname{morecomment}|=[f]|\meta{delimiter}
-% \item[0.18] \keyname{morecomment}|=[f][commentstyle]|\oarg{n=preceding columns}\meta{delimiter}
-%
-%       The delimiter starts a comment line if and only if it appears on a
-%       fixed column-number, namely if it is in column $n$ (zero based).
-%
-% \item[0.17,,optional] \rkeyname{keywordcomment}|=|\marg{keywords}
-% \item[0.21,,optional] \rkeyname{morekeywordcomment}|=|\marg{keywords}
-% \item[0.21,,optional] \rkeyname{deletekeywordcomment}|=|\marg{keywords}
-%
-%       A keyword comment begins with a keyword and ends with the same keyword.
-%       Consider |keywordcomment={comment,co}|. Then
-%       `\textbf{comment}\allowbreak\ldots\textbf{comment}' and
-%       `\textbf{co}\ldots\textbf{co}' are comments.
-%
-% \item[0.17,,optional] \rkeyname{keywordcommentsemicolon}|=|\marg{keywords}\marg{keywords}\marg{keywords}
-%
-%       The definition of a `keyword comment semicolon' requires three keyword
-%       lists, e.g.~|{end}{else,end}{comment}|. A semicolon always ends such a
-%       comment. Any keyword of the first argument begins a comment and any
-%       keyword of the second argument ends it (and a semicolon also);
-%       a comment starting with any keyword of the third argument is terminated
-%       with the next semicolon only. In the example all possible comments are
-%       `\textbf{end}\ldots\textbf{else}', `\textbf{end}\ldots\textbf{end}'
-%       (does not start a comment again) and `\textbf{comment}\ldots;' and
-%       `\textbf{end}\ldots;'.
-%       Maybe a curious definition, but Algol and Simula use such comments.
-%
-%       Note: The keywords here need not to be a subset of the defined
-%       keywords. They won't appear in keyword style if they aren't.
-%
-% \item[0.17,,optional] \rkeyname{podcomment}|=|\meta{\alternative{true,false}}
-%
-%       activates or deactivates PODs---Perl specific.
-% \end{syntax}
-%
-%
-% \subsection{Installation}\label{rInstallation}
-%
-% \paragraph{Software installation}
-% \begin{enumerate}
-% \item Following the \TeX\ directory structure (TDS), you should put the files
-%       of the \packagename{listings} package into directories as follows:
-%       \begin{center}
-%       \begin{tabular}{lcl}
-%       \texttt{listings.pdf}&$\to$&\texttt{texmf/doc/latex/listings}\\
-%       \texttt{listings.dtx}, \texttt{listings.ins},\\
-%       \texttt{listings.ind}, \texttt{lstpatch.sty},\\
-%       \texttt{lstdrvrs.dtx}&$\to$&\texttt{texmf/source/latex/listings}
-%       \end{tabular}
-%       \end{center}
-%       Note that you may not have a patch file \texttt{lstpatch.sty}.
-%       If you don't use the TDS, simply adjust the directories below.
-% \item	Create the directory \texttt{texmf/tex/latex/listings} or, if it exists
-%       already, remove all
-%       files except \texttt{lst}\meta{whatever}\texttt{0.sty} and
-%       \texttt{lstlocal.cfg} from it.
-% \item	Change the working directory to \texttt{texmf/source/latex/listings}
-%       and run \texttt{listings.ins} through \TeX.
-% \item Move the generated files to \texttt{texmf/tex/latex/listings} if this
-%       is not already done.
-%       \begin{center}
-%       \begin{tabular}{lcl}
-%       \texttt{listings.sty}, \texttt{lstmisc.sty},
-%           &&\qquad(kernel and add-ons)\\
-%       \texttt{listings.cfg},
-%           &&\qquad(configuration file)\\
-%       \texttt{lstlang}\meta{number}\texttt{.sty},
-%           &&\qquad(language drivers)\\
-%       \texttt{lstpatch.sty}&$\to$&\texttt{texmf/tex/latex/listings}
-%       \end{tabular}
-%       \end{center}
-% \item If your \TeX\ implementation uses a file name database, update it.
-% \item If you receive a patch file later on, put it where
-%       \texttt{listings.sty} is (and update the file name database).
-% \end{enumerate}
-% Note that \packagename{listings} requires at least version 1.10 of the
-% \packagename{keyval} package included in the \packagename{graphics} bundle by
-% David Carlisle.
-%
-%
-% \paragraph{Software configuration}
-% Read this only if you encounter problems with the standard configuration or
-% if you want the package to suit foreign languages, for example.
-%
-% Never modify a file from the \packagename{listings} package, in particular
-% not the configuration file. Each new installation or new version overwrites
-% it. The software license allows modification, but I can't recommend it.
-% It's better to create one or more of the files
-% \begin{center}
-% \begin{tabular}{lcl}
-% \texttt{lstmisc0.sty} & for & local add-ons
-%                               (see the developer's guide),\\
-% \texttt{lstlang0.sty} & for & local language definitions
-%                               (see \ref{rLanguageDefinitions}), and\\
-% \texttt{lstlocal.cfg} & as  & local configuration file
-% \end{tabular}
-% \end{center}
-% and put them in the same directory as the other \packagename{listings} files.
-% These three files are not touched by a new installation unless you remove them.
-% If \texttt{lstlocal.cfg} exists, it is loaded after \texttt{listings.cfg}.
-% You might want to change one of the following parameters.
-% \begin{syntax}
-% \item[,,data] \rcmdname\lstaspectfiles\quad contains~\rlap{\texttt{\lstaspectfiles}}
-% \item[,,data] \rcmdname\lstlanguagefiles\quad contains~\rlap{\texttt{\lstlanguagefiles}}
-%
-%       The package uses the specified files to find add-ons and language
-%       definitions.
-% \end{syntax}
-% Moreover, you might want to adjust
-%   \icmdname\lstlistlistingname,
-%   \icmdname\lstlistingname,
-%   \ikeyname{defaultdialect},
-%   \icmdname\lstalias, or
-%   \icmdname\lstalias
-% \ as described in earlier sections.
-%
-%
-% \section{Experimental features}\label{rExperimentalFeatures}
-%
-% This section describes the more or less unestablished parts of this package.
-% It's unlikely that they will all be removed (unless stated explicitly), but
-% they are liable to (heavy) changes and improvements. Such features have been
-% \dag-marked in the last sections. So, if you find anything \dag-marked here,
-% you should be very, very careful.
-%
-%
-% \subsection{Listings inside arguments}\label{rListingsInsideArguments}
-%
-% There are some things to consider if you want to use |\lstinline| or the
-% listing environment inside arguments. Since \TeX\ reads the argument before
-% the `\lst-macro' is executed, this package can't do anything to preserve the
-% input: spaces shrink to one space, the tabulator and the end of line are
-% converted to spaces, \TeX's comment character is not printable, and so on.
-% Hence, \emph{you} must work a bit more. You have to put a backslash in front
-% of each of the following four characters: |\{}%|. Moreover you must protect
-% spaces in the same manner if: (i) there are two or more spaces following each
-% other or (ii) the space is the first character in the line.
-% That's not enough: Each line must be terminated with a `line feed' |^^J|.
-% And you can't escape to \LaTeX\ inside such listings!
-%
-% The easiest examples are with |\lstinline| since we need no line feed.
-% \begin{verbatim}
-%\footnote{\lstinline{var i:integer;} and
-%          \lstinline!protected\ \ spaces! and
-%          \fbox{\lstinline!\\\{\}\%!}}\end{verbatim}
-% yields\lstset{language=Pascal}\footnote{\lstinline{var i:integer;} and
-%          \lstinline!protected\ \ spaces! and
-%          \fbox{\lstinline!\\\{\}\%!}}
-% if the current language is Pascal. Note that this example shows another
-% experimental feature: use of argument braces as delimiters. This is
-% described in section \ref{rTypesettingListings}.
-%
-% And now an environment example:
-% \begin{lstsample}{\lstset{language={}}}{}
-%    \fbox{%
-%    \begin{lstlisting}^^J
-%    \ !"#$\%&'()*+,-./^^J
-%    0123456789:;<=>?^^J
-%    @ABCDEFGHIJKLMNO^^J
-%    PQRSTUVWXYZ[\\]^_^^J
-%    `abcdefghijklmno^^J
-%    pqrstuvwxyz\{|\}~^^J
-%    \end{lstlisting}}
-% \end{lstsample}
-% \begin{advise}
-% \item You might wonder that this feature is still experimental. The reason:
-%       You shouldn't use listings inside arguments; it's not always safe.
-% \end{advise}
-%
-%
-% \subsection{\dag\ Export of identifiers}\label{rExportOfIdentifiers}
-%
-% It would be nice to export function or procedure names. In general that's a
-% dream so far. The problem is that programming languages use various syntaxes
-% for function and procedure declaration or definition. A general interface is
-% completely out of the scope of this package---that's the work of a compiler
-% and not of a pretty-printing tool. However, it is possible for particular
-% languages: in Pascal, for instance, each function or procedure definition and
-% variable declaration is preceded by a particular keyword.
-% Note that you must request the following keys with the \texttt{procnames} option:
-% |\usepackage[procnames]{listings}|.
-% \begin{syntax}
-% \item[0.19,{{}},{\dag optional}] \rkeyname{procnamekeys}|=|\marg{keywords}
-% \item[0.21,,\dag optional] \rkeyname{moreprocnamekeys}|=|\marg{keywords}
-% \item[0.21,,\dag optional] \rkeyname{deleteprocnamekeys}|=|\marg{keywords}
-%
-%		each specified keyword indicates a function or procedure definition.
-%		Any identifier following such a keyword appears in `procname' style.
-%		For Pascal you might use\vspace{-.5\baselineskip}
-% \begin{verbatim}
-%    procnamekeys={program,procedure,function}\end{verbatim}
-%
-% \item[0.19,keywordstyle,\dag optional] \rkeyname{procnamestyle}|=|\meta{style}
-%
-%		defines the style in which procedure and function names appear.
-%
-% \item[0.19,false,\dag optional] \rkeyname{indexprocnames}|=|\meta{\alternative{true,false}}
-%
-%		If activated, procedure and function names are also indexed.
-% \end{syntax}
-% \begin{TODO}
-% The \aspectname{procnames} aspect is unsatisfactory (and has been unchanged
-% at least since 2000). It marks and indexes the function definitions so far, but
-% it would be possible to mark also the following function calls, for example.
-% A key could control whether function names are added to a special keyword
-% class, which then appears in `procname' style. But should these names be
-% added globally? There are good reasons for both. Of course, we would also
-% need a key to reset the name list.
-% \end{TODO}
-%
-%
-% \subsection{\dag\ Hyperlink references}\label{rHyperReferences}
-%
-% This very small aspect must be requested via the \texttt{hyper} option since it
-% is experimental. One possibility for the future is to combine this aspect
-% with \aspectname{procnames}. Then it should be possible to click on a
-% function name and jump to its definition, for example.
-% \begin{syntax}
-% \item[0.21,,{\dag optional}] \rkeyname{hyperref}|=|\marg{identifiers}
-% \item[0.21,,{\dag optional}] \rkeyname{morehyperref}|=|\marg{identifiers}
-% \item[0.21,,{\dag optional}] \rkeyname{deletehyperref}|=|\marg{identifiers}
-%
-%       hyperlink the specified identifiers (via \packagename{hyperref}
-%       package). A `click' on such an identifier jumps to the previous
-%       occurrence.
-%
-% \item[0.21,\hyper@@anchor,{\dag optional}] \rkeyname{hyperanchor}|=|\meta{two-parameter macro}
-% \item[0.21,\hyperlink,{\dag optional}] \rkeyname{hyperlink}|=|\meta{two-parameter macro}
-%
-%       set a hyperlink anchor and link, respectively.
-%       The defaults are suited for the \packagename{hyperref} package.
-% \end{syntax}
-%
-%
-% \subsection{Literate programming}
-%
-% We begin with an example and hide the crucial key=value list.
-% \begin{lstsample}{\lstset{literate={:=}{{$\gets$}}1 {<=}{{$\leq$}}1 {>=}{{$\geq$}}1 {<>}{{$\neq$}}1}}{}
-%    \begin{lstlisting}
-%    var i:integer;
-%
-%    if (i<=0) i := 1;
-%    if (i>=0) i := 0;
-%    if (i<>0) i := 0;
-%    \end{lstlisting}
-% \end{lstsample}
-% Funny, isn't it? We could leave |i := 0| in our listings instead of
-% i| |$\gets$| |0, but that's not literate!  ^^A :-)
-% Now you might want to know how this has been done. Have a \emph{close}
-% look at the following key.
-% \begin{syntax}
-% \item[0.20,,\dag] \rkeyname{literate}|=|[|*|]\meta{replacement item}\ldots\meta{replacement item}
-%
-%       First note that there are no commas between the items. Each item
-%       consists of three arguments:
-%           \marg{replace}\marg{replacement text}\marg{length}.
-%       \meta{replace} is the original character sequence.
-%       Instead of printing these characters, we use \meta{replacement text},
-%       which takes the width of \meta{length} characters in the output.
-%
-%       Each `printing unit' in \meta{replacement text} \emph{must} be in braces
-%       unless it's a single character. For example, you must put braces
-%       around |$\leq$|.
-%       If you want to replace |<-1->| by |$\leftarrow1\rightarrow$|, the
-%       replacement item would be |{<-1->}{{$\leftarrow$}1{$\rightarrow$}}3|.
-%       Note the braces around the arrows.
-%
-%       If one \meta{replace} is a subsequence of another \meta{replace}, you
-%       must define the shorter sequence first. For example, |{-}| must be defined
-%       before |{--}| and this before |{-->}|.
-%
-%       The optional star indicates that literate replacements should not be
-%       made in strings, comments, and other delimited text.
-% \end{syntax}
-% In the example above, I've used
-% \begin{verbatim}
-%  literate={:=}{{$\gets$}}1 {<=}{{$\leq$}}1 {>=}{{$\geq$}}1 {<>}{{$\neq$}}1\end{verbatim}
-% \begin{TODO}
-% Of course, it's good to have keys for adding and removing single
-% \meta{replacement item}s. Maybe the key(s) should work in the same fashion
-% as the string and comment definitions, i.e.~one item per key=value.
-% This way it would be easier to provide better auto-detection in case of a
-% subsequence.
-% \end{TODO}
-%
-%
-% \subsection{\textsf{LGrind} definitions}\label{rLGrindDefinitions}
-%
-% Yes, it's a nasty idea to steal language definitions from other programs.
-% Nevertheless, it's possible for the \packagename{LGrind} definition
-% file---at least partially. Please note that this file must be found by
-% \TeX.
-% \begin{syntax}
-% \item[0.21,,{optional}] \rkeyname{lgrindef}|=|\meta{language}
-%
-%       scans the \texttt{lgrindef} language definition file for
-%       \meta{language} and activates it if present. Note that not all
-%       \packagename{LGrind} capabilities have a \packagename{listings}
-%       analogue.
-%
-%       Note that `Linda' language doesn't work properly since it defines
-%       compiler directives with preceding `|#|' as keywords.
-%
-% \item[0.21,lgrindef.,{data,optional}] \rcmdname\lstlgrindeffile
-%
-%       contains the (path and) name of the definition file.
-% \end{syntax}
-%
-%
-% \subsection{\dag\ Automatic formatting}
-%
-% \lstloadaspects{formats}^^A
-% The automatic source code formatting is far away from being good. First of
-% all, there are no general rules on how source code should be formatted. So
-% `format definitions' must be flexible. This flexibility requires a complex
-% interface, a powerful `format definition' parser, and lots of code lines
-% behind the scenes. Currently, format definitions aren't flexible enough
-% (possibly not the definitions but the results). A single `format item' has
-% the form
-% \begin{itemize}\item[]
-%     \meta{input chars}|=|\oarg{exceptional chars}\meta{pre}\oarg{\texttt{\string\string}}\meta{post}
-% \end{itemize}
-% Whenever \meta{input chars} aren't followed by one of the \meta{exceptional
-% chars}, formatting is done according to the rest of the value. If |\string|
-% isn't specified, the input characters aren't printed (except it's an
-% identifier or keyword). Otherwise \meta{pre} is `executed' before printing
-% the original character string and \meta{post} afterwards. These two are
-% `subsets' of
-% \begin{itemize}
-% \item |\newline| ---ensuring a new line;
-% \item |\space| ---ensuring a whitespace;
-% \item |\indent| ---increasing indention;
-% \item |\noindent| ---descreasing indention.
-% \end{itemize}
-% Now we can give an example.\lstaspectindex{\lstdefineformat}{}\lstaspectindex{format}{}
-% \begin{lstxsample}
-%    \lstdefineformat{C}{%
-%        \{=\newline\string\newline\indent,%
-%        \}=\newline\noindent\string\newline,%
-%        ;=[\ ]\string\space}
-% \end{lstxsample}
-% \begin{lstsample}{\lstset{language={}}}{}
-%    \begin{lstlisting}[format=C]
-%    for (int i=0;i<10; i++){/* wait */};
-%    \end{lstlisting}
-% \end{lstsample}
-% Not good. But there is a (too?) simple work-around:
-% \begin{lstxsample}
-%    \lstdefineformat{C}{%
-%        \{=\newline\string\newline\indent,%
-%        \}=[;]\newline\noindent\string\newline,%
-%        \};=\newline\noindent\string\newline,%
-%        ;=[\ ]\string\space}
-% \end{lstxsample}
-% \begin{lstsample}{\lstset{language={}}}{}
-%    \begin{lstlisting}[format=C]
-%    for (int i=0;i<10; i++){/* wait */};
-%    \end{lstlisting}
-% \end{lstsample}
-% Sometimes the problem is just to find a suitable format definition.
-% Further formatting is complicated.
-% Here are only three examples with increasing level of difficulty.
-% \begin{enumerate}
-% \item Insert horizontal space to separate function/procedure name and
-%       following parenthesis or to separate arguments of a function,
-%       e.g.~add the space after a comma (if inside function call).
-% \item Smart breaking of long lines. Consider long `and/or' expressions.
-%       Formatting should follow the logical structure!
-% \item Context sensitive formatting rules. It can be annoying if empty
-%       or small blocks take three or more lines in the output---think of
-%       scrolling down all the time. So it would be nice if the block
-%       formatting was context sensitive.
-% \end{enumerate}
-% Note that this is a very first and clumsy attempt to provide automatic
-% formatting---clumsy since the problem isn't trivial. Any ideas are welcome.
-% Implementations also. Eventually you should know that you must request format
-% definitions at package loading, e.g.~via |\usepackage[formats]{listings}|.
-%
-% \subsection{Arbitrary linerange markers}\label{rArbitraryLinerangeMarkers}
-%
-% Instead of using \keyname{linerange} with line numbers, one can use text
-% markers. Each such marker consists of a \meta{prefix}, a \meta{text}, and a
-% \meta{suffix}. You once (or more) define prefixes and suffixes and then use
-% the marker text instead of the line numbers.
-% \begin{lstxsample}
-%    \lstset{rangeprefix=\{\ ,% curly left brace plus space
-%            rangesuffix=\ \}}% space plus curly right brace
-% \end{lstxsample}
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}%
-%          [linerange=loop\ 2-end]
-%    { loop 1 }
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    { end }
-%    { loop 2 }
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    { end }
-%    \end{lstlisting}
-% \end{lstsample}
-% Note that \TeX's special characters like the curly braces, the space, the
-% percent sign, and such must be escaped with a backslash.
-% \begin{syntax}
-% \item[1.2] \rkeyname{rangebeginprefix}|=|\meta{prefix}
-% \item[1.2] \rkeyname{rangebeginsuffix}|=|\meta{suffix}
-% \item[1.2] \rkeyname{rangeendprefix}|=|\meta{prefix}
-% \item[1.2] \rkeyname{rangeendsuffix}|=|\meta{suffix}
-%
-%       define individual prefixes and suffixes for the begin- and end-marker.
-%
-% \item[1.2] \rkeyname{rangeprefix}|=|\meta{prefix}
-% \item[1.2] \rkeyname{rangesuffix}|=|\meta{suffix}
-%
-%       define identical prefixes and suffixes for the begin- and end-marker.
-%
-% \item[1.2,true] \rkeyname{includerangemarker}|=|\meta{\alternative{true,false}}
-%
-%       shows or hides the markers in the output.
-% \end{syntax}
-% \begin{lstsample}{\lstset{rangeprefix=\{\ ,rangesuffix=\ \}}}{}
-%    \begin{lstlisting}%
-%          [linerange=loop\ 1-end,
-%           includerangemarker=false,
-%           frame=single]
-%    { loop 1 }
-%    for i:=maxint to 0 do
-%    begin
-%        { do nothing }
-%    end;
-%    { end }
-%    \end{lstlisting}
-% \end{lstsample}
-%
-%
-% \subsection{Multicolumn Listings}\label{rMulticolumnListings}
-%
-% When the \packagename{multicol} package is loaded, it can be used to typeset
-% multi-column listings.  These are specified with the |multicols| key.  For
-% example:
-% \begin{lstsample}{}{}
-%    \begin{lstlisting}[multicols=2]
-%    if (i < 0)
-%      i = 0
-%      j = 1
-%    end if
-%    if (j < 0)
-%      j = 0
-%    end if
-%    \end{lstlisting}
-% \end{lstsample}
-%
-% The multicolumn option is known to fail with some keys.
-%
-% \begin{advise}
-% \item Which keys?
-%       \advisespace
-%       Unfortunately, I don't know.  Carsten left the code for this option
-%       in the version 1.3b patch file with only that cryptic note for
-%       documentation.  Bug reports would be welcome, though I don't promise
-%       that they're fixable.  ---Brooks
-% \end{advise}
-%
-%
-%\iffalse
-% \section{Forthcoming ?}
-%
-% This section is rather rudimentary. It just lists some things I don't want
-% to forget.
-%
-% First of all, I'd like to support even more languages, for example Maple,
-% PostScript, and so on. Fortunately my lifetime is limited, so other
-% people may do that work. Please (e-)mail me your language definitions.
-%
-% Then, there are several ideas for the future. Some have already been stated
-% as `to do's; some came from other people and are stated below; some more are
-% far from being implemented,
-%   e.g.~\keyname{linerange}|=|\oarg{inter}\marg{line range list}
-% which prints all lines in the range and executes \meta{inter} when omitting
-% some code lines. The main problem here are frames and background colours;
-% what should happen to them? In fact, the problem is how this can be coded.
-% Another idea is to change the background colour (or the basic style) for
-% particular code blocks. This, too, is not easy.
-%
-%^^A Auto-detect whether surplus space (from spaces and tabs) isn't needed to fix
-%^^A alignment of wide character combinations like |==| or |<>|.
-%^^A
-%^^A Make package compatible to calc package.
-%^^A
-%^^A Rewrite \lst@LAS, \lst@DefDriver, \lst@Require to distinguish loading
-%^^A of languages (which don't need base languages at once) and aspects
-%^^A (which need required aspects to be loaded).
-%
-% \lsthelper{Vincent~Poirriez}{1999/11/18}{code examples inside caml comments}:
-% Inside caml comments, |[| and |]| should print the code in
-% between in basicstyle (or another newly introduced style). Nesting of these
-% `code example delimiters' is allowed, e.g.~|(* [[x;y]] *)|.
-%
-% \lsthelper{Claus~Atzenbeck}{1999/12/03}{`extendedchars=false' doesn't issue
-% warning when extended characters are used}: issue warning in final mode if
-% \ikeyname{extendedchars}|=false| but extended chars are used.
-%
-% \lsthelper{Andreas~Matthias}{2000/01/04}{define header/footer to print
-% the listing name}: Make the header/footer print the listing name. Some
-% people asked for continued captions.
-%\fi
-%
-%
-% \part{Tips and tricks}
-%
-% Note: This part of the documentation is under construction.
-% Section \ref{uHowTos} must be sorted by topic and ordered in some way.
-% Moreover a new section `Examples' is planned, but not written.
-% Lack of time is the main problem \ldots
-%
-%
-% \section{Troubleshooting}\label{uTroubleshooting}
-%
-% If you're faced with a problem with the \packagename{listings} package, there are
-% some steps you should undergo before you make a bug report. First you should
-% consult the reference guide to see whether the problem is already known. If not,
-% create a \emph{minimal} file which reproduces the problem. Follow these
-% instructions:
-% \begin{enumerate}
-% \item Start from the minimal file in section \ref{uAMinimalFile}.
-% \item Add the \LaTeX\ code which causes the problem, but keep it short.
-%       In particular, keep the number of additional packages small.
-% \item Remove some code from the file (and the according packages) until the
-%       problem disappears. Then you've found a crucial piece.
-% \item Add this piece of code again and start over with step 3 until all code
-%       and all packages are substantial.
-% \item You now have a minimal file. Send a bug report to the address on the
-%       first page of this documentation and include the minimal file together
-%       with the created \texttt{.log}-file. If you use a very special package
-%       (i.e.~one not on CTAN), also include the package if its software license
-%       allows it.
-% \end{enumerate}
-%
-%
-% \section{Bugs and workarounds}\label{uBugsWorkarounds}
-%
-% \subsection{Listings inside arguments}\label{uListingsArguments}
-%
-% At the moment it isn't possible to use \verb-\lstinline{...}- in a cell
-% of a table\makeatletter\@ifundefined{r@uProcessingInline}{}{%
-% (see section \ref{uProcessingInline} on page \pageref{uProcessingInline}
-% for more information)},%
-% \makeatother%
-% but it is possible to define a wrapper macro
-% which can be used instead of \verb-\lstinline{...}-:
-% \begin{lstsample}[lstlisting]{}{}
-%    \newcommand\foo{\lstinline{t}}
-%    \newcommand\foobar[2][]{\lstinline[#1]{#2}}
-%
-%    \begin{tabular}{ll}
-%    \foo & a variable\\
-%    \foobar[language=java]{int u;} & a declaration
-%    \end{tabular}
-% \end{lstsample}
-%
-%
-% \subsection{Listings with a background colour and \LaTeX{} escaped
-% formulas}
-% \label{uListingsBackgroundColour}
-%
-% If there is any text escaped to \LaTeX{} with some coloured background
-% and surrounding frames, then there are gaps in the background as well as
-% in the lines making up the frame.
-% \begin{lstsample}[lstlisting]{}{}
-%    \begin{lstlisting}[language=C, mathescape,
-%      backgroundcolor=\color{yellow!10}, frame=tlb]
-%    /* the following code computes $\displaystyle\sum_{i=1}^{n}i$ */
-%    for (i = 1; i <= limit; i++) {
-%      sum += i;
-%    }
-%    \end{lstlisting}
-% \end{lstsample}
-%
-% At the moment there is only one workaround:
-% \begin{itemize}
-%   \item Write your code into an external file \meta{filename}.
-%   \item Input your code by |\lstinputlisting|\meta{filename} into your
-%     document and surround it with a frame generated by |\begin{mdframed}|
-%     \ldots{} |\end{mdframed}|.
-% \end{itemize}
-% \begin{lstsample}[lstlisting]{}{}
-%    \begin{verbatimwrite}{temp.c}
-%    /* the following code computes $\displaystyle\sum_{i=1}^{n}i$ */
-%    for (i = 1; i <= limit; i++) {
-%      sum += i;
-%    }
-%    \end{verbatimwrite}
-%    \begin{mdframed}[backgroundcolor=yellow!10, rightline=false]
-%      \lstinputlisting[language=C,mathescape,frame={}]{./temp.c}
-%    \end{mdframed}
-% \end{lstsample}
-% For more information about the |verbatimwrite| environment have a look at
-% \cite{Fairbairns:moreverb}, the |mdframed| environment is deeply discussed in
-% \cite{DanielSchubert:mdframed}.
-%
-%
-% \section{How tos}\label{uHowTos}
-%
-%
-% \subsubsection*{How to reference line numbers}
-% Perhaps you want to put |\label{|\meta{whatever}|}| into a \LaTeX\ escape which is
-% inside a comment whose delimiters aren't printed?  If you did that, the compiler
-% won't see the \LaTeX\ code since it would be inside a comment, and the
-% \packagename{listings} package wouldn't print anything since the delimiters would
-% be dropped and |\label| doesn't produce any printable output, but you could still
-% reference the line number. Well, your wish is granted.
-%
-% In Pascal, for example, you could make the package recognize the `special'
-% comment delimiters |(*@| and |@*)| as begin-escape and end-escape sequences.
-% Then you can use this special comment for |\label|s and other things.
-% \begin{lstsample}{\lstset{numberstyle=\tiny,stepnumber=2,numbersep=5pt}}{}
-%    \lstset{escapeinside={(*@}{@*)}}
-%
-%    \begin{lstlisting}
-%    for i:=maxint to 0 do
-%    begin
-%        { comment }(*@\label{comment}@*)
-%    end;
-%    \end{lstlisting}
-%    Line \ref{comment} shows a comment.
-% \end{lstsample}
-% \begin{advise}
-% \item Can I use `|(*@|' and `|*)|' instead?
-%       \advisespace
-%       Yes.
-% \item Can I use `|(*|' and `|*)|' instead?
-%       \advisespace
-%       Sure. If you want this.
-% \item Can I use `|{@|' and `|@}|' instead?
-%       \advisespace
-%       No, never! The second delimiter is not allowed. The character `|@|' is
-%       defined to check whether the escape is over. But reading the lonely
-%       `end-argument' brace, \TeX\ encounters the error `\texttt{Argument of @
-%       has an extra \char125}'. Sorry.
-% \item Can I use `|{|' and `|}|' instead?
-%       \advisespace
-%       No. Again the second delimiter is not allowed. Here now \TeX\ would
-%       give you a `\texttt{Runaway argument}' error. Since `|}|' is defined to
-%       check whether the escape is over, it won't work as `end-argument' brace.
-% \item And how can I use a comment line?
-%       \advisespace
-%       For example, write `|escapeinside={//*}{\^^M}|'. Here |\^^M| represents
-%       the end of line character.
-% \end{advise}
-%
-%
-% \subsubsection*{How to gobble characters}
-% To make your \LaTeX\ code more readable, you might want to indent your
-% \texttt{lstlisting} listings. This indention should not show up in the
-% pretty-printed listings, however, so it must be removed. If you indent each code
-% line by three characters, you can remove them via |gobble=3|:
-% \begin{lstsample}{}{\lstset{showspaces}}
-%    \begin{lstlisting}[gobble=3]
-%    1  for i:=maxint to 0 do
-%     2 begin
-%      3    { do nothing }
-%    123end;
-%
-%       Write('Case insensitive ');
-%       WritE('Pascal keywords.');
-%    \end{lstlisting}
-% \end{lstsample}
-% Note that empty lines and the beginning and the end of the environment
-% need not respect the indention. However, never indent the end by more than
-% `\ikeyname{gobble}' characters. Moreover note that tabulators expand to
-% |tabsize| spaces before we gobble.
-% \begin{advise}
-% \item Could I use `\ikeyname{gobble}' together with `|\lstinputlisting|'?
-%       \advisespace
-%       Yes, but it has no effect.
-%
-% \item Note that `\ikeyname{gobble}' can also be set via `|\lstset|'.
-% \end{advise}
-%
-%
-% \subsubsection*{How to include graphics}
-% \lsthelper{Herbert~Weinhandl}{1999/09/06}{listings + eps} found a very easy
-% way to include graphics in listings. Thanks for contributing this idea---an
-% idea I would never have had.
-%
-% Some programming languages allow the dollar sign to be part of an identifier.
-% But except for intermediate function names or library functions, this
-% character is most often unused. The \packagename{listings} package defines
-% the \ikeyname{mathescape} key, which lets `|$|' escape to \TeX's math mode.
-% This makes the dollar character an excellent candidate for our purpose here:
-% use a package which can include a graphic, set \ikeyname{mathescape} true,
-% and include the graphic between two dollar signs, which are inside a comment.
-%
-% The following example is originally from a header file I got from Herbert.
-% For the presentation here I use the \texttt{lstlisting} environment and an
-% excerpt from the header file. The |\includegraphics| command is from
-% David Carlisle's \packagename{graphics} bundle.
-% \begin{verbatim}
-%   \begin{lstlisting}[mathescape=true]
-%   /*
-%    $ \includegraphics[height=1cm]{defs-p1.eps} $
-%    */
-%   typedef struct {
-%     Atom_T          *V_ptr;   /* pointer to Vacancy in grid    */
-%     Atom_T          *x_ptr;   /* pointer to (A|B) Atom in grid */
-%   } ABV_Pair_T;
-%   \end{lstlisting}\end{verbatim}
-% The result looks pretty good. Unfortunately you can't see it, because the
-% graphic wasn't available when the manual was typeset.
-%
-%
-% \subsubsection*{How to get closed frames on each page}
-% The package supports closed frames only for listings which don't cross pages.
-% If a listing is split on two pages, there is neither a bottom rule at the
-% bottom of a page, nor a top rule on the following page. If you insist on
-% these rules, you might want to use \texttt{framed.sty} by Donald Arseneau.
-% Then you could write
-% \begin{verbatim}
-%    \begin{framed}
-%    \begin{lstlisting}
-%      or \lstinputlisting{...}
-%    \end{lstlisting}
-%    \end{framed}\end{verbatim}
-% The package also provides a \texttt{shaded} environment. If you use it, you
-% shouldn't forget to define \texttt{shadecolor} with the \packagename{color}
-% package.
-%
-%
-% \subsubsection*{How to print national characters with $\Lambda$ and \packagename{listings}}\label{uNationalCharacters}
-%
-% Apart from typing in national characters directly, you can use the `escape'
-% feature described in section \ref{rEscapingToLaTeX}.
-% The keys \ikeyname{escapechar}, \ikeyname{escapeinside}, and \ikeyname{texcl}
-% allow partial usage of \LaTeX\ code.
-%
-% Now, if you use $\Lambda$ (Lambda, the \LaTeX\ variant for Omega) and want,
-% for example, Arabic comment lines, you need not write |\begin{arab}|
-% \ldots\ |\end{arab}| each escaped comment line. This can be automated:
-% \begin{verbatim}
-%    \lstset{escapebegin=\begin{arab},escapeend=\end{arab}}
-%
-%    \begin{lstlisting}[texcl]
-%    // Replace text by Arabic comment.
-%    for (int i=0; i<1; i++) { };
-%    \end{lstlisting}\end{verbatim}
-% If your programming language doesn't have comment lines, you'll have to use
-% \ikeyname{escapechar} or \ikeyname{escapeinside}:
-% \begin{verbatim}
-%    \lstset{escapebegin=\begin{greek},escapeend=\end{greek}}
-%
-%    \begin{lstlisting}[escapeinside=`']
-%    /* `Replace text by Greek comment.' */
-%    for (int i=0; i<1; i++) { };
-%    \end{lstlisting}\end{verbatim}
-% Note that the delimiters |`| and |'| are essential here. The example doesn't
-% work without them. There is a more clever way if the comment delimiters of
-% the programming language are single characters, like the braces in Pascal:
-% \begin{verbatim}
-%    \lstset{escapebegin=\textbraceleft\begin{arab},
-%            escapeend=\end{arab}\textbraceright}
-%
-%    \begin{lstlisting}[escapeinside=\{\}]
-%    for i:=maxint to 0 do
-%    begin
-%        { Replace text by Arabic comment. }
-%    end;
-%    \end{lstlisting}\end{verbatim}
-% Please note that the `interface' to $\Lambda$ is completely untested.
-% Reports are welcome!
-%
-%
-% \subsubsection*{How to get bold typewriter type keywords}
-% Use the \href{http://www.ctan.org/tex-archive/fonts/luximono}{\packagename{LuxiMono}} package.
-%
-% \iffalse
-% Many people asked for bold typewriter fonts since they aren't included in
-% the \LaTeX\ standard distribution. Here now one answer on how to use them
-% in spite of that.
-% \begin{advise}
-% \item Please note that I personally don't regard the following as a good
-%       solution. Such a bold typewriter type is too heavy. It would be better
-%       to use a light version of \texttt{cmtt} as basic font and \texttt{cmtt}
-%       or a \emph{slightly} heavier type for keywords.
-%
-% \item Why don't you tell us how to use the better solution?
-%       \advisespace
-%       A light version of \texttt{cmtt} doesn't exist. If it's once available,
-%       you can do a similar job as described below.
-% \end{advise}
-% First of all, you'll need Metafont source files for bold typewriter, e.g.~
-% \texttt{cmbtt8.mf}, \texttt{cmbtt9.mf} and \texttt{cmbtt10.mf} from
-% \href{ftp://ftp.dante.de/tex-archive/fonts/cm/mf-extra/bold}
-%      {CTAN/fonts/cm/mf-extra/bold}.
-% Secondly you have to create \texttt{.tfm}-files, i.e.~run the Metafont
-% program on these sources. This is possibly done automatically when you use
-% the fonts in a document. Finally you must tell \LaTeX\ that you've installed
-% bold typewriter fonts. Just use
-% \begin{verbatim}
-%    \DeclareFontShape{OT1}{cmtt}{bx}{n}
-%         {<5><6><7><8>cmbtt8%
-%          <9>cmbtt9%
-%          <10><10.95>cmbtt10%
-%          <12><14.4><17.28><20.74><24.88>cmbtt10%
-%          }{}\end{verbatim}
-% in the preamble of your document. If you use these fonts often, you might
-% want to make a local copy of \texttt{ot1cmtt.fd} and replace the declaration
-% there. But note that you're not allowed to distributed the modified file
-% under its original name!
-% \fi
-%
-%
-% \subsubsection*{How to work with plain text}
-% If you want to use \packagename{listings} to set plain text (perhaps with
-% line numbers, or like |verbatim| but with line wrapping, or so forth, use
-% the empty language: |\lstset{language=}|.
-%
-%
-% \subsubsection*{How to get the developer's guide}
-% In the \emph{source directory} of the listings package, i.e.~where
-% the \texttt{.dtx} files are, create the file \texttt{ltxdoc.cfg} with the
-% following contents.
-% \begin{verbatim}
-%    \AtBeginDocument{\AlsoImplementation}\end{verbatim}
-% Then run \texttt{listings.dtx} through \LaTeX\ twice, run Makeindex (with
-% the |-s gind.ist| option), and then run \LaTeX\ one last time on
-% \texttt{listings.dtx}. This creates the whole documentation including User's
-% guide, Reference guide, Developer's guide, and Implementation.
-%
-% If you can run the (GNU) make program, executing the command
-% \begin{verbatim}
-%    make all\end{verbatim}
-% or
-% \begin{verbatim}
-%    make listings-devel\end{verbatim}
-% gives the same result---it is called \texttt{listings-devel.pdf}.
-%
-% \makeatletter
-%^^A \def\index@prologue{\section*{Index}\markboth{Index}{Index}}
-% \def\index@prologue{\part{Index}\markboth{Index}{Index}}
-% \makeatother
-%^^A \StopEventually{\lstcheckreference\setcounter{IndexColumns}{2}\PrintIndex}
-% \StopEventually{%
-% \begin{thebibliography}{MDB01}
-%
-%     \bibitem[Fai11]{Fairbairns:moreverb}
-%       Robin Fairbairns.
-%       \newblock{The \textsf{moreverb} package}, 2011.
-%
-%     \bibitem[DS13]{DanielSchubert:mdframed}
-%       Marco Daniel and Elke Schubert.
-%       \newblock{The \textsf{mdframed} package}, 2013.
-% \end{thebibliography}
-% \setcounter{IndexColumns}{2}\PrintIndex}
-%
-%
-% \part{Developer's guide}
-%
-% First I must apologize for this developer's guide since some parts are not
-% explained as well as possible. But note that you are in a pretty good shape:
-% this developer's guide exists! ^^A :-)
-% You might want to peek into section \ref{dPackageExtensions} before reading
-% section \ref{dBasicConcepts}.
-%
-%
-% \section{Basic concepts}\label{dBasicConcepts}
-%
-% The functionality of the \packagename{listings} package appears to be
-% divided into two parts: on the one hand commands which actually typeset
-% listings and on the other via |\lstset| adjustable parameters. Both could
-% be implemented in terms of \lst-aspects, which are simply collections of
-% public keys and commands and internal hooks and definitions. The package
-% defines a couple of aspects, in particular the kernel, the main engine.
-% Other aspects drive this engine, and language and style definitions tell
-% the aspects how to drive. The relations between car, driver and assistant
-% driver are exactly reproduced---and I'll be your driving instructor.
-%
-%
-% \subsection{Package loading}\label{dPackageLoading}
-%
-% Each option in |\usepackage[|\meta{options}|]{listings}| loads an aspect or
-% \emph{prevents} the package from loading it if the aspect name is
-% \emph{preceded by an exclamation mark}. This mechanism was designed to clear
-% up the dependencies of different package parts and to debug the package. For
-% this reason there is another option:
-% \begin{syntax}
-% \item[0.21,,option] \texttt{noaspects}\leavevmode
-%
-%       deletes the list of aspects to load. Note that, for example, the
-%       option lists |0.21,!labels,noaspects| and |noaspects| are essentially
-%       the same: the kernel is loaded and no other aspect.
-% \end{syntax}
-% This is especially useful for aspect-testing since we can load exactly the
-% required parts. Note, however, that an aspect is loaded later if a predefined
-% programming language requests it. One can load aspects also by hand:
-% \begin{syntax}
-% \item[0.20] |\lstloadaspects|\marg{comma separated list of aspect names}
-%
-%       loads the specified aspects if they are not already loaded.
-% \end{syntax}
-% Here now is a list of all aspects and related keys and commands---in the hope
-% that this list is complete.
-% \begin{description}
-% \hyphenpenalty=10000\relax \rightskip=0pt plus \linewidth\relax
-% \item[\aspectname{strings}]\leavevmode
-%
-%       \lstprintaspectkeysandcmds{strings}
-%
-% \item[\aspectname{comments}]\leavevmode
-%
-%       \lstprintaspectkeysandcmds{comments}
-%
-% \item[\aspectname{pod}]\leavevmode
-%
-%       \lstprintaspectkeysandcmds{pod}
-%
-% \item[\aspectname{escape}]\leavevmode
-%
-%       \lstprintaspectkeysandcmds{escape}
-%
-% \item[\aspectname{writefile}] requires 1 |\toks|, 1 |\write|
-%
-%       |\lst@BeginWriteFile|, |\lst@BeginAlsoWriteFile|, |\lst@EndWriteFile|
-%
-% \item[\aspectname{style}]\leavevmode
-%
-%       empty style, \lstprintaspectkeysandcmds{style}
-%
-% \item[\aspectname{language}]\leavevmode
-%
-%       empty language, \lstprintaspectkeysandcmds{language}
-%
-% \item[\aspectname{keywords}]\leavevmode
-%
-%       \lstprintaspectkeysandcmds{keywords}
-%
-% \item[\aspectname{emph}] requires \aspectname{keywords}
-%
-%       \lstprintaspectkeysandcmds{emph}
-%
-% \item[\aspectname{html}] requires \aspectname{keywords}
-%
-%       \lstprintaspectkeysandcmds{html}
-%
-% \item[\aspectname{tex}] requires \aspectname{keywords}
-%
-%       \lstprintaspectkeysandcmds{tex}
-%
-% \item[\aspectname{directives}] requires \aspectname{keywords}
-%
-%       \lstprintaspectkeysandcmds{directives}
-%
-% \item[\aspectname{index}] requires \aspectname{keywords}
-%
-%       \lstprintaspectkeysandcmds{index}
-%
-% \item[\aspectname{procnames}] requires \aspectname{keywords}
-%
-%       \lstprintaspectkeysandcmds{procnames}
-%
-% \item[\aspectname{keywordcomments}]
-%       requires \aspectname{keywords}, \aspectname{comments}
-%
-%       \lstprintaspectkeysandcmds{keywordcomments}
-%
-% \item[\aspectname{labels}] requires 2 |\count|
-%
-%       \lstprintaspectkeysandcmds{labels}
-%
-% \item[\aspectname{lineshape}] requires 2 |\dimen|
-%
-%       \lstprintaspectkeysandcmds{lineshape}
-%
-% \item[\aspectname{frames}] requires \aspectname{lineshape}
-%
-%       \lstprintaspectkeysandcmds{frames}
-%
-% \item[\aspectname{make}] requires \aspectname{keywords}
-%
-%       \lstprintaspectkeysandcmds{make}
-%
-% \item[\aspectname{doc}] requires \aspectname{writefile} and 1 |\box|
-%
-%       \lstprintaspectkeysandcmds{doc}
-%
-% \item[\aspectname{0.21}] defines old keys in terms of the new ones.
-% \item[\aspectname{fancyvrb}] requires 1 |\box|
-%
-%       \lstprintaspectkeysandcmds{fancyvrb}
-%
-% \item[\aspectname{lgrind}]\leavevmode
-%
-%       \lstprintaspectkeysandcmds{lgrind}
-%
-% \item[\aspectname{hyper}] requires \aspectname{keywords}
-%
-%       \lstprintaspectkeysandcmds{hyper}
-% \end{description}
-% The kernel allocates 6 |\count|, 4 |\dimen| and 1 |\toks|.
-% Moreover it defines the following keys, commands, and environments:
-% \begin{itemize}\item[]
-% \hyphenpenalty=10000\relax \rightskip=0pt plus \linewidth\relax
-%       \lstprintaspectkeysandcmds{kernel}, \keyname{fancyvrb}
-% \end{itemize}
-%
-%
-% \subsection{How to define \lst-aspects}\label{dHowToDefineLstAspects}
-%
-% There are at least three ways to add new functionality: (a) you write an
-% aspect of general interest, send it to me, and I'll just paste it into the
-% implementation; (b) you write a `local' aspect not of general interest; or
-% (c) you have an idea for an aspect and make me writing it. (a) and (b) are
-% good choices.^^A :-)
-%
-% An aspect definition starts with |\lst@BeginAspect| plus arguments and ends
-% with the next |\lst@EndAspect|. In particular, aspect definitions can't be
-% nested.
-% \begin{syntax}
-% \item[0.20] |\lst@BeginAspect|[\oarg{list of required aspects}]\marg{aspect name}
-% \item[0.20] |\lst@EndAspect|
-% \end{syntax}
-% The optional list is a comma separated list of required aspect names.
-% The complete aspect is not defined in each of the following cases:
-% \begin{enumerate}
-% \item \meta{aspect name} is empty.
-% \item The aspect is already defined.
-% \item A required aspect is neither defined nor loadable via
-%       |\lstloadaspects|.
-% \end{enumerate}
-% Consequently you can't define a part of an aspect and later on another part.
-% But it is possible to define aspect $A_1$ and later aspect $A_2$ which
-% requires $A_1$.
-% \begin{advise}
-% \item Put local add-ons into `\texttt{lstmisc0.sty}'---this file is searched
-%       first by default. If you want to make add-ons for one particular
-%       document just replace the surrounding `|\lst@BeginAspect|' and
-%       `|\lst@EndAspect|' by `|\makeatletter|' and `|\makeatother|' and use
-%       the definitions in the preamble of your document. However, you have to
-%       load required aspects on your own.
-% \end{advise}
-% You can put any \TeX\ material in between the two commands, but note that
-% definitions must be |\global| if you need them later---\LaTeX's |\newcommand|
-% makes local definitions and can't be preceded by |\global|. So use the
-% following commands, |\gdef|, and commands described in later sections.
-% \begin{syntax}
-% \item[0.20] |\lst@UserCommand|\meta{macro}\meta{parameter text}\marg{replacement text}
-%
-%       The macro is (mainly) equivalent to |\gdef|. The purpose is to
-%       distinguish user commands and internal global definitions.
-%
-% \item[0.19] |\lst@Key|\marg{key name}\marg{init value}[\oarg{default value}]\marg{definition}
-% \item[0.19] |\lst@Key|\marg{key name}|\relax|[\oarg{default value}]\marg{definition}
-%
-%       defines a key using the \packagename{keyval} package from David
-%       Carlisle. \meta{definition} is the replacement text of a macro with
-%       one parameter. The argument is either the value from `key=value' or
-%       \meta{default value} if no `=value' is given. The helper macros
-%       |\lstKV@...| below might simplify \meta{definition}.
-%
-%       The key is not initialized if the second argument is |\relax|.
-%       Otherwise \meta{init value} is the initial value given to the key.
-%       Note that we locally switch to |\globalsdefs=1| to ensure that
-%       initialization is not effected by grouping.
-%
-% \item[0.19] |\lst@AddToHook|\marg{name of hook}\marg{\TeX\ material}
-%
-%       adds \TeX\ material at predefined points. Section \ref{dHooks} lists
-%       all hooks and where they are defined respectively executed.
-%       |\lst@AddToHook{A}{\csa}| before |\lst@AddToHook{A}{\csb}|
-%       \emph{does not} guarantee that |\csa| is executed before |\csb|.
-%
-% \item[0.20] |\lst@AddToHookExe|\marg{name of hook}\marg{\TeX\ material}
-%
-%       also executes \meta{\TeX\ material} for initialization. You might use
-%       local variables---local in the sense of \TeX\ and/or usual programming
-%       languages---but when the code is executed for initialization all
-%       assignments are global: we set |\globaldefs| locally to one.
-%
-% \item[0.20] |\lst@UseHook|\marg{name of hook}
-%
-%       executes the hook.
-% \end{syntax}
-% \begin{advise}
-% \item Let's look at two examples. The first extends the package by adding
-%       some hook-material. If you want status messages, you might write
-% \begin{verbatim}
-%    \lst@AddToHook{Init}{\message{\MessageBreak Processing listing ...}}
-%    \lst@AddToHook{DeInit}{\message{complete.\MessageBreak}}\end{verbatim}
-%       The second example introduces two keys to let the user control the
-%       messages. The macro |\lst@AddTo| is described in section
-%       \ref{dGeneralPurposeMacros}.
-% \begin{verbatim}
-%   \lst@BeginAspect{message}
-%   \lst@Key{message}{Annoying message.}{\gdef\lst@message{#1}}
-%   \lst@Key{moremessage}\relax{\lst@AddTo\lst@message{\MessageBreak#1}}
-%   \lst@AddToHook{Init}{\typeout{\MessageBreak\lst@message}}
-%   \lst@EndAspect\end{verbatim}
-%       However, there are certainly aspects which are more useful.
-% \end{advise}
-% The following macros can be used in the \meta{definition} argument of the
-% |\lst@Key| command to evaluate the argument. The additional prefix |KV|
-% refers to the \packagename{keyval} package.
-% \begin{syntax}
-% \item[0.19] |\lstKV@SetIf|\marg{value}\meta{if macro}
-%
-%       \meta{if macro} becomes |\iftrue| if the first character of
-%       \meta{value} equals |t| or |T|. Otherwise it becomes |\iffalse|.
-%       Usually you will use |#1| as \meta{value}.
-%
-% \item[1.0] \cs{lstKV@SwitchCases}\marg{value}\\
-%   |{|\meta{string 1}|&|\meta{execute 1}|\\|\\
-%   | |\meta{string 2}|&|\meta{execute 2}|\\|\\
-%   \hbox to 3em{\hfill\vdots}\\
-%   | |\meta{string $n$}|&|\meta{execute $n$}|}|\marg{else}
-%
-%       Either execute \meta{else} or the \meta{value} matching part.
-%
-% \item[0.20] |\lstKV@TwoArg|\marg{value}\marg{subdefinition}
-% \item[0.20] |\lstKV@ThreeArg|\marg{value}\marg{subdefinition}
-% \item[0.20] |\lstKV@FourArg|\marg{value}\marg{subdefinition}
-%
-%       \meta{subdefinition} is the replacement text of a macro with two,
-%       three, and four parameters. We call this macro with the arguments given
-%       by \meta{value}. Empty arguments are added if necessary.
-%
-% \item[0.19] |\lstKV@OptArg|\oarg{default arg.}\marg{value}\marg{subdefinition}
-%
-%       |[|\meta{default arg.}|]| is \emph{not} optional. \meta{subdefinition}
-%       is the replacement text of a macro with parameter text |[##1]##2|.
-%       Note that the macro parameter character |#| is doubled since used
-%       within another macro. \meta{subdefinition} accesses these arguments
-%       via |##1| and |##2|.
-%
-%       \meta{value} is usually the argument |#1| passed by the
-%       \packagename{keyval} package. If \meta{value} has no optional argument,
-%       \meta{default arg.} is inserted to provide the arguments to
-%       \meta{subdefinition}.
-%
-% \item[0.21] |\lstKV@XOptArg|\oarg{default arg.}\marg{value}\meta{submacro}
-%
-%       Same as |\lstKV@OptArg| but the third argument \meta{submacro} is
-%       already a definition and not replacement text.
-%
-% \item[0.20] |\lstKV@CSTwoArg|\marg{value}\marg{subdefinition}
-%
-%       \meta{value} is a \texttt comma \texttt separated list of one or two
-%       arguments. These are given to the subdefinition which is the
-%       replacement text of a macro with two parameters. An empty second
-%       argument is added if necessary.
-% \end{syntax}
-% \begin{advise}
-% \item One more example. The key `\keyname{sensitive}' belongs to the aspect
-%       \aspectname{keywords}. Therefore it is defined in between
-%       `|\lst@BeginAspect{keywords}|' and `|\lst@EndAspect|', which is not shown
-%       here.
-% \begin{verbatim}
-%   \lst@Key{sensitive}\relax[t]{\lstKV@SetIf{#1}\lst@ifsensitive}
-%   \lst@AddToHookExe{SetLanguage}{\let\lst@ifsensitive\iftrue}\end{verbatim}
-%       The last line is equivalent to
-% \begin{verbatim}
-%   \lst@AddToHook{SetLanguage}{\let\lst@ifsensitive\iftrue}
-%   \global\let\lst@ifsensitive\iftrue\end{verbatim}
-%       We initialize the variable globally since the user might request an
-%       aspect in a group. Afterwards the variable is used locally---there is
-%       no |\global| in \meta{\TeX\ material}. Note that we could define and
-%       init the key as follows:
-% \begin{verbatim}
-%   \lst@Key{sensitive}t[t]{\lstKV@SetIf{#1}\lst@ifsensitive}
-%   \lst@AddToHook{SetLanguage}{\let\lst@ifsensitive\iftrue}\end{verbatim}
-%\end{advise}
-%
-%
-% \subsection{Internal modes}\label{dInternalModes}
-%
-% You probably know \TeX's conditional commands |\ifhmode|, |\ifvmode|,
-% |\ifmmode|, and |\ifinner|. They tell you whether \TeX\ is in (restricted)
-% horizontal or (internal) vertical or in (nondisplay) mathematical mode. For
-% example, true |\ifhmode| and true |\ifinner| indicate restricted horizontal
-% mode, which means that you are in a |\hbox|. The typical user doesn't care
-% about such modes; \TeX/\LaTeX\ manages all this. But since you're reading the
-% developer's guide, we discuss the analogue for the \packagename{listings}
-% package now. It uses modes to distinguish comments from strings, `comment
-% lines' from `single comments', and so on.
-%
-% The package is in `no mode' before reading the source code. In the phase of
-% initialization it goes to `processing mode'. Afterwards the mode depends on
-% the actual source code. For example, consider the line
-% \begin{verbatim}
-%    "string" // comment\end{verbatim}
-% and assume \texttt{language=C++}. Reading the string delimiter, the package
-% enters `string mode' and processes the string. The matching closing delimiter
-% leaves the mode, i.e.\ switches back to the general `processing mode'. Coming
-% to the two slashes, the package detects a comment line; it therefore enters
-% `comment line mode' and outputs the slashes. Usually this mode lasts to the
-% end of line.
-%
-% But with \texttt{textcl=true} the \aspectname{escape} aspect immediately
-% leaves `comment line mode', interrupts the current mode sequence, and enters
-% `\TeX\ comment line mode'. At the end of line we reenter the previous mode
-% sequence `no mode' $\to$ 'processing mode'. This escape to \LaTeX\ works
-% since `no mode' implies that \TeX's characters and catcodes are present,
-% whereas `processing mode' means that \packagename{listings}' characters and
-% catcodes are active.
-%
-% \begin{table}[htbp]
-% \caption{Internal modes}\label{dDefinedInternalModes}
-% \def\lsttabspace{\hspace*{1em}\hfill}
-% \begin{tabular}{@{}lp{0.56\linewidth}@{}}
-% aspect\lsttabspace\meta{mode name} & Usage/We are processing \ldots\\
-% \noalign{\smallskip}
-% kernel\lsttabspace |\lst@nomode| &
-%       If this mode is active, \TeX's `character table' is present; the other
-%       implication is not true. Any other mode \emph{may} imply that catcodes
-%       and\nobreak/\allowbreak or definitions of characters are changed.
-% \\
-%       \lsttabspace |\lst@Pmode| &
-%       is a general processing mode. If active we are processing a listing,
-%       but haven't entered a more special mode.
-% \\
-%       \lsttabspace |\lst@GPmode| &
-%       general purpose mode for language definitions.
-% \\
-% \aspectname{pod}\lsttabspace |\lst@PODmode| &
-%       \ldots~a POD---Perl specific.
-% \\
-% \aspectname{escape}\lsttabspace |\lst@TeXLmode| &
-%       \ldots~a comment line, but \TeX's character table is present---except
-%       the EOL character, which is needed to terminate this mode.
-% \\
-%       \lsttabspace |\lst@TeXmode| &
-%       indicates that \TeX's character table is present (except one user
-%       specified character, which is needed to terminate this mode).
-% \\
-% \aspectname{directives}\lsttabspace |\lst@CDmode| &
-%       indicates that the current line began with a compiler directive.
-% \\
-% \aspectname{keywordcomments}\lsttabspace |\lst@KCmode| &
-%       \ldots~a keyword comment.
-% \\
-%       \lsttabspace |\lst@KCSmode| &
-%       \ldots~a keyword comment which can be terminated by a semicolon only.
-% \\
-% \aspectname{html}\lsttabspace |\lst@insidemode| &
-%       Active if we are between \texttt{<} and \texttt{>}.
-% \\
-% \aspectname{make}\lsttabspace |\lst@makemode| &
-%       Used to indicate a keyword.
-% \end{tabular}
-% \end{table}
-% Table \ref{dDefinedInternalModes} lists all static modes and which aspects
-% they belong to. Most features use dynamically created mode numbers, for
-% example all strings and comments. Each aspect may define its own mode(s)
-% simply by allocating it/\allowbreak them inside the aspect definition.
-% \begin{syntax}
-% \item[0.19] |\lst@NewMode|\meta{mode \textup(control sequence\textup)}
-%
-%       defines a new static mode, which is a nonnegative integer assigned to
-%       \meta{mode}. \meta{mode} should have the prefix \texttt{lst@} and
-%       suffix \texttt{mode}.
-%
-% \item[0.21] |\lst@UseDynamicMode|\marg{token\textup(s\textup)}
-%
-%       inserts a dynamic mode number as argument to the token(s).
-%
-%       This macro cannot be used to get a mode number when an aspect is
-%       loaded or defined. It can only be used every listing in the process
-%       of initialization, e.g.~to define comments when the character table
-%       is selected.
-%
-% \item[0.19,,changed] |\lst@EnterMode|\meta{mode}\marg{start tokens}
-%
-%       opens a group level, enters the mode, and executes \meta{start tokens}.
-%
-%       Use |\lst@modetrue| in \meta{start tokens} to prohibit future mode
-%       changes---except leaving the mode, of course. You must test yourself
-%       whether you're allowed to enter, see below.
-%
-% \item[0.19] |\lst@LeaveMode|
-%
-%       returns to the previous mode by closing a group level if and only if
-%       the current mode isn't |\lst@nomode| already. You must test yourself
-%       whether you're allowed to leave a mode, see below.
-%
-%\iffalse
-% \item[0.19] |\lst@LeaveAllModes|
-%
-%       returns to |\lst@nomode|.
-%       This is some kind of emergency macro, so don't use it!
-%\fi
-%
-% \item[0.19] |\lst@InterruptModes|
-% \item[0.19] |\lst@ReenterModes|
-%
-%       The first command returns to |\lst@nomode|, but saves the current mode
-%       sequence on a special stack. Afterwards the second macro returns to the
-%       previous mode. In between these commands you may enter any mode you
-%       want. In particular you can interrupt modes, enter some modes, and say
-%       `interrupt modes' again. Then two re-enters will take you back in front
-%       of the first `interrupt modes'.
-%
-%       Remember that |\lst@nomode| implies that \TeX's character table is
-%       active.
-% \end{syntax}
-% Some variables show the internal state of processing. You are allowed to read
-% them, but \emph{direct write access is prohibited}. Note: |\lst@ifmode| is
-% \emph{not} obsolete since there is no relation between the boolean and the
-% current mode. It will happen that we enter a mode without setting
-% |\lst@ifmode| true, and we'll set it true without assigning any mode!
-% \begin{syntax}
-% \item[0.18,,counter] |\lst@mode|
-%
-%       keeps the current mode number. Use |\ifnum\lst@mode=|\meta{mode name}
-%       to test against a mode. Don't modify the counter directly!
-%
-% \item[0.18,,boolean] |\lst@ifmode|
-%
-%       No mode change is allowed if this boolean is true---except leaving the
-%       current mode. Use |\lst@modetrue| to modify this variable, but do it
-%       only in \meta{start tokens}.
-%
-% \item[1.0,,boolean] |\lst@ifLmode|
-%
-%       Indicates whether the current mode ends at end of line.
-% \end{syntax}
-%
-%
-% \subsection{Hooks}\label{dHooks}
-%
-% Several problems arise if you want to define an aspect.
-% You should and/or must
-%   (a) find additional functionality (of general interest) and implement it,
-%   (b) create the user interface, and
-%   (c) interface with the \packagename{listings} package, i.e.~find correct
-%       hooks and insert appropriate \TeX\ material.
-% (a) is out of the scope of this developer's guide. The commands |\lstKV@...|
-% in section \ref{dHowToDefineLstAspects} might help you with (b). Here now we
-% describe all hooks of the \packagename{listings} package.
-%
-% All hooks are executed inside an overall group. This group starts somewhere
-% near the beginning and ends somewhere at the end of each listing. Don't make
-% any other assumptions on grouping. So define variables globally if it's
-% necessary---and be alert of side effects if you don't use your own groups.
-% \begin{syntax}
-% \item \hookname{AfterBeginComment}
-%
-%       is executed after the package has entered comment mode.
-%       The starting delimiter is usually typeset when the hook is called.
-%
-% \item \hookname{BoxUnsafe}
-%
-%       Contains all material to deactivate all commands and registers which
-%       are possibly unsafe inside |\hbox|. It is used whenever the package
-%       makes a box around a listing and for \packagename{fancyvrb} support.
-%
-% \item \hookname{DeInit}
-%
-%       Called at the very end of a listing but before closing the box from
-%       \hookname{BoxUnsafe} or ending a float.
-%
-% \item \hookname{DetectKeywords}
-%
-%       This \hookname{Output} subhook is executed if and only if mode changes
-%       are allowed, i.e.~if and only if the package doesn't process a comment,
-%       string, and so on---see section \ref{dInternalModes}.
-%
-% \item \hookname{DisplayStyle}
-%
-%       deactivates/activates features for displaystyle listings.
-%
-% \item \hookname{EmptyStyle}
-%
-%       Executed to select the `empty' style---except the user has redefined
-%       the style.
-%
-% \item \hookname{EndGroup}
-%
-%       Executed whenever the package closes a group, e.g.~at end of comment or
-%       string.
-%
-% \item \hookname{EOL}
-%
-%       Called at each end of \emph{input} line, right before
-%       \hookname{InitVarsEOL}.
-%
-% \item \hookname{EveryLine}
-%
-%       Executed at the beginning of each \emph{output} line, i.e.~more than
-%       once for broken lines. This hook must not change the horizontal or
-%       vertical position.
-%
-% \item \hookname{EveryPar}
-%
-%       Executed once for each input line when the output starts. This hook
-%       must not change the horizontal or vertical position.
-%
-%^^A \item \hookname{ExcludeDelims}
-%^^A
-%^^A       Executed by the \keyname{excludedelims} key before the excluded
-%^^A       delimiters are determined.
-%^^A
-% \item \hookname{ExitVars}
-%
-%       Executed right before \hookname{DeInit}.
-%
-% \item \hookname{FontAdjust}
-%
-%       adjusts font specific internal values (currently |\lst@width| only).
-%
-% \item \hookname{Init}
-%
-%       Executed once each listing to initialize things before the character
-%       table is changed. It is called after \hookname{PreInit} and before
-%       \hookname{InitVars}.
-%
-% \item \hookname{InitVars}
-%
-%       Called to init variables each listing.
-%
-% \item \hookname{InitVarsBOL}
-%
-%       initializes variables at the beginning of each input line.
-%
-% \item \hookname{InitVarsEOL}
-%
-%       updates variables at the end of each input line.
-%
-% \item \hookname{ModeTrue}
-%
-%       executed by the package when mode changes become illegal.
-%       Here keyword detection is switched off for comments and strings.
-%
-% \item \hookname{OnEmptyLine}
-%
-%       executed \emph{before} the package outputs an empty line.
-%
-% \item \hookname{OnNewLine}
-%
-%       executed \emph{before} the package starts one or more new lines,
-%       i.e.~before saying |\par\noindent\hbox{}| (roughly speaking).
-%
-% \item \hookname{Output}
-%
-%       Called before an identifier is printed.
-%       If you want a special printing style, modify |\lst@thestyle|.
-%
-% \item \hookname{OutputBox}
-%
-%       used inside each output box. Currently it is only used to make the
-%       package work together with Lambda---hopefully.
-%
-% \item \hookname{OutputOther}
-%
-%       Called before other character strings are printed.
-%       If you want a special printing style, modify |\lst@thestyle|.
-%
-% \item \hookname{PostOutput}
-%
-%       Called after printing an identifier or any other output unit.
-%
-% \item \hookname{PostTrackKeywords}
-%
-%       is a very special \hookname{Init} subhook to insert keyword tests and
-%       define keywords on demand.
-%       This hook is called after \hookname{TrackKeywords}.
-%
-% \item \hookname{PreInit}
-%
-%       Called right before \hookname{Init} hook.
-%
-% \item \hookname{PreSet}
-%
-%       Each typesetting command/environment calls this hook to initialize
-%       internals before any user supplied key is set.
-%
-% \item \hookname{SelectCharTable}
-%
-%       is executed after the package has selected the standard character
-%       table. Aspects adjust the character table here and define string and
-%       comment delimiters, and such.
-%
-% \item \hookname{SetFormat}
-%
-%       Called before internal assignments for setting a format are made.
-%       This hook determines which parameters are reset every format selection.
-%
-% \item \hookname{SetStyle}
-%
-%       Called before internal assignments for setting a style are made.
-%       This hook determines which parameters are reset every style selection.
-%
-% \item \hookname{SetLanguage}
-%
-%       Called before internal assignments for setting a language are made.
-%       This hook determines which parameters are reset every language
-%       selection.
-%
-% \item \hookname{TextStyle}
-%
-%       deactivates/activates features for textstyle listings.
-%
-% \item \hookname{TrackKeywords}
-%
-%       is a very special \hookname{Init} subhook to insert keyword tests and
-%       define keywords on demand.
-%       This hook is called before \hookname{PostTrackKeywords}.
-% \end{syntax}
-%
-%
-% \subsection{Character tables}\label{dCharacterTables}
-%
-% Now you know how a car looks like, and you can get a driving license if you
-% take some practice. But you will have difficulties if you want to make heavy
-% alterations to the car. So let's take a closer look and come to the most
-% difficult part: the engine. We'll have a look at the big picture and fill in
-% the details step by step. For our purpose it's good to override \TeX's
-% character table. First we define a standard character table which contains
-% \begin{itemize}
-% \item letters: characters identifiers are out of,
-% \item digits: characters for identifiers or numerical constants,
-% \item spaces: characters treated as blank spaces,
-% \item tabulators: characters treated as tabulators,
-% \item form feeds: characters treated as form feed characters, and
-% \item others: all other characters.
-% \end{itemize}
-% This character table is altered depending on the current programming language.
-% We may define string and comment delimiters or other special characters.
-% Table \ref{rStdCharTable} on page \pageref{rStdCharTable} shows the standard
-% character table. It can be modified with the keys \keyname{alsoletter},
-% \keyname{alsodigit}, and \keyname{alsoother}.
-%
-% How do these `classes' work together? Let's say that the current character
-% string is `|tr|'. Then letter `|y|' simply appends the letter and we get
-% `|try|'. The next nonletter (and nondigit) causes the output of the
-% characters. Then we collect all coming nonletters until reaching a letter
-% again. This causes the output of the nonletters, and so on. Internally each
-% character becomes active in the sense of \TeX\ and is defined to do the right
-% thing, e.g.~we say
-% \begin{verbatim}
-%    \def A{\lst@ProcessLetter A}\end{verbatim}
-% where the first `|A|' is active and the second has letter catcode 11.
-% The macro |\lst@ProcessLetter| gets one token and treats it as a letter.
-% The following macros exist, where the last three get no explicit argument.
-% \begin{syntax}
-% \item[0.18] |\lst@ProcessLetter| \meta{spec.\ token}
-% \item[0.18] |\lst@ProcessDigit| \meta{spec.\ token}
-% \item[0.18] |\lst@ProcessOther| \meta{spec.\ token}
-% \item[0.18] |\lst@ProcessTabulator|
-% \item[0.18] |\lst@ProcessSpace|
-% \item[0.20] |\lst@ProcessFormFeed|
-% \end{syntax}
-% \meta{spec.\ token} is supposed to do two things. Usually it expands to
-% a printable version of the character. But if |\lst@UM| is equivalent to
-% |\@empty|, \meta{spec.\ token} must expand to a \emph{character token}.
-% For example, the sharp usually expands to |\#|, which is defined via
-% |\chardef| and is not a character token. But if |\lst@UM| is equivalent to
-% |\@empty|, the sharp expands to the character `|#|' (catcode 12). Note:
-% \emph{Changes to} |\lst@UM| \emph{must be locally.}  However, there should
-% be no need to do such basic things yourself. The \packagename{listings}
-% package provides advanced macros which use that feature,
-% e.g.~|\lst@InstallKeywords| in section \ref{dKeywordsAndWorkingIdentifiers}.
-%
-% \begin{syntax}
-% \item[0.18] |\lst@Def|\marg{character code}\meta{parameter text}\marg{definition}
-% \item[0.18] |\lst@Let|\marg{character code}\meta{token}
-%
-%       defines the specified character respectively assigns \meta{token}.
-%       The catcode table if not affected. Be careful if your definition has
-%       parameters: it is not safe to read more than one character ahead.
-%       Moreover, the argument can be \emph{arbitrary}; somtimes it's the next
-%       source code character, sometimes it's some code of the
-%       \packagename{listings} package, e.g.~|\relax|, |\@empty|, |\else|,
-%       |\fi|, and so on. Therefore don't use \TeX's ord-operator |`| on such
-%       an argument, e.g.~don't write |\ifnum`#1=65| to test against `|A|'.
-%
-%       |\lst@Def| and |\lst@Let| are relatively slow. The real definition of
-%       the standard character table differs from the following example, but it
-%       could begin with
-% \begin{verbatim}
-%    \lst@Def{9}{\lst@ProcessTabulator}
-%    \lst@Def{32}{\lst@ProcessSpace}
-%    \lst@Def{48}{\lst@ProcessDigit 0}
-%    \lst@Def{65}{\lst@ProcessLetter A}\end{verbatim}
-%
-%\iffalse
-% \item[0.20] |\lst@activecharstrue|
-% \item[0.20] |\lst@activecharsfalse|
-%
-%       control whether selecting the character table also makes all characters
-%       active (standard/extended). This is usually true and therefore default.
-%       Only the \packagename{fancyvrb} interface sets it locally false.
-%\fi
-% \end{syntax}
-% That's enough for the moment. Section \ref{dUsefulInternalDefinitions}
-% presents advanced definitions to manipulate the character table, in
-% particular how to add new comment or string types.
-%
-%
-% \subsection{On the output}
-%
-% The \packagename{listings} package uses some variables to keep the output
-% data. Write access is not recommended. Let's start with the easy ones.
-% \begin{syntax}
-% \item[0.17,,data] |\lst@lastother|
-%
-%       equals \meta{spec.\ token} version of the last processed
-%       nonidentifier-character. Since programming languages redefine the
-%       standard character table, we use the original \meta{spec.\ token}.
-%       For example, if a double quote was processed last, |\lst@lastother|
-%       is not equivalent to the macro which enters and leaves string mode.
-%       It's equivalent to |\lstum@"|, where |"| belongs to the control
-%       sequence. Remember that \meta{spec.\ token} expands either to a
-%       printable or to a token character.
-%
-%       |\lst@lastother| is equivalent to |\@empty| if such a character is not
-%       available, e.g.~at the beginning of a line. Sometimes an indentifier
-%       has already been printed after processing the last `other' character,
-%       i.e.~the character is far, far away. In this case |\lst@lastother|
-%       equals |\relax|.
-%
-% \item[0.17] |\lst@outputspace|
-%
-%       Use this predefined \meta{spec.\ token} (obviously for character code
-%       32) to test against |\lst@lastother|.
-%
-% \item[0.20] |\lstum@backslash|
-%
-%       Use this predefined \meta{spec.\ token} (for character code 92) to test
-%       against |\lst@lastother|. In the replacement text for |\lst@Def| one
-%       could write |\ifx| |\lst@lastother| |\lstum@backslash| \ldots\ to test
-%       whether the last character has been a backslash.
-%
-% \item[0.20] |\lst@SaveOutputDef|\marg{character code}\meta{macro}
-%
-%       Stores the \meta{spec.\ token} corresponding to \meta{character code}
-%       in \meta{macro}. This is the only safe way to get a correct meaning to
-%       test against |\lst@lastother|, for example
-%           |\lst@SaveOutputDef{"5C}\lstum@backslash|.
-%
-%       You'll get a ``runaway argument'' error if \meta{character code} is not
-%       between 33 and 126 (inclusive).
-% \end{syntax}
-% Now let's turn to the macros dealing a bit more with the output data and
-% state.
-% \begin{syntax}
-% \item[1.0] |\lst@XPrintToken|
-%
-%       outputs the current character string and resets it. This macro keeps
-%       track of all variables described here.
-%
-% \item[0.18,,token] |\lst@token|
-%
-%       contains the current character string. Each `character' usually
-%       expands to its printable version, but it must expand to a character
-%       token if |\lst@UM| is equivalent to |\@empty|.
-%
-% \item[0.12,,counter] |\lst@length|
-%
-%       is the length of the current character string.
-%
-% \item[0.12,,dimension] |\lst@width|
-%
-%       is the width of a single character box.
-%
-% \item[0.20,,global dimension] |\lst@currlwidth|
-%
-%       is the width of so far printed line.
-%
-% \item[0.18,,global counter] |\lst@column|
-% \item[0.12,,global counter] |\lst@pos| (nonpositive)
-%
-%       |\lst@column|$-$|\lst@pos| is the length of the so far printed line.
-%       We use two counters since this simplifies tabulator handling:
-%       |\lst@pos| is a nonpositive representative of `length of so far
-%       printed line' modulo \keyname{tabsize}.
-%       It's usually not the biggest nonpositive representative.
-%
-% \item[0.20] |\lst@CalcColumn|
-%
-%       |\@tempcnta| gets |\lst@column| $-$ |\lst@pos| $+$ |\lst@length|.
-%       This is the current column number minus one, or the current column
-%       number zero based.
-%
-% \item[0.18,,global dimension] |\lst@lostspace|
-%
-%       equals `lost' space: desired current line width minus real line width.
-%       Whenever this dimension is positive the flexible column format can use
-%       this space to fix the column alignment.
-% \end{syntax}
-%
-%
-% \section{Package extensions}\label{dPackageExtensions}
-%
-%
-% \subsection{Keywords and working identifiers}\label{dKeywordsAndWorkingIdentifiers}
-%
-% The \aspectname{keywords} aspect defines two main macros. Their respective
-% syntax is shown on the left. On the right you'll find examples how the
-% package actually defines some keys.
-% \begin{syntax}
-% \item[0.21]
-%   \cs{lst@InstallFamily}
-%
-%   \marg{prefix}\syntaxfill \texttt k\\
-%   \marg{name}\syntaxfill |{keywords}|\\
-%   \marg{style name}\syntaxfill |{keywordstyle}|\\
-%   \marg{style init}\syntaxfill |\bfseries|\\
-%   \marg{default style name}\syntaxfill |{keywordstyle}|\\
-%   \marg{working procedure}\syntaxfill |{}|\\
-%   \meta{\alternative{l,o}}\syntaxfill |l|\\
-%   \meta{\alternative{d,o}}\syntaxfill |d|
-%
-%       installs either a keyword or `working' class of identifiers according
-%       to whether \meta{working procedure} is empty.
-%
-%       The three keys \meta{name}, \keyname{more}\meta{name} and
-%       \keyname{delete}\meta{name}, and if not empty \meta{style name} are
-%       defined. The first order member of the latter one is initialized with
-%       \meta{style init} if not equivalent to |\relax|. If the user leaves a
-%       class style undefined, \meta{default style name} is used instead.
-%       Thus, make sure that this style is always defined. In the example,
-%       the first order keywordstyle is set to |\bfseries| and is the default
-%       for all other classes.
-%
-%       If \meta{working procedure} is not empty, this code is executed when
-%       reaching such an (user defined) identifier. \meta{working procedure}
-%       takes exactly one argument, namely the class number to which the
-%       actual identifier belongs to. If the code uses variables and requires
-%       values from previous calls, you must define these variables
-%       |\global|ly. It's not sure whether working procedures are executed
-%       inside a (separate) group or not.
-%
-%       \texttt l indicates a language key, i.e.~the lists are reset every
-%       language selection. \texttt o stands for `other' key.
-%       The keyword respectively working test is either installed at the
-%       \hookname{DetectKeyword} or \hookname{Output} hook according to
-%       \meta{\alternative{d,o}}.
-%
-% \item[0.20]
-%   \cs{lst@InstallKeywords}
-%
-%   \marg{prefix}\syntaxfill \texttt{cs}\\
-%   \marg{name}\syntaxfill |{texcs}|\\
-%   \marg{style name}\syntaxfill |{texcsstyle}|\\
-%   \marg{style init}\syntaxfill |\relax|\\
-%   \marg{default style name}\syntaxfill |{keywordstyle}|\\
-%   \marg{working procedure}\syntaxfill see below\\
-%   \meta{\alternative{l,o}}\syntaxfill |l|\\
-%   \meta{\alternative{d,o}}\syntaxfill |d|
-%
-%       Same parameters, same functionality with one execption. The macro
-%       installs exactly one keyword class and not a whole family. Therefore
-%       the argument to \meta{working procedure} is constant (currently empty).
-%
-%       The working procedure of the example reads as follows.\vspace*{-.5\baselineskip}
-% \begin{verbatim}
-%    {\ifx\lst@lastother\lstum@backslash
-%         \let\lst@thestyle\lst@texcsstyle
-%     \fi}\end{verbatim}
-%\vspace*{-.5\baselineskip}
-%       What does this procedure do? First of all it is called only if a
-%       keyword from the user supplied list (or language definition) is found.
-%       The procedure now checks for a preceding backslash and sets the output
-%       style accordingly.
-%
-%\iffalse
-% \item[0.20] |\lst@InstallTest|\marg{prefix}\syntaxbreak
-%       |\lst@|\meta{name}|@list||\lst@|\meta{name}~|\lst@g|\meta{name}|@list||\lst@g|\meta{name}\syntaxbreak
-%       |\lst@g|\meta{name}|@sty|~\meta{\alternative{w,s}}\meta{\alternative{d,o}}
-%
-%       installs a `working identifier' test or keyword style depending on
-%       \meta{\alternative{w,s}}. |\lst@g|\meta{name}|@sty| contains the
-%       working procedure or style macro. Note that the behaviour of the tests
-%       depends on the \texttt{savemem} option.
-%       The keyword respectively working test is either installed at the
-%       \hookname{DetectKeyword} or \hookname{Output} hook according to
-%       \meta{\alternative{d,o}}.
-%
-%^^A    Either each call of this macro or each different \meta{prefix} inserts
-%^^A    another test (depending on the \texttt{savemem} option).
-%
-%       |\lst@|\meta{name} contains the current identifier list and
-%       |\lst@|\meta{name}|@list| a `|\lst@|\meta{$n_i$}|\lst@g|\meta{$n_i$}'
-%       sequence of currently used classes. If no other classes are used,
-%       this equals |\lst@|\meta{name}|\lst@g|\meta{name}. The global versions
-%       |\lst@g|\ldots\ are used to keep track of the keywords.
-%       (This description needs improvement.)
-%\fi
-% \end{syntax}
-%
-%
-% \subsection{Delimiters}
-%
-% We describe two stages: adding a new delimiter type to an existing class of
-% delimiters and writing a new class. Each class has its name; currently exist
-% \texttt{Comment}, \texttt{String}, and \texttt{Delim}. As you know, the
-% latter and the first both provide the type \texttt l, but there is no string
-% which starts with the given delimiter and ends at end of line. So we'll add
-% it now!
-%
-% First of all we extend the list of string types by
-% \begin{verbatim}
-%    \lst@AddTo\lst@stringtypes{,l}\end{verbatim}
-% Then we must provide the macro which takes the user supplied delimiter and
-% makes appropriate definitions. The command name consists of the prefix
-% |\lst@|, the delimiter name, |DM| for using dynamic modes, and |@| followed
-% by the type.
-% \begin{verbatim}
-%    \gdef\lst@StringDM@l#1#2\@empty#3#4#5{%
-%        \lst@CArg #2\relax\lst@DefDelimB{}{}{}#3{#1}{#5\lst@Lmodetrue}}\end{verbatim}
-% You can put these three lines into a \texttt{.sty}-file or surround them by
-% |\makeatletter| and |\makeatother| in the preamble of a document.
-% And that's all!
-%{\makeatletter
-%\lst@AddTo\lst@stringtypes{,l}
-%\gdef\lst@StringDM@l#1#2\@empty#3#4#5{^^A
-%   \lst@CArg #2\relax\lst@DefDelimB{}{}{}#3{#1}{#5\lst@Lmodetrue}}
-%}
-% \begin{lstsample}{}{}
-%    \lstset{string=[l]//}
-%    \begin{lstlisting}
-%    // This is a string.
-%    This isn't a string.
-%    \end{lstlisting}
-% \end{lstsample}
-% You want more details, of course. Let's begin with the arguments.
-% \begin{itemize}
-% \item The first argument \emph{after} |\@empty| is used to start the
-%       delimiter. It's provided by the delimiter class.
-% \item The second argument \emph{after} |\@empty| is used to end the
-%       delimiter. It's also provided by the delimiter class. We didn't
-%       need it in the example, see the explanation below.
-% \item The third argument \emph{after} |\@empty| is
-%       \marg{style}\meta{start tokens}.
-%       This with a preceding |\def\lst@currstyle| is used as argument to
-%       |\lst@EnterMode|. The delimiter class also provides it. In the
-%       example we `extended' |#5| by |\lst@Lmodetrue| (line mode true).
-%       The mode automatically ends at end of line, so we didn't need the
-%       end-delimiter argument.
-% \end{itemize}
-% And now for the other arguments. In case of dynamic modes, the first argument
-% is the mode number. Then follow the user supplied  delimiter(s) whose number
-% must match the remaining arguments up to |\@empty|. For non-dynamic modes,
-% you must either allocate a static mode yourself or use a predefined mode
-% number. The delimiters then start with the first argument.
-%
-% Eventually let's look at the replacement text of the macro. The sequence
-% |\lst@CArg #2\relax| puts two required arguments after |\lst@DefDelimB|.
-% The syntax of the latter macro is
-% \begin{syntax}
-% \item[1.0] \cs{lst@DefDelimB}
-%
-%   |{|\meta{1st}\meta{2nd}\marg{rest}|}|\syntaxfill |{//{}}|\\
-%   \meta{save 1st}\syntaxfill |\lst@c/0|\\
-%   \marg{execute}\syntaxfill|{}|\\
-%   \marg{delim~exe~modetrue}\syntaxfill|{}|\\
-%   \marg{delim~exe~modefalse}\syntaxfill|{}|\\
-%   \meta{start-delimiter macro}\syntaxfill|#3|\\
-%   \meta{mode number}\syntaxfill |{#1}|\\
-%   |{|\marg{style}\meta{start tokens}|}|\syntaxfill |{#5\lst@Lmodetrue}|
-%
-%       defines \meta{1st}\meta{2nd}\meta{rest} as starting-delimiter.
-%       \meta{execute} is executed when the package comes to \meta{1st}.
-%       \meta{delim~exe~modetrue} and \meta{delim~exe~modefalse} are
-%       executed only if the whole delimiter \meta{1st}\meta{2nd}\meta{rest}
-%       is found. Exactly one of them is called depending on |\lst@ifmode|.
-%
-%       By default the package enters the mode if the delimiter is found
-%       \emph{and} |\lst@ifmode| is false. Internally we make an appropriate
-%       definition of |\lst@bnext|, which can be gobbled by placing
-%       |\@gobblethree| at the very end of \meta{delim exe modefalse}.
-%       One can provide an own definition (and gobble the default).
-%
-%       \meta{save 1st} must be an undefined macro and is used internally to
-%       store the previous meaning of \meta{1st}. The arguments \meta{2nd}
-%       and/or \meta{rest} are empty if the delimiter has strictly less than
-%       three characters. All characters of \meta{1st}\meta{2nd}\meta{rest}
-%       must already be active (if not empty).
-%       That's not a problem since the macro |\lst@CArgX| does this job.
-%
-% \item[1.0] \cs{lst@DefDelimE}
-%
-%   |{|\meta{1st}\meta{2nd}\marg{rest}|}|\\
-%   \meta{save 1st}\\
-%   \marg{execute}\\
-%   \marg{delim~exe~modetrue}\\
-%   \marg{delim~exe~modefalse}\\
-%   \meta{end-delimiter macro}\\
-%   \meta{mode number}
-%
-%       Ditto for ending-delimiter with slight differences:
-%       \meta{delim~exe~modetrue} and \meta{delim~exe~modefalse} are executed
-%       depending on whether |\lst@mode| equals \meta{mode}.
-%
-%       The package ends the mode if the delimiter is found and |\lst@mode|
-%       equals \meta{mode}. Internally we make an appropriate definition of
-%       |\lst@enext| (not |\lst@bnext|), which can be gobbled by placing
-%       |\@gobblethree| at the very end of \meta{delim exe modetrue}.
-%
-% \item[1.0] \cs{lst@DefDelimBE}
-%
-%   followed by the same eight arguments as for |\lst@DefDelimB| and \ldots\\
-%   \meta{end-delimiter macro}
-%
-%       This is a combination of |\lst@DefDelimB| and |\lst@DefDelimE| for the
-%       case of starting and ending delimiter being the same.
-% \end{syntax}
-% We finish the first stage by examining two easy examples.
-% \texttt d-type strings are defined by
-% \begin{verbatim}
-%    \gdef\lst@StringDM@d#1#2\@empty#3#4#5{%
-%        \lst@CArg #2\relax\lst@DefDelimBE{}{}{}#3{#1}{#5}#4}\end{verbatim}
-% (and an entry in the list of string types).
-% Not a big deal. Ditto \texttt d-type comments:
-% \begin{verbatim}
-%    \gdef\lst@CommentDM@s#1#2#3\@empty#4#5#6{%
-%        \lst@CArg #2\relax\lst@DefDelimB{}{}{}#4{#1}{#6}%
-%        \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}}\end{verbatim}
-% Here we just need to use both |\lst@DefDelimB| and |\lst@DefDelimE|.
-% \goodbreak
-%
-% So let's get to the second stage. For illustration, here's the definition of
-% the \texttt{Delim} class. The respective first argument to the service macro
-% makes it delete all delimiters of the class, add the delimiter, or delete
-% the particular delimiter only.
-% \begin{verbatim}
-%    \lst@Key{delim}\relax{\lst@DelimKey\@empty{#1}}
-%    \lst@Key{moredelim}\relax{\lst@DelimKey\relax{#1}}
-%    \lst@Key{deletedelim}\relax{\lst@DelimKey\@nil{#1}}\end{verbatim}
-% The service macro itself calls another macro with appropriate arguments.
-% \begin{verbatim}
-%    \gdef\lst@DelimKey#1#2{%
-%        \lst@Delim{}#2\relax{Delim}\lst@delimtypes #1%
-%                    {\lst@BeginDelim\lst@EndDelim}
-%            i\@empty{\lst@BeginIDelim\lst@EndIDelim}}\end{verbatim}
-% We have to look at those arguments. Above you can see the actual arguments
-% for the \texttt{Delim} class, below are the \texttt{Comment} class ones.
-% Note that the user supplied value covers the second and third line of
-% arguments.
-% \begin{syntax}
-% \item[0.21,,changed]
-%   \cs{lst@Delim}
-%
-%   \meta{default style macro}\syntaxfill \cs{lst@commentstyle}\\ \relax
-%   [\texttt*[\texttt*]]\texttt[\meta{type}\texttt][\texttt[\meta{style}\texttt][\texttt[\meta{type option}\texttt]]]\\
-%   \meta{delimiter\textup(s\textup)}\cs{relax}\syntaxfill|#2|\cs{relax}\\
-%   \marg{delimiter name}\syntaxfill|{Comment}|\\
-%   \meta{delimiter types macro}\syntaxfill\texttt{\cs{lst@commenttypes}}\\
-%   \alternative{\cs{@empty},\cs{@nil},\cs{relax}}\syntaxfill|#1|\\
-%   \marg{begin- and end-delim macro}\syntaxfill|{|\cs{lst@BeginComment}\cs{lst@EndComment}|}|\\
-%   \meta{extra prefix}\syntaxfill |i|\\
-%   \meta{extra conversion}\syntaxfill |\@empty|\\
-%   \marg{begin- and end-delim macro}\syntaxfill|{|\cs{lst@BeginIComment}\cs{lst@EndIComment}|}|
-%
-%   Most arguments should be clear. We'll discuss the last four. Both
-%   \marg{begin- and end-delim macro} must contain exactly two control
-%   sequences, which are given to |\lst@|\meta{name}[|DM|]|@|\meta{type}
-%   to begin and end a delimiter. These are the arguments |#3| and |#4| in our
-%   first example of |\lst@StringDM@l|. Depending on whether the user chosen
-%   type starts with \meta{extra prefix}, the first two or the last control
-%   sequences are used.
-%
-%   By default the package takes the delimiter(s), makes the characters active,
-%   and places them after |\lst@|\meta{name}[|DM|]|@|\meta{type}. If the user
-%   type starts with \meta{extra prefix}, \meta{extra conversion} might change
-%   the definition of |\lst@next| to choose a different conversion. The default
-%   is equivalent to |\lst@XConvert| with |\lst@false|.
-%
-%   Note that \meta{type} never starts with \meta{extra prefix} since it is
-%   discarded. The functionality must be fully implemented by choosing a
-%   different \marg{begin- and end-delim macro} pair.
-% \end{syntax}
-% You might need to know the syntaxes of the \meta{begin- and end-delim macro}s.
-% They are called as follows.
-% \begin{syntax}
-% \item[0.21] |\lst@Begin|\meta{whatever}
-%
-%   \marg{mode}
-%   |{|\marg{style}\meta{start tokens}|}|
-%   \meta{delimiter}|\@empty|
-%
-% \item[0.21] |\lst@End|\meta{whatever}
-%
-%   \marg{mode}
-%   \meta{delimiter}|\@empty|
-% \end{syntax}
-% The existing macros are internally defined in terms of |\lst@DelimOpen| and
-% |\lst@DelimClose|, see the implementation.
-%
-%
-% \subsection{Getting the kernel run}
-%
-% If you want new pretty-printing environments, you should be happy with
-% section \ref{rEnvironments}. New commands like |\lstinline| or
-% |\lstinputlisting| are more difficult. Roughly speaking you must follow
-% these steps.
-% \begin{enumerate}
-% \item Open a group to make all changes local.
-% \item \meta{Do whatever you want.}
-% \item Call |\lsthk@PreSet| in any case.
-% \item Now you \emph{might } want to (but need not) use |\lstset| to set some
-%       new values.
-% \item \meta{Do whatever you want.}
-% \item Execute |\lst@Init\relax| to finish initialization.
-% \item \meta{Do whatever you want.}
-% \item Eventually comes the source code, which is processed by the kernel.
-%       You must ensure that the characters are either not already read or all
-%       active. Moreover \emph{you} must install a way to detect the end of the
-%       source code. If you've reached the end, you must \ldots
-% \item \ldots\ call |\lst@DeInit| to shutdown the kernel safely.
-% \item \meta{Do whatever you want.}
-% \item Close the group from the beginning.
-% \end{enumerate}
-% For example, consider the |\lstinline| command in case of being not inside an
-% argument. Then the steps are as follows.
-% \begin{enumerate}
-% \item |\leavevmode\bgroup| opens a group.
-% \item |\def\lst@boxpos{b}| `baseline' aligns the listing.
-% \item |\lsthk@PreSet|
-% \item |\lstset{flexiblecolumns,#1}| (|#1| is the user provided
-%       key=value list)
-% \item |\lsthk@TextStyle| deactivates all features not safe here.
-% \item |\lst@Init\relax|
-% \item |\lst@Def{`#1}{\lst@DeInit\egroup}| installs the `end inline'
-%       detection, where |#1| is the next character after |\lstinline|.
-%       Moreover chr(13) is redefined to end the fragment in the same way but
-%       also issues an error message.
-% \item Now comes the source code and \ldots
-% \item \ldots\ |\lst@DeInit| (from |\lst@Def| above) ends the code snippet
-%       correctly.
-% \item Nothing.
-% \item |\egroup| (also from |\lst@Def|) closes the group.
-% \end{enumerate}
-% The real definition is different since we allow source code inside arguments.
-% Read also section \ref{iTheInputCommand} if you really want to write
-% pretty-printing commands.
-%
-%
-% \section{Useful internal definitions}\label{dUsefulInternalDefinitions}
-%
-% This section requires an update.
-%
-%
-% \subsection{General purpose macros}\label{dGeneralPurposeMacros}
-%
-% \begin{syntax}
-% \item[0.19] |\lst@AddTo|\meta{macro}\marg{\TeX~material}
-%
-%       adds \meta{\TeX~material} globally to the contents of \meta{macro}.
-%
-% \item[0.20] |\lst@Extend|\meta{macro}\marg{\TeX~material}
-%
-%       calls |\lst@AddTo| after the first token of \meta{\TeX~material} is
-%       |\expand|ed|after|. For example, |\lst@Extend \a \b| merges the
-%       contents of the two macros and stores it globally in |\a|.
-%
-% \item[0.19] |\lst@lAddTo|\meta{macro}\marg{\TeX~material}
-% \item[0.20] |\lst@lExtend|\meta{macro}\marg{\TeX~material}
-%
-%       are local versions of |\lst@AddTo| and |\lst@Extend|.
-%
-% \item[0.18] |\lst@DeleteKeysIn|\meta{macro}\meta{macro \textup(keys to remove\textup)}
-%
-%       Both macros contain a comma separated list of keys (or keywords). All
-%       keys appearing in the second macro are removed (locally) from the first.
-%
-% \item[0.19] |\lst@ReplaceIn|\meta{macro}\meta{macro \textup(containing replacement list\textup)}
-% \item[0.20] |\lst@ReplaceInArg|\meta{macro}\marg{replacement list}
-%
-%       The replacement list has the form $a_1b_1$\ldots$a_nb_n$, where each
-%       $a_i$ and $b_i$ is a character sequence (enclosed in braces if
-%       necessary) and may contain macros, but the first token of $b_i$ must
-%       not be equivalent to |\@empty|. Each sequence $a_i$ inside the first
-%       macro is (locally) replaced by $b_i$.
-%       The suffix |Arg| refers to the \emph{braced} second argument instead of
-%       a (nonbraced) macro. It's a hint that we get the `real' argument and
-%       not a `pointer' to the argument.
-%
-% \item[0.20] |\lst@IfSubstring|\marg{character sequence}\meta{macro}\marg{then}\marg{else}
-%
-%       \meta{then} is executed if \meta{character sequence} is a substring of
-%       the contents of \meta{macro}. Otherwise \meta{else} is called.
-%
-% \item[0.12] |\lst@IfOneOf|\meta{character sequence}|\relax|\meta{macro}\marg{then}\marg{else}
-%
-%       |\relax| terminates the first parameter here since it is faster than
-%       enclosing it in braces. \meta{macro} contains a comma separated list
-%       of identifiers. If the character sequence is one of these indentifiers,
-%       \meta{then} is executed, and otherwise \meta{else}.
-%
-% \item[0.21] |\lst@Swap|\marg{tok1}\marg{tok2}
-%
-%       changes places of the following two tokens or arguments \emph{without}
-%       inserting braces. For example, |\lst@Swap{abc}{def}| expands to
-%       |defabc|.
-%
-% \item[0.18] |\lst@IfNextChars|\meta{macro}\marg{then}\marg{else}
-% \item[0.19] |\lst@IfNextCharsArg|\marg{character sequence}\marg{then}\marg{else}
-%
-%       Both macros execute either \meta{then} or \meta{else} according to
-%       whether the given character sequence respectively the contents of the
-%       given macro is found (after the three arguments). Note an important
-%       difference between these macros and \LaTeX's |\@ifnextchar|:
-%       We remove the characters behind the arguments until it is possible to
-%       decide which part must be executed. However, we save these characters
-%       in the macro |\lst@eaten|, so they can be inserted using \meta{then} or
-%       \meta{else}.
-%
-% \item[0.19] |\lst@IfNextCharActive|\marg{then}\marg{else}
-%
-%       executes \meta{then} if next character is active, and \meta{else}
-%       otherwise.
-%
-% \item[0.20] |\lst@DefActive|\meta{macro}\marg{character sequence}
-%
-%       stores the character sequence in \meta{macro}, but all characters
-%       become active. The string \emph{must not} contain a begin group, end
-%       group or escape character (|{}\|); it may contain a left brace, right
-%       brace or backslash with other meaning (= catcode). This command
-%       would be quite surplus if \meta{character sequence} is not already read
-%       by \TeX\ since such catcodes can be changed easily. It is explicitly
-%       allowed that the charcaters have been read, e.g.~in
-%       |\def\test{\lst@DefActive\temp{ABC}}|!
-%
-%       Note that this macro changes |\lccode|s 0--9 without restoring them.
-%
-% \item[0.20] |\lst@DefOther|\meta{macro}\marg{character sequence}
-%
-%       stores \meta{character sequence} in \meta{macro}, but all characters
-%       have catcode 12. Moreover all spaces are removed and control sequences
-%       are converted to their name without preceding backslash. For example,
-%       |\{ Chip \}| leads to |{Chip}| where all catcodes are 12---internally
-%       the primitive |\meaning| is used.
-%
-% \iffalse
-% \item[0.19] |\lst@MakeActive|\marg{character sequence}
-%
-%       stores the character sequence in |\lst@arg| and has the same
-%       restrictions as |\lst@DefActive|. If fact, the latter definition uses
-%       this macro here.
-% \fi
-% \end{syntax}
-%
-%
-% \subsection{Character tables manipulated}\label{dCharacterTablesManipulated}
-%
-% \begin{syntax}
-% \item[0.20] |\lst@SaveDef|\marg{character code}\meta{macro}
-%
-%       Saves the current definition of the specified character in
-%       \meta{macro}. You should always save a character definition before you
-%       redefine it! And use the saved version instead of writing directly
-%       |\lst@Process|\ldots---the character could already be redefined and
-%       thus not equivalent to its standard definition.
-%
-% \item[0.20] |\lst@DefSaveDef|\marg{character code}\meta{macro}\meta{parameter text}\marg{definition}
-% \item[0.20] |\lst@LetSaveDef|\marg{character code}\meta{macro}\meta{token}
-%
-%       combine |\lst@SaveDef| and |\lst@Def| respectively |\lst@Let|.
-% \end{syntax}
-% Of course I shouldn't forget to mention \emph{where} to alter the character
-% table. Hook material at \hookname{SelectCharTable} makes permanent changes,
-% i.e.~it effects all languages. The following two keys can be used in any
-% language definition and effects the particular language only.
-% \begin{syntax}
-% \item[0.20] |SelectCharTable=|\meta{\TeX\ code}
-% \item[0.20] |MoreSelectCharTable=|\meta{\TeX\ code}
-%
-%       uses \meta{\TeX\ code} (additionally) to select the character table.
-%       The code is executed after the standard character table is selected,
-%       but possibly before other aspects make more changes. Since previous
-%       meanings are always saved and executed inside the new definition, this
-%       should be harmless.
-% \end{syntax}
-% Here come two rather useless examples. Each point (full stop) will cause a
-% message `|.|' on the terminal and in the |.log| file if language |useless| is
-% active:
-% \begin{verbatim}
-%   \lstdefinelanguage{useless}
-%       {SelectCharTable=\lst@DefSaveDef{46}% save chr(46) ...
-%            \lsts@point             % ... in \lsts@point and ...
-%            {\message{.}\lsts@point}% ... use new definition
-%       }\end{verbatim}
-% If you want to count points, you could write
-% \begin{verbatim}
-%   \newcount\lst@points % \global
-%   \lst@AddToHook{Init}{\global\lst@points\z@}
-%   \lst@AddToHook{DeInit}{\message{Number of points: \the\lst@points}}
-%   \lstdefinelanguage[2]{useless}
-%       {SelectCharTable=\lst@DefSaveDef{46}\lsts@point
-%            {\global\advance\lst@points\@ne \lsts@point}
-%       }\end{verbatim}
-% |% \global| indicates that the allocated counter is used globally. We zero
-% the counter at the beginning of each listing, display a message about the
-% current value at the end of a listing, and each processed point advances the
-% counter by one.
-%
-% \begin{syntax}
-% \item[0.21] |\lst@CArg|\meta{active characters}|\relax|\meta{macro}
-%
-%       The string of active characters is split into \meta{1st}, \meta{2nd},
-%       and \marg{rest}. If one doesn't exist, an empty argument is used. Then
-%       \meta{macro} is called with |{|\meta{1st}\meta{2nd}\marg{rest}|}| plus
-%       a yet undefined control sequence \meta{save 1st}. This macro is
-%       intended to hold the current definition of \meta{1st}, so \meta{1st}
-%       can be redefined without loosing information.
-%
-% \item[0.19] |\lst@CArgX|\meta{characters}|\relax|\meta{macro}
-%
-%       makes \meta{characters} active before calling |\lst@CArg|.
-%
-% \item[0.21] |\lst@CDef{|\meta{1st}\meta{2nd}\marg{rest}|}|\meta{save 1st}\marg{execute}\marg{pre}\marg{post}
-%
-%       should be used in connection with |\lst@CArg| or |\lst@CArgX|, i.e.~as
-%       \meta{macro} there. \meta{1st}, \meta{2nd}, and \meta{rest} must be
-%       active characters and \meta{save 1st} must be an undefined control
-%       sequence.
-%
-%       Whenever the package reaches the character \meta{1st} (in a listing),
-%       \meta{execute} is executed. If the package detects the whole string
-%       \meta{1st}\meta{2nd}\meta{rest}, we additionally execute \meta{pre},
-%       then the string, and finally \meta{post}.
-%
-% \item[0.21] |\lst@CDefX|\meta{1st}\meta{2nd}\marg{rest}\meta{save 1st}\marg{execute}\marg{pre}\marg{post}
-%
-%       Ditto except that we execute \meta{pre} and \meta{post} without the
-%       original string if we reach \meta{1st}\meta{2nd}\meta{rest}.
-%       This means that the string is replaced by \meta{pre}\meta{post} (with
-%       preceding \meta{execute}).
-% \end{syntax}
-% As the final example, here's the definition of |\lst@DefDelimB|.
-% \begin{verbatim}
-%    \gdef\lst@DefDelimB#1#2#3#4#5#6#7#8{%
-%        \lst@CDef{#1}#2%
-%            {#3}%
-%            {\let\lst@bnext\lst@CArgEmpty
-%             \lst@ifmode #4\else
-%                 #5%
-%                 \def\lst@bnext{#6{#7}{#8}}%
-%             \fi
-%             \lst@bnext}%
-%            \@empty}\end{verbatim}
-% You got it?
-%
-%
-% \part{Implementation}
-%
-%
-% \CheckSum{12365}
-%^^A
-%^^A Don't index TeX-primitives.
-%^^A
-% \DoNotIndex{\advance,\afterassignment,\aftergroup,\batchmode,\begingroup}
-% \DoNotIndex{\box,\catcode,\char,\chardef,\closeout,\copy,\count,\csname,\def}
-% \DoNotIndex{\dimen,\discretionary,\divide,\dp,\edef,\else,\end,\endcsname}
-% \DoNotIndex{\endgroup,\endinput,\endlinechar,\escapechar,\everypar}
-% \DoNotIndex{\expandafter,\fi,\gdef,\global,\globaldefs,\hbadness,\hbox}
-% \DoNotIndex{\hrulefill,\hss,\ht}
-% \DoNotIndex{\if,\ifdim,\iffalse,\ifhmode,\ifinner,\ifnum,\ifodd,\iftrue}
-% \DoNotIndex{\ifvoid,\ifx,\ignorespaces,\immediate,\input,\jobname,\kern}
-% \DoNotIndex{\lccode,\leftskip,\let,\long,\lower,\lowercase,\meaning,\message}
-% \DoNotIndex{\multiply,\muskip,\noexpand,\noindent,\openout,\par,\parfillskip}
-% \DoNotIndex{\parshape,\parskip,\raise,\read,\relax,\rightskip,\setbox,\skip}
-% \DoNotIndex{\string,\the,\toks,\uppercase,\vbox,\vcenter,\vrule,\vtop,\wd}
-% \DoNotIndex{\write,\xdef}
-%
-%^^A
-%^^A Don't index LaTeX's private definitions.
-%^^A
-% \DoNotIndex{\@@end,\@@par,\@M,\@arabic,\@circlefnt,\@currentlabel}
-% \DoNotIndex{\@currenvir,\@depth,\@doendpe,\@dottedtocline,\@eha,\@ehc}
-% \DoNotIndex{\@empty,\@firstofone,\@firstoftwo,\@float,\@for,\@getcirc}
-% \DoNotIndex{\@gobble,\@gobbletwo,\@halfwidth,\@height,\@ifnextchar}
-% \DoNotIndex{\@ifundefined,\@ignoretrue,\@makecaption,\@makeother,\@namedef}
-% \DoNotIndex{\@ne,\@noligs,\@notprerr,\@onlypreamble,\@secondoftwo,\@spaces}
-% \DoNotIndex{\@starttoc,\@totalleftmargin,\@undefined,\@whilenum}
-% \DoNotIndex{\@wholewidth,\@width}
-% \DoNotIndex{\c@chapter,\c@figure,\c@page,\end@float,\f@family,\filename@area}
-% \DoNotIndex{\filename@base,\filename@ext,\filename@parse,\if@twoside}
-% \DoNotIndex{\l@ngrel@x,\m@ne,\new@command,\nfss@catcodes,\tw@,\thr@@}
-% \DoNotIndex{\z@,\zap@space}
-%
-%^^A
-%^^A Don't index LaTeX's package definitions.
-%^^A
-% \DoNotIndex{\AtEndOfPackage}
-% \DoNotIndex{\CurrentOption,\DeclareOption,\IfFileExists,\InputIfFileExists}
-% \DoNotIndex{\MessageBreak,\NeedsTeXFormat,\PackageError,\PackageWarning}
-% \DoNotIndex{\ProcessOptions,\ProvidesFile,\ProvidesPackage,\RequirePackage}
-%
-%^^A
-%^^A Don't index LaTeX's public definitions.
-%^^A
-% \DoNotIndex{\abovecaptionskip,\active,\addcontentsline,\addtocounter,\begin}
-% \DoNotIndex{\belowcaptionskip,\bfseries,\bgroup,\bigbreak,\chapter}
-% \DoNotIndex{\contentsname,\do,\egroup,\footnotesize,\index,\itshape}
-% \DoNotIndex{\linewidth,\llap,\makeatletter,\newbox,\newcommand,\newcount}
-% \DoNotIndex{\newcounter,\newdimen,\newtoks,\newwrite,\nointerlineskip}
-% \DoNotIndex{\normalbaselines,\normalfont,\numberline,\pretolerance,\protect}
-% \DoNotIndex{\qquad,\refstepcounter,\removelastskip,\renewcommand,\rlap}
-% \DoNotIndex{\small,\smallbreak,\smallskipamount,\smash,\space,\strut}
-% \DoNotIndex{\strutbox,\tableofcontents,\textasciicircum,\textasciitilde}
-% \DoNotIndex{\textasteriskcentered,\textbackslash,\textbar,\textbraceleft}
-% \DoNotIndex{\textbraceright,\textdollar,\textendash,\textgreater,\textless}
-% \DoNotIndex{\textunderscore,\textvisiblespace,\thechapter,\ttdefault}
-% \DoNotIndex{\ttfamily,\typeout,\value,\vphantom}
-%
-%^^A
-%^^A Don't index definitions from other packages.
-%^^A
-% \DoNotIndex{\MakePercentComment,\MakePercentIgnore}
-%
-%^^A
-%^^A Don't index 0.19 definitions.
-%^^A
-% \DoNotIndex{\listlistingsname,\listoflistings,\lstbox,\lstbox@}
-% \DoNotIndex{\lstlanguage@}
-%
-%^^A
-%^^A Don't index 0.20 subdefinitions.
-%^^A
-% \DoNotIndex{\lst@ATH@,\lst@BOLGobble@,\lst@BOLGobble@@,\lst@CArg@,\lst@CArg@@}
-% \DoNotIndex{\lst@CBC@,\lst@CBC@@,\lst@CCECUse@,\lst@CCPutMacro@,\lst@DefLang@}
-% \DoNotIndex{\lst@DefLang@@,\lst@DefOther@,\lst@DeleteKeysIn@,\lst@Escape@}
-% \DoNotIndex{\lstframe@,\lst@frameH@,\lst@frameL@,\lst@frameR@}
-% \DoNotIndex{\lst@FillFixed@,\lst@FindAlias@,\lst@FVConvert@}
-% \DoNotIndex{\lst@IfNextChars@,\lst@IfNextChars@@,\lst@InsideConvert@}
-% \DoNotIndex{\lst@InstallKeywords@,\lst@Key@,\lst@KeywordTestI@}
-% \DoNotIndex{\lst@MakeActive@,\lst@MakeMoreKeywords@}
-% \DoNotIndex{\lst@RC@,\lst@RC@@,\lst@ReplaceIn@,\lst@ReplaceInput@}
-% \DoNotIndex{\lst@ReportAllocs@,\lst@SKS@,\lst@SKS@@,\lst@UBC@}
-% \DoNotIndex{\lst@WorkingTestI@,\lstalias@,\lstalias@@,\lstalso@}
-% \DoNotIndex{\lstdefinestyle@,\lstenv@BOLGobble@@}
-% \DoNotIndex{\lstenv@ProcessJ@,\lstinline@,\lstKV@OptArg@,\lstKV@SetIf@}
-% \DoNotIndex{\lstlang@,\lstnewenvironment@,\lst@outputpos,\lstset@}
-%
-%
-% \section{Overture}
-%
-% \paragraph{Registers}
-% For each aspect, the required numbers of registers are listed in section
-% \lstref{dPackageLoading}. Furthermore, the \packagename{keyval} package
-% allocates one token register. The macros, boxes and counters
-% |\@temp|\ldots|a|/|b|, the dimensions |\@tempdim|\ldots, and the macro
-% |\@gtempa| are also used, see the index.
-%
-% \paragraph{Naming conventions}
-% Let's begin with definitions for the user. All these public macros have
-% lower case letters and contain |lst|. Private macros and variables use the
-% following prefixes (not up-to-date?):
-% \begin{itemize}
-% \item |\lst@| for a general macro or variable,
-% \item |\lstenv@| if it is defined for the listing environment,
-% \item |\lsts@| for |s|aved character meanings,
-% \item |\lsthk@|\meta{name of hook} holds hook material,
-% \item |\lst|\meta{prefix}|@| for various kinds of keywords and working
-%       identifiers.
-% \item |\lstlang@|\meta{language}|@|\meta{dialect} contains a language and
-% \item |\lststy@|\meta{the style} contains style definition,
-% \item |\lstpatch@|\meta{aspect} to patch an aspect,
-%
-% \item |\lsta@|\meta{language}|$|\meta{dialect} contains alias,
-% \item |\lsta@|\meta{language} contains alias for all dialects of a language,
-% \item |\lstdd@|\meta{language} contains default dialect of a language
-%       (if present).
-% \end{itemize}
-% To distinguish procedure-like macros from data-macros, the name of procedure
-% macros use upper case letters with each beginning word, e.g.~|\lst@AddTo|.
-% A macro with suffix |@| is the main working-procedure for another definition,
-% for example |\lstinputlisting@| does the main work for |\lstinputlisting|.
-%
-% \paragraph{Preamble}
-% All files generated from this \texttt{listings.dtx} will get a header.
-%    \begin{macrocode}
-%% Please read the software license in listings-1.3.dtx or listings-1.3.pdf.
-%%
-%% (w)(c) 1996--2004 Carsten Heinz and/or any other author listed
-%% elsewhere in this file.
-%% (c) 2006 Brooks Moses
-%% (c) 2013- Jobst Hoffmann
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-%    \end{macrocode}
-%
-% \paragraph{Identification}
-% All files will have same date and version.
-%    \begin{macrocode}
-\def\filedate{2015/06/04}
-\def\fileversion{1.6}
-%    \end{macrocode}
-% What we need and who we are.
-%    \begin{macrocode}
-%<*kernel>
-\NeedsTeXFormat{LaTeX2e}
-\AtEndOfPackage{\ProvidesPackage{listings}
-             [\filedate\space\fileversion\space(Carsten Heinz)]}
-%    \end{macrocode}
-% \begin{macro}{\lst@CheckVersion}
-% can be used by the various driver files to guarantee the correct version.
-%    \begin{macrocode}
-\def\lst@CheckVersion#1{\edef\reserved@a{#1}%
-    \ifx\lst@version\reserved@a \expandafter\@gobble
-                          \else \expandafter\@firstofone \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\let\lst@version\fileversion
-%</kernel>
-%    \end{macrocode}
-% \end{macro}
-% For example by the miscellaneous file
-%    \begin{macrocode}
-%<*misc>
-\ProvidesFile{lstmisc.sty}
-             [\filedate\space\fileversion\space(Carsten Heinz)]
-\lst@CheckVersion\fileversion
-    {\typeout{^^J%
-     ***^^J%
-     *** This file requires `listings.sty' version \fileversion.^^J%
-     *** You have a serious problem, so I'm exiting ...^^J%
-     ***^^J}%
-     \batchmode \@@end}
-%</misc>
-%    \end{macrocode}
-% or by the dummy patch.
-%    \begin{macrocode}
-%<*patch>
-\ProvidesFile{lstpatch.sty}
-             [\filedate\space\fileversion\space(Carsten Heinz)]
-\lst@CheckVersion\lst@version{}
-%</patch>
-%    \end{macrocode}
-%    \begin{macrocode}
-%<*doc>
-\ProvidesPackage{lstdoc}
-             [\filedate\space\fileversion\space(Carsten Heinz)]
-%</doc>
-%    \end{macrocode}
-%
-% \paragraph{Category codes}
-% We define two macros to ensure correct catcodes when we input other files of
-% the \packagename{listings} package.
-%
-% \begin{macro}{\lst@InputCatcodes}
-% |@| and |"| become letters. Tabulators and EOLs are ignored; this avoids
-% unwanted spaces---in the case I've forgotten a comment character.
-%    \begin{macrocode}
-%<*kernel>
-\def\lst@InputCatcodes{%
-    \makeatletter \catcode`\"12%
-    \catcode`\^^@\active
-    \catcode`\^^I9%
-    \catcode`\^^L9%
-    \catcode`\^^M9%
-    \catcode`\%14%
-    \catcode`\~\active}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@RestoreCatcodes}
-% To load the kernel, we will change some catcodes and lccodes. We restore them
-% at the end of package loading. \lsthelper{Dr.~Jobst~Hoffmann}{2000/11/17}
-% {incompatibility with typehtml package} reported an incompatibility with the
-% \packagename{typehtml} package, which is resolved by |\lccode`\/`\/| below.
-%    \begin{macrocode}
-\def\lst@RestoreCatcodes#1{%
-    \ifx\relax#1\else
-        \noexpand\catcode`\noexpand#1\the\catcode`#1\relax
-        \expandafter\lst@RestoreCatcodes
-    \fi}
-\edef\lst@RestoreCatcodes{%
-    \noexpand\lccode`\noexpand\/`\noexpand\/%
-    \lst@RestoreCatcodes\"\^^I\^^M\~\^^@\relax
-    \catcode12\active}
-%    \end{macrocode}
-% Now we are ready for
-%    \begin{macrocode}
-\lst@InputCatcodes
-\AtEndOfPackage{\lst@RestoreCatcodes}
-%</kernel>
-%    \end{macrocode}
-% \end{macro}
-%
-% \paragraph{Statistics}
-% \begin{macro}{\lst@GetAllocs}
-% \begin{macro}{\lst@ReportAllocs}
-% are used to show the allocated registers.
-%    \begin{macrocode}
-%<*info>
-\def\lst@GetAllocs{%
-    \edef\lst@allocs{%
-        0\noexpand\count\the\count10,1\noexpand\dimen\the\count11,%
-        2\noexpand\skip\the\count12,3\noexpand\muskip\the\count13,%
-        4\noexpand\box\the\count14,5\noexpand\toks\the\count15,%
-        6\noexpand\read\the\count16,7\noexpand\write\the\count17}}
-\def\lst@ReportAllocs{%
-    \message{^^JAllocs:}\def\lst@temp{none}%
-    \expandafter\lst@ReportAllocs@\lst@allocs,\z@\relax\z@,}
-\def\lst@ReportAllocs@#1#2#3,{%
-    \ifx#2\relax \message{\lst@temp^^J}\else
-        \@tempcnta\count1#1\relax \advance\@tempcnta -#3\relax
-        \ifnum\@tempcnta=\z@\else
-            \let\lst@temp\@empty
-            \message{\the\@tempcnta \string#2,}%
-        \fi
-        \expandafter\lst@ReportAllocs@
-    \fi}
-\lst@GetAllocs
-%    \end{macrocode}
-% \end{macro}\end{macro}
-% \begingroup
-%    \begin{macrocode}
-%</info>
-%    \end{macrocode}
-% \endgroup
-%
-% \paragraph{Miscellaneous}
-% \begin{macro}{\@lst}
-% Just a definition to save memory space.
-%    \begin{macrocode}
-%<*kernel>
-\def\@lst{lst}
-%</kernel>
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \section{General problems}
-%
-% All definitions in this section belong to the kernel.
-%    \begin{macrocode}
-%<*kernel>
-%    \end{macrocode}
-%
-%
-%^^A \subsection{Quick `if parameter empty'}
-%^^A
-%^^A There are many situations where you have to look whether a macro parameter is empty.
-%^^A We have at least two possibilities to test |#1|, for example:
-%^^A \begin{center}
-%^^A \begin{minipage}{0.35\linewidth}
-%^^A \begin{verbatim}
-%^^A\def\test{#1}%
-%^^A\ifx \test\empty
-%^^A        % #1 is empty
-%^^A\else
-%^^A        % #1 is not empty
-%^^A\fi\end{verbatim}
-%^^A \end{minipage}
-%^^A \hskip2em\vrule\hskip2em
-%^^A \begin{minipage}{0.35\linewidth}
-%^^A \begin{verbatim}
-%^^A\ifx \empty#1\empty
-%^^A        % #1 is empty
-%^^A\else
-%^^A        % #1 is not empty
-%^^A\fi\end{verbatim}
-%^^A \end{minipage}
-%^^A \end{center}
-%^^A where |\empty| is defined by |\def\empty{}|, of course.
-%^^A The left variant should be clear and works in any case.
-%^^A The right-hand side works correct if and only if the first token of |#1| is
-%^^A not equivalent to |\empty|.
-%^^A This granted, the |\ifx| is true if and only if |#1| is empty (since |\empty|
-%^^A left from |#1| is (not) compared with |\empty| on the right).
-%^^A The two |\empty|s might be replaced by any other macro, which is not
-%^^A equivalent to the first token of the argument.
-%^^A But the definition of that macro shouldn't be too complex since this would
-%^^A slow down the |\ifx|.
-%^^A The right example needs about $45\%$ of the left's time.
-%^^A Note that this \TeX{}nique lost its importance from version 0.18 on and that
-%^^A other packages use |!| or |\relax| instead of |\empty|, for example.
-%^^A
-%^^A This \TeX nique is described in ``The \TeX book'' on page 376.
-%
-%
-% \subsection{Substring tests}\label{iSubstringTests}
-%
-% \lstset{language=TeX,gobble=4,xleftmargin=20pt,columns=[l]fullflexible,mathescape,keywordstyle=\ttfamily,texcsstyle=\bfseries}
-% \let\texverb\lstinline
-% \lstnewenvironment{texcode}[1][]{\lstset{#1}}{}
-% \lstset{keywords={def,key}}
-%
-% It's easy to decide whether a given character sequence is a substring of
-% another string. For example, for the substring \texverb|def| we could say
-% \begin{texcode}
-%   \def \lst@temp#1def#2\relax{%
-%       \ifx \@empty#2\@empty
-%               % "def" is not a substring
-%       \else
-%               % "def" is a substring
-%       \fi}
-%
-%   \lst@temp $\meta{another\ string}$def\relax
-% \end{texcode}
-% When \TeX\ passes the arguments |#1| and |#2|, the second is empty if
-% and only if \texverb|def| is not a substring. Without the additional
-% \texverb|def\relax|, one would get a ``runaway argument'' error if
-% \meta{another string} doesn't contain \texverb|def|.
-%
-% We use substring tests mainly in the special case of an identifier and a
-% comma separated list of keys or keywords:
-% \begin{texcode}[keywords=key]
-%   \def \lst@temp#1,key,#2\relax{%
-%       \ifx \@empty#2\@empty
-%               % `key' is not a keyword
-%       \else
-%               % `key' is a keyword
-%       \fi}
-%
-%   \lst@temp,$\meta{list\ of\ keywords}$,key,\relax
-% \end{texcode}
-% This works very well and is quite fast. But we can reduce run time in the
-% case that \texttt{key} is a keyword. Then |#2| takes the rest of the string,
-% namely all keywords after \texttt{key}.
-% Since \TeX\ inserts |#2| between the \texverb|\@empty|s, it must drop all of
-% |#2| except the first character---which is compared with \texverb|\@empty|.
-% We can redirect this rest to a third parameter:
-% \begin{texcode}[keywords=key]
-%   \def \lst@temp#1,key,#2#3\relax{%
-%       \ifx \@empty#2%
-%               % "key" is not a keyword
-%       \else
-%               % "key" is a keyword
-%       \fi}
-%
-%   \lst@temp,$\meta{list\ of\ keywords}$,key,\@empty\relax
-% \end{texcode}
-% That's a bit faster and an improvement for version 0.20.
-%
-% \begin{macro}{\lst@IfSubstring}
-% The implementation should be clear from the discussion above.
-%    \begin{macrocode}
-\def\lst@IfSubstring#1#2{%
-    \def\lst@temp##1#1##2##3\relax{%
-        \ifx \@empty##2\expandafter\@secondoftwo
-                 \else \expandafter\@firstoftwo \fi}%
-    \expandafter\lst@temp#2#1\@empty\relax}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@IfOneOf}
-% Ditto.
-%    \begin{macrocode}
-\def\lst@IfOneOf#1\relax#2{%
-    \def\lst@temp##1,#1,##2##3\relax{%
-        \ifx \@empty##2\expandafter\@secondoftwo
-                 \else \expandafter\@firstoftwo \fi}%
-    \expandafter\lst@temp\expandafter,#2,#1,\@empty\relax}
-%    \end{macrocode}
-% \end{macro}
-% \begin{REMOVED}
-% One day, if there is need for a case insensitive key(word) test again, we
-% can use two |\uppercase|s to normalize the first parameter:
-%    \begin{verbatim}
-%\def\lst@IfOneOfInsensitive#1\relax#2{%
-%    \uppercase{\def\lst@temp##1,#1},##2##3\relax{%
-%        \ifx \@empty##2\expandafter\@secondoftwo
-%                 \else \expandafter\@firstoftwo \fi}%
-%    \uppercase{%
-%        \expandafter\lst@temp\expandafter,#2,#1},\@empty\relax}\end{verbatim}
-% Here we assume that macro |#2| already contains capital characters only, see
-% the definition of |\lst@MakeMacroUppercase| at the very end of section
-% \ref{iMakingTests}. If we \emph{must not} assume that, we could simply
-% insert an |\expandafter| between the second |\uppercase| and the following
-% brace. But this slows down the tests!
-% \end{REMOVED}
-%
-% \begin{macro}{\lst@DeleteKeysIn}
-% The submacro does the main work; we only need to expand the second
-% macro---the list of keys to remove---and append the terminator |\relax|.
-%    \begin{macrocode}
-\def\lst@DeleteKeysIn#1#2{%
-    \expandafter\lst@DeleteKeysIn@\expandafter#1#2,\relax,}
-%    \end{macrocode}
-% `Replacing' the very last |\lst@DeleteKeysIn@| by |\lst@RemoveCommas|
-% terminates the loop here. Note: The |\@empty| after |#2| ensures that this
-% macro also works if |#2| is empty.
-%    \begin{macrocode}
-\def\lst@DeleteKeysIn@#1#2,{%
-    \ifx\relax#2\@empty
-        \expandafter\@firstoftwo\expandafter\lst@RemoveCommas
-    \else
-        \ifx\@empty#2\@empty\else
-%    \end{macrocode}
-% If we haven't reached the end of the list and if the key is not empty, we
-% define a temporary macro which removes all appearances.
-%    \begin{macrocode}
-            \def\lst@temp##1,#2,##2{%
-                ##1%
-                \ifx\@empty##2\@empty\else
-                    \expandafter\lst@temp\expandafter,%
-                \fi ##2}%
-            \edef#1{\expandafter\lst@temp\expandafter,#1,#2,\@empty}%
-        \fi
-    \fi
-    \lst@DeleteKeysIn@#1}
-%    \end{macrocode}
-% \end{macro}
-% \begin{OLDDEF}
-% The following modification needs about $50\%$ more run time.
-% It doesn't use |\edef| and thus also works with |\{| inside |#1|.
-% However, we don't need that at the moment.
-%    \begin{verbatim}
-%            \def\lst@temp##1,#2,##2{%
-%                \ifx\@empty##2%
-%                    \lst@lAddTo#1{##1}%
-%                \else
-%                    \lst@lAddTo#1{,##1}%
-%                    \expandafter\lst@temp\expandafter,%
-%                \fi ##2}%
-%            \let\@tempa#1\let#1\@empty
-%            \expandafter\lst@temp\expandafter,\@tempa,#2,\@empty\end{verbatim}
-% \end{OLDDEF}
-%
-% \begin{macro}{\lst@RemoveCommas}
-% The macro drops commas at the beginning and assigns the new value to |#1|.
-%    \begin{macrocode}
-\def\lst@RemoveCommas#1{\edef#1{\expandafter\lst@RC@#1\@empty}}
-\def\lst@RC@#1{\ifx,#1\expandafter\lst@RC@ \else #1\fi}
-%    \end{macrocode}
-% \end{macro}
-% \begin{OLDDEF}
-% The following version works with |\{| inside the macro |#1|.
-%    \begin{verbatim}
-%\def\lst@RemoveCommas#1{\expandafter\lst@RC@#1\@empty #1}
-%\def\lst@RC@#1{%
-%    \ifx,#1\expandafter\lst@RC@
-%      \else\expandafter\lst@RC@@\expandafter#1\fi}
-%\def\lst@RC@@#1\@empty#2{\def#2{#1}}\end{verbatim}
-% \end{OLDDEF}
-%
-% \begin{macro}{\lst@ReplaceIn}
-% \begin{macro}{\lst@ReplaceInArg}
-% These macros are similar to |\lst@DeleteKeysIn|, except that \ldots
-%    \begin{macrocode}
-\def\lst@ReplaceIn#1#2{%
-    \expandafter\lst@ReplaceIn@\expandafter#1#2\@empty\@empty}
-\def\lst@ReplaceInArg#1#2{\lst@ReplaceIn@#1#2\@empty\@empty}
-%    \end{macrocode}
-% \ldots\space we replace |#2| by |#3| instead of |,#2,| by a single comma
-% (which removed the key |#2| above).
-%    \begin{macrocode}
-\def\lst@ReplaceIn@#1#2#3{%
-    \ifx\@empty#3\relax\else
-        \def\lst@temp##1#2##2{%
-            \ifx\@empty##2%
-                \lst@lAddTo#1{##1}%
-            \else
-                \lst@lAddTo#1{##1#3}\expandafter\lst@temp
-            \fi ##2}%
-        \let\@tempa#1\let#1\@empty
-        \expandafter\lst@temp\@tempa#2\@empty
-        \expandafter\lst@ReplaceIn@\expandafter#1%
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-% \subsection{Flow of control}
-%
-% \begin{macro}{\@gobblethree}
-% is defined if and only if undefined.
-%    \begin{macrocode}
-\providecommand*\@gobblethree[3]{}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@GobbleNil}
-%    \begin{macrocode}
-\def\lst@GobbleNil#1\@nil{}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Swap}
-% is just this:
-%    \begin{macrocode}
-\def\lst@Swap#1#2{#2#1}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@if}
-% \begin{macro}{\lst@true}
-% \begin{macro}{\lst@false}
-% A general |\if| for temporary use.
-%    \begin{macrocode}
-\def\lst@true{\let\lst@if\iftrue}
-\def\lst@false{\let\lst@if\iffalse}
-\lst@false
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@IfNextCharsArg}
-% is quite easy: We define a macro and call |\lst@IfNextChars|.
-%    \begin{macrocode}
-\def\lst@IfNextCharsArg#1{%
-    \def\lst@tofind{#1}\lst@IfNextChars\lst@tofind}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@IfNextChars}
-% We save the arguments and start a loop.
-%    \begin{macrocode}
-\def\lst@IfNextChars#1#2#3{%
-    \let\lst@tofind#1\def\@tempa{#2}\def\@tempb{#3}%
-    \let\lst@eaten\@empty \lst@IfNextChars@}
-%    \end{macrocode}
-% Expand the characters we are looking for.
-%    \begin{macrocode}
-\def\lst@IfNextChars@{\expandafter\lst@IfNextChars@@\lst@tofind\relax}
-%    \end{macrocode}
-% Now we can refine |\lst@tofind| and append the input character |#3| to
-% |\lst@eaten|.
-%    \begin{macrocode}
-\def\lst@IfNextChars@@#1#2\relax#3{%
-    \def\lst@tofind{#2}\lst@lAddTo\lst@eaten{#3}%
-    \ifx#1#3%
-%    \end{macrocode}
-% If characters are the same, we either call |\@tempa| or continue the test.
-%    \begin{macrocode}
-        \ifx\lst@tofind\@empty
-            \let\lst@next\@tempa
-        \else
-            \let\lst@next\lst@IfNextChars@
-        \fi
-        \expandafter\lst@next
-    \else
-%    \end{macrocode}
-% If the characters are different, we call |\@tempb|.
-%    \begin{macrocode}
-        \expandafter\@tempb
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@IfNextCharActive}
-% We compare the character |#3| with its active version |\lowercase{~}|.
-% Note that the right brace between |\ifx~| and |#3| ends the |\lowercase|.
-% The |\endgroup| restores the |\lccode|.
-%    \begin{macrocode}
-\def\lst@IfNextCharActive#1#2#3{%
-    \begingroup \lccode`\~=`#3\lowercase{\endgroup
-    \ifx~}#3%
-        \def\lst@next{#1}%
-    \else
-        \def\lst@next{#2}%
-    \fi \lst@next #3}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@for}
-% A for-loop with expansion of the loop-variable.  This was improved due to
-% a suggestion by \lsthelper{Hendri~Adriaens}{2006/03/31}{speedup of
-% \lst@for}.
-%    \begin{macrocode}
-\def\lst@for#1\do#2{%
-  \def\lst@forbody##1{#2}%
-  \def\@tempa{#1}%
-  \ifx\@tempa\@empty\else\expandafter\lst@f@r#1,\@nil,\fi
-}
-\def\lst@f@r#1,{%
-  \def\@tempa{#1}%
-  \ifx\@tempa\@nnil\else\lst@forbody{#1}\expandafter\lst@f@r\fi
-}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Catcode changes}\label{iCatcodeChanges}
-%
-% A character gets its catcode right after reading it and \TeX\ has no
-% primitive command to change attached catcodes. However, we can replace these
-% characters by characters with same ASCII codes and different catcodes.
-% It's not the same but suffices since the result is the same.
-% Here we treat the very special case that all characters become active.
-% If we want \texverb|\lst@arg| to contain an active version of the character
-% |#1|, a prototype macro could be
-% \begin{texcode}
-%   \def\lst@MakeActive#1{\lccode`\~=`#1\lowercase{\def\lst@arg{~}}}
-% \end{texcode}
-% The |\lowercase| changes the ASCII code of |~| to the one of |#1| since we
-% have said that |#1| is the lower case version of |~|.
-% Fortunately the |\lowercase| doesn't change the catcode, so we have an active
-% version of |#1|.
-% Note that |~| is usually active.
-%
-% \begin{macro}{\lst@MakeActive}
-% We won't do this character by character.
-% To increase speed we change nine characters at the same time (if nine
-% characters are left).
-% \begin{TODO}
-% This was introduced when the delimiters were converted each listings. Now
-% this conversion is done only each language selection. So we might want to
-% implement a character by character conversion again to decrease the memory
-% usage.
-% \end{TODO}
-% We get the argument, empty |\lst@arg| and begin a loop.
-%    \begin{macrocode}
-\def\lst@MakeActive#1{%
-    \let\lst@temp\@empty \lst@MakeActive@#1%
-    \relax\relax\relax\relax\relax\relax\relax\relax\relax}
-%    \end{macrocode}
-% There are nine |\relax|es since |\lst@MakeActive@| has nine parameters and we
-% don't want any problems in the case that |#1| is empty.
-% We need nine active characters now instead of a single |~|.
-% We make these catcode changes local and define the coming macro |\global|.
-%    \begin{macrocode}
-\begingroup
-\catcode`\^^@=\active \catcode`\^^A=\active \catcode`\^^B=\active
-\catcode`\^^C=\active \catcode`\^^D=\active \catcode`\^^E=\active
-\catcode`\^^F=\active \catcode`\^^G=\active \catcode`\^^H=\active
-%    \end{macrocode}
-% First we |\let| the next operation be |\relax|.
-% This aborts our loop for processing all characters (default and possibly
-% changed later).
-% Then we look if we have at least one character.
-% If this is not the case, the loop terminates and all is done.
-%    \begin{macrocode}
-\gdef\lst@MakeActive@#1#2#3#4#5#6#7#8#9{\let\lst@next\relax
-    \ifx#1\relax
-    \else \lccode`\^^@=`#1%
-%    \end{macrocode}
-% Otherwise we say that |^^@|=chr(0) is the lower case version of the first
-% character.
-% Then we test the second character.
-% If there is none, we append the lower case |^^@| to |\lst@temp|.
-% Otherwise we say that |^^A|=chr(1) is the lower case version of the second
-% character and we test the next argument, and so on.
-%    \begin{macrocode}
-    \ifx#2\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@}}%
-    \else \lccode`\^^A=`#2%
-    \ifx#3\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A}}%
-    \else \lccode`\^^B=`#3%
-    \ifx#4\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B}}%
-    \else \lccode`\^^C=`#4%
-    \ifx#5\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C}}%
-    \else \lccode`\^^D=`#5%
-    \ifx#6\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D}}%
-    \else \lccode`\^^E=`#6%
-    \ifx#7\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E}}%
-    \else \lccode`\^^F=`#7%
-    \ifx#8\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F}}%
-    \else \lccode`\^^G=`#8%
-    \ifx#9\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F^^G}}%
-%    \end{macrocode}
-% If nine characters are present, we append (lower case versions of) nine
-% active characters and call this macro again via redefining |\lst@next|.
-%    \begin{macrocode}
-    \else \lccode`\^^H=`#9%
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F^^G^^H}}%
-        \let\lst@next\lst@MakeActive@
-    \fi \fi \fi \fi \fi \fi \fi \fi \fi
-    \lst@next}
-\endgroup
-%    \end{macrocode}
-% This |\endgroup| restores the catcodes of chr(0)--chr(8), but not the
-% catcodes of the characters inside |\lst@MakeActive@| since they are already
-% read.
-%
-% Note: A conversion from an arbitrary `catcode--character code' table back to
-% \TeX's catcodes is possible if we test against the character codes (either
-% via |\ifnum| or |\ifcase|).
-% But control sequences and begin and end group characters definitely need
-% some special treatment.
-% However I haven't checked the details.
-% So just ignore this and don't bother me for this note. :\,--\,)
-% \end{macro}
-%
-% \begin{macro}{\lst@DefActive}
-% An easy application of |\lst@MakeActive|.
-%    \begin{macrocode}
-\def\lst@DefActive#1#2{\lst@MakeActive{#2}\let#1\lst@temp}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@DefOther}
-% We use the fact that |\meaning| produces catcode 12 characters except spaces
-% stay spaces. |\escapechar| is modified locally to suppress the output of an
-% escape character. Finally we remove spaces via \LaTeX's |\zap@space|, which
-% was proposed by \lsthelper{Rolf~Niepraschk}{1997/04/24}{use \zap@space}---not
-% in this context, but that doesn't matter.
-%    \begin{macrocode}
-\def\lst@DefOther#1#2{%
-    \begingroup \def#1{#2}\escapechar\m@ne \expandafter\endgroup
-    \expandafter\lst@DefOther@\meaning#1\relax#1}
-\def\lst@DefOther@#1>#2\relax#3{\edef#3{\zap@space#2 \@empty}}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-%\ifhyper
-% \subsection{Applications to \ref*{iCatcodeChanges}}\label{iApplicationsTo}
-%\else
-% \subsection{Applications to \ref{iCatcodeChanges}}\label{iApplicationsTo}
-%\fi
-%
-% If an environment is used inside an argument, the listing is already read and
-% we can do nothing to preserve the catcodes.
-% However, under certain circumstances the environment can be used inside an
-% argument---that's at least what I've said in the User's guide.
-% And now I have to work for it coming true.
-% Moreover we define an analogous conversion macro for the
-% \packagename{fancyvrb} mode.
-% \begin{syntax}
-% \item[0.19] |\lst@InsideConvert{|\meta{\TeX\ material \textup(already read\textup)}|}|
-%
-%       \emph{appends} a verbatim version of the argument to |\lst@arg|, but all
-%       appended characters are active. Since it's not a character to character
-%       conversion, `verbatim' needs to be explained. All characters can be
-%       typed in as they are except |\|, |{|, |}| and |%|. If you want one of
-%       these, you must write |\\|, |\{|, |\}| and |\%| instead.
-%       If two spaces should follow each other, the second (third, fourth,
-%       \ldots) space must be entered with a preceding backslash.
-%
-% \item[0.19] |\lst@XConvert{|\meta{\TeX\ material \textup(already read\textup)}|}|
-%
-%       \emph{appends} a `verbatim' version of the argument to |\lst@arg|.
-%       Here \TeX\ material is allowed to be put inside argument braces like
-%       |{(*}{*)}|. The contents of these arguments are converted, the braces
-%       stay as curly braces.
-%
-%       If |\lst@if| is true, each second argument is treated differently.
-%       Only the first character (of the delimiter) becomes active.
-% \end{syntax}
-%
-% \begin{macro}{\lst@InsideConvert}
-% If \texttt{mathescape} is not on, we call (near the end of this definition) a
-% submacro similar to |\zap@space| to replaced single spaces by active spaces.
-% Otherwise we check whether the code contains a pair |$...$| and call the
-% appropriate macro.
-%    \begin{macrocode}
-\def\lst@InsideConvert#1{%
-   \lst@ifmathescape
-      \lst@InsideConvert@e#1$\@nil
-      \lst@if
-         \lst@InsideConvert@ey#1\@nil
-      \else
-         \lst@InsideConvert@#1 \@empty
-         \expandafter\@gobbletwo
-      \fi
-      \expandafter\lst@next
-   \else
-      \lst@InsideConvert@#1 \@empty
-   \fi}
-\begingroup \lccode`\~=`\ \relax \lowercase{%
-%    \end{macrocode}
-% We make |#1| active and append these characters (plus an active space) to
-% |\lst@arg|.
-% If we haven't found the end |\@empty| of the input, we continue the process.
-%    \begin{macrocode}
-\gdef\lst@InsideConvert@#1 #2{%
-    \lst@MakeActive{#1}%
-    \ifx\@empty#2%
-        \lst@lExtend\lst@arg{\lst@temp}%
-    \else
-        \lst@lExtend\lst@arg{\lst@temp~}%
-        \expandafter\lst@InsideConvert@
-    \fi #2}
-%    \end{macrocode}
-% Finally we end the |\lowercase| and close a group.
-%    \begin{macrocode}
-}\endgroup
-%    \end{macrocode}
-% The next definition has been used above to check for |$...$| and the following
-% one keeps the math contents from being converted. This feature was requested by
-% \lsthelper{Dr.~Jobst~Hoffmann}{}{}.
-%    \begin{macrocode}
-\def\lst@InsideConvert@e#1$#2\@nil{%
-   \ifx\@empty#2\@empty \lst@false \else \lst@true \fi}
-\def\lst@InsideConvert@ey#1$#2$#3\@nil{%
-   \lst@InsideConvert@#1 \@empty
-   \lst@lAddTo\lst@arg{%
-      \lst@ifdropinput\else
-         \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken
-         \setbox\@tempboxa=\hbox\bgroup$\lst@escapebegin
-         #2%
-         \lst@escapeend$\egroup \lst@CalcLostSpaceAndOutput
-         \lst@whitespacefalse
-      \fi}%
-   \def\lst@next{\lst@InsideConvert{#3}}%
-}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@XConvert}
-% Check for an argument \ldots
-%    \begin{macrocode}
-\def\lst@XConvert{\@ifnextchar\bgroup \lst@XConvertArg\lst@XConvert@}
-%    \end{macrocode}
-% \ldots, convert the argument, add it together with group delimiters to
-% |\lst@arg|, and we continue the conversion.
-%    \begin{macrocode}
-\def\lst@XConvertArg#1{%
-    {\lst@false \let\lst@arg\@empty
-     \lst@XConvert#1\@nil
-     \global\let\@gtempa\lst@arg}%
-    \lst@lExtend\lst@arg{\expandafter{\@gtempa}}%
-    \lst@XConvertNext}
-%    \end{macrocode}
-% Having no |\bgroup|, we look whether we've found the end of the input, and
-% convert one token ((non)active character or control sequence) and continue.
-%    \begin{macrocode}
-\def\lst@XConvert@#1{%
-    \ifx\@nil#1\else
-        \begingroup\lccode`\~=`#1\lowercase{\endgroup
-        \lst@lAddTo\lst@arg~}%
-        \expandafter\lst@XConvertNext
-    \fi}
-\def\lst@XConvertNext{%
-    \lst@if \expandafter\lst@XConvertX
-      \else \expandafter\lst@XConvert \fi}
-%    \end{macrocode}
-% Now we make only the first character active.
-%    \begin{macrocode}
-\def\lst@XConvertX#1{%
-    \ifx\@nil#1\else
-        \lst@XConvertX@#1\relax
-        \expandafter\lst@XConvert
-    \fi}
-\def\lst@XConvertX@#1#2\relax{%
-    \begingroup\lccode`\~=`#1\lowercase{\endgroup
-    \lst@XCConvertX@@~}{#2}}
-\def\lst@XCConvertX@@#1#2{\lst@lAddTo\lst@arg{{#1#2}}}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Driver file handling*}
-%
-% The \packagename{listings} package is split into several driver files,
-% miscellaneous (= aspect) files, and one kernel file.
-% All these files can be loaded partially and on demand---except the kernel
-% which provides this functionality.
-% \begin{syntax}
-% \item[0.21] |\lst@Require|\marg{name}\marg{prefix}\marg{feature list}\meta{alias}\meta{file list macro}
-%
-%       tries to load all items of \meta{feature list} from the files
-%       listed in \meta{file list macro}.
-%       Each item has the form [\oarg{sub}]\meta{feature}.
-%       |\lst@if| equals |\iftrue| if and only if all items were loadable.
-%
-%       The macro \meta{alias} gets an item as argument and must define
-%       appropriate versions of |\lst@oalias| and |\lst@malias|. In fact
-%       the feature associated with these definitions is loaded. You can
-%       use \meta{alias}=|\lst@NoAlias| for no substitution.
-%
-%       \meta{prefix} identifies the type internally and \meta{name} is used
-%       for messages.
-%
-%       For example, |\lstloadaspects| uses the following arguments where |#1|
-%       is the list of aspects: |{aspects}|\allowbreak|a|\allowbreak
-%       |{#1}|\allowbreak|\lst@NoAlias|\allowbreak|\lstaspectfiles|.
-%
-% \item[0.20] |\lst@DefDriver|\marg{name}\marg{prefix}\meta{interface macro}|\if|\alternative{true,false}
-%
-%
-%
-% \item[0.21] |\lst@IfRequired|\oarg{sub}\marg{feature}\marg{then}\marg{else}
-%
-%       is used inside a driver file by the aspect, language, or whatever
-%       else defining commands. \meta{then} is executed if and only if
-%       \oarg{sub}\marg{feature} has been requested via |\lst@Require|.
-%       Otherwise \meta{else} is executed---which is also the case for
-%       subsequent calls with the same \oarg{sub}\marg{feature}.
-%
-%       \meta{then} and \meta{else} may use |\lst@prefix| (read access only).
-%
-%       |\lst@BeginAspect| in section \ref{iAspectCommands} and |\lst@DefDriver|
-%       serve as examples.
-% \end{syntax}
-%
-% \begin{macro}{\lst@Require}
-% Initialize variables (if required items aren't empty), \ldots
-%    \begin{macrocode}
-\def\lst@Require#1#2#3#4#5{%
-    \begingroup
-    \aftergroup\lst@true
-    \ifx\@empty#3\@empty\else
-        \def\lst@prefix{#2}\let\lst@require\@empty
-%    \end{macrocode}
-% \ldots\space and for each nonempty item: determine alias and add it to
-% |\lst@require| if it isn't loaded.
-%    \begin{macrocode}
-        \edef\lst@temp{\expandafter\zap@space#3 \@empty}%
-        \lst@for\lst@temp\do{%
-          \ifx\@empty##1\@empty\else \lstKV@OptArg[]{##1}{%
-            #4[####1]{####2}%
-            \@ifundefined{\@lst\lst@prefix @\lst@malias $\lst@oalias}%
-            {\edef\lst@require{\lst@require,\lst@malias $\lst@oalias}}%
-            {}}%
-          \fi}%
-%    \end{macrocode}
-% Init things and input files if and as long as it is necessary.
-%    \begin{macrocode}
-        \global\let\lst@loadaspects\@empty
-        \lst@InputCatcodes
-        \ifx\lst@require\@empty\else
-            \lst@for{#5}\do{%
-                \ifx\lst@require\@empty\else
-                    \InputIfFileExists{##1}{}{}%
-                \fi}%
-        \fi
-%    \end{macrocode}
-% Issue error and call |\lst@false| (after closing the local group) if some
-% items weren't loadable.
-%    \begin{macrocode}
-        \ifx\lst@require\@empty\else
-            \PackageError{Listings}{Couldn't load requested #1}%
-            {The following #1s weren't loadable:^^J\@spaces
-             \lst@require^^JThis may cause errors in the sequel.}%
-            \aftergroup\lst@false
-        \fi
-%    \end{macrocode}
-% Request aspects.
-%    \begin{macrocode}
-        \ifx\lst@loadaspects\@empty\else
-            \lst@RequireAspects\lst@loadaspects
-        \fi
-    \fi
-    \endgroup}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@IfRequired}
-% uses |\lst@IfOneOf| and adds some code to \meta{then} part:
-% delete the now loaded item from the list and define
-% |\lst|\meta{prefix}|@|\meta{feature}|$|\meta{sub}.
-%    \begin{macrocode}
-\def\lst@IfRequired[#1]#2{%
-    \lst@NormedDef\lst@temp{[#1]#2}%
-    \expandafter\lst@IfRequired@\lst@temp\relax}
-\def\lst@IfRequired@[#1]#2\relax#3{%
-    \lst@IfOneOf #2$#1\relax\lst@require
-        {\lst@DeleteKeysIn@\lst@require#2$#1,\relax,%
-         \global\expandafter\let
-             \csname\@lst\lst@prefix @#2$#1\endcsname\@empty
-         #3}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@require}
-%    \begin{macrocode}
-\let\lst@require\@empty
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@NoAlias}
-% just defines |\lst@oalias| and |\lst@malias|.
-%    \begin{macrocode}
-\def\lst@NoAlias[#1]#2{%
-    \lst@NormedDef\lst@oalias{#1}\lst@NormedDef\lst@malias{#2}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@LAS}
-%    \begin{macrocode}
-\gdef\lst@LAS#1#2#3#4#5#6#7{%
-    \lst@Require{#1}{#2}{#3}#4#5%
-    #4#3%
-    \@ifundefined{lst#2@\lst@malias$\lst@oalias}%
-        {\PackageError{Listings}%
-         {#1 \ifx\@empty\lst@oalias\else \lst@oalias\space of \fi
-          \lst@malias\space undefined}%
-         {The #1 is not loadable. \@ehc}}%
-        {#6\csname\@lst#2@\lst@malias $\lst@oalias\endcsname #7}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@RequireAspects}
-% \begin{macro}{\lstloadaspects}
-% make use of the just developped definitions.
-%    \begin{macrocode}
-\def\lst@RequireAspects#1{%
-    \lst@Require{aspect}{asp}{#1}\lst@NoAlias\lstaspectfiles}
-\let\lstloadaspects\lst@RequireAspects
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lstaspectfiles}
-% This macro is defined if and only if it's undefined yet.
-%    \begin{macrocode}
-\@ifundefined{lstaspectfiles}
-    {\newcommand\lstaspectfiles{lstmisc0.sty,lstmisc.sty}}{}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@DefDriver}
-% Test the next character and reinsert the arguments.
-%    \begin{macrocode}
-\gdef\lst@DefDriver#1#2#3#4{%
-    \@ifnextchar[{\lst@DefDriver@{#1}{#2}#3#4}%
-                 {\lst@DefDriver@{#1}{#2}#3#4[]}}
-%    \end{macrocode}
-% We set |\lst@if| locally true if the item has been requested.
-%    \begin{macrocode}
-\gdef\lst@DefDriver@#1#2#3#4[#5]#6{%
-    \def\lst@name{#1}\let\lst@if#4%
-    \lst@NormedDef\lst@driver{\@lst#2@#6$#5}%
-    \lst@IfRequired[#5]{#6}{\begingroup \lst@true}%
-                           {\begingroup}%
-    \lst@setcatcodes
-    \@ifnextchar[{\lst@XDefDriver{#1}#3}{\lst@DefDriver@@#3}}
-%    \end{macrocode}
-% Note that |\lst@XDefDriver| takes optional `base' arguments, but eventually
-% calls |\lst@DefDriver@@|. We define the item (in case of need), and
-% |\endgroup| resets some catcodes and |\lst@if|, i.e.~|\lst@XXDefDriver| knows
-% whether called by a public or internal command.
-%    \begin{macrocode}
-\gdef\lst@DefDriver@@#1#2{%
-    \lst@if
-        \global\@namedef{\lst@driver}{#1{#2}}%
-    \fi
-    \endgroup
-    \@ifnextchar[\lst@XXDefDriver\@empty}
-%    \end{macrocode}
-% We get the aspect argument, and (if not empty) load the aspects immediately
-% if called by a public command or extend the list of required aspects or
-% simply ignore the argument if the item leaves undefined.
-%    \begin{macrocode}
-\gdef\lst@XXDefDriver[#1]{%
-    \ifx\@empty#1\@empty\else
-        \lst@if
-            \lstloadaspects{#1}%
-        \else
-            \@ifundefined{\lst@driver}{}%
-            {\xdef\lst@loadaspects{\lst@loadaspects,#1}}%
-        \fi
-    \fi}
-%    \end{macrocode}
-% We insert an additional `also'key=value pair.
-%    \begin{macrocode}
-\gdef\lst@XDefDriver#1#2[#3]#4#5{\lst@DefDriver@@#2{also#1=[#3]#4,#5}}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Aspect commands}\label{iAspectCommands}
-%
-% This section contains commands used in defining `\lst-aspects'.
-% \begin{macro}{\lst@UserCommand}
-% is mainly equivalent to |\gdef|.
-%    \begin{macrocode}
-%<!info>\let\lst@UserCommand\gdef
-%<info>\def\lst@UserCommand#1{\message{\string#1,}\gdef#1}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@BeginAspect}
-% A straight-forward implementation:
-%    \begin{macrocode}
-\newcommand*\lst@BeginAspect[2][]{%
-    \def\lst@curraspect{#2}%
-    \ifx \lst@curraspect\@empty
-        \expandafter\lst@GobbleAspect
-    \else
-%    \end{macrocode}
-% If \meta{aspect name} is not empty, there are certain other conditions not to
-% define the aspect (as described in section \ref{dHowToDefineLstAspects}).
-%    \begin{macrocode}
-%<!info>        \let\lst@next\@empty
-%<info>        \def\lst@next{%
-%<info>            \message{^^JDefine lst-aspect `#2':}\lst@GetAllocs}%
-        \lst@IfRequired[]{#2}%
-            {\lst@RequireAspects{#1}%
-             \lst@if\else \let\lst@next\lst@GobbleAspect \fi}%
-            {\let\lst@next\lst@GobbleAspect}%
-        \expandafter\lst@next
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@EndAspect}
-% finishes an aspect definition.
-%    \begin{macrocode}
-\def\lst@EndAspect{%
-    \csname\@lst patch@\lst@curraspect\endcsname
-%<info>    \lst@ReportAllocs
-    \let\lst@curraspect\@empty}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@GobbleAspect}
-% drops all code up to the next |\lst@EndAspect|.
-%    \begin{macrocode}
-\long\def\lst@GobbleAspect#1\lst@EndAspect{\let\lst@curraspect\@empty}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Key}
-% The command simply defines the key. But we must take care of an optional
-% parameter and the initialization argument |#2|.
-%    \begin{macrocode}
-\def\lst@Key#1#2{%
-%<info>    \message{#1,}%
-    \@ifnextchar[{\lstKV@def{#1}{#2}}%
-                 {\def\lst@temp{\lst@Key@{#1}{#2}}
-                  \afterassignment\lst@temp
-                  \global\@namedef{KV@\@lst @#1}####1}}
-%    \end{macrocode}
-% Now comes a renamed and modified copy from a \packagename{keyval} macro:
-% We need global key definitions.
-%    \begin{macrocode}
-\def\lstKV@def#1#2[#3]{%
-    \global\@namedef{KV@\@lst @#1@default\expandafter}\expandafter
-        {\csname KV@\@lst @#1\endcsname{#3}}%
-    \def\lst@temp{\lst@Key@{#1}{#2}}\afterassignment\lst@temp
-    \global\@namedef{KV@\@lst @#1}##1}
-%    \end{macrocode}
-% We initialize the key if the first token of |#2| is not |\relax|.
-%    \begin{macrocode}
-\def\lst@Key@#1#2{%
-    \ifx\relax#2\@empty\else
-        \begingroup \globaldefs\@ne
-        \csname KV@\@lst @#1\endcsname{#2}%
-        \endgroup
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@UseHook}
-% is very, very, \ldots, very (hundreds of times) easy.
-%    \begin{macrocode}
-\def\lst@UseHook#1{\csname\@lst hk@#1\endcsname}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@AddToHook}
-% \begin{macro}{\lst@AddToHookExe}
-% \begin{macro}{\lst@AddToHookAtTop}
-% All use the same submacro.
-%    \begin{macrocode}
-\def\lst@AddToHook{\lst@ATH@\iffalse\lst@AddTo}
-\def\lst@AddToHookExe{\lst@ATH@\iftrue\lst@AddTo}
-\def\lst@AddToHookAtTop{\lst@ATH@\iffalse\lst@AddToAtTop}
-%    \end{macrocode}
-% If and only if the boolean value is true, the hook material is executed
-% globally.
-%    \begin{macrocode}
-\long\def\lst@ATH@#1#2#3#4{%
-    \@ifundefined{\@lst hk@#3}{%
-%<info>        \message{^^Jnew hook `#3',^^J}%
-        \expandafter\gdef\csname\@lst hk@#3\endcsname{}}{}%
-    \expandafter#2\csname\@lst hk@#3\endcsname{#4}%
-    \def\lst@temp{#4}%
-    #1% \iftrue|false
-        \begingroup \globaldefs\@ne \lst@temp \endgroup
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@AddTo}
-% Note that the definition is global!
-%    \begin{macrocode}
-\long\def\lst@AddTo#1#2{%
-    \expandafter\gdef\expandafter#1\expandafter{#1#2}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@AddToAtTop}
-% We need a couple of |\expandafter|s now. Simply note that we have\\
-%   {\small\hspace*{2em}|\expandafter\gdef\expandafter#1\expandafter{\lst@temp|
-%    $\langle$\textit{contents of }|#1|$\rangle$|}|}\\
-% after the `first phase' of expansion.
-%    \begin{macrocode}
-\def\lst@AddToAtTop#1#2{\def\lst@temp{#2}%
-    \expandafter\expandafter\expandafter\gdef
-    \expandafter\expandafter\expandafter#1%
-    \expandafter\expandafter\expandafter{\expandafter\lst@temp#1}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@lAddTo}
-% A local version of |\lst@AddTo| \ldots
-%    \begin{macrocode}
-\def\lst@lAddTo#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Extend}
-% \begin{macro}{\lst@lExtend}
-% \ldots\space and here we expand the first token of the second argument first.
-%    \begin{macrocode}
-\def\lst@Extend#1#2{%
-    \expandafter\lst@AddTo\expandafter#1\expandafter{#2}}
-\def\lst@lExtend#1#2{%
-    \expandafter\lst@lAddTo\expandafter#1\expandafter{#2}}
-%    \end{macrocode}
-% \begin{TODO}
-% This should never be changed to
-%    \begin{verbatim}
-%    \def\lst@Extend#1{%
-%        \expandafter\lst@AddTo\expandafter#1\expandafter}
-%    \def\lst@lExtend#1{%
-%        \expandafter\lst@lAddTo\expandafter#1}\end{verbatim}
-% The first is not equivalent in case that the second argument is a single
-% (= non-braced) control sequence, and the second isn't in case of a braced
-% second argument.
-% \end{TODO}
-% \end{macro}
-% \end{macro}
-%
-%
-% \subsection{Interfacing with \textsf{keyval}}
-%
-% The \packagename{keyval} package passes the value via the one and only
-% paramater |#1| to the definition part of the key macro. The following
-% commands may be used to analyse the value. Note that we need at least version
-% 1.10 of the \packagename{keyval} package. Note also that the package removes
-% a naming conflict with AMS classes---reported by \lsthelper{Ralf~Quast}
-% {1998/01/08}{\keywords conflicts with AMS classes}.
-% \begingroup
-%    \begin{macrocode}
-\RequirePackage{keyval}[1997/11/10]
-%    \end{macrocode}
-% \endgroup
-%
-% \begin{macro}{\lstKV@TwoArg}
-% \begin{macro}{\lstKV@ThreeArg}
-% \begin{macro}{\lstKV@FourArg}
-% Define temporary macros and call with given arguments |#1|. We add empty
-% arguments for the case that the user doesn't provide enough.
-%    \begin{macrocode}
-\def\lstKV@TwoArg#1#2{\gdef\@gtempa##1##2{#2}\@gtempa#1{}{}}
-\def\lstKV@ThreeArg#1#2{\gdef\@gtempa##1##2##3{#2}\@gtempa#1{}{}{}}
-\def\lstKV@FourArg#1#2{\gdef\@gtempa##1##2##3##4{#2}\@gtempa#1{}{}{}{}}
-%    \end{macrocode}
-% There's one question: What are the global definitions good for? |\lst@Key|
-% might set |\globaldefs| to one and possibly calls this macro. That's the
-% reason why we use global definitions here and below.
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lstKV@OptArg}
-% We define the temporary macro |\@gtempa| and insert default argument if
-% necessary.
-%    \begin{macrocode}
-\def\lstKV@OptArg[#1]#2#3{%
-    \gdef\@gtempa[##1]##2{#3}\lstKV@OptArg@{#1}#2\@}
-\def\lstKV@OptArg@#1{\@ifnextchar[\lstKV@OptArg@@{\lstKV@OptArg@@[#1]}}
-\def\lstKV@OptArg@@[#1]#2\@{\@gtempa[#1]{#2}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstKV@XOptArg}
-% Here |#3| is already a definition with at least two parameters whose first
-% is enclosed in brackets.
-%    \begin{macrocode}
-\def\lstKV@XOptArg[#1]#2#3{%
-    \global\let\@gtempa#3\lstKV@OptArg@{#1}#2\@}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstKV@CSTwoArg}
-% Just define temporary macro and call it.
-%    \begin{macrocode}
-\def\lstKV@CSTwoArg#1#2{%
-    \gdef\@gtempa##1,##2,##3\relax{#2}%
-    \@gtempa#1,,\relax}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstKV@SetIf}
-% We simply test the lower case first character of |#1|.
-%    \begin{macrocode}
-\def\lstKV@SetIf#1{\lstKV@SetIf@#1\relax}
-\def\lstKV@SetIf@#1#2\relax#3{\lowercase{%
-    \expandafter\let\expandafter#3%
-        \csname if\ifx #1t}true\else false\fi\endcsname}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstKV@SwitchCases}
-% is implemented as a substring test.
-%    \begin{macrocode}
-\def\lstKV@SwitchCases#1#2#3{%
-    \def\lst@temp##1\\#1&##2\\##3##4\@nil{%
-        \ifx\@empty##3%
-            #3%
-        \else
-            ##2%
-        \fi
-    }%
-    \lst@temp\\#2\\#1&\\\@empty\@nil}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstset}
-% Finally this main user interface macro.
-% We change catcodes for reading the argument.
-%    \begin{macrocode}
-\lst@UserCommand\lstset{\begingroup \lst@setcatcodes \lstset@}
-\def\lstset@#1{\endgroup \ifx\@empty#1\@empty\else\setkeys{lst}{#1}\fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@setcatcodes}
-% contains all catcode changes for |\lstset|. The equal-sign has been added
-% after a bug report by \lsthelper{Bekir~Karaoglu}{2003/09/16}{keyval problems
-% with [turkish]{babel}}---babel's active equal sign clashes with keyval's
-% usage. |\catcode`\"=12\relax| has been removed after a bug report by
-% \lsthelper{Heiko~Bauke}{2004/06/27}{listings und ngerman}\,---\,hopefully
-% this introduces no other bugs.
-%    \begin{macrocode}
-\def\lst@setcatcodes{\makeatletter \catcode`\==12\relax}
-%    \end{macrocode}
-% \begin{TODO}
-% Change more catcodes?
-% \end{TODO}
-% \end{macro}
-%
-%
-% \subsection{Internal modes}
-%
-% \begin{macro}{\lst@NewMode}
-% We simply use |\chardef| for a mode definition. The counter |\lst@mode|
-% mainly keeps the current mode number. But it is also used to advance the
-% number in the macro |\lst@newmode|---we don't waste another counter.
-%    \begin{macrocode}
-\def\lst@NewMode#1{%
-    \ifx\@undefined#1%
-        \lst@mode\lst@newmode\relax \advance\lst@mode\@ne
-        \xdef\lst@newmode{\the\lst@mode}%
-        \global\chardef#1=\lst@mode
-        \lst@mode\lst@nomode
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@mode}
-% \begin{macro}{\lst@nomode}
-% We allocate the counter and the first mode.
-%    \begin{macrocode}
-\newcount\lst@mode
-\def\lst@newmode{\m@ne}% init
-\lst@NewMode\lst@nomode % init (of \lst@mode :-)
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@UseDynamicMode}
-% For dynamic modes we must not use the counter |\lst@mode| (since possibly
-% already valued). |\lst@dynamicmode| substitutes |\lst@newmode| and is a local
-% definition here, \ldots
-%    \begin{macrocode}
-\def\lst@UseDynamicMode{%
-    \@tempcnta\lst@dynamicmode\relax \advance\@tempcnta\@ne
-    \edef\lst@dynamicmode{\the\@tempcnta}%
-    \expandafter\lst@Swap\expandafter{\expandafter{\lst@dynamicmode}}}
-%    \end{macrocode}
-% \ldots\ initialized each listing with the current `value' of |\lst@newmode|.
-%    \begin{macrocode}
-\lst@AddToHook{InitVars}{\let\lst@dynamicmode\lst@newmode}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@EnterMode}
-% Each mode opens a group level, stores the mode number and execute mode
-% specific tokens. Moreover we keep all these changes in mind (locally) and
-% adjust internal variables if the user wants it.
-%    \begin{macrocode}
-\def\lst@EnterMode#1#2{%
-    \bgroup \lst@mode=#1\relax #2%
-    \lst@FontAdjust
-    \lst@lAddTo\lst@entermodes{\lst@EnterMode{#1}{#2}}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{InitVars}{\let\lst@entermodes\@empty}
-\let\lst@entermodes\@empty % init
-%    \end{macrocode}
-% The initialization has been added after a bug report from
-% \lsthelper{Herfried~Karl~Wagner}{2002/05/11}{undefined control sequence
-% \lst@entermodes}.
-% \end{macro}
-%
-% \begin{macro}{\lst@LeaveMode}
-% We simply close the group and call |\lsthk@EndGroup| if and only if the
-% current mode is not |\lst@nomode|.
-%    \begin{macrocode}
-\def\lst@LeaveMode{%
-    \ifnum\lst@mode=\lst@nomode\else
-        \egroup \expandafter\lsthk@EndGroup
-    \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{EndGroup}{}% init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@InterruptModes}
-% We put the current mode sequence on a stack and leave all modes.
-%    \begin{macrocode}
-\def\lst@InterruptModes{%
-    \lst@Extend\lst@modestack{\expandafter{\lst@entermodes}}%
-    \lst@LeaveAllModes}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{InitVars}{\global\let\lst@modestack\@empty}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@ReenterModes}
-% If the stack is not empty, we leave all modes and pop the topmost element
-% (which is the last element of |\lst@modestack|).
-%    \begin{macrocode}
-\def\lst@ReenterModes{%
-    \ifx\lst@modestack\@empty\else
-        \lst@LeaveAllModes
-        \global\let\@gtempa\lst@modestack
-        \global\let\lst@modestack\@empty
-        \expandafter\lst@ReenterModes@\@gtempa\relax
-    \fi}
-\def\lst@ReenterModes@#1#2{%
-    \ifx\relax#2\@empty
-%    \end{macrocode}
-% If we've reached |\relax|, we've also found the last element: we execute |#1|
-% and gobble |{#2}|=|{\relax}| after |\fi|.
-%    \begin{macrocode}
-        \gdef\@gtempa##1{#1}%
-        \expandafter\@gtempa
-    \else
-%    \end{macrocode}
-% Otherwise we just add the element to |\lst@modestack| and continue the loop.
-%    \begin{macrocode}
-        \lst@AddTo\lst@modestack{{#1}}%
-        \expandafter\lst@ReenterModes@
-    \fi
-    {#2}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@LeaveAllModes}
-% Leaving all modes means closing groups until the mode equals |\lst@nomode|.
-%    \begin{macrocode}
-\def\lst@LeaveAllModes{%
-    \ifnum\lst@mode=\lst@nomode
-        \expandafter\lsthk@EndGroup
-    \else
-        \expandafter\egroup\expandafter\lst@LeaveAllModes
-    \fi}
-%    \end{macrocode}
-% We need that macro to end a listing correctly.
-%    \begin{macrocode}
-\lst@AddToHook{ExitVars}{\lst@LeaveAllModes}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Pmode}
-% \begin{macro}{\lst@GPmode}
-% The `processing' and the general purpose mode.
-%    \begin{macrocode}
-\lst@NewMode\lst@Pmode
-\lst@NewMode\lst@GPmode
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@modetrue}
-% The usual macro to value a boolean except that we also execute a hook.
-%    \begin{macrocode}
-\def\lst@modetrue{\let\lst@ifmode\iftrue \lsthk@ModeTrue}
-\let\lst@ifmode\iffalse % init
-\lst@AddToHook{ModeTrue}{}% init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@ifLmode}
-% Comment lines use a static mode. It terminates at end of line.
-%    \begin{macrocode}
-\def\lst@Lmodetrue{\let\lst@ifLmode\iftrue}
-\let\lst@ifLmode\iffalse % init
-\lst@AddToHook{EOL}{\@whilesw \lst@ifLmode\fi \lst@LeaveMode}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Divers helpers}
-%
-% \begin{macro}{\lst@NormedDef}
-% works like |\def| (without any parameters!) but normalizes the replacement
-% text by making all characters lower case and stripping off spaces.
-%    \begin{macrocode}
-\def\lst@NormedDef#1#2{\lowercase{\edef#1{\zap@space#2 \@empty}}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@NormedNameDef}
-% works like |\global\@namedef| (again without any parameters!) but normalizes
-% both the macro name and the replacement text.
-%    \begin{macrocode}
-\def\lst@NormedNameDef#1#2{%
-    \lowercase{\edef\lst@temp{\zap@space#1 \@empty}%
-    \expandafter\xdef\csname\lst@temp\endcsname{\zap@space#2 \@empty}}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@GetFreeMacro}
-% Initialize |\@tempcnta| and |\lst@freemacro|, \ldots
-%    \begin{macrocode}
-\def\lst@GetFreeMacro#1{%
-    \@tempcnta\z@ \def\lst@freemacro{#1\the\@tempcnta}%
-    \lst@GFM@}
-%    \end{macrocode}
-% \ldots\space and either build the control sequence or advance the counter and
-% continue.
-%    \begin{macrocode}
-\def\lst@GFM@{%
-    \expandafter\ifx \csname\lst@freemacro\endcsname \relax
-        \edef\lst@freemacro{\csname\lst@freemacro\endcsname}%
-    \else
-        \advance\@tempcnta\@ne
-        \expandafter\lst@GFM@
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@gtempboxa}
-%    \begin{macrocode}
-\newbox\lst@gtempboxa
-%    \end{macrocode}
-%    \begin{macrocode}
-%</kernel>
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \section{Doing output}
-%
-%
-% \subsection{Basic registers and keys}
-%
-%    \begin{macrocode}
-%<*kernel>
-%    \end{macrocode}
-%
-% \paragraph{The current character string}
-% is kept in a token register and a counter holds its length.
-% Here we define the macros to put characters into the output queue.
-%
-% \begin{macro}{\lst@token}
-% \begin{macro}{\lst@length}
-% are allocated here. Quite a useful comment, isn't it?
-%    \begin{macrocode}
-\newtoks\lst@token \newcount\lst@length
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@ResetToken}
-% \begin{macro}{\lst@lastother}
-% The two registers get empty respectively zero at the beginning of each line.
-% After receiving a report from \lsthelper{Claus~Atzenbeck}{1999/11/24}{HTML:
-% output unit repeated after >}---I removed such a bug many times---I decided
-% to reset these registers in the \hookname{EndGroup} hook, too.
-%    \begin{macrocode}
-\def\lst@ResetToken{\lst@token{}\lst@length\z@}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{InitVarsBOL}{\lst@ResetToken \let\lst@lastother\@empty}
-\lst@AddToHook{EndGroup}{\lst@ResetToken \let\lst@lastother\@empty}
-%    \end{macrocode}
-% The macro |\lst@lastother| will be equivalent to the last `other' character,
-% which leads us to |\lst@ifletter|.
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@ifletter}
-% indicates whether the token contains an identifier or other characters.
-%    \begin{macrocode}
-\def\lst@lettertrue{\let\lst@ifletter\iftrue}
-\def\lst@letterfalse{\let\lst@ifletter\iffalse}
-\lst@AddToHook{InitVars}{\lst@letterfalse}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Append}
-% puts the argument into the output queue.
-%    \begin{macrocode}
-\def\lst@Append#1{\advance\lst@length\@ne
-                  \lst@token=\expandafter{\the\lst@token#1}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@AppendOther}
-% Depending on the current state, we first output the character string as an
-% identifier. Then we save the `argument' via |\futurelet| and call the macro
-% |\lst@Append| to do the rest.
-%    \begin{macrocode}
-\def\lst@AppendOther{%
-    \lst@ifletter \lst@Output\lst@letterfalse \fi
-    \futurelet\lst@lastother\lst@Append}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@AppendLetter}
-% We output a non-identifier string if necessary and call |\lst@Append|.
-%    \begin{macrocode}
-\def\lst@AppendLetter{%
-    \lst@ifletter\else \lst@OutputOther\lst@lettertrue \fi
-    \lst@Append}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@SaveToken}
-% \begin{macro}{\lst@RestoreToken}
-% If a group end appears and ruins the character string, we can use these
-% macros to save and restore the contents. |\lst@thestyle| is the current
-% printing style and must be saved and restored, too.
-%    \begin{macrocode}
-\def\lst@SaveToken{%
-    \global\let\lst@gthestyle\lst@thestyle
-    \global\let\lst@glastother\lst@lastother
-    \xdef\lst@RestoreToken{\noexpand\lst@token{\the\lst@token}%
-                           \noexpand\lst@length\the\lst@length\relax
-                           \noexpand\let\noexpand\lst@thestyle
-                                        \noexpand\lst@gthestyle
-                           \noexpand\let\noexpand\lst@lastother
-                                        \noexpand\lst@glastother}}
-%    \end{macrocode}
-% Now -- that means after a bug report by \lsthelper{Rolf~Niepraschk}
-% {2002/04/12}{\RequirePackage is missing keywordstyle when near the top of
-% a page} -- |\lst@lastother| is also saved and restored.
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@IfLastOtherOneOf}
-% Finally, this obvious implementation.
-%    \begin{macrocode}
-\def\lst@IfLastOtherOneOf#1{\lst@IfLastOtherOneOf@ #1\relax}
-\def\lst@IfLastOtherOneOf@#1{%
-    \ifx #1\relax
-        \expandafter\@secondoftwo
-    \else
-        \ifx\lst@lastother#1%
-            \lst@IfLastOtherOneOf@t
-        \else
-            \expandafter\expandafter\expandafter\lst@IfLastOtherOneOf@
-        \fi
-    \fi}
-\def\lst@IfLastOtherOneOf@t#1\fi\fi#2\relax{\fi\fi\@firstoftwo}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \paragraph{The current position}
-% is either the dimension |\lst@currlwidth|, which is the horizontal position
-% without taking the current character string into account, or it's the current
-% column starting with number 0. This is |\lst@column| $-$ |\lst@pos| $+$
-% |\lst@length|. Moreover we have |\lst@lostspace| which is the difference
-% between the current and the desired line width. We define macros to insert
-% this lost space.
-%
-% \begin{macro}{\lst@currlwidth}
-% \begin{macro}{\lst@column}
-% \begin{macro}{\lst@pos}
-% the current line width and two counters.
-%    \begin{macrocode}
-\newdimen\lst@currlwidth % \global
-\newcount\lst@column \newcount\lst@pos % \global
-\lst@AddToHook{InitVarsBOL}
-    {\global\lst@currlwidth\z@ \global\lst@pos\z@ \global\lst@column\z@}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@CalcColumn}
-% sets |\@tempcnta| to the current column.
-% Note that |\lst@pos| will be nonpositive.
-%    \begin{macrocode}
-\def\lst@CalcColumn{%
-            \@tempcnta\lst@column
-    \advance\@tempcnta\lst@length
-    \advance\@tempcnta-\lst@pos}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@lostspace}
-% Whenever this dimension is positive we can insert space. A negative `lost
-% space' means that the printed line is wider than expected.
-%    \begin{macrocode}
-\newdimen\lst@lostspace % \global
-\lst@AddToHook{InitVarsBOL}{\global\lst@lostspace\z@}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@UseLostSpace}
-% We insert space and reset it if and only if |\lst@lostspace| is positive.
-%    \begin{macrocode}
-\def\lst@UseLostSpace{\ifdim\lst@lostspace>\z@ \lst@InsertLostSpace \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@InsertLostSpace}
-% \begin{macro}{\lst@InsertHalfLostSpace}
-% Ditto, but insert even if negative. |\lst@Kern| will be defined very soon.
-%    \begin{macrocode}
-\def\lst@InsertLostSpace{%
-    \lst@Kern\lst@lostspace \global\lst@lostspace\z@}
-\def\lst@InsertHalfLostSpace{%
-    \global\lst@lostspace.5\lst@lostspace \lst@Kern\lst@lostspace}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-% \paragraph{Column widths}
-% Here we deal with the width of a single column, which equals the width of a
-% single character box. Keep in mind that there are fixed and flexible column
-% formats.
-%
-% \begin{macro}{\lst@width}
-% \begin{lstkey}{basewidth}
-% \keyname{basewidth} assigns the values to macros and tests whether they are
-% negative.
-%    \begin{macrocode}
-\newdimen\lst@width
-\lst@Key{basewidth}{0.6em,0.45em}{\lstKV@CSTwoArg{#1}%
-    {\def\lst@widthfixed{##1}\def\lst@widthflexible{##2}%
-     \ifx\lst@widthflexible\@empty
-         \let\lst@widthflexible\lst@widthfixed
-     \fi
-     \def\lst@temp{\PackageError{Listings}%
-                                {Negative value(s) treated as zero}%
-                                \@ehc}%
-     \let\lst@error\@empty
-     \ifdim \lst@widthfixed<\z@
-         \let\lst@error\lst@temp \let\lst@widthfixed\z@
-     \fi
-     \ifdim \lst@widthflexible<\z@
-         \let\lst@error\lst@temp \let\lst@widthflexible\z@
-     \fi
-     \lst@error}}
-%    \end{macrocode}
-% We set the dimension in a special hook.
-%    \begin{macrocode}
-\lst@AddToHook{FontAdjust}
-    {\lst@width=\lst@ifflexible\lst@widthflexible
-                          \else\lst@widthfixed\fi \relax}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{macro}
-%
-% \begin{lstkey}{fontadjust}
-% \begin{macro}{\lst@FontAdjust}
-% This hook is controlled by a switch and is always executed at
-% \hookname{InitVars}.
-%    \begin{macrocode}
-\lst@Key{fontadjust}{false}[t]{\lstKV@SetIf{#1}\lst@iffontadjust}
-\def\lst@FontAdjust{\lst@iffontadjust \lsthk@FontAdjust \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{InitVars}{\lsthk@FontAdjust}
-%    \end{macrocode}
-% \end{macro}
-% \end{lstkey}
-%
-%
-% \subsection{Low- and mid-level output}
-%
-% \paragraph{Doing the output}
-% means putting the character string into a box register, updating all internal
-% data, and eventually giving the box to \TeX.
-%
-% \begin{macro}{\lst@OutputBox}
-% \begin{macro}{\lst@alloverstyle}
-% The lowest level is the output of a box register.
-% Here we use |\box#1| as argument to |\lst@alloverstyle|.
-%    \begin{macrocode}
-\def\lst@OutputBox#1{\lst@alloverstyle{\box#1}}
-%    \end{macrocode}
-% \begin{ALTERNATIVE}
-% Instead of |\global\advance\lst@currlwidth| |\wd|\meta{box number} in
-% both definitions |\lst@Kern| and |\lst@CalcLostSpaceAndOutput|, we could
-% also advance the dimension here. But I decided not to do so since it
-% simplifies possible redefinitions of |\lst@OutputBox|: we need not to care
-% about |\lst@currlwidth|.
-% \end{ALTERNATIVE}
-%    \begin{macrocode}
-\def\lst@alloverstyle#1{#1}% init
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@Kern}
-% has been used to insert `lost space'.
-% It must not use |\@tempboxa| since that \ldots
-%    \begin{macrocode}
-\def\lst@Kern#1{%
-    \setbox\z@\hbox{{\lst@currstyle{\kern#1}}}%
-    \global\advance\lst@currlwidth \wd\z@
-    \lst@OutputBox\z@}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CalcLostSpaceAndOutput}
-% \ldots\space is used here.
-% We keep track of |\lst@lostspace|, |\lst@currlwidth| and |\lst@pos|.
-%    \begin{macrocode}
-\def\lst@CalcLostSpaceAndOutput{%
-    \global\advance\lst@lostspace \lst@length\lst@width
-    \global\advance\lst@lostspace-\wd\@tempboxa
-    \global\advance\lst@currlwidth \wd\@tempboxa
-    \global\advance\lst@pos -\lst@length
-%    \end{macrocode}
-% Before |\@tempboxa| is output, we insert space if there is enough lost space.
-% This possibly invokes |\lst@Kern| via `insert half lost space', which is the
-% reason for why we mustn't use |\@tempboxa| above. By redefinition we prevent
-% |\lst@OutputBox| from using any special style in |\lst@Kern|.
-%    \begin{macrocode}
-    \setbox\@tempboxa\hbox{\let\lst@OutputBox\box
-        \ifdim\lst@lostspace>\z@ \lst@leftinsert \fi
-        \box\@tempboxa
-        \ifdim\lst@lostspace>\z@ \lst@rightinsert \fi}%
-%    \end{macrocode}
-% Finally we can output the new box.
-%    \begin{macrocode}
-    \lst@OutputBox\@tempboxa \lsthk@PostOutput}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{PostOutput}{}% init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@OutputToken}
-% Now comes a mid-level definition.
-% Here we use |\lst@token| to set |\@tempboxa| and eventually output the box.
-% We take care of font adjustment and special output styles.
-% Yet unknown macros are defined in the following subsections.
-%    \begin{macrocode}
-\def\lst@OutputToken{%
-    \lst@TrackNewLines \lst@OutputLostSpace
-    \lst@ifgobbledws
-        \lst@gobbledwhitespacefalse
-        \lst@@discretionary
-    \fi
-    \lst@CheckMerge
-    {\lst@thestyle{\lst@FontAdjust
-     \setbox\@tempboxa\lst@hbox
-        {\lsthk@OutputBox
-         \lst@lefthss
-         \expandafter\lst@FillOutputBox\the\lst@token\@empty
-         \lst@righthss}%
-     \lst@CalcLostSpaceAndOutput}}%
-    \lst@ResetToken}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{OutputBox}{}% init
-%    \end{macrocode}
-%    \begin{macrocode}
-\def\lst@gobbledwhitespacetrue{\global\let\lst@ifgobbledws\iftrue}
-\def\lst@gobbledwhitespacefalse{\global\let\lst@ifgobbledws\iffalse}
-\lst@AddToHookExe{InitBOL}{\lst@gobbledwhitespacefalse}% init
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \paragraph{Delaying the output}
-% means saving the character string somewhere and pushing it back when
-% neccessary. We may also attach the string to the next output box without
-% affecting style detection: both will be printed in the style of the upcoming
-% output. We will call this `merging'.
-%
-% \begin{macro}{\lst@Delay}
-% \begin{macro}{\lst@Merge}
-% To delay or merge |#1|, we process it as usual and simply save the state
-% in macros. For delayed characters we also need the currently `active'
-% output routine. Both definitions first check whether there are already
-% delayed or `merged' characters.
-%    \begin{macrocode}
-\def\lst@Delay#1{%
-    \lst@CheckDelay
-    #1%
-    \lst@GetOutputMacro\lst@delayedoutput
-    \edef\lst@delayed{\the\lst@token}%
-    \edef\lst@delayedlength{\the\lst@length}%
-    \lst@ResetToken}
-%    \end{macrocode}
-%    \begin{macrocode}
-\def\lst@Merge#1{%
-    \lst@CheckMerge
-    #1%
-    \edef\lst@merged{\the\lst@token}%
-    \edef\lst@mergedlength{\the\lst@length}%
-    \lst@ResetToken}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@MergeToken}
-% Here we put the things together again.
-%    \begin{macrocode}
-\def\lst@MergeToken#1#2{%
-    \advance\lst@length#2%
-    \lst@lExtend#1{\the\lst@token}%
-    \expandafter\lst@token\expandafter{#1}%
-    \let#1\@empty}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CheckDelay}
-% We need to print delayed characters. The mode depends on the current output
-% macro. If it equals the saved definition, we put the delayed characters in
-% front of the character string (we merge them) since there has been no
-% letter-to-other or other-to-letter leap. Otherwise we locally reset the
-% current character string, merge this empty string with the delayed one,
-% and output it.
-%    \begin{macrocode}
-\def\lst@CheckDelay{%
-    \ifx\lst@delayed\@empty\else
-        \lst@GetOutputMacro\@gtempa
-        \ifx\lst@delayedoutput\@gtempa
-            \lst@MergeToken\lst@delayed\lst@delayedlength
-        \else
-            {\lst@ResetToken
-             \lst@MergeToken\lst@delayed\lst@delayedlength
-             \lst@delayedoutput}%
-            \let\lst@delayed\@empty
-        \fi
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CheckMerge}
-% All this is easier for |\lst@merged|.
-%    \begin{macrocode}
-\def\lst@CheckMerge{%
-    \ifx\lst@merged\@empty\else
-        \lst@MergeToken\lst@merged\lst@mergedlength
-    \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\let\lst@delayed\@empty % init
-\let\lst@merged\@empty % init
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Column formats}
-%
-% It's time to deal with fixed and flexible column modes.
-% A couple of open definitions are now filled in.
-%
-% \begin{macro}{\lst@column@fixed}
-% switches to the fixed column format. The definitions here control how the
-% output of the above definitions looks like.
-%    \begin{macrocode}
-\def\lst@column@fixed{%
-    \lst@flexiblefalse
-    \lst@width\lst@widthfixed\relax
-    \let\lst@OutputLostSpace\lst@UseLostSpace
-    \let\lst@FillOutputBox\lst@FillFixed
-    \let\lst@hss\hss
-    \def\lst@hbox{\hbox to\lst@length\lst@width}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@FillFixed}
-% Filling up a fixed mode box is easy.
-%    \begin{macrocode}
-\def\lst@FillFixed#1{#1\lst@FillFixed@}
-%    \end{macrocode}
-% While not reaching the end (|\@empty| from above), we insert dynamic space,
-% output the argument and call the submacro again.
-%    \begin{macrocode}
-\def\lst@FillFixed@#1{%
-    \ifx\@empty#1\else \lst@hss#1\expandafter\lst@FillFixed@ \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@column@flexible}
-% The first flexible format.
-%    \begin{macrocode}
-\def\lst@column@flexible{%
-    \lst@flexibletrue
-    \lst@width\lst@widthflexible\relax
-    \let\lst@OutputLostSpace\lst@UseLostSpace
-    \let\lst@FillOutputBox\@empty
-    \let\lst@hss\@empty
-    \let\lst@hbox\hbox}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@column@fullflexible}
-% This column format inserts no lost space except at the beginning of a line.
-%    \begin{macrocode}
-\def\lst@column@fullflexible{%
-    \lst@column@flexible
-    \def\lst@OutputLostSpace{\lst@ifnewline \lst@UseLostSpace\fi}%
-    \let\lst@leftinsert\@empty
-    \let\lst@rightinsert\@empty}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@column@spaceflexible}
-% This column format only inserts lost space by stretching (invisible)
-% existing spaces; it does not insert lost space between identifiers
-% and other characters where the original does not have a space.  It
-% was suggested by \lsthelper{Andrei~Alexandrescu}{-}{2007-02-26}.
-%    \begin{macrocode}
-\def\lst@column@spaceflexible{%
-    \lst@column@flexible
-    \def\lst@OutputLostSpace{%
-      \lst@ifwhitespace
-        \ifx\lst@outputspace\lst@visiblespace
-        \else
-          \lst@UseLostSpace
-        \fi
-      \else
-        \lst@ifnewline \lst@UseLostSpace\fi
-      \fi}%
-    \let\lst@leftinsert\@empty
-    \let\lst@rightinsert\@empty}
-%    \end{macrocode}
-% \end{macro}
-%
-% Thus, we have the column formats. Now we define macros to use them.
-%
-% \begin{macro}{\lst@outputpos}
-% This macro sets the `output-box-positioning' parameter (the old key
-% \keyname{outputpos}). We test for |l|, |c| and |r|.
-% The fixed formats use |\lst@lefthss| and |\lst@righthss|, whereas the
-% flexibles need |\lst@leftinsert| and |\lst@rightinsert|.
-%    \begin{macrocode}
-\def\lst@outputpos#1#2\relax{%
-    \def\lst@lefthss{\lst@hss}\let\lst@righthss\lst@lefthss
-    \let\lst@rightinsert\lst@InsertLostSpace
-    \ifx #1c%
-        \let\lst@leftinsert\lst@InsertHalfLostSpace
-    \else\ifx #1r%
-        \let\lst@righthss\@empty
-        \let\lst@leftinsert\lst@InsertLostSpace
-        \let\lst@rightinsert\@empty
-    \else
-        \let\lst@lefthss\@empty
-        \let\lst@leftinsert\@empty
-        \ifx #1l\else \PackageWarning{Listings}%
-            {Unknown positioning for output boxes}%
-        \fi
-    \fi\fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@ifflexible}
-% indicates the column mode but does not distinguish between different fixed
-% or flexible modes.
-%    \begin{macrocode}
-\def\lst@flexibletrue{\let\lst@ifflexible\iftrue}
-\def\lst@flexiblefalse{\let\lst@ifflexible\iffalse}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{columns}
-% This is done here: check optional parameter and then build the control
-% sequence of the column format.
-%    \begin{macrocode}
-\lst@Key{columns}{[c]fixed}{\lstKV@OptArg[]{#1}{%
-    \ifx\@empty##1\@empty\else \lst@outputpos##1\relax\relax \fi
-    \expandafter\let\expandafter\lst@arg
-                                \csname\@lst @column@##2\endcsname
-%    \end{macrocode}
-% We issue a warning or save the definition for later.
-%    \begin{macrocode}
-    \lst@arg
-    \ifx\lst@arg\relax
-        \PackageWarning{Listings}{Unknown column format `##2'}%
-    \else
-        \lst@ifflexible
-            \let\lst@columnsflexible\lst@arg
-        \else
-            \let\lst@columnsfixed\lst@arg
-        \fi
-    \fi}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\let\lst@columnsfixed\lst@column@fixed % init
-\let\lst@columnsflexible\lst@column@flexible % init
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{flexiblecolumns}
-% Nothing else but a key to switch between the last flexible and fixed mode.
-%    \begin{macrocode}
-\lst@Key{flexiblecolumns}\relax[t]{%
-    \lstKV@SetIf{#1}\lst@ifflexible
-    \lst@ifflexible \lst@columnsflexible
-              \else \lst@columnsfixed \fi}
-%    \end{macrocode}
-% \end{lstkey}
-%
-%
-% \subsection{New lines}
-%
-% \begin{macro}{\lst@newlines}
-% This counter holds the number of `new lines' (cr+lf) we have to perform.
-%    \begin{macrocode}
-\newcount\lst@newlines
-\lst@AddToHook{InitVars}{\global\lst@newlines\z@}
-\lst@AddToHook{InitVarsBOL}{\global\advance\lst@newlines\@ne}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@NewLine}
-% This is how we start a new line: begin new paragraph and output an empty
-% box. If low-level definition |\lst@OutputBox| just gobbles the box , we
-% don't start a new line. This is used to drop the whole output.
-%    \begin{macrocode}
-\def\lst@NewLine{%
-    \ifx\lst@OutputBox\@gobble\else
-        \par\noindent \hbox{}%
-    \fi
-    \global\advance\lst@newlines\m@ne
-    \lst@newlinetrue}
-%    \end{macrocode}
-% Define |\lst@newlinetrue| and reset if after output.
-%    \begin{macrocode}
-\def\lst@newlinetrue{\global\let\lst@ifnewline\iftrue}
-\lst@AddToHookExe{PostOutput}{\global\let\lst@ifnewline\iffalse}% init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@TrackNewLines}
-% If |\lst@newlines| is positive, we execute the hook and insert the
-% new lines.
-%    \begin{macrocode}
-\def\lst@TrackNewLines{%
-    \ifnum\lst@newlines>\z@
-        \lsthk@OnNewLine
-        \lst@DoNewLines
-    \fi}
-\lst@AddToHook{OnNewLine}{}% init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{emptylines}
-% \lsthelper{Adam~Prugel-Bennett}{2001/02/19}{spacing of empty lines} asked for
-% such a key---if I didn't misunderstood him. We check for the optional star
-% and set |\lst@maxempty| and switch.
-%    \begin{macrocode}
-\lst@Key{emptylines}\maxdimen{%
-    \@ifstar{\lst@true\@tempcnta\@gobble#1\relax\lst@GobbleNil}%
-            {\lst@false\@tempcnta#1\relax\lst@GobbleNil}#1\@nil
-    \advance\@tempcnta\@ne
-    \edef\lst@maxempty{\the\@tempcnta\relax}%
-    \let\lst@ifpreservenumber\lst@if}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@DoNewLines}
-% First we take care of |\lst@maxempty| and then of the remaining empty lines.
-%    \begin{macrocode}
-\def\lst@DoNewLines{
-    \@whilenum\lst@newlines>\lst@maxempty \do
-        {\lst@ifpreservenumber
-            \lsthk@OnEmptyLine
-            \global\advance\c@lstnumber\lst@advancelstnum
-         \fi
-         \global\advance\lst@newlines\m@ne}%
-    \@whilenum \lst@newlines>\@ne \do
-        {\lsthk@OnEmptyLine \lst@NewLine}%
-    \ifnum\lst@newlines>\z@ \lst@NewLine \fi}
-\lst@AddToHook{OnEmptyLine}{}% init
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{High-level output}
-%
-% \begin{lstkey}{identifierstyle}
-% A simple key.
-%    \begin{macrocode}
-\lst@Key{identifierstyle}{}{\def\lst@identifierstyle{#1}}
-\lst@AddToHook{EmptyStyle}{\let\lst@identifierstyle\@empty}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@GotoTabStop}
-% Here we look whether the line already contains printed characters.
-% If true, we output a box with the width of a blank space.
-%    \begin{macrocode}
-\def\lst@GotoTabStop{%
-    \ifnum\lst@newlines=\z@
-        \setbox\@tempboxa\hbox{\lst@outputspace}%
-        \setbox\@tempboxa\hbox to\wd\@tempboxa{{\lst@currstyle{\hss}}}%
-        \lst@CalcLostSpaceAndOutput
-%    \end{macrocode}
-% It's probably not clear why it is sufficient to output a single space to go
-% to the next tabulator stop. Just note that the space lost by this process is
-% `lost space' in the sense above and therefore will be inserted before the
-% next characters are output.
-%    \begin{macrocode}
-    \else
-%    \end{macrocode}
-% Otherwise (no printed characters) we only need to advance |\lst@lostspace|,
-% which is inserted by |\lst@OutputToken| above, and update the column.
-%    \begin{macrocode}
-        \global\advance\lst@lostspace \lst@length\lst@width
-        \global\advance\lst@column\lst@length \lst@length\z@
-    \fi}
-%    \end{macrocode}
-% Note that this version works also in flexible column mode.
-% In fact, it's mainly the flexible version of \packagename{listings} 0.20.
-% \begin{TODO}
-% Use |\lst@ifnewline| instead of |\ifnum\lst@newlines=\z@|?
-% \end{TODO}
-% \end{macro}
-%
-% \begin{macro}{\lst@OutputOther}
-% becomes easy with the previous definitions.
-%    \begin{macrocode}
-\def\lst@OutputOther{%
-    \lst@CheckDelay
-    \ifnum\lst@length=\z@\else
-        \let\lst@thestyle\lst@currstyle
-        \lsthk@OutputOther
-        \lst@OutputToken
-    \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{OutputOther}{}% init
-\let\lst@currstyle\relax % init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Output}
-% We might use identifier style as default.
-%    \begin{macrocode}
-\def\lst@Output{%
-    \lst@CheckDelay
-    \ifnum\lst@length=\z@\else
-        \ifx\lst@currstyle\relax
-            \let\lst@thestyle\lst@identifierstyle
-        \else
-            \let\lst@thestyle\lst@currstyle
-        \fi
-        \lsthk@Output
-        \lst@OutputToken
-    \fi
-    \let\lst@lastother\relax}
-%    \end{macrocode}
-% Note that |\lst@lastother| becomes equivalent to |\relax| and not equivalent
-% to |\@empty| as everywhere else. I don't know whether this will be important
-% in the future or not.
-%    \begin{macrocode}
-\lst@AddToHook{Output}{}% init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@GetOutputMacro}
-% Just saves the output macro to be used.
-%    \begin{macrocode}
-\def\lst@GetOutputMacro#1{%
-    \lst@ifletter \global\let#1\lst@Output
-            \else \global\let#1\lst@OutputOther\fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@PrintToken}
-% outputs the current character string in letter or nonletter mode.
-%    \begin{macrocode}
-\def\lst@PrintToken{%
-    \lst@ifletter \lst@Output \lst@letterfalse
-            \else \lst@OutputOther \let\lst@lastother\@empty \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@XPrintToken}
-% is a special definition to print also merged characters.
-%    \begin{macrocode}
-\def\lst@XPrintToken{%
-    \lst@PrintToken \lst@CheckMerge
-    \ifnum\lst@length=\z@\else \lst@PrintToken \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Dropping the whole output}
-%
-% \begin{macro}{\lst@BeginDropOutput}
-% It's sometimes useful to process a part of a listing as usual, but to drop
-% the output. This macro does the main work and gets one argument, namely the
-% internal mode it enters. We save |\lst@newlines|, restore it |\aftergroup|
-% and redefine one macro, namely |\lst@OutputBox|. After a bug report from
-% \lsthelper{Gunther~Schmidl}{2002/02/27}{collapsing empty lines don't work
-% with printpod=false}
-%    \begin{macrocode}
-\def\lst@BeginDropOutput#1{%
-    \xdef\lst@BDOnewlines{\the\lst@newlines}%
-    \global\let\lst@BDOifnewline\lst@ifnewline
-    \lst@EnterMode{#1}%
-        {\lst@modetrue
-         \let\lst@OutputBox\@gobble
-         \aftergroup\lst@BDORestore}}
-%    \end{macrocode}
-% Restoring the date is quite easy:
-%    \begin{macrocode}
-\def\lst@BDORestore{%
-    \global\lst@newlines\lst@BDOnewlines
-    \global\let\lst@ifnewline\lst@BDOifnewline}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@EndDropOutput}
-% is equivalent to |\lst@LeaveMode|.
-%    \begin{macrocode}
-\let\lst@EndDropOutput\lst@LeaveMode
-%    \end{macrocode}
-%    \begin{macrocode}
-%</kernel>
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Writing to an external file}
-%
-% \begin{aspect}{writefile}
-% Now it would be good to know something about character classes since we need
-% to access the true input characters, for example a tabulator and not the
-% spaces it `expands' to.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{writefile}
-%    \end{macrocode}
-%
-% \begin{macro}{\lst@WF}
-% \begin{macro}{\lst@WFtoken}
-% The contents of the token will be written to file.
-%    \begin{macrocode}
-\newtoks\lst@WFtoken % global
-\lst@AddToHook{InitVarsBOL}{\global\lst@WFtoken{}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\newwrite\lst@WF
-\global\let\lst@WFifopen\iffalse % init
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@WFWriteToFile}
-% To do this, we have to expand the contents and then expand this via |\edef|.
-% Empty |\lst@UM| ensures that special characters (underscore, dollar, etc.)
-% are written correctly.
-%    \begin{macrocode}
-\gdef\lst@WFWriteToFile{%
-  \begingroup
-   \let\lst@UM\@empty
-   \expandafter\edef\expandafter\lst@temp\expandafter{\the\lst@WFtoken}%
-   \immediate\write\lst@WF{\lst@temp}%
-  \endgroup
-  \global\lst@WFtoken{}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@WFAppend}
-% Similar to |\lst@Append| but uses |\lst@WFtoken|.
-%    \begin{macrocode}
-\gdef\lst@WFAppend#1{%
-    \global\lst@WFtoken=\expandafter{\the\lst@WFtoken#1}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@BeginWriteFile}
-% \begin{macro}{\lst@BeginAlsoWriteFile}
-% use different macros for |\lst@OutputBox| (not) to drop the output.
-%    \begin{macrocode}
-\gdef\lst@BeginWriteFile{\lst@WFBegin\@gobble}
-\gdef\lst@BeginAlsoWriteFile{\lst@WFBegin\lst@OutputBox}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@WFBegin}
-% Here \ldots
-%    \begin{macrocode}
-\begingroup \catcode`\^^I=11
-\gdef\lst@WFBegin#1#2{%
-    \begingroup
-    \let\lst@OutputBox#1%
-%    \end{macrocode}
-% \ldots\space we have to update |\lst@WFtoken| and \ldots
-%    \begin{macrocode}
-    \def\lst@Append##1{%
-        \advance\lst@length\@ne
-        \expandafter\lst@token\expandafter{\the\lst@token##1}%
-        \ifx ##1\lst@outputspace \else
-            \lst@WFAppend##1%
-        \fi}%
-    \lst@lAddTo\lst@PreGotoTabStop{\lst@WFAppend{^^I}}%
-    \lst@lAddTo\lst@ProcessSpace{\lst@WFAppend{ }}%
-%    \end{macrocode}
-% \ldots\space need different `EOL' and `DeInit' definitions to write the
-% token register to file.
-%    \begin{macrocode}
-    \let\lst@DeInit\lst@WFDeInit
-    \let\lst@MProcessListing\lst@WFMProcessListing
-%    \end{macrocode}
-% Finally we open the file if necessary.
-%    \begin{macrocode}
-    \lst@WFifopen\else
-        \immediate\openout\lst@WF=#2\relax
-        \global\let\lst@WFifopen\iftrue
-        \@gobbletwo\fi\fi
-    \fi}
-\endgroup
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@EndWriteFile}
-% closes the file and restores original definitions.
-%    \begin{macrocode}
-\gdef\lst@EndWriteFile{%
-    \immediate\closeout\lst@WF \endgroup
-    \global\let\lst@WFifopen\iffalse}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@WFMProcessListing}
-% \begin{macro}{\lst@WFDeInit}
-% write additionally |\lst@WFtoken| to external file.
-%    \begin{macrocode}
-\global\let\lst@WFMProcessListing\lst@MProcessListing
-\global\let\lst@WFDeInit\lst@DeInit
-\lst@AddToAtTop\lst@WFMProcessListing{\lst@WFWriteToFile}
-\lst@AddToAtTop\lst@WFDeInit{%
-    \ifnum\lst@length=\z@\else \lst@WFWriteToFile \fi}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \section{Character classes}\label{iCharacterClasses}
-%
-% In this section, we define how the basic character classes do behave, before
-% turning over to the selection of character tables and how to specialize
-% characters.
-%
-%
-% \subsection{Letters, digits and others}
-%
-%    \begin{macrocode}
-%<*kernel>
-%    \end{macrocode}
-%
-% \begin{macro}{\lst@ProcessLetter}
-% We put the letter, which is not a whitespace, into the output queue.
-%    \begin{macrocode}
-\def\lst@ProcessLetter{\lst@whitespacefalse \lst@AppendLetter}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@ProcessOther}
-% Ditto.
-%    \begin{macrocode}
-\def\lst@ProcessOther{\lst@whitespacefalse \lst@AppendOther}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@ProcessDigit}
-% A digit appends the character to the current character string. But we must
-% use the right macro. This allows digits to be part of an identifier or
-% a numerical constant.
-%    \begin{macrocode}
-\def\lst@ProcessDigit{%
-    \lst@whitespacefalse
-    \lst@ifletter \expandafter\lst@AppendLetter
-            \else \expandafter\lst@AppendOther\fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@ifwhitespace}
-% indicates whether the last processed character has been white space.
-%    \begin{macrocode}
-\def\lst@whitespacetrue{\global\let\lst@ifwhitespace\iftrue}
-\def\lst@whitespacefalse{\global\let\lst@ifwhitespace\iffalse}
-\lst@AddToHook{InitVarsBOL}{\lst@whitespacetrue}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Whitespaces}
-%
-% Here we have to take care of two things: dropping empty lines at the end of
-% a listing and the different column formats. Both use |\lst@lostspace|. Lines
-% containing only tabulators and spaces should be viewed as empty. In order to
-% achieve this, tabulators and spaces at the beginning of a line don't output
-% any characters but advance |\lst@lostspace|. Whenever this dimension is
-% positive we insert that space before the character string is output. Thus,
-% if there are only tabulators and spaces, the line is `empty' since we
-% haven't done any output.
-%
-% We have to do more for flexible columns. Whitespaces can fix the column
-% alignment: if the real line is wider than expected, a tabulator is at least
-% one space wide; all remaining space fixes the alignment. If there are two or
-% more space characters, at least one is printed; the others fix the column
-% alignment.
-%
-%
-% \paragraph{Tabulators}
-% are processed in three stages. You have already seen the last stage
-% |\lst@GotoTabStop|. The other two calculate the necessary width and take care
-% of visible tabulators and spaces.
-%
-% \begin{lstkey}{tabsize}
-% We check for a legal argument before saving it. Default tabsize is 8 as
-% proposed by \lsthelper{Rolf~Niepraschk}{1997/04/24}{tabsize=8}.
-%    \begin{macrocode}
-\lst@Key{tabsize}{8}
-    {\ifnum#1>\z@ \def\lst@tabsize{#1}\else
-         \PackageError{Listings}{Strict positive integer expected}%
-         {You can't use `#1' as tabsize. \@ehc}%
-     \fi}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{showtabs}
-% \begin{lstkey}{tab}
-% Two more user keys for tab control.
-%    \begin{macrocode}
-\lst@Key{showtabs}f[t]{\lstKV@SetIf{#1}\lst@ifshowtabs}
-\lst@Key{tab}{\kern.06em\hbox{\vrule\@height.3ex}%
-              \hrulefill\hbox{\vrule\@height.3ex}}
-    {\def\lst@tab{#1}}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@ProcessTabulator}
-% A tabulator outputs the preceding characters, which decrements |\lst@pos| by
-% the number of printed characters.
-%    \begin{macrocode}
-\def\lst@ProcessTabulator{%
-    \lst@XPrintToken \lst@whitespacetrue
-%    \end{macrocode}
-% Then we calculate how many columns we need to reach the next tabulator stop:
-% we add |\lst@tabsize| until |\lst@pos| is strict positive. In other words,
-% |\lst@pos| is the column modulo |tabsize| and we're looking for a positive
-% representative. We assign it to |\lst@length| and reset |\lst@pos| in the
-% submacro.
-%    \begin{macrocode}
-    \global\advance\lst@column -\lst@pos
-    \@whilenum \lst@pos<\@ne \do
-        {\global\advance\lst@pos\lst@tabsize}%
-    \lst@length\lst@pos
-    \lst@PreGotoTabStop}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@PreGotoTabStop}
-% Visible tabs print |\lst@tab|.
-%    \begin{macrocode}
-\def\lst@PreGotoTabStop{%
-    \lst@ifshowtabs
-        \lst@TrackNewLines
-        \setbox\@tempboxa\hbox to\lst@length\lst@width
-            {{\lst@currstyle{\hss\lst@tab}}}%
-        \lst@CalcLostSpaceAndOutput
-    \else
-%    \end{macrocode}
-% If we are advised to keep spaces, we insert the correct number of them.
-%    \begin{macrocode}
-        \lst@ifkeepspaces
-            \@tempcnta\lst@length \lst@length\z@
-            \@whilenum \@tempcnta>\z@ \do
-                {\lst@AppendOther\lst@outputspace
-                 \advance\@tempcnta\m@ne}%
-            \lst@OutputOther
-        \else
-            \lst@GotoTabStop
-        \fi
-    \fi
-    \lst@length\z@ \global\lst@pos\z@}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \paragraph{Spaces}
-% are implemented as described at the beginning of this subsection. But first
-% we define some user keys.
-%
-% \begin{macro}{\lst@outputspace}
-% \begin{macro}{\lst@visiblespace}
-% The first macro is a default definition, \ldots
-%    \begin{macrocode}
-\def\lst@outputspace{\ }
-\def\lst@visiblespace{\lst@ttfamily{\char32}\textvisiblespace}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{lstkey}{showspaces}
-% \begin{lstkey}{keepspaces}
-% \ldots\space which is modified on user's request.
-%    \begin{macrocode}
-\lst@Key{showspaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifshowspaces}
-\lst@Key{keepspaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifkeepspaces}
-\lst@AddToHook{Init}
-    {\lst@ifshowspaces
-         \let\lst@outputspace\lst@visiblespace
-         \lst@keepspacestrue
-     \fi}
-\def\lst@keepspacestrue{\let\lst@ifkeepspaces\iftrue}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@ProcessSpace}
-% We look whether spaces fix the column alignment or not. In the latter case
-% we append a space; otherwise \ldots
-% \lsthelper{Andrei~Alexandrescu}{-}{2007/02/27} tested the |spaceflexible|
-% column setting and found a bug that resulted from |\lst@PrintToken| and
-% |\lst@whitespacetrue| being out of order here.
-%    \begin{macrocode}
-\def\lst@ProcessSpace{%
-    \lst@ifkeepspaces
-        \lst@PrintToken
-        \lst@whitespacetrue
-        \lst@AppendOther\lst@outputspace
-        \lst@PrintToken
-    \else \ifnum\lst@newlines=\z@
-%    \end{macrocode}
-% \ldots\space we append a `special space' if the line isn't empty.
-%    \begin{macrocode}
-        \lst@AppendSpecialSpace
-    \else \ifnum\lst@length=\z@
-%    \end{macrocode}
-% If the line is empty, we check whether there are characters in the output
-% queue. If there are no characters we just advance |\lst@lostspace|.
-% Otherwise we append the space.
-%    \begin{macrocode}
-            \global\advance\lst@lostspace\lst@width
-            \global\advance\lst@pos\m@ne
-            \lst@whitespacetrue
-        \else
-            \lst@AppendSpecialSpace
-        \fi
-    \fi \fi}
-%    \end{macrocode}
-% Note that this version works for fixed and flexible column output.
-% \end{macro}
-%
-% \begin{macro}{\lst@AppendSpecialSpace}
-% If there are at least two white spaces, we output preceding characters and
-% advance |\lst@lostspace| to avoid alignment problems. Otherwise we append
-% a space to the current character string.  Also, |\lst@whitespacetrue| has
-% been moved after |\lst@PrintToken| so that the token-printer can correctly
-% check whether it is printing whitespace or not; this was preventing the
-% |spaceflexible| column setting from working correctly.
-%    \begin{macrocode}
-\def\lst@AppendSpecialSpace{%
-    \lst@ifwhitespace
-        \lst@PrintToken
-        \global\advance\lst@lostspace\lst@width
-        \global\advance\lst@pos\m@ne
-        \lst@gobbledwhitespacetrue
-    \else
-        \lst@PrintToken
-        \lst@whitespacetrue
-        \lst@AppendOther\lst@outputspace
-        \lst@PrintToken
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \paragraph{Form feeds}
-% has been introduced after communication with
-% \lsthelper{Jan~Braun}{1998/04/27}{formfeed}.
-%
-% \begin{lstkey}{formfeed}
-% let the user make adjustments.
-%    \begin{macrocode}
-\lst@Key{formfeed}{\bigbreak}{\def\lst@formfeed{#1}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@ProcessFormFeed}
-% Here we execute some macros according to whether a new line has already
-% begun or not. No |\lst@EOLUpdate| is used in the else branch
-% anymore---\lsthelper{Kalle~Tuulos}{2001/01/14}{form feed gobbles following
-% output unit} sent the bug report.
-%    \begin{macrocode}
-\def\lst@ProcessFormFeed{%
-    \lst@XPrintToken
-    \ifnum\lst@newlines=\z@
-        \lst@EOLUpdate \lsthk@InitVarsBOL
-    \fi
-    \lst@formfeed
-    \lst@whitespacetrue}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Character tables}\label{iCharacterTables}
-%
-%
-% \subsubsection{The standard table}
-%
-% The standard character table is selected by |\lst@SelectStdCharTable|, which
-% expands to a token sequence
-%    \ldots|\def| |A{\lst@ProcessLetter| |A}|\ldots\space
-% where the first A is active and the second has catcode 12. We use the
-% following macros to build the character table.
-% \begin{syntax}
-% \item[0.19] |\lst@CCPut|\meta{class macro}\meta{$c_1$}\ldots\meta{$c_k$}|\z@|
-%
-%       extends the standard character table by the characters with codes
-%       \meta{$c_1$}\ldots\meta{$c_k$} making each character use
-%       \meta{class macro}. All these characters must be printable via
-%       |\char|\meta{$c_i$}.
-%
-% \item[0.20] |\lst@CCPutMacro|\meta{class$_1$}\meta{$c_1$}\meta{definition$_1$}\ldots|\@empty\z@\@empty|
-%
-%       also extends the standard character table: the character \meta{$c_i$}
-%       will use \meta{class$_i$} and is printed via \meta{definition$_i$}.
-%       These definitions must be \meta{spec. token}s in the sense of section
-%       \ref{dCharacterTables}.
-% \end{syntax}
-%
-% \begin{macro}{\lst@Def}
-% \begin{macro}{\lst@Let}
-% For speed we won't use these helpers too often.
-%    \begin{macrocode}
-\def\lst@Def#1{\lccode`\~=#1\lowercase{\def~}}
-\def\lst@Let#1{\lccode`\~=#1\lowercase{\let~}}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begingroup
-% The definition of the space below doesn't hurt anything. But other aspects,
-% for example \aspectname{lineshape} and \aspectname{formats}, redefine also
-% the macro |\space|. Now, if \LaTeX\ calls |\try@load@fontshape|, the |.log|
-% messages would show some strange things since \LaTeX\ uses |\space| in these
-% messages. The following addition ensures that |\space| expands to a space
-% and not to something different. This was one more bug reported by
-% \lsthelper{Denis~Girou}{1999/09/16}{bad font info message with breaklines}.
-%    \begin{macrocode}
-\lst@AddToAtTop{\try@load@fontshape}{\def\space{ }}
-%    \end{macrocode}
-% \endgroup
-%
-% \begin{macro}{\lst@SelectStdCharTable}
-% The first three standard characters. |\lst@Let| has been replaced by
-% |\lst@Def| after a bug report from \lsthelper{Chris~Edwards}{2002/02/15}
-% {tabulators show up with firstline>1}.
-%    \begin{macrocode}
-\def\lst@SelectStdCharTable{%
-    \lst@Def{9}{\lst@ProcessTabulator}%
-    \lst@Def{12}{\lst@ProcessFormFeed}%
-    \lst@Def{32}{\lst@ProcessSpace}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CCPut}
-% The first argument gives the character class, then follow the codes.
-%    \begin{macrocode}
-\def\lst@CCPut#1#2{%
-    \ifnum#2=\z@
-        \expandafter\@gobbletwo
-    \else
-        \lccode`\~=#2\lccode`\/=#2\lowercase{\lst@CCPut@~{#1/}}%
-    \fi
-    \lst@CCPut#1}
-\def\lst@CCPut@#1#2{\lst@lAddTo\lst@SelectStdCharTable{\def#1{#2}}}
-%    \end{macrocode}
-% Now we insert more standard characters.
-%    \begin{macrocode}
-\lst@CCPut \lst@ProcessOther
-    {"21}{"22}{"28}{"29}{"2B}{"2C}{"2E}{"2F}
-    {"3A}{"3B}{"3D}{"3F}{"5B}{"5D}
-    \z@
-\lst@CCPut \lst@ProcessDigit
-    {"30}{"31}{"32}{"33}{"34}{"35}{"36}{"37}{"38}{"39}
-    \z@
-\lst@CCPut \lst@ProcessLetter
-    {"40}{"41}{"42}{"43}{"44}{"45}{"46}{"47}
-    {"48}{"49}{"4A}{"4B}{"4C}{"4D}{"4E}{"4F}
-    {"50}{"51}{"52}{"53}{"54}{"55}{"56}{"57}
-    {"58}{"59}{"5A}
-         {"61}{"62}{"63}{"64}{"65}{"66}{"67}
-    {"68}{"69}{"6A}{"6B}{"6C}{"6D}{"6E}{"6F}
-    {"70}{"71}{"72}{"73}{"74}{"75}{"76}{"77}
-    {"78}{"79}{"7A}
-    \z@
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CCPutMacro}
-% Now we come to a delicate point. The characters not inserted yet aren't
-% printable (|_|, |$|, \ldots) or aren't printed well (|*|, |-|, \ldots) if we
-% enter these characters. Thus we use proper macros to print the characters.
-% Works perfectly. The problem is that the current character string is
-% printable for speed, for example |_| is already replaced by a macro version,
-% but the new keyword tests need the original characters.
-%
-% The solution: We define |\def _{\lst@ProcessLetter\lst@um_}| where the first
-% underscore is active and the second belongs to the control sequence.
-% Moreover we have |\def\lst@um_{\lst@UM _}| where the second underscore has
-% the usual meaning. Now the keyword tests can access the original character
-% simply by making |\lst@UM| empty. The default definition gets the following
-% token and builds the control sequence |\lst@um_@|, which we'll define to
-% print the character. Easy, isn't it?^^A ;-)
-%
-% The following definition does all this for us. The first parameter gives the
-% character class, the second the character code, and the last the definition
-% which actually prints the character. We build the names |\lst@um_| and
-% |\lst@um_@| and give them to a submacro.
-%    \begin{macrocode}
-\def\lst@CCPutMacro#1#2#3{%
-    \ifnum#2=\z@ \else
-        \begingroup\lccode`\~=#2\relax \lccode`\/=#2\relax
-        \lowercase{\endgroup\expandafter\lst@CCPutMacro@
-            \csname\@lst @um/\expandafter\endcsname
-            \csname\@lst @um/@\endcsname /~}#1{#3}%
-        \expandafter\lst@CCPutMacro
-    \fi}
-%    \end{macrocode}
-% The arguments are now |\lst@um_|, |\lst@um_@|, nonactive character, active
-% character, character class and printing definition. We add |\def _{|
-% |\lst@ProcessLetter| |\lst@um_}| to |\lst@SelectStdCharTable| (and similarly
-% other special characters), define |\def\lst@um_{\lst@UM _}| and |\lst@um_@|.
-%    \begin{macrocode}
-\def\lst@CCPutMacro@#1#2#3#4#5#6{%
-    \lst@lAddTo\lst@SelectStdCharTable{\def#4{#5#1}}%
-    \def#1{\lst@UM#3}%
-    \def#2{#6}}
-%    \end{macrocode}
-% The default definition of |\lst@UM|:
-%    \begin{macrocode}
-\def\lst@UM#1{\csname\@lst @um#1@\endcsname}
-%    \end{macrocode}
-% And all remaining standard characters.
-%    \begin{macrocode}
-\lst@CCPutMacro
-    \lst@ProcessOther {"23}\#
-    \lst@ProcessLetter{"24}\textdollar
-    \lst@ProcessOther {"25}\%
-    \lst@ProcessOther {"26}\&
-    \lst@ProcessOther {"27}{\lst@ifupquote \textquotesingle
-                                     \else \char39\relax \fi}
-    \lst@ProcessOther {"2A}{\lst@ttfamily*\textasteriskcentered}
-    \lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{$-$}}
-    \lst@ProcessOther {"3C}{\lst@ttfamily<\textless}
-    \lst@ProcessOther {"3E}{\lst@ttfamily>\textgreater}
-    \lst@ProcessOther {"5C}{\lst@ttfamily{\char92}\textbackslash}
-    \lst@ProcessOther {"5E}\textasciicircum
-    \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}\textunderscore}
-    \lst@ProcessOther {"60}{\lst@ifupquote \textasciigrave
-                                     \else \char96\relax \fi}
-    \lst@ProcessOther {"7B}{\lst@ttfamily{\char123}\textbraceleft}
-    \lst@ProcessOther {"7C}{\lst@ttfamily|\textbar}
-    \lst@ProcessOther {"7D}{\lst@ttfamily{\char125}\textbraceright}
-    \lst@ProcessOther {"7E}\textasciitilde
-    \lst@ProcessOther {"7F}-
-    \@empty\z@\@empty
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@ttfamily}
-% What is this ominous macro? It prints either the first or the second
-% argument. In |\ttfamily| it ensures that |----| is typeset |----| and not
-% $-$$-$$-$$-$ as in version 0.17. Bug encountered by
-% \lsthelper{Dr.~Jobst~Hoffmann}{1998/03/30}{|\lst@minus| and |\ttfamily|}.
-% Furthermore I added |\relax| after receiving an error report from
-% \lsthelper{Magnus~Lewis-Smith}{1999/08/06}{! Bad character code (920).}
-%    \begin{macrocode}
-\def\lst@ttfamily#1#2{\ifx\f@family\ttdefault#1\relax\else#2\fi}
-%    \end{macrocode}
-% |\ttdefault| is defined |\long|, so the |\ifx| doesn't work since |\f@family|
-% isn't |\long|! We go around this problem by redefining |\ttdefault| locally:
-%    \begin{macrocode}
-\lst@AddToHook{Init}{\edef\ttdefault{\ttdefault}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{upquote}
-% is used above to decide which quote to print. We print an error message if
-% the necessary \packagename{textcomp} commands are not available. This key
-% has been added after an email from \lsthelper{Frank~Mittelbach}{2003/06/18}
-% {listings and upquote}.
-%    \begin{macrocode}
-\lst@Key{upquote}{false}[t]{\lstKV@SetIf{#1}\lst@ifupquote
-    \lst@ifupquote
-       \@ifundefined{textasciigrave}%
-          {\let\KV@lst@upquote\@gobble
-           \lstKV@SetIf f\lst@ifupquote \@gobble\fi
-           \PackageError{Listings}{Option `upquote' requires `textcomp'
-            package.\MessageBreak The option has been disabled}%
-          {Add \string\usepackage{textcomp} to your preamble.}}%
-          {}%
-    \fi}
-%    \end{macrocode}
-% If an \packagename{upquote} package is loaded, the \keyname{upquote} option
-% is enabled by default.
-%    \begin{macrocode}
-\AtBeginDocument{%
-  \@ifpackageloaded{upquote}{\RequirePackage{textcomp}%
-                             \lstset{upquote}}{}%
-  \@ifpackageloaded{upquote2}{\lstset{upquote}}{}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@ifactivechars}
-% A simple switch.
-%    \begin{macrocode}
-\def\lst@activecharstrue{\let\lst@ifactivechars\iftrue}
-\def\lst@activecharsfalse{\let\lst@ifactivechars\iffalse}
-\lst@activecharstrue
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@SelectCharTable}
-% We select the standard character table and switch to active catcodes.
-%    \begin{macrocode}
-\def\lst@SelectCharTable{%
-    \lst@SelectStdCharTable
-    \lst@ifactivechars
-        \catcode9\active \catcode12\active \catcode13\active
-        \@tempcnta=32\relax
-        \@whilenum\@tempcnta<128\do
-            {\catcode\@tempcnta\active\advance\@tempcnta\@ne}%
-    \fi
-    \lst@ifec \lst@DefEC \fi
-%    \end{macrocode}
-% The following line and the according macros below have been added after a
-% bug report from \lsthelper{Fr\'ed\'eric~Boulanger}{2001/02/27}{ligatures}.
-% The assignment to |\do@noligs| was changed to |\do| after a bug report from
-% \lsthelper{Peter~Ruckdeschel}{2002/04/12}{problems with simultanous use of
-% seminar.sty and listings.sty}. This bugfix was kindly provided by
-% \lsthelper{Timothy~Van~Zandt}{2002/04/13}{Re: ...}.
-%    \begin{macrocode}
-    \let\do\lst@do@noligs \verbatim@nolig@list
-%    \end{macrocode}
-% There are two ways to adjust the standard table: inside the hook or with
-% |\lst@DeveloperSCT|. We use these macros and initialize the backslash if
-% necessary. |\lst@DefRange| has been moved outside the hook after a bug report
-% by \lsthelper{Michael~Bachmann}{2004/07/21}{Keine label-Referenzierung
-% m\"oglich...}.
-%    \begin{macrocode}
-    \lsthk@SelectCharTable
-    \lst@DeveloperSCT
-	\lst@DefRange
-    \ifx\lst@Backslash\relax\else
-        \lst@LetSaveDef{"5C}\lsts@backslash\lst@Backslash
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{SelectCharTable}
-% \begin{lstkey}{MoreSelectCharTable}
-% The keys to adjust |\lst@DeveloperSCT|.
-%    \begin{macrocode}
-\lst@Key{SelectCharTable}{}{\def\lst@DeveloperSCT{#1}}
-\lst@Key{MoreSelectCharTable}\relax{\lst@lAddTo\lst@DeveloperSCT{#1}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{SetLanguage}{\let\lst@DeveloperSCT\@empty}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@do@noligs}
-% To prevent ligatures, this macro inserts the token |\lst@NoLig| in front of
-% |\lst@Process|\meta{whatever}\meta{spec.~token}. This is done by
-% |\verbatim@nolig@list| for certain characters. Note that the submacro is
-% a special kind of a local |\lst@AddToAtTop|. The submacro definition was
-% fixed thanks to \lsthelper{Peter~Bartke}{2002/04/10}{bad `noligs' handling}.
-%    \begin{macrocode}
-\def\lst@do@noligs#1{%
-    \begingroup \lccode`\~=`#1\lowercase{\endgroup
-    \lst@do@noligs@~}}
-\def\lst@do@noligs@#1{%
-    \expandafter\expandafter\expandafter\def
-    \expandafter\expandafter\expandafter#1%
-    \expandafter\expandafter\expandafter{\expandafter\lst@NoLig#1}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@NoLig}
-% When this extra macro is processed, it adds |\lst@nolig| to the output queue
-% without increasing its length. For keyword detection this must expand to
-% nothing if |\lst@UM| is empty.
-%    \begin{macrocode}
-\def\lst@NoLig{\advance\lst@length\m@ne \lst@Append\lst@nolig}
-\def\lst@nolig{\lst@UM\@empty}%
-%    \end{macrocode}
-% But the usual meaning of |\lst@UM| builds the following control sequence,
-% which prevents ligatures in the manner of \LaTeX's |\do@noligs|.
-%    \begin{macrocode}
-\@namedef{\@lst @um@}{\leavevmode\kern\z@}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@SaveOutputDef}
-% To get the \meta{spec.~token} meaning of character |#1|, we look for |\def|
-% `active character |#1|' in |\lst@SelectStdCharTable|, get the replacement
-% text, strip off the character class via |\@gobble|, and assign the meaning.
-% Note that you get a ``runaway argument'' error if an illegal \meta{character
-% code}=|#1| is used.
-%    \begin{macrocode}
-\def\lst@SaveOutputDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup
-    \def\lst@temp##1\def~##2##3\relax}{%
-        \global\expandafter\let\expandafter#2\@gobble##2\relax}%
-    \expandafter\lst@temp\lst@SelectStdCharTable\relax}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstum@backslash}
-% A commonly used character.
-%    \begin{macrocode}
-\lst@SaveOutputDef{"5C}\lstum@backslash
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsubsection{National characters}
-%
-% \begin{lstkey}{extendedchars}
-% The user key to activate extended characters 128--255.
-%    \begin{macrocode}
-\lst@Key{extendedchars}{true}[t]{\lstKV@SetIf{#1}\lst@ifec}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@DefEC}
-% Currently each character in the range 128--255 is treated as a letter.
-%    \begin{macrocode}
-\def\lst@DefEC{%
-    \lst@CCECUse \lst@ProcessLetter
-      ^^80^^81^^82^^83^^84^^85^^86^^87^^88^^89^^8a^^8b^^8c^^8d^^8e^^8f%
-      ^^90^^91^^92^^93^^94^^95^^96^^97^^98^^99^^9a^^9b^^9c^^9d^^9e^^9f%
-      ^^a0^^a1^^a2^^a3^^a4^^a5^^a6^^a7^^a8^^a9^^aa^^ab^^ac^^ad^^ae^^af%
-      ^^b0^^b1^^b2^^b3^^b4^^b5^^b6^^b7^^b8^^b9^^ba^^bb^^bc^^bd^^be^^bf%
-      ^^c0^^c1^^c2^^c3^^c4^^c5^^c6^^c7^^c8^^c9^^ca^^cb^^cc^^cd^^ce^^cf%
-      ^^d0^^d1^^d2^^d3^^d4^^d5^^d6^^d7^^d8^^d9^^da^^db^^dc^^dd^^de^^df%
-      ^^e0^^e1^^e2^^e3^^e4^^e5^^e6^^e7^^e8^^e9^^ea^^eb^^ec^^ed^^ee^^ef%
-      ^^f0^^f1^^f2^^f3^^f4^^f5^^f6^^f7^^f8^^f9^^fa^^fb^^fc^^fd^^fe^^ff%
-      ^^00}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CCECUse}
-% Reaching end of list (|^^00|) we terminate the loop.
-% Otherwise we do the same as in |\lst@CCPut| if the character is not active.
-% But if the character is active, we save the meaning before redefinition.
-%    \begin{macrocode}
-\def\lst@CCECUse#1#2{%
-    \ifnum`#2=\z@
-        \expandafter\@gobbletwo
-    \else
-        \ifnum\catcode`#2=\active
-            \lccode`\~=`#2\lccode`\/=`#2\lowercase{\lst@CCECUse@#1~/}%
-        \else
-            \lst@ifactivechars \catcode`#2=\active \fi
-            \lccode`\~=`#2\lccode`\/=`#2\lowercase{\def~{#1/}}%
-        \fi
-    \fi
-    \lst@CCECUse#1}
-%    \end{macrocode}
-% We save the meaning as mentioned. Here we must also use the `|\lst@UM|
-% construction' since extended characters could often appear in words =
-% identifiers. Bug reported by \lsthelper{Denis~Girou}{1999/07/26}
-% {incompatibility with inputenc}.
-%    \begin{macrocode}
-\def\lst@CCECUse@#1#2#3{%
-    \expandafter\def\csname\@lst @EC#3\endcsname{\lst@UM#3}%
-    \expandafter\let\csname\@lst @um#3@\endcsname #2%
-    \edef#2{\noexpand#1%
-            \expandafter\noexpand\csname\@lst @EC#3\endcsname}}
-%    \end{macrocode}
-% \lsthelper{Daniel~Gerigk}{2001/10/25}{extendedchars do not work} and
-% \lsthelper{Heiko~Oberdiek}{2001/10/26}{extendedchars do not work: um@\#3@
-% must be @um\#3@} reported an error and a solution, respectively.
-% \end{macro}
-%
-%
-% \subsubsection{Catcode problems}
-%
-% \begin{macro}{\lst@nfss@catcodes}
-% \lsthelper{Anders~Edenbrandt}{1997/04/22}{preload of .fd files} found a bug
-% with \texttt{.fd}-files. Since we change catcodes and these files are read
-% on demand, we must reset the catcodes before the files are input. We use a
-% local redefinition of |\nfss@catcodes|.
-%    \begin{macrocode}
-\lst@AddToHook{Init}
-    {\let\lsts@nfss@catcodes\nfss@catcodes
-     \let\nfss@catcodes\lst@nfss@catcodes}
-%    \end{macrocode}
-% The |&|-character had turned into |\&| after a bug report by \lsthelper
-% {David~Aspinall}{2003/07/17}{loading of .fd file inside tabular produces
-% error}.
-%    \begin{macrocode}
-\def\lst@nfss@catcodes{%
-    \lst@makeletter
-        ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\relax
-    \@makeother (\@makeother )\@makeother ,\@makeother :\@makeother\&%
-    \@makeother 0\@makeother 1\@makeother 2\@makeother 3\@makeother 4%
-    \@makeother 5\@makeother 6\@makeother 7\@makeother 8\@makeother 9%
-    \@makeother =\lsts@nfss@catcodes}
-%    \end{macrocode}
-% The investigation of a bug reported by \lsthelper{Christian~Gudrian}
-% {2000/11/16}{problems with mathpple} showed that the equal sign needs
-% to have `other' catcode, as assigned above.
-% \lsthelper{Svend~Tollak~Munkejord}{2002/04/17}{package incompatible with
-%  Lucida .fd files} reported problems with Lucida .fd-files, while
-% \lsthelper{Heiko~Oberdiek}{2002/04/17}{Re: listings fails with Lucida
-% font} analysed the bug, which above led to the line starting with
-% |\@makeaother (|.
-%
-% The name of |\lst@makeletter| is an imitation of \LaTeX's |\@makeother|.
-%    \begin{macrocode}
-\def\lst@makeletter#1{%
-    \ifx\relax#1\else\catcode`#111\relax \expandafter\lst@makeletter\fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{useoutput}
-% \begin{macro}{\output}
-% Another problem was first reported by \lsthelper{Marcin~Kasperski}
-% {1999/04/28}{listings spoil toc}. It is also catcode related and
-% \lsthelper{Donald~Arseneau}{1999/05/13}{comp.text.tex Re: delayed write and
-% catcode changes} let me understand it. The point is that \TeX\ seems to use
-% the \emph{currently} active catcode table when it writes non-|\immediate|
-% |\write|s to file and not the catcodes involved when \emph{reading} the
-% characters.
-% So a section heading |\L a| was written |\La| if a listing was split on two
-% pages since a non-standard catcode table was in use when writing |\La| to
-% file, the previously attached catcodes do not matter. One more bug was that
-% accents in page headings or footers were lost when a listing was split on
-% two pages. \lsthelper{Denis~Girou}{1999/08/03}{Accents lost in heading if
-% listing split on two pages} found this latter bug. A similar problem with
-% the tilde was reported by \lsthelper{Thorsten~Vitt}{2001/06/25}{fancyhdr +
-% listings crossing pages ==> ~ in header, not space}.
-%
-% We can choose between three possibilities.
-% \lsthelper{Donald~Arseneau}{2006/09/14}{cannot select output routine 1}
-% noted a bug here in the |\ifcase| argument.
-%    \begin{macrocode}
-\lst@Key{useoutput}{2}{\edef\lst@useoutput{\ifcase0#1 0\or 1\else 2\fi}}
-%    \end{macrocode}
-% The first does not modify the existing output routine.
-%    \begin{macrocode}
-\lst@AddToHook{Init}
-{\edef\lst@OrgOutput{\the\output}%
-\ifcase\lst@useoutput\relax
-\or
-%    \end{macrocode}
-% The second possibility is as follows: We interrupt the current modes---in
-% particular |\lst@Pmode| with modified catcode table---, call the original
-% output routine and reenter the mode. This must be done with a little care.
-% First we have to close the group which \TeX\ opens at the beginning of the
-% output routine. A single |\egroup| gives an `unbalanced output routine'
-% error. But |\expandafter\egroup| works. Again it was
-% \lsthelper{Donald~Arseneau}{2001/01/10}{comp.text.tex Re: \output puzzle}
-% who gave the explaination: The |\expandafter| set the token type of |\bgroup|
-% to |backed_up|, which prevents \TeX's from recovering from an unbalanced
-% output routine. \lsthelper{Heiko~Oberdiek}{2001/01/05}{comp.text.tex Re:
-% \output puzzle} reported that |\csname| |egroup||\endcsname| does the trick,
-% too.
-%
-% However, since \TeX\ checks the contents of |\box| 255 when we close the
-% group (`output routine didn't use all of |\box| 255'), we have to save it
-% temporaryly.
-%    \begin{macrocode}
- \output{\global\setbox\lst@gtempboxa\box\@cclv
-         \expandafter\egroup
-%    \end{macrocode}
-% Now we can interrupt the mode, but we have to save the current character
-% string and the current style.
-%    \begin{macrocode}
-         \lst@SaveToken
-     \lst@InterruptModes
-%    \end{macrocode}
-% We restore the contents, use the original output routine, and \ldots
-%    \begin{macrocode}
-     \setbox\@cclv\box\lst@gtempboxa
-     \bgroup\lst@OrgOutput\egroup
-%    \end{macrocode}
-% \ldots\space open a group matching the |}| which \TeX\ inserts at the end of
-% the output routine. We reenter modes and restore the character string and
-% style |\aftergroup|. Moreover we need to reset |\pagegoal|---added after a
-% bug report by \lsthelper{Jochen~Schneider}{2002/03/09}{de.comp.text.tex:
-% Problem mit Listings-Paket 1.0-Beta; unmotivated pagebreak with preceding
-% float}.
-%    \begin{macrocode}
-     \bgroup
-     \aftergroup\pagegoal\aftergroup\vsize
-     \aftergroup\lst@ReenterModes\aftergroup\lst@RestoreToken}%
-\else
-%    \end{macrocode}
-% The third option is to restore all catcodes and meanings inside a modified
-% output routine and to call the original routine afterwards.
-%    \begin{macrocode}
- \output{\lst@RestoreOrigCatcodes
-         \lst@ifec \lst@RestoreOrigExtendedCatcodes \fi
-         \lst@OrgOutput}%
-\fi}
-%    \end{macrocode}
-% Note that this output routine isn't used too often. It is executed only if
-% it's possible that a listing is split on two pages: if a listing ends at
-% the bottom or begins at the top of a page, or if a listing is really split.
-% \end{macro}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@GetChars}
-% \begin{macro}{\lst@ScanChars}
-% \begin{lstkey}{rescanchars}
-% To make the third |\output|-option work, we have to scan the catcodes and
-% also the meanings of active characters:
-%    \begin{macrocode}
-\def\lst@GetChars#1#2#3{%
-    \let#1\@empty
-    \@tempcnta#2\relax \@tempcntb#3\relax
-    \loop \ifnum\@tempcnta<\@tempcntb\relax
-        \lst@lExtend#1{\expandafter\catcode\the\@tempcnta=}%
-        \lst@lExtend#1{\the\catcode\@tempcnta\relax}%
-        \ifnum\the\catcode\@tempcnta=\active
-            \begingroup\lccode`\~=\@tempcnta
-            \lowercase{\endgroup
-            \lst@lExtend#1{\expandafter\let\expandafter~\csname
-                                    lstecs@\the\@tempcnta\endcsname}%
-            \expandafter\let\csname lstecs@\the\@tempcnta\endcsname~}%
-        \fi
-        \advance\@tempcnta\@ne
-    \repeat}
-%    \end{macrocode}
-% As per a bug report by \lsthelper{Benjamin~Lings}{2004/10/15}%
-% {\usepackage{xy,listings} yields: "Forbidden control sequence...."}, we
-% deactivate |\outer| definition of |^^L| temporarily (inside and outside
-% of |\lst@ScanChars|) and restore the catcode at end of package via the
-% |\lst@RestoreCatcodes| command.
-%    \begin{macrocode}
-\begingroup \catcode12=\active\let^^L\@empty
-\gdef\lst@ScanChars{%
-  \let\lsts@ssL^^L%
-  \def^^L{\par}%
-    \lst@GetChars\lst@RestoreOrigCatcodes\@ne {128}%
-  \let^^L\lsts@ssL
-    \lst@GetChars\lst@RestoreOrigExtendedCatcodes{128}{256}}
-\endgroup
-%    \end{macrocode}
-% The scan can be issued by hand and at the beginning of a document.
-%    \begin{macrocode}
-\lst@Key{rescanchars}\relax{\lst@ScanChars}
-\AtBeginDocument{\lst@ScanChars}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{macro}
-% \end{macro}
-%
-%
-% \subsubsection{Adjusting the table}
-%
-% We begin with modifiers for the basic character classes.
-%
-% \begin{lstkey}{alsoletter}
-% \begin{lstkey}{alsodigit}
-% \begin{lstkey}{alsoother}
-% The macros |\lst@also|\ldots\space will hold |\def|\meta{char}|{|\ldots|}|
-% sequences, which adjusts the standard character table.
-%    \begin{macrocode}
-\lst@Key{alsoletter}\relax{%
-    \lst@DoAlso{#1}\lst@alsoletter\lst@ProcessLetter}
-\lst@Key{alsodigit}\relax{%
-    \lst@DoAlso{#1}\lst@alsodigit\lst@ProcessDigit}
-\lst@Key{alsoother}\relax{%
-    \lst@DoAlso{#1}\lst@alsoother\lst@ProcessOther}
-%    \end{macrocode}
-% This is done at \hookname{SelectCharTable} and every language selection
-% the macros get empty.
-%    \begin{macrocode}
-\lst@AddToHook{SelectCharTable}
-    {\lst@alsoother \lst@alsodigit \lst@alsoletter}
-\lst@AddToHookExe{SetLanguage}% init
-    {\let\lst@alsoletter\@empty
-     \let\lst@alsodigit\@empty
-     \let\lst@alsoother\@empty}
-%    \end{macrocode}
-% The service macro starts a loop and \ldots
-%    \begin{macrocode}
-\def\lst@DoAlso#1#2#3{%
-    \lst@DefOther\lst@arg{#1}\let#2\@empty
-    \expandafter\lst@DoAlso@\expandafter#2\expandafter#3\lst@arg\relax}
-\def\lst@DoAlso@#1#2#3{%
-    \ifx\relax#3\expandafter\@gobblethree \else
-%    \end{macrocode}
-% \ldots\space while not reaching |\relax| we use the \TeX nique from
-% |\lst@SaveOutputDef| to replace the class by |#2|. Eventually we append
-% the new definition to |#1|.
-%    \begin{macrocode}
-        \begingroup \lccode`\~=`#3\relax \lowercase{\endgroup
-        \def\lst@temp##1\def~##2##3\relax{%
-            \edef\lst@arg{\def\noexpand~{\noexpand#2\expandafter
-                                         \noexpand\@gobble##2}}}}%
-        \expandafter\lst@temp\lst@SelectStdCharTable\relax
-        \lst@lExtend#1{\lst@arg}%
-    \fi
-    \lst@DoAlso@#1#2}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@SaveDef}
-% \begin{macro}{\lst@DefSaveDef}
-% \begin{macro}{\lst@LetSaveDef}
-% These macros can be used in language definitions to make special changes.
-% They save the definition and define or assign a new one.
-%    \begin{macrocode}
-\def\lst@SaveDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~}}
-\def\lst@DefSaveDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~\def~}}
-\def\lst@LetSaveDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~\let~}}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% Now we get to the more powerful definitions.
-%
-% \begin{macro}{\lst@CDef}
-% Here we unfold the first parameter \meta{1st}\marg{2nd}\marg{rest} and say
-% that this input string is `replaced' by \meta{save 1st}\marg{2nd}^^A
-% \marg{rest}---plus \meta{execute}, \meta{pre}, and \meta{post}. This main
-% work is done by |\lst@CDefIt|.
-%    \begin{macrocode}
-\def\lst@CDef#1{\lst@CDef@#1}
-\def\lst@CDef@#1#2#3#4{\lst@CDefIt#1{#2}{#3}{#4#2#3}#4}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CDefX}
-% drops the input string.
-%    \begin{macrocode}
-\def\lst@CDefX#1{\lst@CDefX@#1}
-\def\lst@CDefX@#1#2#3{\lst@CDefIt#1{#2}{#3}{}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CDefIt}
-% is the main working procedure for the previous macros. It redefines the
-% sequence |#1#2#3| of characters. At least |#1| must be active; the other two
-% arguments might be empty, not equivalent to empty!
-%    \begin{macrocode}
-\def\lst@CDefIt#1#2#3#4#5#6#7#8{%
-    \ifx\@empty#2\@empty
-%    \end{macrocode}
-% For a single character we just execute the arguments in the correct order.
-% You might want to go back to section \ref{dCharacterTablesManipulated} to
-% look them up.
-%    \begin{macrocode}
-        \def#1{#6\def\lst@next{#7#4#8}\lst@next}%
-    \else \ifx\@empty#3\@empty
-%    \end{macrocode}
-% For a two character sequence we test whether \meta{pre} and \meta{post}
-% must be executed.
-%    \begin{macrocode}
-        \def#1##1{%
-            #6%
-            \ifx##1#2\def\lst@next{#7#4#8}\else
-                     \def\lst@next{#5##1}\fi
-            \lst@next}%
-    \else
-%    \end{macrocode}
-% We do the same for an arbitrary character sequence---except that we have to
-% use |\lst@IfNextCharsArg| instead of |\ifx|\ldots|\fi|.
-%    \begin{macrocode}
-        \def#1{%
-            #6%
-            \lst@IfNextCharsArg{#2#3}{#7#4#8}%
-                                     {\expandafter#5\lst@eaten}}%
-    \fi \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CArgX}
-% We make |#1#2| active and call |\lst@CArg|.
-%    \begin{macrocode}
-\def\lst@CArgX#1#2\relax{%
-    \lst@DefActive\lst@arg{#1#2}%
-    \expandafter\lst@CArg\lst@arg\relax}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CArg}
-% arranges the first two arguments for |\lst@CDef|[|X|]. We get an undefined
-% macro and use |\@empty\@empty\relax| as delimiter for the submacro.
-%    \begin{macrocode}
-\def\lst@CArg#1#2\relax{%
-    \lccode`\/=`#1\lowercase{\def\lst@temp{/}}%
-    \lst@GetFreeMacro{lst@c\lst@temp}%
-    \expandafter\lst@CArg@\lst@freemacro#1#2\@empty\@empty\relax}
-%    \end{macrocode}
-% Save meaning of \meta{1st}=|#2| in \meta{save 1st}=|#1| and call the macro
-% |#6| with correct arguments. From version 1.0 on, |#2|, |#3| and |#4|
-% (respectively empty arguments) are tied together with group braces.
-% This allows us to save two arguments in other definitions, for example in
-% |\lst@DefDelimB|.
-%    \begin{macrocode}
-\def\lst@CArg@#1#2#3#4\@empty#5\relax#6{%
-    \let#1#2%
-    \ifx\@empty#3\@empty
-        \def\lst@next{#6{#2{}{}}}%
-    \else
-        \def\lst@next{#6{#2#3{#4}}}%
-    \fi
-    \lst@next #1}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CArgEmpty}
-% `executes' an |\@empty|-delimited argument. We will use it for the delimiters.
-%    \begin{macrocode}
-\def\lst@CArgEmpty#1\@empty{#1}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Delimiters}
-%
-% Here we start with general definitions common to all delimiters.
-%
-% \begin{lstkey}{excludedelims}
-% controls which delimiters are not printed in \meta{whatever}style. We just
-% define |\lst@ifex|\meta{whatever} to be true. Such switches are set false
-% in the \hookname{ExcludeDelims} hook and are handled by the individual
-% delimiters.
-%    \begin{macrocode}
-\lst@Key{excludedelims}\relax
-    {\lsthk@ExcludeDelims \lst@NormedDef\lst@temp{#1}%
-     \expandafter\lst@for\lst@temp\do
-     {\expandafter\let\csname\@lst @ifex##1\endcsname\iftrue}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@DelimPrint}
-% And this macro might help in doing so. |#1| is |\lst@ifex|\meta{whatever}
-% (plus |\else|) or just |\iffalse|, and |#2| will be the delimiter. The
-% temporary mode change ensures that the characters can't end the current
-% delimiter or start a new one.
-%    \begin{macrocode}
-\def\lst@DelimPrint#1#2{%
-    #1%
-      \begingroup
-        \lst@mode\lst@nomode \lst@modetrue
-        #2\lst@XPrintToken
-      \endgroup
-      \lst@ResetToken
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@DelimOpen}
-% We print preceding characters and the delimiter, enter the appropriate mode,
-% print the delimiter again, and execute |#3|. In fact, the arguments |#1| and
-% |#2| will ensure that the delimiter is printed only once.
-%    \begin{macrocode}
-\def\lst@DelimOpen#1#2#3#4#5#6\@empty{%
-    \lst@TrackNewLines \lst@XPrintToken
-    \lst@DelimPrint#1{#6}%
-    \lst@EnterMode{#4}{\def\lst@currstyle#5}%
-    \lst@DelimPrint{#1#2}{#6}%
-    #3}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@DelimClose}
-% is the same in reverse order.
-%    \begin{macrocode}
-\def\lst@DelimClose#1#2#3\@empty{%
-    \lst@TrackNewLines \lst@XPrintToken
-    \lst@DelimPrint{#1#2}{#3}%
-    \lst@LeaveMode
-    \lst@DelimPrint{#1}{#3}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@BeginDelim}
-% \begin{macro}{\lst@EndDelim}
-% These definitions are applications of |\lst@DelimOpen| and |\lst@DelimClose|:
-% the delimiters have the same style as the delimited text.
-%    \begin{macrocode}
-\def\lst@BeginDelim{\lst@DelimOpen\iffalse\else{}}
-\def\lst@EndDelim{\lst@DelimClose\iffalse\else}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@BeginIDelim}
-% \begin{macro}{\lst@EndIDelim}
-% Another application: no delimiter is printed.
-%    \begin{macrocode}
-\def\lst@BeginIDelim{\lst@DelimOpen\iffalse{}{}}
-\def\lst@EndIDelim{\lst@DelimClose\iffalse{}}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@DefDelims}
-% This macro defines all delimiters and is therefore reset every language
-% selection.
-%    \begin{macrocode}
-\lst@AddToHook{SelectCharTable}{\lst@DefDelims}
-\lst@AddToHookExe{SetLanguage}{\let\lst@DefDelims\@empty}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Delim}
-% First we set default values: no |\lst@modetrue|, cumulative style, and no
-% argument to |\lst@Delim|[|DM|]|@|\meta{type}.
-%    \begin{macrocode}
-\def\lst@Delim#1{%
-    \lst@false \let\lst@cumulative\@empty \let\lst@arg\@empty
-%    \end{macrocode}
-% These are the correct settings for the double-star-form, so we immediately
-% call the submacro in this case. Otherwise we either just suppress cumulative
-% style, or even indicate the usage of |\lst@modetrue| with |\lst@true|.
-%    \begin{macrocode}
-    \@ifstar{\@ifstar{\lst@Delim@{#1}}%
-                     {\let\lst@cumulative\relax
-                      \lst@Delim@{#1}}}%
-            {\lst@true\lst@Delim@{#1}}}
-%    \end{macrocode}
-% The type argument is saved for later use. We check against the optional
-% \meta{style} argument using |#1| as default, define |\lst@delimstyle| and
-% look for the optional \meta{type option}, which is just saved in |\lst@arg|.
-%    \begin{macrocode}
-\def\lst@Delim@#1[#2]{%
-    \gdef\lst@delimtype{#2}%
-    \@ifnextchar[\lst@Delim@sty
-                 {\lst@Delim@sty[#1]}}
-\def\lst@Delim@sty[#1]{%
-    \def\lst@delimstyle{#1}%
-    \ifx\@empty#1\@empty\else
-        \lst@Delim@sty@ #1\@nil
-    \fi
-    \@ifnextchar[\lst@Delim@option
-                 \lst@Delim@delim}
-\def\lst@Delim@option[#1]{\def\lst@arg{[#1]}\lst@Delim@delim}
-%    \end{macrocode}
-% |[| and |]| in the replacement text above have been added after a bug report
-% by \lsthelper{Stephen~Reindl}{2002/05/28}{\inaccessible using Cobol}.
-%
-% The definition of |\lst@delimstyle| depends on whether the first token is a
-% control sequence. Here we possibly build |\lst@|\meta{style}.
-%    \begin{macrocode}
-\def\lst@Delim@sty@#1#2\@nil{%
-    \if\relax\noexpand#1\else
-        \edef\lst@delimstyle{\expandafter\noexpand
-                             \csname\@lst @\lst@delimstyle\endcsname}%
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Delim@delim}
-% Eventually this macro is called. First we might need to delete a bunch of
-% delimiters. If there is no delimiter, we might delete a subclass.
-%    \begin{macrocode}
-\def\lst@Delim@delim#1\relax#2#3#4#5#6#7#8{%
-    \ifx #4\@empty \lst@Delim@delall{#2}\fi
-    \ifx\@empty#1\@empty
-        \ifx #4\@nil
-            \@ifundefined{\@lst @#2DM@\lst@delimtype}%
-                {\lst@Delim@delall{#2@\lst@delimtype}}%
-                {\lst@Delim@delall{#2DM@\lst@delimtype}}%
-        \fi
-    \else
-%    \end{macrocode}
-% If the delimiter is not empty, we convert the delimiter and append it to
-% |\lst@arg|. Ditto |\lst@Begin|\ldots, |\lst@End|\ldots, and the style and
-% mode selection.
-%    \begin{macrocode}
-        \expandafter\lst@Delim@args\expandafter
-            {\lst@delimtype}{#1}{#5}#6{#7}{#8}#4%
-%    \end{macrocode}
-% If the type is known, we either choose dynamic or static mode and use the
-% contents of |\lst@arg| as arguments. All this is put into |\lst@delim|.
-%    \begin{macrocode}
-        \let\lst@delim\@empty
-        \expandafter\lst@IfOneOf\lst@delimtype\relax#3%
-        {\@ifundefined{\@lst @#2DM@\lst@delimtype}%
-             {\lst@lExtend\lst@delim{\csname\@lst @#2@\lst@delimtype
-                                     \expandafter\endcsname\lst@arg}}%
-             {\lst@lExtend\lst@delim{\expandafter\lst@UseDynamicMode
-                                     \csname\@lst @#2DM@\lst@delimtype
-                                     \expandafter\endcsname\lst@arg}}%
-%    \end{macrocode}
-% Now, depending on the mode |#4| we either remove this particular delimiter or
-% append it to all current ones.
-%    \begin{macrocode}
-         \ifx #4\@nil
-             \let\lst@temp\lst@DefDelims \let\lst@DefDelims\@empty
-             \expandafter\lst@Delim@del\lst@temp\@empty\@nil\@nil\@nil
-         \else
-             \lst@lExtend\lst@DefDelims\lst@delim
-         \fi}%
-%    \end{macrocode}
-% An unknown type issues an error.
-%    \begin{macrocode}
-        {\PackageError{Listings}{Illegal type `\lst@delimtype'}%
-                                {#2 types are #3.}}%
-     \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Delim@args}
-% Now let's look how we add the arguments to |\lst@arg|. First we initialize
-% the conversion just to make all characters active. But if the first character
-% of the type equals |#4|, \ldots
-%    \begin{macrocode}
-\def\lst@Delim@args#1#2#3#4#5#6#7{%
-    \begingroup
-    \lst@false \let\lst@next\lst@XConvert
-%    \end{macrocode}
-% \ldots\ we remove that character from |\lst@delimtype|, and |#5| might select
-% a different conversion setting or macro.
-%    \begin{macrocode}
-    \@ifnextchar #4{\xdef\lst@delimtype{\expandafter\@gobble
-                                        \lst@delimtype}%
-                    #5\lst@next#2\@nil
-                    \lst@lAddTo\lst@arg{\@empty#6}%
-                    \lst@GobbleNil}%
-%    \end{macrocode}
-% Since we are in the `special' case above, we've also added the special
-% |\lst@Begin|\ldots\space and |\lst@End|\ldots\space macros to |\lst@arg|
-% (and |\@empty| as a brake for the delimiter). No special task must be done
-% if the characters are not equal.
-%    \begin{macrocode}
-                   {\lst@next#2\@nil
-                    \lst@lAddTo\lst@arg{\@empty#3}%
-                    \lst@GobbleNil}%
-                 #1\@nil
-%    \end{macrocode}
-% We always transfer the arguments to the outside of the group and append the
-% style and mode selection if and only if we're not deleting a delimiter.
-% Therefor we expand the delimiter style.
-%    \begin{macrocode}
-    \global\let\@gtempa\lst@arg
-    \endgroup
-    \let\lst@arg\@gtempa
-    \ifx #7\@nil\else
-        \expandafter\lst@Delim@args@\expandafter{\lst@delimstyle}%
-    \fi}
-%    \end{macrocode}
-% Recall that the style is `selected' by |\def\lst@currstyle#5|, and this
-% `argument' |#5| is to be added now. Depending on the settings at the very
-% beginning, we use either |{\meta{style}}\lst@modetrue|---which selects the
-% style and deactivates keyword detection---, or |{}\meta{style}|---which
-% defines an empty style macro and executes the style for cumulative styles---,
-% or |{\meta{style}|---which just defines the style macro. Note that we have to
-% use two extra group levels below: one is discarded directly by |\lst@lAddTo|
-% and the other by |\lst@Delim|[|DM|]|@|\meta{type}.
-%    \begin{macrocode}
-\def\lst@Delim@args@#1{%
-    \lst@if
-        \lst@lAddTo\lst@arg{{{#1}\lst@modetrue}}%
-    \else
-        \ifx\lst@cumulative\@empty
-            \lst@lAddTo\lst@arg{{{}#1}}%
-        \else
-            \lst@lAddTo\lst@arg{{{#1}}}%
-        \fi
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Delim@del}
-% To delete a particular delimiter, we iterate down the list of delimiters and
-% compare the current item with the user supplied.
-%    \begin{macrocode}
-\def\lst@Delim@del#1\@empty#2#3#4{%
-    \ifx #2\@nil\else
-        \def\lst@temp{#1\@empty#2#3}%
-        \ifx\lst@temp\lst@delim\else
-            \lst@lAddTo\lst@DefDelims{#1\@empty#2#3{#4}}%
-        \fi
-        \expandafter\lst@Delim@del
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Delim@delall}
-% To delete a whole class of delimiters, we first expand the control sequence
-% name, init some other data, and call a submacro to do the work.
-%    \begin{macrocode}
-\def\lst@Delim@delall#1{%
-    \begingroup
-    \edef\lst@delim{\expandafter\string\csname\@lst @#1\endcsname}%
-    \lst@false \global\let\@gtempa\@empty
-    \expandafter\lst@Delim@delall@\lst@DefDelims\@empty
-    \endgroup
-    \let\lst@DefDelims\@gtempa}
-%    \end{macrocode}
-% We first discard a preceding |\lst@UseDynamicMode|.
-%    \begin{macrocode}
-\def\lst@Delim@delall@#1{%
-    \ifx #1\@empty\else
-        \ifx #1\lst@UseDynamicMode
-            \lst@true
-            \let\lst@next\lst@Delim@delall@do
-        \else
-            \def\lst@next{\lst@Delim@delall@do#1}%
-        \fi
-        \expandafter\lst@next
-    \fi}
-%    \end{macrocode}
-% Then we can check whether (the following) |\lst@|\meta{delimiter name}\ldots\
-% matches the delimiter class given by |\lst@delim|.
-%    \begin{macrocode}
-\def\lst@Delim@delall@do#1#2\@empty#3#4#5{%
-    \expandafter\lst@IfSubstring\expandafter{\lst@delim}{\string#1}%
-      {}%
-      {\lst@if \lst@AddTo\@gtempa\lst@UseDynamicMode \fi
-       \lst@AddTo\@gtempa{#1#2\@empty#3#4{#5}}}%
-    \lst@false \lst@Delim@delall@}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@DefDelimB}
-% Here we put the arguments together to fit |\lst@CDef|. Note that the very
-% last argument |\@empty| to |\lst@CDef| is a brake for |\lst@CArgEmpty|
-% and |\lst@DelimOpen|.
-%    \begin{macrocode}
-\gdef\lst@DefDelimB#1#2#3#4#5#6#7#8{%
-    \lst@CDef{#1}#2%
-        {#3}%
-        {\let\lst@bnext\lst@CArgEmpty
-         \lst@ifmode #4\else
-             #5%
-             \def\lst@bnext{#6{#7}{#8}}%
-         \fi
-         \lst@bnext}%
-        \@empty}
-%    \end{macrocode}
-% After a bug report from \lsthelper{Vespe~Savikko}{2000/11/06}{bad output of
-% doc-strings if HTML and Python are loaded} I added braces around |#7|.
-% \end{macro}
-%
-% \begin{macro}{\lst@DefDelimE}
-% The  |\ifnum #7=\lst@mode| in the 5th line ensures that the delimiters
-% match each other.
-%    \begin{macrocode}
-\gdef\lst@DefDelimE#1#2#3#4#5#6#7{%
-    \lst@CDef{#1}#2%
-        {#3}%
-        {\let\lst@enext\lst@CArgEmpty
-         \ifnum #7=\lst@mode%
-             #4%
-             \let\lst@enext#6%
-         \else
-             #5%
-         \fi
-         \lst@enext}%
-        \@empty}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{Init}{\let\lst@bnext\relax \let\lst@enext\relax}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@DefDelimBE}
-% This service macro will actually define all string delimiters.
-%    \begin{macrocode}
-\gdef\lst@DefDelimBE#1#2#3#4#5#6#7#8#9{%
-    \lst@CDef{#1}#2%
-        {#3}%
-        {\let\lst@bnext\lst@CArgEmpty
-         \ifnum #7=\lst@mode
-             #4%
-             \let\lst@bnext#9%
-         \else
-             \lst@ifmode\else
-                 #5%
-                 \def\lst@bnext{#6{#7}{#8}}%
-             \fi
-         \fi
-         \lst@bnext}%
-        \@empty}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@delimtypes}
-% is the list of general delimiter types.
-%    \begin{macrocode}
-\gdef\lst@delimtypes{s,l}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@DelimKey}
-% We just put together the arguments for |\lst@Delim|.
-%    \begin{macrocode}
-\gdef\lst@DelimKey#1#2{%
-    \lst@Delim{}#2\relax
-        {Delim}\lst@delimtypes #1%
-                {\lst@BeginDelim\lst@EndDelim}
-        i\@empty{\lst@BeginIDelim\lst@EndIDelim}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{delim}
-% \begin{lstkey}{moredelim}
-% \begin{lstkey}{deletedelim}
-% all use |\lst@DelimKey|.
-%    \begin{macrocode}
-\lst@Key{delim}\relax{\lst@DelimKey\@empty{#1}}
-\lst@Key{moredelim}\relax{\lst@DelimKey\relax{#1}}
-\lst@Key{deletedelim}\relax{\lst@DelimKey\@nil{#1}}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@DelimDM@l}
-% \begin{macro}{\lst@DelimDM@s}
-% Nohting special here.
-%    \begin{macrocode}
-\gdef\lst@DelimDM@l#1#2\@empty#3#4#5{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#3{#1}{#5\lst@Lmodetrue}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\gdef\lst@DelimDM@s#1#2#3\@empty#4#5#6{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#4{#1}{#6}%
-    \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}}
-%    \end{macrocode}
-%    \begin{macrocode}
-%</kernel>
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-% \subsubsection{Strings}
-%
-% \begin{aspect}{strings}
-% Just starting a new aspect.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{strings}
-%    \end{macrocode}
-%
-% \begin{macro}{\lst@stringtypes}
-% is the list of \ldots\space string types?
-%    \begin{macrocode}
-\gdef\lst@stringtypes{d,b,m,bd,db,s}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@StringKey}
-% We just put together the arguments for |\lst@Delim|.
-%    \begin{macrocode}
-\gdef\lst@StringKey#1#2{%
-    \lst@Delim\lst@stringstyle #2\relax
-        {String}\lst@stringtypes #1%
-                     {\lst@BeginString\lst@EndString}%
-        \@@end\@empty{}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{string}
-% \begin{lstkey}{morestring}
-% \begin{lstkey}{deletestring}
-% all use |\lst@StringKey|.
-%    \begin{macrocode}
-\lst@Key{string}\relax{\lst@StringKey\@empty{#1}}
-\lst@Key{morestring}\relax{\lst@StringKey\relax{#1}}
-\lst@Key{deletestring}\relax{\lst@StringKey\@nil{#1}}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{lstkey}{stringstyle}
-% You shouldn't need comments on the following two lines, do you?
-%    \begin{macrocode}
-\lst@Key{stringstyle}{}{\def\lst@stringstyle{#1}}
-\lst@AddToHook{EmptyStyle}{\let\lst@stringstyle\@empty}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{showstringspaces}
-% Thanks to \lsthelper{Knut~M\"uller}{1997/04/28}{\blankstringtrue} for
-% reporting problems with |\blankstringtrue| (now |showstringspaces=false|).
-% The problem has gone.
-%    \begin{macrocode}
-\lst@Key{showstringspaces}t[t]{\lstKV@SetIf{#1}\lst@ifshowstringspaces}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@BeginString}
-% Note that the tokens after |\lst@DelimOpen| are arguments! The only special
-% here is that we switch to `keepspaces' after starting a string, if necessary.
-% A bug reported by \lsthelper{Vespe~Savikko}{2000/09/27}{stringstyle used also
-% on previous other characters} has gone due to the use of |\lst@DelimOpen|.
-%    \begin{macrocode}
-\gdef\lst@BeginString{%
-    \lst@DelimOpen
-        \lst@ifexstrings\else
-        {\lst@ifshowstringspaces
-             \lst@keepspacestrue
-             \let\lst@outputspace\lst@visiblespace
-         \fi}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHookExe{ExcludeDelims}{\let\lst@ifexstrings\iffalse}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@EndString}
-% Again the two tokens following |\lst@DelimClose| are arguments.
-%    \begin{macrocode}
-\gdef\lst@EndString{\lst@DelimClose\lst@ifexstrings\else}
-%    \end{macrocode}
-% \end{macro}
-%
-% And now all the |\lst@StringDM@|\meta{type} definitions.
-%
-% \begin{macro}{\lst@StringDM@d}
-% `d' means no extra work.; the first three arguments after |\lst@DefDelimBE|
-% are left empty. The others are used to start and end the string.
-%    \begin{macrocode}
-\gdef\lst@StringDM@d#1#2\@empty#3#4#5{%
-    \lst@CArg #2\relax\lst@DefDelimBE{}{}{}#3{#1}{#5}#4}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@StringDM@b}
-% The |\lst@ifletter|\ldots|\fi| has been inserted after bug reports by
-% \lsthelper{Daniel~Gerigk}{2001/10/25}{improper strings in C++} and
-% \lsthelper{Peter~Bartke}{2001/11/01}{improper strings in C++}. If the last
-% other character is a backslash (4th line), we gobble the `end string' token
-% sequence.
-%    \begin{macrocode}
-\gdef\lst@StringDM@b#1#2\@empty#3#4#5{%
-    \let\lst@ifbstring\iftrue
-    \lst@CArg #2\relax\lst@DefDelimBE
-       {\lst@ifletter \lst@Output \lst@letterfalse \fi}%
-       {\ifx\lst@lastother\lstum@backslash
-            \expandafter\@gobblethree
-        \fi}{}#3{#1}{#5}#4}
-%    \end{macrocode}
-%    \begin{macrocode}
-\global\let\lst@ifbstring\iffalse % init
-%    \end{macrocode}
-% \lsthelper{Heiko~Heil}{2002/02/08}{string '\\' does not finish after the
-% delimiter} reported problems with double backslashes. So:
-%    \begin{macrocode}
-\lst@AddToHook{SelectCharTable}{%
-    \lst@ifbstring
-        \lst@CArgX \\\\\relax \lst@CDefX{}%
-           {\lst@ProcessOther\lstum@backslash
-            \lst@ProcessOther\lstum@backslash
-            \let\lst@lastother\relax}%
-           {}%
-    \fi}
-%    \end{macrocode}
-% The reset of |\lst@lastother| has been added after a bug reports by
-% \lsthelper{Hermann~H\"uttler}{2002/10/05}{C++-string "... \\" does not
-% end with second double quote} and \lsthelper{Dan~Luecking}{2003/01/15}
-% {string "\\" doesn't end after the second quote}.
-% \end{macro}
-%
-% \begin{macro}{\lst@StringDM@bd}
-% \begin{macro}{\lst@StringDM@db}
-% are just the same and the same as |\lst@StringDM@b|.
-%    \begin{macrocode}
-\global\let\lst@StringDM@bd\lst@StringDM@b
-\global\let\lst@StringDM@db\lst@StringDM@bd
-%    \end{macrocode}
-% \end{macro}\end{macro}
-%
-% \begin{macro}{\lst@StringDM@m}
-% is for Matlab. We enter string mode only if the last character is not in
-% the following list of exceptional characters: letters, digits, period,
-% quote, right parenthesis, right bracket, and right brace. The first list
-% has been extended after bug reports from \lsthelper{Christian~Kindinger}
-% {2002/03/??}{]' starts a string in Matlab}, \lsthelper{Benjamin~Schubert}
-% {2003/02/05}{.' starts a string in Matlab}, and \lsthelper{Stefan~Stoll}
-% {2003/02/18}{any of 0123456789\}' plus quote start a string in Matlab}.
-%    \begin{macrocode}
-\gdef\lst@StringDM@m#1#2\@empty#3#4#5{%
-    \lst@CArg #2\relax\lst@DefDelimBE{}{}%
-        {\let\lst@next\@gobblethree
-         \lst@ifletter\else
-             \lst@IfLastOtherOneOf{)].0123456789\lstum@rbrace'}%
-                 {}%
-                 {\let\lst@next\@empty}%
-         \fi
-         \lst@next}#3{#1}{#5}#4}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@StringDM@s}
-% is for string-delimited strings, just as for comments.  This is needed
-% for Ruby, and possibly other languages.
-%    \begin{macrocode}
-\gdef\lst@StringDM@s#1#2#3\@empty#4#5#6{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#4{#1}{#6}%
-    \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstum@rbrace}
-% This has been used above.
-%    \begin{macrocode}
-\lst@SaveOutputDef{"7D}\lstum@rbrace
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \begin{aspect}{mf}
-% For MetaFont and MetaPost we now define macros to print the input-filenames
-% in stringstyle.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{mf}
-%    \end{macrocode}
-%
-% \begin{macro}{\lst@mfinputmode}
-% \begin{macro}{\lst@String@mf}
-%    \begin{macrocode}
-\lst@AddTo\lst@stringtypes{,mf}
-\lst@NewMode\lst@mfinputmode
-%    \end{macrocode}
-%    \begin{macrocode}
-\gdef\lst@String@mf#1\@empty#2#3#4{%
-  \lst@CArg #1\relax\lst@DefDelimB
-       {}{}{\lst@ifletter \expandafter\@gobblethree \fi}%
-       \lst@BeginStringMFinput\lst@mfinputmode{#4\lst@Lmodetrue}%
-  \@ifundefined{lsts@semicolon}%
-  {\lst@DefSaveDef{`\;}\lsts@semicolon{% ; and space end the filename
-      \ifnum\lst@mode=\lst@mfinputmode
-          \lst@XPrintToken
-          \expandafter\lst@LeaveMode
-      \fi
-      \lsts@semicolon}%
-   \lst@DefSaveDef{`\ }\lsts@space{%
-      \ifnum\lst@mode=\lst@mfinputmode
-          \lst@XPrintToken
-          \expandafter\lst@LeaveMode
-      \fi
-      \lsts@space}%
-  }{}}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@BeginStringMFinput}
-% It remains to define this macro. In contrast to |\lst@PrintDelim|, we don't
-% use |\lst@modetrue| to allow keyword detection here.
-%    \begin{macrocode}
-\gdef\lst@BeginStringMFinput#1#2#3\@empty{%
-    \lst@TrackNewLines \lst@XPrintToken
-      \begingroup
-        \lst@mode\lst@nomode
-        #3\lst@XPrintToken
-      \endgroup
-      \lst@ResetToken
-    \lst@EnterMode{#1}{\def\lst@currstyle#2}%
-    \lst@ifshowstringspaces
-         \lst@keepspacestrue
-         \let\lst@outputspace\lst@visiblespace
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsubsection{Comments}
-%
-% \begin{aspect}{comments}
-% That's what we are working on.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{comments}
-%    \end{macrocode}
-%
-% \begin{macro}{\lst@commentmode}
-% is a general purpose mode for comments.
-%    \begin{macrocode}
-\lst@NewMode\lst@commentmode
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@commenttypes}
-% Via \keyname{comment} available comment types: \textbf line, \textbf fixed
-% column, \textbf single, and \textbf nested and all with
-% preceding \textbf i for invisible comments.
-%    \begin{macrocode}
-\gdef\lst@commenttypes{l,f,s,n}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CommentKey}
-% We just put together the arguments for |\lst@Delim|.
-%    \begin{macrocode}
-\gdef\lst@CommentKey#1#2{%
-    \lst@Delim\lst@commentstyle #2\relax
-        {Comment}\lst@commenttypes #1%
-                {\lst@BeginComment\lst@EndComment}%
-        i\@empty{\lst@BeginInvisible\lst@EndInvisible}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{comment}
-% \begin{lstkey}{morecomment}
-% \begin{lstkey}{deletecomment}
-% The keys are easy since defined in terms of |\lst@CommentKey|.
-%    \begin{macrocode}
-\lst@Key{comment}\relax{\lst@CommentKey\@empty{#1}}
-\lst@Key{morecomment}\relax{\lst@CommentKey\relax{#1}}
-\lst@Key{deletecomment}\relax{\lst@CommentKey\@nil{#1}}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{lstkey}{commentstyle}
-% Any hints necessary?
-%    \begin{macrocode}
-\lst@Key{commentstyle}{}{\def\lst@commentstyle{#1}}
-\lst@AddToHook{EmptyStyle}{\let\lst@commentstyle\itshape}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@BeginComment}
-% \begin{macro}{\lst@EndComment}
-% Once more the three tokens following |\lst@DelimOpen| are arguments.
-%    \begin{macrocode}
-\gdef\lst@BeginComment{%
-    \lst@DelimOpen
-        \lst@ifexcomments\else
-        \lsthk@AfterBeginComment}
-%    \end{macrocode}
-% Ditto.
-%    \begin{macrocode}
-\gdef\lst@EndComment{\lst@DelimClose\lst@ifexcomments\else}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{AfterBeginComment}{}
-\lst@AddToHookExe{ExcludeDelims}{\let\lst@ifexcomments\iffalse}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@BeginInvisible}
-% \begin{macro}{\lst@EndInvisible}
-% Print preceding characters and begin dropping the output.
-%    \begin{macrocode}
-\gdef\lst@BeginInvisible#1#2#3\@empty{%
-    \lst@TrackNewLines \lst@XPrintToken
-    \lst@BeginDropOutput{#1}}
-%    \end{macrocode}
-% Don't print the delimiter and end dropping the output.
-%    \begin{macrocode}
-\gdef\lst@EndInvisible#1\@empty{\lst@EndDropOutput}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% Now we provide all |\lst@Comment|[|DM|]|@|\meta{type} macros.
-%
-% \begin{macro}{\lst@CommentDM@l}
-% is easy---thanks to |\lst@CArg| and |\lst@DefDelimB|. Note that the
-% `end comment' argument |#4| is not used here.
-%    \begin{macrocode}
-\gdef\lst@CommentDM@l#1#2\@empty#3#4#5{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#3{#1}{#5\lst@Lmodetrue}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CommentDM@f}
-% is slightly more work. First we provide the number of preceding columns.
-%    \begin{macrocode}
-\gdef\lst@CommentDM@f#1{%
-    \@ifnextchar[{\lst@Comment@@f{#1}}%
-                 {\lst@Comment@@f{#1}[0]}}
-%    \end{macrocode}
-% We define the comment in the same way as above, but we enter comment mode
-% if and only if the character is in column |#2| (counting from zero).
-%    \begin{macrocode}
-\gdef\lst@Comment@@f#1[#2]#3\@empty#4#5#6{%
-    \lst@CArg #3\relax\lst@DefDelimB{}{}%
-        {\lst@CalcColumn
-         \ifnum #2=\@tempcnta\else
-             \expandafter\@gobblethree
-         \fi}%
-        #4{#1}{#6\lst@Lmodetrue}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CommentDM@s}
-% Nothing special here.
-%    \begin{macrocode}
-\gdef\lst@CommentDM@s#1#2#3\@empty#4#5#6{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#4{#1}{#6}%
-    \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@CommentDM@n}
-% We either give an error message or define the nested comment.
-%    \begin{macrocode}
-\gdef\lst@CommentDM@n#1#2#3\@empty#4#5#6{%
-    \ifx\@empty#3\@empty\else
-        \def\@tempa{#2}\def\@tempb{#3}%
-        \ifx\@tempa\@tempb
-            \PackageError{Listings}{Identical delimiters}%
-            {These delimiters make no sense with nested comments.}%
-        \else
-            \lst@CArg #2\relax\lst@DefDelimB
-                {}%
-%    \end{macrocode}
-% Note that the following |\@gobble| eats an |\else| from |\lst@DefDelimB|.
-%    \begin{macrocode}
-                {\ifnum\lst@mode=#1\relax \expandafter\@gobble \fi}%
-                {}#4{#1}{#6}%
-            \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}%
-        \fi
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsubsection{PODs}
-%
-% \begin{aspect}{pod}
-% PODs are defined as a separate aspect.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{pod}
-%    \end{macrocode}
-%
-% \begin{lstkey}{printpod}
-% \begin{lstkey}{podcomment}
-% We begin with the user keys, which I introduced after communication with
-% \lsthelper{Michael~Piotrowski}{1997/11/11}{printpod}.
-%    \begin{macrocode}
-\lst@Key{printpod}{false}[t]{\lstKV@SetIf{#1}\lst@ifprintpod}
-\lst@Key{podcomment}{false}[t]{\lstKV@SetIf{#1}\lst@ifpodcomment}
-\lst@AddToHookExe{SetLanguage}{\let\lst@ifpodcomment\iffalse}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@PODmode}
-% is the static mode for PODs.
-%    \begin{macrocode}
-\lst@NewMode\lst@PODmode
-%    \end{macrocode}
-% \end{macro}
-%
-% We adjust some characters if the user has selected |podcomment=true|.
-%    \begin{macrocode}
-\lst@AddToHook{SelectCharTable}
-    {\lst@ifpodcomment
-         \lst@CArgX =\relax\lst@DefDelimB{}{}%
-%    \end{macrocode}
-% The following code is executed if we've found an equality sign and haven't
-% entered a mode (in fact if mode changes are allowed): We `begin drop output'
-% and gobble the usual begin of comment sequence (via |\@gobblethree|) if PODs
-% aren't be printed. Moreover we gobble it if the current column number is not
-% zero---|\@tempcnta| is valued below.
-%    \begin{macrocode}
-           {\ifnum\@tempcnta=\z@
-                \lst@ifprintpod\else
-                    \def\lst@bnext{\lst@BeginDropOutput\lst@PODmode}%
-                    \expandafter\expandafter\expandafter\@gobblethree
-                \fi
-            \else
-               \expandafter\@gobblethree
-            \fi}%
-           \lst@BeginComment\lst@PODmode{{\lst@commentstyle}}%
-%    \end{macrocode}
-% If we come to |=|, we calculate the current column number (zero based).
-%    \begin{macrocode}
-         \lst@CArgX =cut\^^M\relax\lst@DefDelimE
-           {\lst@CalcColumn}%
-%    \end{macrocode}
-% If there is additionally |cut|+EOL and if we are in |\lst@PODmode| but not in
-% column one, we must gobble the `end comment sequence'.
-%    \begin{macrocode}
-           {\ifnum\@tempcnta=\z@\else
-                \expandafter\@gobblethree
-            \fi}%
-           {}%
-           \lst@EndComment\lst@PODmode
-     \fi}
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsubsection{Tags}
-%
-% \begin{aspect}{html}
-% Support for HTML and other `markup languages'.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[keywords]{html}
-%    \end{macrocode}
-%
-% \begin{macro}{\lst@tagtypes}
-% Again we begin with the list of tag types. It's rather short.
-%    \begin{macrocode}
-\gdef\lst@tagtypes{s}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@TagKey}
-% Again we just put together the arguments for |\lst@Delim| and \ldots
-%    \begin{macrocode}
-\gdef\lst@TagKey#1#2{%
-    \lst@Delim\lst@tagstyle #2\relax
-        {Tag}\lst@tagtypes #1%
-                     {\lst@BeginTag\lst@EndTag}%
-        \@@end\@empty{}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{tag}
-% \ldots\ we use the definition here.
-%    \begin{macrocode}
-\lst@Key{tag}\relax{\lst@TagKey\@empty{#1}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{tagstyle}
-% You shouldn't need comments on the following two lines, do you?
-%    \begin{macrocode}
-\lst@Key{tagstyle}{}{\def\lst@tagstyle{#1}}
-\lst@AddToHook{EmptyStyle}{\let\lst@tagstyle\@empty}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@BeginTag}
-% The special things here are: (1) We activate keyword detection inside tags
-% and (2) we initialize the switch |\lst@iffirstintag| if necessary.
-%    \begin{macrocode}
-\gdef\lst@BeginTag{%
-    \lst@DelimOpen
-        \lst@ifextags\else
-        {\let\lst@ifkeywords\iftrue
-         \lst@ifmarkfirstintag \lst@firstintagtrue \fi}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHookExe{ExcludeDelims}{\let\lst@ifextags\iffalse}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@EndTag}
-% is just like the other |\lst@End|\meta{whatever} definitions.
-%    \begin{macrocode}
-\gdef\lst@EndTag{\lst@DelimClose\lst@ifextags\else}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{usekeywordsintag}
-% \begin{lstkey}{markfirstintag}
-% The second key has already been `used'.
-%    \begin{macrocode}
-\lst@Key{usekeywordsintag}t[t]{\lstKV@SetIf{#1}\lst@ifusekeysintag}
-\lst@Key{markfirstintag}f[t]{\lstKV@SetIf{#1}\lst@ifmarkfirstintag}
-%    \end{macrocode}
-% For this, we install a (global) switch, \ldots
-%    \begin{macrocode}
-\gdef\lst@firstintagtrue{\global\let\lst@iffirstintag\iftrue}
-\global\let\lst@iffirstintag\iffalse
-%    \end{macrocode}
-% \ldots\ which is reset by the output of an identifier but not by other
-% output.
-%    \begin{macrocode}
-\lst@AddToHook{PostOutput}{\lst@tagresetfirst}
-\lst@AddToHook{Output}
-    {\gdef\lst@tagresetfirst{\global\let\lst@iffirstintag\iffalse}}
-\lst@AddToHook{OutputOther}{\gdef\lst@tagresetfirst{}}
-%    \end{macrocode}
-% Now we only need to test against this switch in the \hookname{Output} hook.
-%    \begin{macrocode}
-\lst@AddToHook{Output}
-    {\ifnum\lst@mode=\lst@tagmode
-         \lst@iffirstintag \let\lst@thestyle\lst@gkeywords@sty \fi
-%    \end{macrocode}
-% Moreover we check here, whether the keyword style is always to be used.
-%    \begin{macrocode}
-         \lst@ifusekeysintag\else \let\lst@thestyle\lst@gkeywords@sty\fi
-     \fi}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@tagmode}
-% We allocate the mode and \ldots
-%    \begin{macrocode}
-\lst@NewMode\lst@tagmode
-%    \end{macrocode}
-% deactivate keyword detection if any tag delimiter is defined (see below).
-%    \begin{macrocode}
-\lst@AddToHook{Init}{\global\let\lst@ifnotag\iftrue}
-\lst@AddToHook{SelectCharTable}{\let\lst@ifkeywords\lst@ifnotag}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Tag@s}
-% The definition of the one and only delimiter type is not that interesting.
-% Compared with the others we set |\lst@ifnotag| and enter tag mode only if
-% we aren't in tag mode.
-%    \begin{macrocode}
-\gdef\lst@Tag@s#1#2\@empty#3#4#5{%
-    \global\let\lst@ifnotag\iffalse
-    \lst@CArg #1\relax\lst@DefDelimB {}{}%
-        {\ifnum\lst@mode=\lst@tagmode \expandafter\@gobblethree \fi}%
-        #3\lst@tagmode{#5}%
-    \lst@CArg #2\relax\lst@DefDelimE {}{}{}#4\lst@tagmode}%
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@BeginCDATA}
-% This macro is used by the XML language definition.
-%    \begin{macrocode}
-\gdef\lst@BeginCDATA#1\@empty{%
-    \lst@TrackNewLines \lst@PrintToken
-    \lst@EnterMode\lst@GPmode{}\let\lst@ifmode\iffalse
-    \lst@mode\lst@tagmode #1\lst@mode\lst@GPmode\relax\lst@modetrue}
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsection{Replacing input}
-%
-% \begingroup
-%    \begin{macrocode}
-%<*kernel>
-%    \end{macrocode}
-% \endgroup
-%
-% \begin{macro}{\lst@ReplaceInput}
-% is defined in terms of |\lst@CArgX| and |\lst@CDefX|.
-%    \begin{macrocode}
-\def\lst@ReplaceInput#1{\lst@CArgX #1\relax\lst@CDefX{}{}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{literate}
-% \lsthelper{Jason~Alexander}{1999/03/10}{literate programming} asked for
-% something like that. The key looks for a star and saves the argument.
-%    \begin{macrocode}
-\def\lst@Literatekey#1\@nil@{\let\lst@ifxliterate\lst@if
-                             \def\lst@literate{#1}}
-\lst@Key{literate}{}{\@ifstar{\lst@true \lst@Literatekey}
-                             {\lst@false\lst@Literatekey}#1\@nil@}
-\lst@AddToHook{SelectCharTable}
-    {\ifx\lst@literate\@empty\else
-         \expandafter\lst@Literate\lst@literate{}\relax\z@
-     \fi}
-%    \end{macrocode}
-% Internally we don't make use of the `replace input' feature any more.
-%^^A We print the preceding text, assign token and length, and output it.
-%    \begin{macrocode}
-\def\lst@Literate#1#2#3{%
-    \ifx\relax#2\@empty\else
-        \lst@CArgX #1\relax\lst@CDef
-            {}
-            {\let\lst@next\@empty
-             \lst@ifxliterate
-                \lst@ifmode \let\lst@next\lst@CArgEmpty \fi
-             \fi
-             \ifx\lst@next\@empty
-                 \ifx\lst@OutputBox\@gobble\else
-                   \lst@XPrintToken \let\lst@scanmode\lst@scan@m
-                   \lst@token{#2}\lst@length#3\relax
-                   \lst@XPrintToken
-                 \fi
-                 \let\lst@next\lst@CArgEmptyGobble
-             \fi
-             \lst@next}%
-            \@empty
-        \expandafter\lst@Literate
-    \fi}
-\def\lst@CArgEmptyGobble#1\@empty{}
-%    \end{macrocode}
-% Note that we check |\lst@OutputBox| for being |\@gobble|. This is due to
-% a bug report by \lsthelper{Jared~Warren}{2003/07/10}{literate replacement
-% produces "ghosts"}.
-% \end{lstkey}
-%
-% \begin{macro}{\lst@BeginDropInput}
-% We deactivate all `process' macros. |\lst@modetrue| does this for all
-% up-coming string delimiters, comments, and so on.
-%    \begin{macrocode}
-\def\lst@BeginDropInput#1{%
-    \lst@EnterMode{#1}%
-    {\lst@modetrue
-     \let\lst@OutputBox\@gobble
-     \let\lst@ifdropinput\iftrue
-     \let\lst@ProcessLetter\@gobble
-     \let\lst@ProcessDigit\@gobble
-     \let\lst@ProcessOther\@gobble
-     \let\lst@ProcessSpace\@empty
-     \let\lst@ProcessTabulator\@empty
-     \let\lst@ProcessFormFeed\@empty}}
-\let\lst@ifdropinput\iffalse % init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begingroup
-%    \begin{macrocode}
-%</kernel>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Escaping to \LaTeX}
-%
-% \begin{aspect}{escape}
-% We now define the \ldots\ damned \ldots\ the aspect has escaped!
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{escape}
-%    \end{macrocode}
-%
-% \begin{lstkey}{texcl}
-% Communication with \lsthelper{J\"orn~Wilms}{1997/07/07}{\TeX\ comments} is
-% responsible for this key. The definition and the first hooks are easy.
-%    \begin{macrocode}
-\lst@Key{texcl}{false}[t]{\lstKV@SetIf{#1}\lst@iftexcl}
-\lst@AddToHook{TextStyle}{\let\lst@iftexcl\iffalse}
-\lst@AddToHook{EOL}
-    {\ifnum\lst@mode=\lst@TeXLmode
-         \expandafter\lst@escapeend
-         \expandafter\lst@LeaveAllModes
-         \expandafter\lst@ReenterModes
-     \fi}
-%    \end{macrocode}
-% If the user wants \TeX\ comment lines, we print the comment separator and
-% interrupt the normal processing.
-%    \begin{macrocode}
-\lst@AddToHook{AfterBeginComment}
-    {\lst@iftexcl \lst@ifLmode \lst@ifdropinput\else
-         \lst@PrintToken
-         \lst@LeaveMode \lst@InterruptModes
-         \lst@EnterMode{\lst@TeXLmode}{\lst@modetrue\lst@commentstyle}%
-         \expandafter\expandafter\expandafter\lst@escapebegin
-     \fi \fi \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@NewMode\lst@TeXLmode
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@ActiveCDefX}
-% Same as |\lst@CDefX| but we both make |#1| active and assign a new catcode.
-%    \begin{macrocode}
-\gdef\lst@ActiveCDefX#1{\lst@ActiveCDefX@#1}
-\gdef\lst@ActiveCDefX@#1#2#3{
-    \catcode`#1\active\lccode`\~=`#1%
-    \lowercase{\lst@CDefIt~}{#2}{#3}{}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@Escape}
-% gets four arguments all in all. The first and second are the `begin' and
-% `end' escape sequences, the third is executed when the escape starts, and the
-% fourth right before ending it. We use the same mechanism as for \TeX\ comment
-% lines. The |\lst@ifdropinput| test has been added after a bug report by
-% \lsthelper{Michael~Weber}{2002/03/26}{escape on lines < firstline corrupts
-% output}.  The |\lst@newlines\z@| was added due to a bug report by
-% \lsthelper{Frank~Atanassow}{2004/10/07}{space after mathescape is not
-% preserved}.
-%    \begin{macrocode}
-\gdef\lst@Escape#1#2#3#4{%
-    \lst@CArgX #1\relax\lst@CDefX
-        {}%
-        {\lst@ifdropinput\else
-         \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken
-         \lst@InterruptModes
-         \lst@EnterMode{\lst@TeXmode}{\lst@modetrue}%
-%    \end{macrocode}
-% Now we must define the character sequence to end the escape.
-%    \begin{macrocode}
-         \ifx\^^M#2%
-             \lst@CArg #2\relax\lst@ActiveCDefX
-                 {}%
-                 {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes}%
-                 {\lst@MProcessListing}%
-         \else
-             \lst@CArg #2\relax\lst@ActiveCDefX
-                 {}%
-                 {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes
-                  \lst@newlines\z@ \lst@whitespacefalse}%
-                 {}%
-         \fi
-         #3\lst@escapebegin
-         \fi}%
-        {}}
-%    \end{macrocode}
-% The |\lst@whitespacefalse| above was added after a bug report from
-% \lsthelper{Martin~Steffen}{2001/04/07}{mathescape drops subsequent space}.
-%    \begin{macrocode}
-\lst@NewMode\lst@TeXmode
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{escapebegin}
-% \begin{lstkey}{escapeend}
-% The keys simply store the arguments.
-%    \begin{macrocode}
-\lst@Key{escapebegin}{}{\def\lst@escapebegin{#1}}
-\lst@Key{escapeend}{}{\def\lst@escapeend{#1}}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{lstkey}{escapechar}
-% The introduction of this key is due to a communication with \lsthelper
-% {Rui~Oliveira}{1998/06/05}{escape characters}. We define |\lst@DefEsc| and
-% execute it after selecting the standard character table.
-%    \begin{macrocode}
-\lst@Key{escapechar}{}
-    {\ifx\@empty#1\@empty
-         \let\lst@DefEsc\relax
-     \else
-         \def\lst@DefEsc{\lst@Escape{#1}{#1}{}{}}%
-     \fi}
-\lst@AddToHook{TextStyle}{\let\lst@DefEsc\@empty}
-\lst@AddToHook{SelectCharTable}{\lst@DefEsc}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{escapeinside}
-% Nearly the same.
-%    \begin{macrocode}
-\lst@Key{escapeinside}{}{\lstKV@TwoArg{#1}%
-    {\let\lst@DefEsc\@empty
-     \ifx\@empty##1@empty\else \ifx\@empty##2\@empty\else
-         \def\lst@DefEsc{\lst@Escape{##1}{##2}{}{}}%
-     \fi\fi}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{mathescape}
-% This is a switch and checked after character table selection. We use
-% |\lst@Escape| with math shifts as arguments, but all inside |\hbox|
-% to determine the correct width.
-%    \begin{macrocode}
-\lst@Key{mathescape}{false}[t]{\lstKV@SetIf{#1}\lst@ifmathescape}
-\lst@AddToHook{SelectCharTable}
-    {\lst@ifmathescape \lst@Escape{\$}{\$}%
-        {\setbox\@tempboxa=\hbox\bgroup$}%
-        {$\egroup \lst@CalcLostSpaceAndOutput}\fi}
-%    \end{macrocode}
-% \end{lstkey}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \section{Keywords}
-%
-%
-% \subsection{Making tests}\label{iMakingTests}
-%
-% \begin{aspect}{keywords}
-% We begin a new and very important aspect.
-% First of all we need to initialize some variables in order to work around a
-% bug reported by \lsthelper{Beat~Birkhofer}{2001/06/15}{savemem doesn't work}.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{keywords}
-%    \end{macrocode}
-%    \begin{macrocode}
-\global\let\lst@ifsensitive\iftrue % init
-\global\let\lst@ifsensitivedefed\iffalse % init % \global
-%    \end{macrocode}
-% All keyword tests take the following three arguments.
-% \begin{macroargs}
-% \item \meta{prefix}
-% \item |\lst@|\meta{name}|@list| (a list of macros which contain the keywords)
-% \item |\lst@g|\meta{name}|@sty| (global style macro)
-% \end{macroargs}
-% We begin with non memory-saving tests.
-% \begingroup
-%    \begin{macrocode}
-\lst@ifsavemem\else
-%    \end{macrocode}
-% \endgroup
-%
-% \begin{macro}{\lst@KeywordTest}
-% Fast keyword tests take advance of the |\lst@UM| construction in section
-% \ref{iCharacterTables}. If |\lst@UM| is empty, all `use macro' characters
-% expand to their original characters. Since |\lst|\meta{prefix}|@|\meta{keyword}
-% will be equivalent to the appropriate style, we only need to build the control
-% sequence |\lst|\meta{prefix}|@|\meta{current token} and assign it to
-% |\lst@thestyle|.
-%    \begin{macrocode}
-\gdef\lst@KeywordTest#1#2#3{%
-    \begingroup \let\lst@UM\@empty
-    \global\expandafter\let\expandafter\@gtempa
-        \csname\@lst#1@\the\lst@token\endcsname
-    \endgroup
-    \ifx\@gtempa\relax\else
-        \let\lst@thestyle\@gtempa
-    \fi}
-%    \end{macrocode}
-% Note that we need neither |#2| nor |#3| here.
-% \end{macro}
-%
-% \begin{macro}{\lst@KEYWORDTEST}
-% Case insensitive tests make the current character string upper case and give
-% it to a submacro similar to |\lst@KeywordTest|.
-%    \begin{macrocode}
-\gdef\lst@KEYWORDTEST{%
-    \uppercase\expandafter{\expandafter
-        \lst@KEYWORDTEST@\the\lst@token}\relax}
-\gdef\lst@KEYWORDTEST@#1\relax#2#3#4{%
-    \begingroup \let\lst@UM\@empty
-    \global\expandafter\let\expandafter\@gtempa
-        \csname\@lst#2@#1\endcsname
-    \endgroup
-    \ifx\@gtempa\relax\else
-        \let\lst@thestyle\@gtempa
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@WorkingTest}
-% \begin{macro}{\lst@WORKINGTEST}
-% The same except that |\lst|\meta{prefix}|@|\meta{current token} might be
-% a working procedure; it is executed.
-%    \begin{macrocode}
-\gdef\lst@WorkingTest#1#2#3{%
-    \begingroup \let\lst@UM\@empty
-    \global\expandafter\let\expandafter\@gtempa
-        \csname\@lst#1@\the\lst@token\endcsname
-    \endgroup
-    \@gtempa}
-%    \end{macrocode}
-%    \begin{macrocode}
-\gdef\lst@WORKINGTEST{%
-    \uppercase\expandafter{\expandafter
-        \lst@WORKINGTEST@\the\lst@token}\relax}
-\gdef\lst@WORKINGTEST@#1\relax#2#3#4{%
-    \begingroup \let\lst@UM\@empty
-    \global\expandafter\let\expandafter\@gtempa
-        \csname\@lst#2@#1\endcsname
-    \endgroup
-    \@gtempa}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@DefineKeywords}
-% Eventually we need macros which define and undefine
-% |\lst|\meta{prefix}|@|\meta{keyword}. Here the arguments are
-% \begin{macroargs}
-% \item \meta{prefix}
-% \item |\lst@|\meta{name} (a keyword list)
-% \item |\lst@g|\meta{name}|@sty|
-% \end{macroargs}
-% We make the keywords upper case if necessary, \ldots
-%    \begin{macrocode}
-\gdef\lst@DefineKeywords#1#2#3{%
-    \lst@ifsensitive
-        \def\lst@next{\lst@for#2}%
-    \else
-        \def\lst@next{\uppercase\expandafter{\expandafter\lst@for#2}}%
-    \fi
-    \lst@next\do
-%    \end{macrocode}
-% \ldots\space iterate through the list, and make
-% |\lst|\meta{prefix}|@|\meta{keyword} (if undefined) equivalent to
-% |\lst@g|\meta{name}|@sty| which is possibly a working macro.
-%    \begin{macrocode}
-    {\expandafter\ifx\csname\@lst#1@##1\endcsname\relax
-        \global\expandafter\let\csname\@lst#1@##1\endcsname#3%
-     \fi}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@UndefineKeywords}
-% We make the keywords upper case if necessary, \ldots
-%    \begin{macrocode}
-\gdef\lst@UndefineKeywords#1#2#3{%
-    \lst@ifsensitivedefed
-        \def\lst@next{\lst@for#2}%
-    \else
-        \def\lst@next{\uppercase\expandafter{\expandafter\lst@for#2}}%
-    \fi
-    \lst@next\do
-%    \end{macrocode}
-% \ldots\space iterate through the list, and `undefine'
-% |\lst|\meta{prefix}|@|\meta{keyword} if it's equivalent to
-% |\lst@g|\meta{name}|@sty|.
-%    \begin{macrocode}
-    {\expandafter\ifx\csname\@lst#1@##1\endcsname#3%
-        \global\expandafter\let\csname\@lst#1@##1\endcsname\relax
-     \fi}}
-%    \end{macrocode}
-% Thanks to \lsthelper{Magnus~Lewis-Smith}{1999/09/08}{keywords do not
-% undefine} a wrong |#2| in the replacement text could be changed to |#3|.
-% \end{macro}
-%
-% \begingroup
-% And now memory-saving tests.
-%    \begin{macrocode}
-\fi
-\lst@ifsavemem
-%    \end{macrocode}
-% \endgroup
-%
-% \begin{macro}{\lst@IfOneOutOf}
-% The definition here is similar to |\lst@IfOneOf|, but its second argument
-% is a |\lst@|\meta{name}|@list|. Therefore we test a list of macros here.
-%    \begin{macrocode}
-\gdef\lst@IfOneOutOf#1\relax#2{%
-    \def\lst@temp##1,#1,##2##3\relax{%
-        \ifx\@empty##2\else \expandafter\lst@IOOOfirst \fi}%
-    \def\lst@next{\lst@IfOneOutOf@#1\relax}%
-    \expandafter\lst@next#2\relax\relax}
-%    \end{macrocode}
-% We either execute the \meta{else} part or make the next test.
-%    \begin{macrocode}
-\gdef\lst@IfOneOutOf@#1\relax#2#3{%
-    \ifx#2\relax
-        \expandafter\@secondoftwo
-    \else
-        \expandafter\lst@temp\expandafter,#2,#1,\@empty\relax
-        \expandafter\lst@next
-    \fi}
-\ifx\iffalse\else\fi
-\gdef\lst@IOOOfirst#1\relax#2#3{\fi#2}
-%    \end{macrocode}
-% The line |\ifx\iffalse\else\fi| balances the |\fi| inside |\lst@IOOOfirst|.
-% \end{macro}
-%
-% \begin{macro}{\lst@IFONEOUTOF}
-% As in |\lst@IFONEOF| we need two |\uppercase|s here.
-%    \begin{macrocode}
-\gdef\lst@IFONEOUTOF#1\relax#2{%
-    \uppercase{\def\lst@temp##1,#1},##2##3\relax{%
-        \ifx\@empty##2\else \expandafter\lst@IOOOfirst \fi}%
-    \def\lst@next{\lst@IFONEOUTOF@#1\relax}%
-    \expandafter\lst@next#2\relax}
-\gdef\lst@IFONEOUTOF@#1\relax#2#3{%
-    \ifx#2\relax
-        \expandafter\@secondoftwo
-    \else
-        \uppercase
-            {\expandafter\lst@temp\expandafter,#2,#1,\@empty\relax}%
-        \expandafter\lst@next
-    \fi}
-%    \end{macrocode}
-% Note: The third last line uses the fact that keyword lists (not the list
-% of keyword lists) are already made upper case if keywords are insensitive.
-% \end{macro}
-%
-% \begin{macro}{\lst@KWTest}
-% is a helper for the keyword and working identifier tests. We expand the
-% token and call |\lst@IfOneOf|. The tests below will append appropriate
-% \meta{then} and \meta{else} arguments.
-%    \begin{macrocode}
-\gdef\lst@KWTest{%
-    \begingroup \let\lst@UM\@empty
-    \expandafter\xdef\expandafter\@gtempa\expandafter{\the\lst@token}%
-    \endgroup
-    \expandafter\lst@IfOneOutOf\@gtempa\relax}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@KeywordTest}
-% \begin{macro}{\lst@KEYWORDTEST}
-% are fairly easy now. Note that we don't need |#1|=\meta{prefix} here.
-%    \begin{macrocode}
-\gdef\lst@KeywordTest#1#2#3{\lst@KWTest #2{\let\lst@thestyle#3}{}}
-\global\let\lst@KEYWORDTEST\lst@KeywordTest
-%    \end{macrocode}
-% For case insensitive tests we assign the insensitive version to
-% |\lst@IfOneOutOf|. Thus we need no extra definition here.
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@WorkingTest}
-% \begin{macro}{\lst@WORKINGTEST}
-% Ditto.
-%    \begin{macrocode}
-\gdef\lst@WorkingTest#1#2#3{\lst@KWTest #2#3{}}
-\global\let\lst@WORKINGTEST\lst@WorkingTest
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begingroup
-%    \begin{macrocode}
-\fi
-%    \end{macrocode}
-% \endgroup
-%
-% \begin{lstkey}{sensitive}
-% is a switch, preset \texttt{true} every language selection.
-%    \begin{macrocode}
-\lst@Key{sensitive}\relax[t]{\lstKV@SetIf{#1}\lst@ifsensitive}
-\lst@AddToHook{SetLanguage}{\let\lst@ifsensitive\iftrue}
-%    \end{macrocode}
-% We select case insensitive definitions if necessary.
-%    \begin{macrocode}
-\lst@AddToHook{Init}
-    {\lst@ifsensitive\else
-         \let\lst@KeywordTest\lst@KEYWORDTEST
-         \let\lst@WorkingTest\lst@WORKINGTEST
-         \let\lst@IfOneOutOf\lst@IFONEOUTOF
-     \fi}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@MakeMacroUppercase}
-% makes the contents of |#1| (if defined) upper case.
-%    \begin{macrocode}
-\gdef\lst@MakeMacroUppercase#1{%
-    \ifx\@undefined#1\else \uppercase\expandafter
-        {\expandafter\def\expandafter#1\expandafter{#1}}%
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Installing tests}
-%
-% \begin{macro}{\lst@InstallTest}
-% The arguments are
-% \begin{macroargs}
-% \item \meta{prefix}
-% \item |\lst@|\meta{name}|@list|
-% \item |\lst@|\meta{name}
-% \item |\lst@g|\meta{name}|@list|
-% \item |\lst@g|\meta{name}
-% \item |\lst@g|\meta{name}|@sty|
-% \item \alternative{w,s} (working procedure or style)
-% \item \alternative{d,o} (\hookname{DetectKeywords} or \hookname{Output} hook)
-% \end{macroargs}
-% We just insert hook material. The tests will be inserted on demand.
-%    \begin{macrocode}
-\gdef\lst@InstallTest#1#2#3#4#5#6#7#8{%
-    \lst@AddToHook{TrackKeywords}{\lst@TrackKeywords{#1}#2#4#6#7#8}%
-    \lst@AddToHook{PostTrackKeywords}{\lst@PostTrackKeywords#2#3#4#5}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{Init}{\lsthk@TrackKeywords\lsthk@PostTrackKeywords}
-\lst@AddToHook{TrackKeywords}
-    {\global\let\lst@DoDefineKeywords\@empty}% init
-\lst@AddToHook{PostTrackKeywords}
-    {\lst@DoDefineKeywords
-     \global\let\lst@DoDefineKeywords\@empty}% init
-%    \end{macrocode}
-% We have to detect the keywords somewhere.
-%    \begin{macrocode}
-\lst@AddToHook{Output}{\lst@ifkeywords \lsthk@DetectKeywords \fi}
-\lst@AddToHook{DetectKeywords}{}% init
-\lst@AddToHook{ModeTrue}{\let\lst@ifkeywords\iffalse}
-\lst@AddToHookExe{Init}{\let\lst@ifkeywords\iftrue}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@InstallTestNow}
-% actually inserts a test.
-% \begin{macroargs}
-% \item \meta{prefix}
-% \item |\lst@|\meta{name}|@list|
-% \item |\lst@g|\meta{name}|@sty|
-% \item \alternative{w,s} (working procedure or style)
-% \item \alternative{d,o} (\hookname{DetectKeywords} or \hookname{Output} hook)
-% \end{macroargs}
-% For example, |#4#5|=|sd| will add
-%    |\lst@KeywordTest{|\meta{prefix}|}|
-%       |\lst@|\meta{name}|@list| |\lst@g|\meta{name}|@sty|
-% to the \hookname{DetectKeywords} hook.
-%    \begin{macrocode}
-\gdef\lst@InstallTestNow#1#2#3#4#5{%
-    \@ifundefined{\string#2#1}%
-    {\global\@namedef{\string#2#1}{}%
-     \edef\@tempa{%
-         \noexpand\lst@AddToHook{\ifx#5dDetectKeywords\else Output\fi}%
-         {\ifx #4w\noexpand\lst@WorkingTest
-             \else\noexpand\lst@KeywordTest \fi
-          {#1}\noexpand#2\noexpand#3}}%
-%    \end{macrocode}
-% If we are advised to save memory, we insert a test for each \meta{name}.
-% Otherwise we install the tests according to \meta{prefix}.
-%    \begin{macrocode}
-     \lst@ifsavemem
-         \@tempa
-     \else
-         \@ifundefined{\@lst#1@if@ins}%
-             {\@tempa \global\@namedef{\@lst#1@if@ins}{}}%
-             {}%
-     \fi}
-    {}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@TrackKeywords}
-% Now it gets a bit tricky. We expand the class list |\lst@|\meta{name}|@list|
-% behind |\lst@TK@{|\meta{prefix}|}||\lst@g|\meta{name}|@sty| and use two
-% |\relax|es as terminators. This will define the keywords of all the classes
-% as keywords of type \meta{prefix}. More details come soon.
-%    \begin{macrocode}
-\gdef\lst@TrackKeywords#1#2#3#4#5#6{%
-    \lst@false
-    \def\lst@arg{{#1}#4}%
-    \expandafter\expandafter\expandafter\lst@TK@
-        \expandafter\lst@arg#2\relax\relax
-%    \end{macrocode}
-% And nearly the same to undefine all out-dated keywords, which is necessary
-% only if we don't save memory.
-%    \begin{macrocode}
-    \lst@ifsavemem\else
-        \def\lst@arg{{#1}#4#2}%
-        \expandafter\expandafter\expandafter\lst@TK@@
-            \expandafter\lst@arg#3\relax\relax
-    \fi
-%    \end{macrocode}
-% Finally we install the keyword test if keywords changed, in particular if
-% they are defined the first time. Note that |\lst@InstallTestNow| inserts a
-% test only once.
-%    \begin{macrocode}
-    \lst@if \lst@InstallTestNow{#1}#2#4#5#6\fi}
-%    \end{macrocode}
-% Back to the current keywords. Global macros |\lst@g|\meta{id} contain
-% globally defined keywords, whereas |\lst@|\meta{id} conatin the true
-% keywords. This way we can keep track of the keywords: If keywords or
-% \keyname{sensitive} changed, we undefine the old (= globally defined)
-% keywords and define the true ones. The arguments of |\lst@TK@| are
-% \begin{macroargs}
-% \item \meta{prefix}
-% \item |\lst@g|\meta{name}|@sty|
-% \item |\lst@|\meta{id}
-% \item |\lst@g|\meta{id}
-% \end{macroargs}
-% Thanks to \lsthelper{Holger~Arndt}{2004/05/27}{bad \lst@UndefineKeywords
-% \lst@DefineKeywords sequence if keyword crosses orders in two languages}
-% the definition of keywords is now delayed via |\lst@DoDefineKeywords|.
-%    \begin{macrocode}
-\gdef\lst@TK@#1#2#3#4{%
-  \ifx\lst@ifsensitive\lst@ifsensitivedefed
-    \ifx#3#4\else
-      \lst@true
-      \lst@ifsavemem\else
-          \lst@UndefineKeywords{#1}#4#2%
-          \lst@AddTo\lst@DoDefineKeywords{\lst@DefineKeywords{#1}#3#2}%
-      \fi
-    \fi
-  \else
-    \ifx#3\relax\else
-      \lst@true
-      \lst@ifsavemem\else
-          \lst@UndefineKeywords{#1}#4#2%
-          \lst@AddTo\lst@DoDefineKeywords{\lst@DefineKeywords{#1}#3#2}%
-      \fi
-    \fi
-  \fi
-%    \end{macrocode}
-% We don't define and undefine keywords if we try to save memory. But we
-% possibly need to make them upper case, which again wastes some memory.
-%    \begin{macrocode}
-  \lst@ifsavemem \ifx#3\relax\else
-      \lst@ifsensitive\else \lst@MakeMacroUppercase#3\fi
-  \fi \fi
-%    \end{macrocode}
-% Reaching the end of the class list, we end the loop.
-%    \begin{macrocode}
-  \ifx#3\relax
-      \expandafter\@gobblethree
-  \fi
-  \lst@TK@{#1}#2}
-%    \end{macrocode}
-% Here now we undefine the out-dated keywords. While not reaching the end of
-% the global list, we look whether the keyword class |#4#5| is still in use or
-% needs to be undefined. Our arguments are
-% \begin{macroargs}
-% \item \meta{prefix}
-% \item |\lst@g|\meta{name}|@sty|
-% \item |\lst@|\meta{name}|@list|
-% \item |\lst@|\meta{id}
-% \item |\lst@g|\meta{id}
-% \end{macroargs}
-%    \begin{macrocode}
-\gdef\lst@TK@@#1#2#3#4#5{%
-    \ifx#4\relax
-        \expandafter\@gobblefour
-    \else
-        \lst@IfSubstring{#4#5}#3{}{\lst@UndefineKeywords{#1}#5#2}%
-    \fi
-    \lst@TK@@{#1}#2#3}
-%    \end{macrocode}
-% Keywords are up-to-date after \hookname{InitVars}.
-%    \begin{macrocode}
-\lst@AddToHook{InitVars}
-    {\global\let\lst@ifsensitivedefed\lst@ifsensitive}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@PostTrackKeywords}
-% After updating all the keywords, the global keywords and the global list
-% become equivalent to the local ones.
-%    \begin{macrocode}
-\gdef\lst@PostTrackKeywords#1#2#3#4{%
-    \lst@ifsavemem\else
-        \global\let#3#1%
-        \global\let#4#2%
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Classes and families}
-%
-% \begin{lstkey}{classoffset}
-% just stores the argument in a macro.
-%    \begin{macrocode}
-\lst@Key{classoffset}\z@{\def\lst@classoffset{#1}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@InstallFamily}
-% Recall the parameters
-% \begin{macroargs}
-% \item \meta{prefix}
-% \item \meta{name}
-% \item \meta{style name}
-% \item \meta{style init}
-% \item \meta{default style name}
-% \item \meta{working procedure}
-% \item \alternative{l,o} (language or other key)
-% \item \alternative{d,o} (\hookname{DetectKeywords} or \hookname{Output} hook)
-% \end{macroargs}
-% First we define the keys and the style key \meta{style name} if and only if
-% the name is not empty.
-%    \begin{macrocode}
-\gdef\lst@InstallFamily#1#2#3#4#5{%
-    \lst@Key{#2}\relax{\lst@UseFamily{#2}##1\relax\lst@MakeKeywords}%
-    \lst@Key{more#2}\relax
-        {\lst@UseFamily{#2}##1\relax\lst@MakeMoreKeywords}%
-    \lst@Key{delete#2}\relax
-        {\lst@UseFamily{#2}##1\relax\lst@DeleteKeywords}%
-    \ifx\@empty#3\@empty\else
-        \lst@Key{#3}{#4}{\lstKV@OptArg[\@ne]{##1}%
-            {\@tempcnta\lst@classoffset \advance\@tempcnta####1\relax
-             \@namedef{lst@#3\ifnum\@tempcnta=\@ne\else \the\@tempcnta
-                             \fi}{####2}}}%
-    \fi
-    \expandafter\lst@InstallFamily@
-        \csname\@lst @#2@data\expandafter\endcsname
-        \csname\@lst @#5\endcsname {#1}{#2}{#3}}
-%    \end{macrocode}
-% Now we check whether \meta{working procedure} is empty. Accordingly we use
-% \texttt working procedure or \texttt style in the `data' definition.
-% The working procedure is defined right here if necessary.
-%    \begin{macrocode}
-\gdef\lst@InstallFamily@#1#2#3#4#5#6#7#8{%
-    \gdef#1{{#3}{#4}{#5}#2#7}%
-    \long\def\lst@temp##1{#6}%
-    \ifx\lst@temp\@gobble
-        \lst@AddTo#1{s#8}%
-    \else
-        \lst@AddTo#1{w#8}%
-        \global\@namedef{lst@g#4@wp}##1{#6}%
-    \fi}
-%    \end{macrocode}
-% Nothing else is defined here, all the rest is done on demand.
-% \end{macro}
-%
-% \begin{macro}{\lst@UseFamily}
-% We look for the optional class number, provide this member, \ldots
-%    \begin{macrocode}
-\gdef\lst@UseFamily#1{%
-    \def\lst@family{#1}%
-    \@ifnextchar[\lst@UseFamily@{\lst@UseFamily@[\@ne]}}
-\gdef\lst@UseFamily@[#1]{%
-    \@tempcnta\lst@classoffset \advance\@tempcnta#1\relax
-    \lst@ProvideFamily\lst@family
-%    \end{macrocode}
-% \ldots\space and build the control sequences \ldots
-%    \begin{macrocode}
-    \lst@UseFamily@a
-        {\lst@family\ifnum\@tempcnta=\@ne\else \the\@tempcnta \fi}}
-\gdef\lst@UseFamily@a#1{%
-    \expandafter\lst@UseFamily@b
-       \csname\@lst @#1@list\expandafter\endcsname
-       \csname\@lst @#1\expandafter\endcsname
-       \csname\@lst @#1@also\expandafter\endcsname
-       \csname\@lst @g#1\endcsname}
-%    \end{macrocode}
-% \ldots\space required for |\lst@MakeKeywords| and |#6|.
-%    \begin{macrocode}
-\gdef\lst@UseFamily@b#1#2#3#4#5\relax#6{\lstKV@XOptArg[]{#5}#6#1#2#3#4}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@ProvideFamily}
-% provides the member `|\the\@tempcnta|' of the family |#1|. We do nothing if
-% the member already exists. Otherwise we expand the data macro defined above.
-% Note that we don't use the counter if it equals one. Since a bug report by
-% \lsthelper{Kris~Luyten}{2002/08/03}{Undefined control sequence \lst@thestyle}
-% keyword families use the prefix |lstfam| instead of |lst|. The marker
-% |\lstfam@#1|\oarg{number} is defined globally since a bug report by
-% \lsthelper{Edsko~de~Vries}{2003/07/20}{bad keywords with language selections
-% only in optional arguments}.
-%    \begin{macrocode}
-\gdef\lst@ProvideFamily#1{%
-    \@ifundefined{lstfam@#1\ifnum\@tempcnta=\@ne\else\the\@tempcnta\fi}%
-    {\global\@namedef{lstfam@#1\ifnum\@tempcnta=\@ne\else
-                                        \the\@tempcnta\fi}{}%
-     \expandafter\expandafter\expandafter\lst@ProvideFamily@
-         \csname\@lst @#1@data\endcsname
-         {\ifnum\@tempcnta=\@ne\else \the\@tempcnta \fi}}%
-    {}}%
-%    \end{macrocode}
-% Now we have the following arguments
-% \begin{macroargs}
-% \item \meta{prefix}
-% \item \meta{name}
-% \item \meta{style name}
-% \item \meta{default style name}
-% \item \alternative{l,o} (language or other key)
-% \item \alternative{w,s} (working procedure or style)
-% \item \alternative{d,o} (\hookname{DetectKeywords} or \hookname{Output} hook)
-% \item |\ifnum\@tempcnta=\@ne\else \the\@tempcnta \fi|
-% \end{macroargs}
-% We define |\lst@g|\meta{name}\meta{number}|@sty| to call either
-% |\lst@g|\meta{name}|@wp| with the number as argument or
-% |\lst@|\meta{style name}\meta{number} where the number belongs to the control
-% sequence.
-%    \begin{macrocode}
-\gdef\lst@ProvideFamily@#1#2#3#4#5#6#7#8{%
-    \expandafter\xdef\csname\@lst @g#2#8@sty\endcsname
-    {\if #6w%
-         \expandafter\noexpand\csname\@lst @g#2@wp\endcsname{#8}%
-     \else
-         \expandafter\noexpand\csname\@lst @#3#8\endcsname
-     \fi}%
-%    \end{macrocode}
-% We ensure the existence of the style macro. This is done in the
-% \hookname{Init} hook by assigning the default style if necessary.
-%    \begin{macrocode}
-    \ifx\@empty#3\@empty\else
-        \edef\lst@temp{\noexpand\lst@AddToHook{Init}{%
-            \noexpand\lst@ProvideStyle\expandafter\noexpand
-                \csname\@lst @#3#8\endcsname\noexpand#4}}%
-        \lst@temp
-    \fi
-%    \end{macrocode}
-% We call a submacro to do the rest. It requires some control sequences.
-%    \begin{macrocode}
-    \expandafter\lst@ProvideFamily@@
-         \csname\@lst @#2#8@list\expandafter\endcsname
-         \csname\@lst @#2#8\expandafter\endcsname
-         \csname\@lst @#2#8@also\expandafter\endcsname
-         \csname\@lst @g#2#8@list\expandafter\endcsname
-         \csname\@lst @g#2#8\expandafter\endcsname
-         \csname\@lst @g#2#8@sty\expandafter\endcsname
-         {#1}#5#6#7}
-%    \end{macrocode}
-% Now we have (except that \meta{number} is possibly always missing)
-% \begin{macroargs}
-% \item |\lst@|\meta{name}\meta{number}|@list|
-% \item |\lst@|\meta{name}\meta{number}
-% \item |\lst@|\meta{name}\meta{number}|@also|
-% \item |\lst@g|\meta{name}\meta{number}|@list|
-% \item |\lst@g|\meta{name}\meta{number}
-% \item |\lst@g|\meta{name}\meta{number}|@sty|
-% \item \meta{prefix}
-% \item \alternative{l,o} (language or other key)
-% \item \alternative{w,s} (working procedure or style)
-% \item \alternative{d,o} (\hookname{DetectKeywords} or \hookname{Output} hook)
-% \end{macroargs}
-% Note that |#9| and `|#10|' are read by |\lst@InstallTest|. We initialize all
-% required `variables' (at \hookname{SetLanguage}) and install the test (which
-% definition is in fact also delayed).
-%    \begin{macrocode}
-\gdef\lst@ProvideFamily@@#1#2#3#4#5#6#7#8{%
-    \gdef#1{#2#5}\global\let#2\@empty \global\let#3\@empty % init
-    \gdef#4{#2#5}\global\let#5\@empty % init
-    \if #8l\relax
-        \lst@AddToHook{SetLanguage}{\def#1{#2#5}\let#2\@empty}%
-    \fi
-    \lst@InstallTest{#7}#1#2#4#5#6}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@InstallKeywords}
-% Now we take advance of the optional argument construction above. Thus, we
-% just insert |[\@ne]| as \meta{number} in the definitions of the keys.
-%    \begin{macrocode}
-\gdef\lst@InstallKeywords#1#2#3#4#5{%
-    \lst@Key{#2}\relax
-        {\lst@UseFamily{#2}[\@ne]##1\relax\lst@MakeKeywords}%
-    \lst@Key{more#2}\relax
-        {\lst@UseFamily{#2}[\@ne]##1\relax\lst@MakeMoreKeywords}%
-    \lst@Key{delete#2}\relax
-        {\lst@UseFamily{#2}[\@ne]##1\relax\lst@DeleteKeywords}%
-    \ifx\@empty#3\@empty\else
-        \lst@Key{#3}{#4}{\@namedef{lst@#3}{##1}}%
-    \fi
-    \expandafter\lst@InstallFamily@
-        \csname\@lst @#2@data\expandafter\endcsname
-        \csname\@lst @#5\endcsname {#1}{#2}{#3}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@ProvideStyle}
-% If the style macro |#1| is not defined, it becomes equivalent to |#2|.
-%    \begin{macrocode}
-\gdef\lst@ProvideStyle#1#2{%
-    \ifx#1\@undefined \let#1#2%
-    \else\ifx#1\relax \let#1#2\fi\fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% Finally we define |\lst@MakeKeywords|, \ldots, |\lst@DeleteKeywords|.
-% We begin with two helper.
-%
-% \begin{macro}{\lst@BuildClassList}
-% After |#1| follows a comma separated list of keyword classes terminated by
-% |,\relax,|, e.g.~|keywords2,emph1,\relax,|. For each \meta{item} in this
-% list we \emph{append} the two macros |\lst@|\meta{item}|\lst@g|\meta{item}
-% to |#1|.
-%    \begin{macrocode}
-\gdef\lst@BuildClassList#1#2,{%
-    \ifx\relax#2\@empty\else
-        \ifx\@empty#2\@empty\else
-            \lst@lExtend#1{\csname\@lst @#2\expandafter\endcsname
-                           \csname\@lst @g#2\endcsname}%
-        \fi
-        \expandafter\lst@BuildClassList\expandafter#1
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@DeleteClassesIn}
-% deletes pairs of tokens, namely the arguments |#2#3| to the submacro.
-%    \begin{macrocode}
-\gdef\lst@DeleteClassesIn#1#2{%
-    \expandafter\lst@DCI@\expandafter#1#2\relax\relax}
-\gdef\lst@DCI@#1#2#3{%
-    \ifx#2\relax
-        \expandafter\@gobbletwo
-    \else
-%    \end{macrocode}
-% If we haven't reached the end of the class list, we define a temporary macro
-% which removes all appearances.
-%    \begin{macrocode}
-        \def\lst@temp##1#2#3##2{%
-            \lst@lAddTo#1{##1}%
-            \ifx ##2\relax\else
-                \expandafter\lst@temp
-            \fi ##2}%
-        \let\@tempa#1\let#1\@empty
-        \expandafter\lst@temp\@tempa#2#3\relax
-    \fi
-    \lst@DCI@#1}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@MakeKeywords}
-% We empty some macros and make use of |\lst@MakeMoreKeywords|.
-% Note that this and the next two definitions have the following arguments:
-% \begin{macroargs}
-% \item class list (in brackets)
-% \item keyword list
-% \item |\lst@|\meta{name}|@list|
-% \item |\lst@|\meta{name}
-% \item |\lst@|\meta{name}|@also|
-% \item |\lst@g|\meta{name}
-% \end{macroargs}
-%    \begin{macrocode}
-\gdef\lst@MakeKeywords[#1]#2#3#4#5#6{%
-    \def#3{#4#6}\let#4\@empty \let#5\@empty
-    \lst@MakeMoreKeywords[#1]{#2}#3#4#5#6}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@MakeMoreKeywords}
-% We append classes and keywords.
-%    \begin{macrocode}
-\gdef\lst@MakeMoreKeywords[#1]#2#3#4#5#6{%
-    \lst@BuildClassList#3#1,\relax,%
-    \lst@DefOther\lst@temp{,#2}\lst@lExtend#4\lst@temp}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@DeleteKeywords}
-% We convert the keyword arguments via |\lst@MakeKeywords| and remove the
-% classes and keywords.
-%    \begin{macrocode}
-\gdef\lst@DeleteKeywords[#1]#2#3#4#5#6{%
-    \lst@MakeKeywords[#1]{#2}\@tempa\@tempb#5#6%
-    \lst@DeleteClassesIn#3\@tempa
-    \lst@DeleteKeysIn#4\@tempb}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Main families and classes}
-%
-%
-% \paragraph{Keywords}
-%
-% \begin{lstkey}{keywords}
-% Defining the keyword family gets very, very easy.
-%    \begin{macrocode}
-\lst@InstallFamily k{keywords}{keywordstyle}\bfseries{keywordstyle}{}ld
-%    \end{macrocode}
-% The following macro sets a keywordstyle, which \ldots
-%    \begin{macrocode}
-\gdef\lst@DefKeywordstyle#1#2\@nil@{%
-   \@namedef{lst@keywordstyle\ifnum\@tempcnta=\@ne\else\the\@tempcnta
-                             \fi}{#1#2}}%
-%    \end{macrocode}
-% \ldots\space is put together here. If we detect a star after the class
-% number, we insert code to make the keyword uppercase.
-%    \begin{macrocode}
-\lst@Key{keywordstyle}{\bfseries}{\lstKV@OptArg[\@ne]{#1}%
-  {\@tempcnta\lst@classoffset \advance\@tempcnta##1\relax
-   \@ifstar{\lst@DefKeywordstyle{\uppercase\expandafter{%
-                                 \expandafter\lst@token
-                                 \expandafter{\the\lst@token}}}}%
-           {\lst@DefKeywordstyle{}}##2\@nil@}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{ndkeywords}
-% Second order keywords use the same trick as |\lst@InstallKeywords|.
-%    \begin{macrocode}
-\lst@Key{ndkeywords}\relax
-    {\lst@UseFamily{keywords}[\tw@]#1\relax\lst@MakeKeywords}%
-\lst@Key{morendkeywords}\relax
-    {\lst@UseFamily{keywords}[\tw@]#1\relax\lst@MakeMoreKeywords}%
-\lst@Key{deletendkeywords}\relax
-    {\lst@UseFamily{keywords}[\tw@]#1\relax\lst@DeleteKeywords}%
-\lst@Key{ndkeywordstyle}\relax{\@namedef{lst@keywordstyle2}{#1}}%
-%    \end{macrocode}
-% \lsthelper{Dr.~Peter~Leibner}{1999/11/05}{undefined \lst@UseKeywords,
-% Illegal parameter number (##1)} reported two bugs: |\lst@UseKeywords| and
-% |##1| became |\lst@UseFamily| and |#1|.
-% \end{lstkey}
-%
-% \begin{lstkey}{keywordsprefix}
-% is implemented experimentally. The one and only prefix indicates its
-% presence by making |\lst@prefixkeyword| empty. We can catch this information
-% in the \keyname{Output} hook.
-%    \begin{macrocode}
-\lst@Key{keywordsprefix}\relax{\lst@DefActive\lst@keywordsprefix{#1}}
-\global\let\lst@keywordsprefix\@empty
-\lst@AddToHook{SelectCharTable}
-    {\ifx\lst@keywordsprefix\@empty\else
-         \expandafter\lst@CArg\lst@keywordsprefix\relax
-             \lst@CDef{}%
-                      {\lst@ifletter\else
-                           \global\let\lst@prefixkeyword\@empty
-                       \fi}%
-                      {}%
-     \fi}
-\lst@AddToHook{Init}{\global\let\lst@prefixkeyword\relax}
-\lst@AddToHook{Output}
-    {\ifx\lst@prefixkeyword\@empty
-         \let\lst@thestyle\lst@gkeywords@sty
-         \global\let\lst@prefixkeyword\relax
-     \fi}%
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{otherkeywords}
-% Thanks to \lsthelper{Bradford~Chamberlain}{2001/07/07}{otherkeywords={@,@^}
-% does not work} we now iterate down the list of `other keywords' and make each
-% active---instead of making the whole argument active. We append the active
-% token sequence to |\lst@otherkeywords| to define each `other' keyword.
-%    \begin{macrocode}
-\lst@Key{otherkeywords}{}{%
-    \let\lst@otherkeywords\@empty
-    \lst@for{#1}\do{%
-      \lst@MakeActive{##1}%
-      \lst@lExtend\lst@otherkeywords{%
-          \expandafter\lst@CArg\lst@temp\relax\lst@CDef
-              {}\lst@PrintOtherKeyword\@empty}}}
-\lst@AddToHook{SelectCharTable}{\lst@otherkeywords}
-%    \end{macrocode}
-% |\lst@PrintOtherkeyword| has been changed to |\lst@PrintOtherKeyword| after a
-% bug report by \lsthelper{Peter~Bartke}{2001/11/06}{undefined control sequence
-% \lst@PrintOtherkeyword}.
-% \end{lstkey}
-%
-% \begin{macro}{\lst@PrintOtherKeyword}
-% print preceding characters, prepare the output and typeset the argument in
-% keyword style. \lsthelper{James~Willans}{2004/07/23}{problem: otherkeywords}
-% reported problems when the output routine is invoked within |\begingroup| and
-% |\endgroup|. Now the definition is restructured.
-%    \begin{macrocode}
-\gdef\lst@PrintOtherKeyword#1\@empty{%
-    \lst@XPrintToken
-    \begingroup
-      \lst@modetrue \lsthk@TextStyle
-      \let\lst@ProcessDigit\lst@ProcessLetter
-      \let\lst@ProcessOther\lst@ProcessLetter
-      \lst@lettertrue
-      #1%
-	  \lst@SaveToken
-    \endgroup
-	\lst@RestoreToken
-	\global\let\lst@savedcurrstyle\lst@currstyle
-	\let\lst@currstyle\lst@gkeywords@sty
-    \lst@Output
-	\let\lst@currstyle\lst@savedcurrstyle}
-%    \end{macrocode}
-% \begin{TODO}
-% Which part of \hookname{TextStyle} hook is required? Is it required anymore,
-% i.e.after the restruction? Need to move it elsewhere?
-% \end{TODO}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \paragraph{The emphasize family}
-%
-% \begin{aspect}{emph}
-% is just one macro call here.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[keywords]{emph}
-\lst@InstallFamily e{emph}{emphstyle}{}{emphstyle}{}od
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \paragraph{\TeX\ control sequences}
-%
-% \begin{aspect}{tex}
-% Here we check the last `other' processed token.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[keywords]{tex}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@InstallFamily {cs}{texcs}{texcsstyle}\relax{keywordstyle}
-    {\ifx\lst@lastother\lstum@backslash
-         \expandafter\let\expandafter\lst@thestyle
-                         \csname lst@texcsstyle#1\endcsname
-     \fi}
-    ld
-%    \end{macrocode}
-% The style-key checks for the optional star (which must be in front of
-% the optional class argument).
-%    \begin{macrocode}
-\lst@Key{texcsstyle}\relax
-  {\@ifstar{\lst@true\lst@DefTexcsstyle}%
-           {\lst@false\lst@DefTexcsstyle}#1\@nil@}
-\gdef\lst@DefTexcsstyle#1\@nil@{%
-    \let\lst@iftexcsincludebs\lst@if
-    \lstKV@OptArg[\@ne]{#1}%
-    {\@tempcnta\lst@classoffset \advance\@tempcnta##1\relax
-     \@namedef{lst@texcsstyle\ifnum\@tempcnta=\@ne\else
-                                   \the\@tempcnta \fi}{##2}}}%
-\global\let\lst@iftexcsincludebs\iffalse
-%    \end{macrocode}
-% To make the backslash belong to the control sequence, it is merged with
-% the following token. This option was suggested by \lsthelper{Morten~H\o gholm}
-% {2004/07/16}{defining new (colored) texcs}.
-% \lsthelper{Christian~Schneider}{-}{2006/09/08} pointed out that the original
-% implementation was broken when the identifier was preceded by an ``other''
-% character.  To fix this (and other bugs), we first output whatever is in the
-% current token before merging.
-%    \begin{macrocode}
-\let\lst@iftexcsincludebs\iffalse
-\lst@AddToHook{SelectCharTable}
-{\lst@iftexcsincludebs \ifx\@empty\lst@texcs\else
-     \lst@DefSaveDef{`\\}\lsts@texcsbs
-      {\lst@ifletter
-           \lst@Output
-       \else
-           \lst@OutputOther
-       \fi
-       \lst@Merge\lsts@texcsbs}%
- \fi \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \paragraph{Compiler directives}
-%
-% \begin{aspect}{directives}
-% \begin{lstkey}{directives}
-% First some usual stuff.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[keywords]{directives}
-%    \end{macrocode}
-% The initialization of |\lst@directives| has been added after a bug report
-% from \lsthelper{Kris~Luyten}{2002/07/30}{Undefined control sequence
-% \lst@thestyle caused by undefined \lst@directives after loading C}.
-%    \begin{macrocode}
-\lst@NewMode\lst@CDmode
-\lst@AddToHook{EOL}{\ifnum\lst@mode=\lst@CDmode \lst@LeaveMode \fi}
-\lst@InstallKeywords{d}{directives}{directivestyle}\relax{keywordstyle}
-    {\ifnum\lst@mode=\lst@CDmode
-         \let\lst@thestyle\lst@directivestyle
-     \fi}
-    ld
-\global\let\lst@directives\@empty % init
-%    \end{macrocode}
-% Now we define a new delimiter for directives: We enter `directive mode'
-% only in the first column.
-%    \begin{macrocode}
-\lst@AddTo\lst@delimtypes{,directive}
-\gdef\lst@Delim@directive#1\@empty#2#3#4{%
-    \lst@CArg #1\relax\lst@DefDelimB
-        {\lst@CalcColumn}%
-        {}%
-        {\ifnum\@tempcnta=\z@
-             \def\lst@bnext{#2\lst@CDmode{#4\lst@Lmodetrue}%
-			                \let\lst@currstyle\lst@directivestyle}%
-		 \fi
-		 \@gobblethree}%
-        #2\lst@CDmode{#4\lst@Lmodetrue}}
-%    \end{macrocode}
-% We introduce a new string type (thanks to \lsthelper{R.~Isernhagen}
-% {1999/11/12}{float isn't keyword in #include <float>}), which \ldots
-%    \begin{macrocode}
-\lst@AddTo\lst@stringtypes{,directive}
-\gdef\lst@StringDM@directive#1#2#3\@empty{%
-    \lst@CArg #2\relax\lst@CDef
-        {}%
-%    \end{macrocode}
-% \ldots\space is active only in |\lst@CDmode|:
-%    \begin{macrocode}
-        {\let\lst@bnext\lst@CArgEmpty
-         \ifnum\lst@mode=\lst@CDmode
-             \def\lst@bnext{\lst@BeginString{#1}}%
-         \fi
-         \lst@bnext}%
-        \@empty
-    \lst@CArg #3\relax\lst@CDef
-        {}%
-        {\let\lst@enext\lst@CArgEmpty
-         \ifnum #1=\lst@mode
-             \let\lst@bnext\lst@EndString
-         \fi
-         \lst@bnext}%
-        \@empty}
-%    \end{macrocode}
-% \end{lstkey}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsection{Keyword comments}
-%
-% \begin{aspect}{keywordcomments}
-% includes both comment types and is possibly split into this and |dkcs|.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[keywords,comments]{keywordcomments}
-%    \end{macrocode}
-%
-% \begin{macro}{\lst@BeginKC}
-% \begin{macro}{\lst@BeginKCS}
-% Starting a keyword comment is easy, but: (1) The submacros are called
-% outside of two group levels, and \ldots
-%    \begin{macrocode}
-\lst@NewMode\lst@KCmode \lst@NewMode\lst@KCSmode
-\gdef\lst@BeginKC{\aftergroup\aftergroup\aftergroup\lst@BeginKC@}%
-\gdef\lst@BeginKC@{%
-    \lst@ResetToken
-    \lst@BeginComment\lst@KCmode{{\lst@commentstyle}\lst@modetrue}%
-                     \@empty}%
-\gdef\lst@BeginKCS{\aftergroup\aftergroup\aftergroup\lst@BeginKCS@}%
-\gdef\lst@BeginKCS@{%
-    \lst@ResetToken
-    \lst@BeginComment\lst@KCSmode{{\lst@commentstyle}\lst@modetrue}%
-                     \@empty}%
-%    \end{macrocode}
-% (2) we must ensure that the comment starts after printing the comment
-% delimiter since it could be a keyword. We assign |\lst@BeginKC|[|S|] to
-% |\lst@KCpost|, which is executed and reset in \hookname{PostOutput}.
-%    \begin{macrocode}
-\lst@AddToHook{PostOutput}{\lst@KCpost \global\let\lst@KCpost\@empty}
-\global\let\lst@KCpost\@empty % init
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@EndKC}
-% leaves the comment mode before the (temporaryly saved) comment delimiter is
-% printed.
-%    \begin{macrocode}
-\gdef\lst@EndKC{\lst@SaveToken \lst@LeaveMode \lst@RestoreToken
-    \let\lst@thestyle\lst@identifierstyle \lsthk@Output}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{keywordcomment}
-% The delimiters must be identical here, thus we use |\lst@KCmatch|. Note the
-% last argument |o| to |\lst@InstallKeywords|: The working test is installed
-% in the \hookname{Output} hook and not in \hookname{DetectKeywords}.
-% Otherwise we couldn't detect the ending delimiter since keyword detection is
-% done if and only if mode changes are allowed.
-%    \begin{macrocode}
-\lst@InstallKeywords{kc}{keywordcomment}{}\relax{}
-    {\ifnum\lst@mode=\lst@KCmode
-         \edef\lst@temp{\the\lst@token}%
-         \ifx\lst@temp\lst@KCmatch
-             \lst@EndKC
-         \fi
-     \else
-         \lst@ifmode\else
-             \xdef\lst@KCmatch{\the\lst@token}%
-             \global\let\lst@KCpost\lst@BeginKC
-         \fi
-     \fi}
-    lo
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{keywordcommentsemicolon}
-% The key simply stores the keywords. After a bug report by \lsthelper
-% {Norbert~Eisinger}{2002/11/26}{keywordcommentsemicolon active after
-% language change} the initialization in \hookname{SetLanguage} has been
-% added.
-%    \begin{macrocode}
-\lst@Key{keywordcommentsemicolon}{}{\lstKV@ThreeArg{#1}%
-    {\def\lst@KCAkeywordsB{##1}%
-     \def\lst@KCAkeywordsE{##2}%
-     \def\lst@KCBkeywordsB{##3}%
-     \def\lst@KCkeywords{##1##2##3}}}
-\lst@AddToHook{SetLanguage}{%
-    \let\lst@KCAkeywordsB\@empty \let\lst@KCAkeywordsE\@empty
-    \let\lst@KCBkeywordsB\@empty \let\lst@KCkeywords\@empty}
-%    \end{macrocode}
-% We define an appropriate semicolon if this keyword comment type is defined.
-% Appropriate means that we leave any keyword comment mode if active.
-% \lsthelper{Oldrich~Jedlicka}{2001/12/12}{keywordcomment(semicolon) fails}
-% reported a bug and provided the fix, the two |\@empty|s.
-%    \begin{macrocode}
-\lst@AddToHook{SelectCharTable}
-    {\ifx\lst@KCkeywords\@empty\else
-        \lst@DefSaveDef{`\;}\lsts@EKC
-            {\lst@XPrintToken
-             \ifnum\lst@mode=\lst@KCmode \lst@EndComment\@empty \else
-             \ifnum\lst@mode=\lst@KCSmode \lst@EndComment\@empty
-             \fi \fi
-             \lsts@EKC}%
-     \fi}
-%    \end{macrocode}
-% The `working identifier' macros enter respectively leave comment mode.
-%    \begin{macrocode}
-\gdef\lst@KCAWorkB{%
-    \lst@ifmode\else \global\let\lst@KCpost\lst@BeginKC \fi}
-\gdef\lst@KCBWorkB{%
-    \lst@ifmode\else \global\let\lst@KCpost\lst@BeginKCS \fi}
-\gdef\lst@KCAWorkE{\ifnum\lst@mode=\lst@KCmode \lst@EndKC \fi}
-%    \end{macrocode}
-% Now we install the tests and initialize the given macros.
-%    \begin{macrocode}
-\lst@ProvideFamily@@
-    \lst@KCAkeywordsB@list\lst@KCAkeywordsB \lst@KC@also
-    \lst@gKCAkeywordsB@list\lst@gKCAkeywordsB \lst@KCAWorkB
-    {kcb}owo % prefix, other key, working procedure, Output hook
-\lst@ProvideFamily@@
-    \lst@KCAkeywordsE@list\lst@KCAkeywordsE \lst@KC@also
-    \lst@gKCAkeywordsE@list\lst@gKCAkeywordsE \lst@KCAWorkE
-    {kce}owo
-\lst@ProvideFamily@@
-    \lst@KCBkeywordsB@list\lst@KCBkeywordsB \lst@KC@also
-    \lst@gKCBkeywordsB@list\lst@gKCBkeywordsB \lst@KCBWorkB
-    {kcs}owo
-%    \end{macrocode}
-% \end{lstkey}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsection{Export of identifiers}
-%
-% \begin{aspect}{index}
-% \begin{macro}{\lstindexmacro}
-% One more `keyword' class.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[keywords]{index}
-\lst@InstallFamily w{index}{indexstyle}\lstindexmacro{indexstyle}
-    {\csname\@lst @indexstyle#1\expandafter\endcsname
-         \expandafter{\the\lst@token}}
-    od
-\lst@UserCommand\lstindexmacro#1{\index{{\ttfamily#1}}}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{macro}
-% \end{aspect}
-%
-% \begin{aspect}{procnames}
-% \begin{lstkey}{procnamestyle}
-% \begin{lstkey}{procnamekeys}
-% \begin{lstkey}{indexprocnames}
-% The `idea' here is the usage of a global |\lst@ifprocname|, indicating a
-% preceding `procedure keyword'. All the other is known stuff.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[keywords]{procnames}
-\gdef\lst@procnametrue{\global\let\lst@ifprocname\iftrue}
-\gdef\lst@procnamefalse{\global\let\lst@ifprocname\iffalse}
-\lst@AddToHook{Init}{\lst@procnamefalse}
-\lst@AddToHook{DetectKeywords}
-    {\lst@ifprocname
-         \let\lst@thestyle\lst@procnamestyle
-         \lst@ifindexproc \csname\@lst @gindex@sty\endcsname \fi
-         \lst@procnamefalse
-     \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@Key{procnamestyle}{}{\def\lst@procnamestyle{#1}}
-\lst@Key{indexprocnames}{false}[t]{\lstKV@SetIf{#1}\lst@ifindexproc}
-\lst@AddToHook{Init}{\lst@ifindexproc \lst@indexproc \fi}
-\gdef\lst@indexproc{%
-    \@ifundefined{lst@indexstyle1}%
-        {\@namedef{lst@indexstyle1}##1{}}%
-        {}}
-%    \end{macrocode}
-% The default definition of |\lst@indexstyle| above has been moved outside the
-% hook after a bug report from \lsthelper{Ulrich~G.~Wortmann}{2002/01/22}
-% {procnames doesn't work}.
-%    \begin{macrocode}
-\lst@InstallKeywords w{procnamekeys}{}\relax{}
-    {\global\let\lst@PNpost\lst@procnametrue}
-    od
-\lst@AddToHook{PostOutput}{\lst@PNpost\global\let\lst@PNpost\@empty}
-\global\let\lst@PNpost\@empty % init
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-% \end{aspect}
-%
-%
-% \section{More aspects and keys}
-%
-% \begin{lstkey}{basicstyle}
-% \begin{lstkey}{inputencoding}
-% There is no better place to define these keys, I think.
-%    \begin{macrocode}
-%<*kernel>
-\lst@Key{basicstyle}\relax{\def\lst@basicstyle{#1}}
-\lst@Key{inputencoding}\relax{\def\lst@inputenc{#1}}
-\lst@AddToHook{Init}
-    {\lst@basicstyle
-     \ifx\lst@inputenc\@empty\else
-         \@ifundefined{inputencoding}{}%
-            {\inputencoding\lst@inputenc}%
-     \fi}
-\lst@AddToHookExe{EmptyStyle}
-    {\let\lst@basicstyle\@empty
-     \let\lst@inputenc\@empty}
-\lst@Key{multicols}{}{\@tempcnta=0#1\relax\def\lst@multicols{#1}}
-%</kernel>
-%    \end{macrocode}
-% Michael Niedermair asked for a key like \keyname{inputencoding}.
-% \end{lstkey}
-% \end{lstkey}
-%
-%
-% \subsection{Styles and languages}
-%
-% \begin{aspect}{style}
-% We begin with style definition and selection.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{style}
-%    \end{macrocode}
-%
-% \begin{macro}{\lststylefiles}
-% This macro is defined if and only if it's undefined yet.
-%    \begin{macrocode}
-\@ifundefined{lststylefiles}
-    {\lst@UserCommand\lststylefiles{lststy0.sty}}{}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstdefinestyle}
-% \begin{macro}{\lst@definestyle}
-% \begin{macro}{\lst@DefStyle}
-% are defined in terms of |\lst@DefStyle|, which is defined via
-% |\lst@DefDriver|.
-%    \begin{macrocode}
-\lst@UserCommand\lstdefinestyle{\lst@DefStyle\iftrue}
-\lst@UserCommand\lst@definestyle{\lst@DefStyle\iffalse}
-\gdef\lst@DefStyle{\lst@DefDriver{style}{sty}\lstset}
-%    \end{macrocode}
-% The `empty' style calls the initial empty hook \hookname{EmptyStyle}.
-%    \begin{macrocode}
-\global\@namedef{lststy@$}{\lsthk@EmptyStyle}
-\lst@AddToHook{EmptyStyle}{}% init
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{lstkey}{style}
-% is an application of |\lst@LAS|. We just specify the hook and an empty
-% argument as `pre' and `post' code.
-%    \begin{macrocode}
-\lst@Key{style}\relax{%
-    \lst@LAS{style}{sty}{[]{#1}}\lst@NoAlias\lststylefiles
-        \lsthk@SetStyle
-        {}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{SetStyle}{}% init
-%    \end{macrocode}
-% \end{lstkey}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-% \begin{aspect}{language}
-% Now we deal with commands used in defining and selecting programming
-% languages, in particular with aliases.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{language}
-%    \end{macrocode}
-%
-% \begin{macro}{\lstlanguagefiles}
-% This macro is defined if and only if it's undefined yet.
-%    \begin{macrocode}
-\@ifundefined{lstdriverfiles}
-    {\lst@UserCommand\lstlanguagefiles{lstlang0.sty}}{}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstdefinelanguage}
-% \begin{macro}{\lst@definelanguage}
-% \begin{macro}{\lst@DefLang}
-% are defined in terms of |\lst@DefLang|, which is defined via
-% |\lst@DefDriver|.
-%    \begin{macrocode}
-\lst@UserCommand\lstdefinelanguage{\lst@DefLang\iftrue}
-\lst@UserCommand\lst@definelanguage{\lst@DefLang\iffalse}
-\gdef\lst@DefLang{\lst@DefDriver{language}{lang}\lstset}
-%    \end{macrocode}
-% Now we can provide the `empty' language.
-%    \begin{macrocode}
-\lstdefinelanguage{}{}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{lstkey}{language}
-% \begin{lstkey}{alsolanguage}
-% is mainly an application of |\lst@LAS|.
-%    \begin{macrocode}
-\lst@Key{language}\relax{\lstKV@OptArg[]{#1}%
-    {\lst@LAS{language}{lang}{[##1]{##2}}\lst@FindAlias\lstlanguagefiles
-         \lsthk@SetLanguage
-         {\lst@FindAlias[##1]{##2}%
-          \let\lst@language\lst@malias
-          \let\lst@dialect\lst@oalias}}}
-%    \end{macrocode}
-% Ditto, we simply don't execute |\lsthk@SetLanguage|.
-%    \begin{macrocode}
-\lst@Key{alsolanguage}\relax{\lstKV@OptArg[]{#1}%
-    {\lst@LAS{language}{lang}{[##1]{##2}}\lst@FindAlias\lstlanguagefiles
-         {}%
-         {\lst@FindAlias[##1]{##2}%
-          \let\lst@language\lst@malias
-          \let\lst@dialect\lst@oalias}}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{SetLanguage}{}% init
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\lstalias}
-% Now we concentrate on aliases and default dialects.
-% |\lsta@|\meta{language}|$|\meta{dialect} and |\lsta@|\meta{language} contain
-% the aliases of a particular dialect respectively a complete language.
-% We'll use a |$|-character to separate a language name from its dialect.
-% Thanks to \lsthelper{Walter~E.~Brown}{2004/02/25}{\lstalias
-% (+\lstdefinelanguage) fails} for reporting a problem with the argument
-% delimiter `[' in a previous definition of |\lstalias@|.
-%    \begin{macrocode}
-\lst@UserCommand\lstalias{\@ifnextchar[\lstalias@\lstalias@@}
-\gdef\lstalias@[#1]#2{\lstalias@b #2$#1}
-\gdef\lstalias@b#1[#2]#3{\lst@NormedNameDef{lsta@#1}{#3$#2}}
-\gdef\lstalias@@#1#2{\lst@NormedNameDef{lsta@#1}{#2}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{defaultdialect}
-% We simply store the dialect.
-%    \begin{macrocode}
-\lst@Key{defaultdialect}\relax
-    {\lstKV@OptArg[]{#1}{\lst@NormedNameDef{lstdd@##2}{##1}}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@FindAlias}
-% Now we have to find a language. First we test for a complete language alias,
-% then we set the default dialect if necessary.
-%    \begin{macrocode}
-\gdef\lst@FindAlias[#1]#2{%
-    \lst@NormedDef\lst@oalias{#1}%
-    \lst@NormedDef\lst@malias{#2}%
-    \@ifundefined{lsta@\lst@malias}{}%
-        {\edef\lst@malias{\csname\@lst a@\lst@malias\endcsname}}%
-%    \end{macrocode}
-%    \begin{macrocode}
-    \ifx\@empty\lst@oalias \@ifundefined{lstdd@\lst@malias}{}%
-        {\edef\lst@oalias{\csname\@lst dd@\lst@malias\endcsname}}%
-    \fi
-%    \end{macrocode}
-% Now we are ready for an alias of a single dialect.
-%    \begin{macrocode}
-    \edef\lst@temp{\lst@malias $\lst@oalias}%
-    \@ifundefined{lsta@\lst@temp}{}%
-        {\edef\lst@temp{\csname\@lst a@\lst@temp\endcsname}}%
-%    \end{macrocode}
-% Finally we again set the default dialect---for the case of a dialect alias.
-%    \begin{macrocode}
-    \expandafter\lst@FindAlias@\lst@temp $}
-\gdef\lst@FindAlias@#1$#2${%
-    \def\lst@malias{#1}\def\lst@oalias{#2}%
-    \ifx\@empty\lst@oalias \@ifundefined{lstdd@\lst@malias}{}%
-        {\edef\lst@oalias{\csname\@lst dd@\lst@malias\endcsname}}%
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@RequireLanguages}
-% This definition will be equivalent to |\lstloadlanguages|. We requested the
-% given list of languages and load additionally required aspects.
-%    \begin{macrocode}
-\gdef\lst@RequireLanguages#1{%
-    \lst@Require{language}{lang}{#1}\lst@FindAlias\lstlanguagefiles
-    \ifx\lst@loadaspects\@empty\else
-        \lst@RequireAspects\lst@loadaspects
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstloadlanguages}
-% is the same as |\lst@RequireLanguages|.
-%    \begin{macrocode}
-\global\let\lstloadlanguages\lst@RequireLanguages
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsection{Format definitions*}
-%
-% \begin{aspect}{formats}
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{formats}
-%    \end{macrocode}
-%
-% \begin{macro}{\lstformatfiles}
-% This macro is defined if and only if it's undefined yet.
-%    \begin{macrocode}
-\@ifundefined{lstformatfiles}
-    {\lst@UserCommand\lstformatfiles{lstfmt0.sty}}{}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstdefineformat}
-% \begin{macro}{\lst@defineformat}
-% \begin{macro}{\lst@DefFormat}
-% are defined in terms of |\lst@DefFormat|, which is defined via
-% |\lst@DefDriver|.
-%    \begin{macrocode}
-\lst@UserCommand\lstdefineformat{\lst@DefFormat\iftrue}
-\lst@UserCommand\lst@defineformat{\lst@DefFormat\iffalse}
-\gdef\lst@DefFormat{\lst@DefDriver{format}{fmt}\lst@UseFormat}
-%    \end{macrocode}
-% We provide the `empty' format.
-%    \begin{macrocode}
-\lstdefineformat{}{}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{lstkey}{format}
-% is an application of |\lst@LAS|. We just specify the hook as `pre' and an
-% empty argument as  `post' code.
-%    \begin{macrocode}
-\lst@Key{format}\relax{%
-    \lst@LAS{format}{fmt}{[]{#1}}\lst@NoAlias\lstformatfiles
-        \lsthk@SetFormat
-        {}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{SetFormat}{\let\lst@fmtformat\@empty}% init
-%    \end{macrocode}
-% \end{lstkey}
-%
-%
-% \paragraph{Helpers}
-% Our goal is to define the yet unkown |\lst@UseFormat|. This definition
-% will parse the user supplied format. We start with some general macros.
-%
-% \begin{macro}{\lst@fmtSplit}
-% splits the content of the macro |#1| at |#2| in the preceding characters
-% |\lst@fmta| and the following ones |\lst@fmtb|. |\lst@if| is false if and
-% only if |#1| doesn't contain |#2|.
-%    \begin{macrocode}
-\gdef\lst@fmtSplit#1#2{%
-    \def\lst@temp##1#2##2\relax##3{%
-        \ifnum##3=\z@
-            \ifx\@empty##2\@empty
-                \lst@false
-                \let\lst@fmta#1%
-                \let\lst@fmtb\@empty
-            \else
-                \expandafter\lst@temp#1\relax\@ne
-            \fi
-        \else
-            \def\lst@fmta{##1}\def\lst@fmtb{##2}%
-        \fi}%
-    \lst@true
-    \expandafter\lst@temp#1#2\relax\z@}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@IfNextCharWhitespace}
-% is defined in terms of |\lst@IfSubstring|.
-%    \begin{macrocode}
-\gdef\lst@IfNextCharWhitespace#1#2#3{%
-    \lst@IfSubstring#3\lst@whitespaces{#1}{#2}#3}
-%    \end{macrocode}
-% And here come all white space characters.
-%    \begin{macrocode}
-\begingroup
-\catcode`\^^I=12\catcode`\^^J=12\catcode`\^^M=12\catcode`\^^L=12\relax%
-\lst@DefActive\lst@whitespaces{\ ^^I^^J^^M}% add ^^L
-\global\let\lst@whitespaces\lst@whitespaces%
-\endgroup
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@fmtIfIdentifier}
-% tests the first character of |#1|
-%    \begin{macrocode}
-\gdef\lst@fmtIfIdentifier#1{%
-    \ifx\relax#1\@empty
-        \expandafter\@secondoftwo
-    \else
-        \expandafter\lst@fmtIfIdentifier@\expandafter#1%
-    \fi}
-%    \end{macrocode}
-% against the `letters' |_|, |@|, |A|,\ldots,|Z| and |a|,\ldots,|z|.
-%    \begin{macrocode}
-\gdef\lst@fmtIfIdentifier@#1#2\relax{%
-    \let\lst@next\@secondoftwo
-    \ifnum`#1=`_\else
-    \ifnum`#1<64\else
-    \ifnum`#1<91\let\lst@next\@firstoftwo\else
-    \ifnum`#1<97\else
-    \ifnum`#1<123\let\lst@next\@firstoftwo\else
-    \fi \fi \fi \fi \fi
-    \lst@next}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@fmtIfNextCharIn}
-% is required for the optional \meta{exceptional characters}.
-% The implementation is easy---refer section \ref{iSubstringTests}.
-%    \begin{macrocode}
-\gdef\lst@fmtIfNextCharIn#1{%
-    \ifx\@empty#1\@empty \expandafter\@secondoftwo \else
-                         \def\lst@next{\lst@fmtIfNextCharIn@{#1}}%
-                         \expandafter\lst@next\fi}
-\gdef\lst@fmtIfNextCharIn@#1#2#3#4{%
-    \def\lst@temp##1#4##2##3\relax{%
-        \ifx \@empty##2\expandafter\@secondoftwo
-                 \else \expandafter\@firstoftwo \fi}%
-    \lst@temp#1#4\@empty\relax{#2}{#3}#4}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@fmtCDef}
-% We need derivations of |\lst@CDef| and |\lst@CDefX|: we have to test the
-% next character against the sequence |#5| of exceptional characters.
-% These tests are inserted here.
-%    \begin{macrocode}
-\gdef\lst@fmtCDef#1{\lst@fmtCDef@#1}
-\gdef\lst@fmtCDef@#1#2#3#4#5#6#7{%
-    \lst@CDefIt#1{#2}{#3}%
-               {\lst@fmtIfNextCharIn{#5}{#4#2#3}{#6#4#2#3#7}}%
-               #4%
-               {}{}{}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@fmtCDefX}
-% The same but `drop input'.
-%    \begin{macrocode}
-\gdef\lst@fmtCDefX#1{\lst@fmtCDefX@#1}
-\gdef\lst@fmtCDefX@#1#2#3#4#5#6#7{%
-    \let#4#1%
-    \ifx\@empty#2\@empty
-        \def#1{\lst@fmtIfNextCharIn{#5}{#4}{#6#7}}%
-    \else \ifx\@empty#3\@empty
-        \def#1##1{%
-            \ifx##1#2%
-                \def\lst@next{\lst@fmtIfNextCharIn{#5}{#4##1}%
-                                                      {#6#7}}%
-            \else
-                 \def\lst@next{#4##1}%
-            \fi
-            \lst@next}%
-    \else
-        \def#1{%
-            \lst@IfNextCharsArg{#2#3}%
-                {\lst@fmtIfNextCharIn{#5}{\expandafter#4\lst@eaten}%
-                                         {#6#7}}%
-                {\expandafter#4\lst@eaten}}%
-    \fi \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \paragraph{The parser}
-% applies |\lst@fmtSplit| to cut a format definition into items, items into
-% `input' and `output', and `output' into `pre' and 'post'. This should be
-% clear if you are in touch with format definitions.
-%
-% \begin{macro}{\lst@UseFormat}
-% Now we can start with the parser.
-%    \begin{macrocode}
-\gdef\lst@UseFormat#1{%
-    \def\lst@fmtwhole{#1}%
-    \lst@UseFormat@}
-\gdef\lst@UseFormat@{%
-    \lst@fmtSplit\lst@fmtwhole,%
-%    \end{macrocode}
-% We assign the rest of the format definition, \ldots
-%    \begin{macrocode}
-    \let\lst@fmtwhole\lst@fmtb
-    \ifx\lst@fmta\@empty\else
-%    \end{macrocode}
-% \ldots\space split the item at the equal sign, and work on the item.
-%    \begin{macrocode}
-        \lst@fmtSplit\lst@fmta=%
-        \ifx\@empty\lst@fmta\else
-%    \end{macrocode}
-% \begin{TODO}
-% Insert |\let\lst@arg\@empty| |\expandafter\lst@XConvert\lst@fmtb\@nil|
-% |\let\lst@fmtb\lst@arg|.
-% \end{TODO}
-%    \begin{macrocode}
-            \expandafter\lstKV@XOptArg\expandafter[\expandafter]%
-                \expandafter{\lst@fmtb}\lst@UseFormat@b
-        \fi
-    \fi
-%    \end{macrocode}
-% Finally we process the next item if the rest is not empty.
-%    \begin{macrocode}
-    \ifx\lst@fmtwhole\@empty\else
-        \expandafter\lst@UseFormat@
-    \fi}
-%    \end{macrocode}
-% We make |\lst@fmtc| contain the preceding characters as a braced argument.
-% To add more arguments, we first split the replacement tokens at the control
-% sequence |\string|.
-%    \begin{macrocode}
-\gdef\lst@UseFormat@b[#1]#2{%
-    \def\lst@fmtc{{#1}}\lst@lExtend\lst@fmtc{\expandafter{\lst@fmta}}%
-    \def\lst@fmtb{#2}%
-    \lst@fmtSplit\lst@fmtb\string
-%    \end{macrocode}
-% We append an empty argument or |\lst@fmtPre| with `|\string|-preceding'
-% tokens as argument. We do the same for the tokens after |\string|.
-%    \begin{macrocode}
-    \ifx\@empty\lst@fmta
-        \lst@lAddTo\lst@fmtc{{}}%
-    \else
-        \lst@lExtend\lst@fmtc{\expandafter
-            {\expandafter\lst@fmtPre\expandafter{\lst@fmta}}}%
-    \fi
-    \ifx\@empty\lst@fmtb
-        \lst@lAddTo\lst@fmtc{{}}%
-    \else
-        \lst@lExtend\lst@fmtc{\expandafter
-            {\expandafter\lst@fmtPost\expandafter{\lst@fmtb}}}%
-    \fi
-%    \end{macrocode}
-% Eventually we extend |\lst@fmtformat| appropriately. Note that |\lst@if|
-% still indicates whether the replacement tokens contain |\string|.
-%    \begin{macrocode}
-    \expandafter\lst@UseFormat@c\lst@fmtc}
-%    \end{macrocode}
-%    \begin{macrocode}
-\gdef\lst@UseFormat@c#1#2#3#4{%
-    \lst@fmtIfIdentifier#2\relax
-    {\lst@fmtIdentifier{#2}%
-     \lst@if\else \PackageWarning{Listings}%
-         {Cannot drop identifier in format definition}%
-     \fi}%
-    {\lst@if
-         \lst@lAddTo\lst@fmtformat{\lst@CArgX#2\relax\lst@fmtCDef}%
-     \else
-         \lst@lAddTo\lst@fmtformat{\lst@CArgX#2\relax\lst@fmtCDefX}%
-     \fi
-     \lst@DefActive\lst@fmtc{#1}%
-     \lst@lExtend\lst@fmtformat{\expandafter{\lst@fmtc}{#3}{#4}}}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{SelectCharTable}{\lst@fmtformat}
-\global\let\lst@fmtformat\@empty
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \paragraph{The formatting}
-%
-% \begin{macro}{\lst@fmtPre}
-%    \begin{macrocode}
-\gdef\lst@fmtPre#1{%
-    \lst@PrintToken
-    \begingroup
-    \let\newline\lst@fmtEnsureNewLine
-    \let\space\lst@fmtEnsureSpace
-    \let\indent\lst@fmtIndent
-    \let\noindent\lst@fmtNoindent
-    #1%
-    \endgroup}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@fmtPost}
-%    \begin{macrocode}
-\gdef\lst@fmtPost#1{%
-    \global\let\lst@fmtPostOutput\@empty
-    \begingroup
-    \def\newline{\lst@AddTo\lst@fmtPostOutput\lst@fmtEnsureNewLine}%
-    \def\space{\aftergroup\lst@fmtEnsurePostSpace}%
-    \def\indent{\lst@AddTo\lst@fmtPostOutput\lst@fmtIndent}%
-    \def\noindent{\lst@AddTo\lst@fmtPostOutput\lst@fmtNoindent}%
-    \aftergroup\lst@PrintToken
-    #1%
-    \endgroup}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{Init}{\global\let\lst@fmtPostOutput\@empty}
-\lst@AddToHook{PostOutput}
-    {\lst@fmtPostOutput \global\let\lst@fmtPostOutput\@empty}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@fmtEnsureSpace}
-% \begin{macro}{\lst@fmtEnsurePostSpace}
-%    \begin{macrocode}
-\gdef\lst@fmtEnsureSpace{%
-    \lst@ifwhitespace\else \expandafter\lst@ProcessSpace \fi}
-\gdef\lst@fmtEnsurePostSpace{%
-    \lst@IfNextCharWhitespace{}{\lst@ProcessSpace}}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{lstkey}{fmtindent}
-% \begin{macro}{\lst@fmtIndent}
-% \begin{macro}{\lst@fmtNoindent}
-%    \begin{macrocode}
-\lst@Key{fmtindent}{20pt}{\def\lst@fmtindent{#1}}
-\newdimen\lst@fmtcurrindent
-\lst@AddToHook{InitVars}{\global\lst@fmtcurrindent\z@}
-\gdef\lst@fmtIndent{\global\advance\lst@fmtcurrindent\lst@fmtindent}
-\gdef\lst@fmtNoindent{\global\advance\lst@fmtcurrindent-\lst@fmtindent}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@fmtEnsureNewLine}
-%    \begin{macrocode}
-\gdef\lst@fmtEnsureNewLine{%
-    \global\advance\lst@newlines\@ne
-    \global\advance\lst@newlinesensured\@ne
-    \lst@fmtignoretrue}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToAtTop\lst@DoNewLines{%
-    \ifnum\lst@newlines>\lst@newlinesensured
-        \global\advance\lst@newlines-\lst@newlinesensured
-    \fi
-    \global\lst@newlinesensured\z@}
-\newcount\lst@newlinesensured % global
-\lst@AddToHook{Init}{\global\lst@newlinesensured\z@}
-%    \end{macrocode}
-%    \begin{macrocode}
-\gdef\lst@fmtignoretrue{\let\lst@fmtifignore\iftrue}
-\gdef\lst@fmtignorefalse{\let\lst@fmtifignore\iffalse}
-\lst@AddToHook{InitVars}{\lst@fmtignorefalse}
-\lst@AddToHook{Output}{\lst@fmtignorefalse}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@fmtUseLostSpace}
-%    \begin{macrocode}
-\gdef\lst@fmtUseLostSpace{%
-    \lst@ifnewline \kern\lst@fmtcurrindent \global\lst@lostspace\z@
-    \else
-        \lst@OldOLS
-    \fi}
-\lst@AddToHook{Init}
-    {\lst@true
-     \ifx\lst@fmtformat\@empty \ifx\lst@fmt\@empty \lst@false \fi\fi
-     \lst@if
-        \let\lst@OldOLS\lst@OutputLostSpace
-        \let\lst@OutputLostSpace\lst@fmtUseLostSpace
-        \let\lst@ProcessSpace\lst@fmtProcessSpace
-     \fi}
-%    \end{macrocode}
-% \begin{TODO}
-% This `lost space' doesn't use |\lst@alloverstyle| yet!
-% \end{TODO}
-% \end{macro}
-%
-% \begin{macro}{\lst@fmtProcessSpace}
-%    \begin{macrocode}
-\gdef\lst@fmtProcessSpace{%
-    \lst@ifletter
-        \lst@Output
-        \lst@fmtifignore\else
-            \lst@AppendOther\lst@outputspace
-        \fi
-    \else \lst@ifkeepspaces
-        \lst@AppendOther\lst@outputspace
-    \else \ifnum\lst@newlines=\z@
-        \lst@AppendSpecialSpace
-    \else \ifnum\lst@length=\z@
-            \global\advance\lst@lostspace\lst@width
-            \global\advance\lst@pos\m@ne
-        \else
-            \lst@AppendSpecialSpace
-        \fi
-    \fi \fi \fi
-    \lst@whitespacetrue}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \paragraph{Formatting identifiers}
-%
-% \begin{macro}{\lst@fmtIdentifier}
-% We install a (keyword) test for the `format identifiers'.
-%    \begin{macrocode}
-\lst@InstallTest{f}
-    \lst@fmt@list\lst@fmt \lst@gfmt@list\lst@gfmt
-    \lst@gfmt@wp
-    wd
-\gdef\lst@fmt@list{\lst@fmt\lst@gfmt}\global\let\lst@fmt\@empty
-\gdef\lst@gfmt@list{\lst@fmt\lst@gfmt}\global\let\lst@gfmt\@empty
-%    \end{macrocode}
-% The working procedure expands |\lst@fmt$|\meta{string} (and defines
-% |\lst@PrintToken| to do nothing).
-%    \begin{macrocode}
-\gdef\lst@gfmt@wp{%
-    \begingroup \let\lst@UM\@empty
-    \let\lst@PrintToken\@empty
-    \csname\@lst @fmt$\the\lst@token\endcsname
-    \endgroup}
-%    \end{macrocode}
-% This control sequence is probably defined as `working identifier'.
-%    \begin{macrocode}
-\gdef\lst@fmtIdentifier#1#2#3#4{%
-    \lst@DefOther\lst@fmta{#2}\edef\lst@fmt{\lst@fmt,\lst@fmta}%
-    \@namedef{\@lst @fmt$\lst@fmta}{#3#4}}
-%    \end{macrocode}
-% |\lst@fmt$|\meta{identifier} expands to a |\lst@fmtPre|/|\lst@fmtPost|
-% sequence defined by |#2| and |#3|.
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-%
-% \subsection{Line numbers}
-%
-% \begin{aspect}{labels}
-% \lsthelper{Rolf~Niepraschk}{1997/04/24}{line numbers} asked for line numbers.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{labels}
-%    \end{macrocode}
-%
-% \begin{lstkey}{numbers}
-% Depending on the argument we define |\lst@PlaceNumber| to print the line
-% number.
-%    \begin{macrocode}
-\lst@Key{numbers}{none}{%
-    \let\lst@PlaceNumber\@empty
-    \lstKV@SwitchCases{#1}%
-    {none&\\%
-     left&\def\lst@PlaceNumber{\llap{\normalfont
-                \lst@numberstyle{\thelstnumber}\kern\lst@numbersep}}\\%
-     right&\def\lst@PlaceNumber{\rlap{\normalfont
-                \kern\linewidth \kern\lst@numbersep
-                \lst@numberstyle{\thelstnumber}}}%
-    }{\PackageError{Listings}{Numbers #1 unknown}\@ehc}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{numberstyle}
-% \begin{lstkey}{numbersep}
-% \begin{lstkey}{stepnumber}
-% \begin{lstkey}{numberblanklines}
-% \begin{lstkey}{numberfirstline}
-% Definition of the keys.
-%    \begin{macrocode}
-\lst@Key{numberstyle}{}{\def\lst@numberstyle{#1}}
-\lst@Key{numbersep}{10pt}{\def\lst@numbersep{#1}}
-\lst@Key{stepnumber}{1}{\def\lst@stepnumber{#1\relax}}
-\lst@AddToHook{EmptyStyle}{\let\lst@stepnumber\@ne}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@Key{numberblanklines}{true}[t]
-    {\lstKV@SetIf{#1}\lst@ifnumberblanklines}
-\lst@Key{numberfirstline}{f}[t]{\lstKV@SetIf{#1}\lst@ifnumberfirstline}
-\gdef\lst@numberfirstlinefalse{\let\lst@ifnumberfirstline\iffalse}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{lstkey}{firstnumber}
-% We select the first number according to the argument.
-%    \begin{macrocode}
-\lst@Key{firstnumber}{auto}{%
-    \lstKV@SwitchCases{#1}%
-    {auto&\let\lst@firstnumber\@undefined\\%
-     last&\let\lst@firstnumber\c@lstnumber
-    }{\def\lst@firstnumber{#1\relax}}}
-\lst@AddToHook{PreSet}{\let\lst@advancenumber\z@}
-%    \end{macrocode}
-% |\lst@firstnumber| now set to |\lst@lineno| instead of |\lst@firstline|,
-% as per changes in |lstpatch.sty| from 1.3b pertaining to linerange markers.
-%    \begin{macrocode}
-\lst@AddToHook{PreInit}
-    {\ifx\lst@firstnumber\@undefined
-         \def\lst@firstnumber{\lst@lineno}%
-     \fi}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@SetFirstNumber}
-% \begin{macro}{\lst@SaveFirstNumber}
-% \lsthelper{Boris~Veytsman}{1998/03/25}{continue line numbering: a.c b.c a.c}
-% proposed to continue line numbers according to listing names. We define the
-% label number of the first printing line here. A bug reported by
-% \lsthelper{Jens~Schwarzer}{2001/05/29}{wrong line numbering of lstlisting
-% with first>1} has been removed by replacing |\@ne| by |\lst@firstline|.
-%    \begin{macrocode}
-\gdef\lst@SetFirstNumber{%
-    \ifx\lst@firstnumber\@undefined
-        \@tempcnta 0\csname\@lst no@\lst@intname\endcsname\relax
-        \ifnum\@tempcnta=\z@ \@tempcnta\lst@firstline
-                       \else \lst@nololtrue \fi
-        \advance\@tempcnta\lst@advancenumber
-        \edef\lst@firstnumber{\the\@tempcnta\relax}%
-    \fi}
-%    \end{macrocode}
-% The current label is stored in|\lstno@|\meta{name}. If the name is empty,
-% we use a space instead, which leaves |\lstno@| undefined.
-%    \begin{macrocode}
-\gdef\lst@SaveFirstNumber{%
-    \expandafter\xdef
-        \csname\@lst no\ifx\lst@intname\@empty @ \else @\lst@intname\fi
-        \endcsname{\the\c@lstnumber}}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\c@lstnumber}
-% This counter keeps the current label number. We use it as current label to
-% make line numbers referenced by |\ref|. This was proposed by
-% \lsthelper{Boris~Veytsman}{1998/03/25}{make line numbers referenced via
-% \label and \ref}. We now use |\refstepcounter| to do the job---thanks to a
-% bug report from \lsthelper{Christian~Gudrian}{2000/11/13}{\ref{lst:line}
-% jumps to top of listing and not to the line}.
-%    \begin{macrocode}
-\newcounter{lstnumber}% \global
-\global\c@lstnumber\@ne % init
-\renewcommand*\thelstnumber{\@arabic\c@lstnumber}
-\lst@AddToHook{EveryPar}
-    {\global\advance\c@lstnumber\lst@advancelstnum
-     \global\advance\c@lstnumber\m@ne \refstepcounter{lstnumber}%
-     \lst@SkipOrPrintLabel}%
-\global\let\lst@advancelstnum\@ne
-%    \end{macrocode}
-% Note that the counter advances \emph{before} the label is printed and not
-% afterwards. Otherwise we have wrong references---reported by
-% \lsthelper{Gregory~Van~Vooren}{1999/06/04}{reference one unit too large}.
-%    \begin{macrocode}
-\lst@AddToHook{Init}{\def\@currentlabel{\thelstnumber}}
-%    \end{macrocode}
-% The label number is initialized and we ensure correct line numbers for
-% continued listings.  An apparently-extraneous advancement of the line
-% number by \verb|-\lst@advancelstnum| when \texttt{firstnumber=last} is
-% specified was removed, following a bug report by \lsthelper{Joachim~Breitner}%
-% {2006/05/14}{failure to continue counting correctly}.
-%    \begin{macrocode}
-\lst@AddToHook{InitVars}
-    {\global\c@lstnumber\lst@firstnumber
-     \global\advance\c@lstnumber\lst@advancenumber
-     \global\advance\c@lstnumber-\lst@advancelstnum}
-\lst@AddToHook{ExitVars}
-    {\global\advance\c@lstnumber\lst@advancelstnum}
-%    \end{macrocode}
-% \lsthelper{Walter~E.~Brown}{2001/05/22}{pdftex 3.14159-14f warning:
-% destination with the same identifier} reported problems with pdftex and
-% \packagename{hyperref}. A bad default of |\theHlstlabel| was the reason.
-% \lsthelper{Heiko~Oberdiek}{2001/11/08}{pdftex warning: destination with
-% the same identifier} found another bug which was due to the localization
-% of |\lst@neglisting|. He also provided the following fix, replacing
-% |\thelstlisting| with the |\ifx| \ldots\ |\fi| construction.
-%    \begin{macrocode}
-\AtBeginDocument{%
-    \def\theHlstnumber{\ifx\lst@@caption\@empty \lst@neglisting
-                                          \else \thelstlisting \fi
-                       .\thelstnumber}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@skipnumbers}
-% There are more things to do. We calculate how many lines must skip their
-% label. The formula is
-%	$$|\lst@skipnumbers|=
-%		\textrm{\emph{first printing line}}\bmod|\lst@stepnumber|.$$
-% Note that we use a nonpositive representative for |\lst@skipnumbers|.
-%    \begin{macrocode}
-\newcount\lst@skipnumbers % \global
-\lst@AddToHook{Init}
-    {\ifnum \z@>\lst@stepnumber
-         \let\lst@advancelstnum\m@ne
-         \edef\lst@stepnumber{-\lst@stepnumber}%
-     \fi
-     \ifnum \z@<\lst@stepnumber
-         \global\lst@skipnumbers\lst@firstnumber
-         \global\divide\lst@skipnumbers\lst@stepnumber
-         \global\multiply\lst@skipnumbers-\lst@stepnumber
-         \global\advance\lst@skipnumbers\lst@firstnumber
-         \ifnum\lst@skipnumbers>\z@
-             \global\advance\lst@skipnumbers -\lst@stepnumber
-         \fi
-%    \end{macrocode}
-% If |\lst@stepnumber| is zero, no line numbers are printed:
-%    \begin{macrocode}
-     \else
-         \let\lst@SkipOrPrintLabel\relax
-     \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@SkipOrPrintLabel}
-% But default is this. We use the fact that |\lst@skipnumbers| is nonpositive.
-% The counter advances every line and if that counter is zero, we print a line
-% number and decrement the counter by |\lst@stepnumber|.
-%    \begin{macrocode}
-\gdef\lst@SkipOrPrintLabel{%
-    \ifnum\lst@skipnumbers=\z@
-        \global\advance\lst@skipnumbers-\lst@stepnumber\relax
-        \lst@PlaceNumber
-        \lst@numberfirstlinefalse
-    \else
-%    \end{macrocode}
-% If the first line of a listing should get a number, it gets it here.
-%    \begin{macrocode}
-        \lst@ifnumberfirstline
-            \lst@PlaceNumber
-            \lst@numberfirstlinefalse
-        \fi
-    \fi
-    \global\advance\lst@skipnumbers\@ne}%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{OnEmptyLine}{%
-    \lst@ifnumberblanklines\else \ifnum\lst@skipnumbers=\z@
-        \global\advance\lst@skipnumbers-\lst@stepnumber\relax
-    \fi\fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsection{Line shape and line breaking}
-%
-% \begin{macro}{\lst@parshape}
-% We define a default version of |\lst@parshape| for the case that the
-% \aspectname{lineshape} aspect is not loaded. We use this parshape every line
-% (in fact every paragraph). Furthermore we must repeat the parshape if we
-% close a group level---or the shape is forgotten.
-%    \begin{macrocode}
-%<*kernel>
-\def\lst@parshape{\parshape\@ne \z@ \linewidth}
-\lst@AddToHookAtTop{EveryLine}{\lst@parshape}
-\lst@AddToHookAtTop{EndGroup}{\lst@parshape}
-%</kernel>
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{aspect}{lineshape}
-% Our first aspect in this section.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{lineshape}
-%    \end{macrocode}
-%
-% \begin{lstkey}{xleftmargin}
-% \begin{lstkey}{xrightmargin}
-% \begin{lstkey}{resetmargins}
-% \begin{lstkey}{linewidth}
-% Usual stuff.
-%    \begin{macrocode}
-\lst@Key{xleftmargin}{\z@}{\def\lst@xleftmargin{#1}}
-\lst@Key{xrightmargin}{\z@}{\def\lst@xrightmargin{#1}}
-\lst@Key{resetmargins}{false}[t]{\lstKV@SetIf{#1}\lst@ifresetmargins}
-%    \end{macrocode}
-% The margins become zero if we make an exact box around the listing.
-%    \begin{macrocode}
-\lst@AddToHook{BoxUnsafe}{\let\lst@xleftmargin\z@
-                          \let\lst@xrightmargin\z@}
-\lst@AddToHook{TextStyle}{%
-    \let\lst@xleftmargin\z@ \let\lst@xrightmargin\z@
-    \let\lst@ifresetmargins\iftrue}
-%    \end{macrocode}
-% Added above hook after bug report from \lsthelper{Magnus~Lewis-Smith}
-%{1999/08/06}{|\lstinline| indented} and \lsthelper{Jos\'e~Romildo~Malaquias}
-%{2000/08/22}{|\lstinline| indented (resetmargins)} respectively.
-%    \begin{macrocode}
-\lst@Key{linewidth}\linewidth{\def\lst@linewidth{#1}}
-\lst@AddToHook{PreInit}{\linewidth\lst@linewidth\relax}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@parshape}
-% The definition itself is easy.
-%    \begin{macrocode}
-\gdef\lst@parshape{%
-    \parshape\@ne \@totalleftmargin \linewidth}
-%    \end{macrocode}
-% We calculate the line width and (inner/outer) indent for a listing.
-%    \begin{macrocode}
-\lst@AddToHook{Init}
-    {\lst@ifresetmargins
-         \advance\linewidth\@totalleftmargin
-         \advance\linewidth\rightmargin
-         \@totalleftmargin\z@
-     \fi
-     \advance\linewidth-\lst@xleftmargin
-     \advance\linewidth-\lst@xrightmargin
-     \advance\@totalleftmargin\lst@xleftmargin\relax}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{lineskip}
-% The introduction of this key is due to communication with
-% \lsthelper{Andreas~Bartelt}{1997/09/11}{problem with redefed \parskip;
-% \lstlineskip introduced}. Version 1.0 implements this feature by
-% redefining |\baselinestretch|.
-%    \begin{macrocode}
-\lst@Key{lineskip}{\z@}{\def\lst@lineskip{#1\relax}}
-\lst@AddToHook{Init}
-    {\parskip\z@
-     \ifdim\z@=\lst@lineskip\else
-         \@tempdima\baselineskip
-         \advance\@tempdima\lst@lineskip
-%    \end{macrocode}
-% The following three lines simulate the `bad' |\divide| |\@tempdima|
-% |\strip@pt| |\baselineskip| |\relax|. Thanks to \lsthelper{Peter~Bartke}
-% {2002/04/10}{bad use of \strip@pt} for the bug report.
-%    \begin{macrocode}
-         \multiply\@tempdima\@cclvi
-         \divide\@tempdima\baselineskip\relax
-         \multiply\@tempdima\@cclvi
-%    \end{macrocode}
-%    \begin{macrocode}
-         \edef\baselinestretch{\strip@pt\@tempdima}%
-         \selectfont
-     \fi}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{breaklines}
-% \begin{lstkey}{breakindent}
-% \begin{lstkey}{breakautoindent}
-% \begin{lstkey}{breakatwhitespace}
-% \begin{lstkey}{prebreak}
-% \begin{lstkey}{postbreak}
-% As usual we have no problems in announcing more keys.
-% \keyname{breakatwhitespace} is due to \lsthelper{Javier~Bezos}{2003/09/23}
-% {breaklines breaks at odd places}. Unfortunately a previous definition of
-% that key was wrong as \lsthelper{Franz~Rinnerthaler}{2004/03/12}
-% {breakatwhitespace has no effect} and \lsthelper{Ulrike~Fischer}{2004/07/11}
-% {breakatwhitespace has no effect} reported.
-%    \begin{macrocode}
-\lst@Key{breaklines}{false}[t]{\lstKV@SetIf{#1}\lst@ifbreaklines}
-\lst@Key{breakindent}{20pt}{\def\lst@breakindent{#1}}
-\lst@Key{breakautoindent}{t}[t]{\lstKV@SetIf{#1}\lst@ifbreakautoindent}
-\lst@Key{breakatwhitespace}{false}[t]%
-    {\lstKV@SetIf{#1}\lst@ifbreakatwhitespace}
-\lst@Key{prebreak}{}{\def\lst@prebreak{#1}}
-\lst@Key{postbreak}{}{\def\lst@postbreak{#1}}
-%    \end{macrocode}
-% We assign some different macros and (if necessary) suppress ``underfull
-% |\hbox|'' messages (and use different pretolerance):
-%    \begin{macrocode}
-\lst@AddToHook{Init}
-    {\lst@ifbreaklines
-         \hbadness\@M \pretolerance\@M
-         \@rightskip\@flushglue \rightskip\@rightskip % \raggedright
-         \leftskip\z@skip \parindent\z@
-%    \end{macrocode}
-% A |\raggedright| above has been replaced by setting the values by hand after
-% a bug report from \lsthelper{Morten~H\o gholm}{2004/09/06}{ltugboat.cls and
-% listings}.
-%
-% We use the normal parshape and the calculated |\lst@breakshape| (see below).
-%    \begin{macrocode}
-         \def\lst@parshape{\parshape\tw@ \@totalleftmargin\linewidth
-                           \lst@breakshape}%
-     \else
-         \let\lst@discretionary\@empty
-     \fi}
-\lst@AddToHook{OnNewLine}
-    {\lst@ifbreaklines \lst@breakNewLine \fi}
-%    \end{macrocode}
-% \end{lstkey}\end{lstkey}\end{lstkey}\end{lstkey}
-% \end{lstkey}\end{lstkey}
-%
-% \begin{macro}{\lst@discretionary}
-% \begin{macro}{\lst@spacekern}
-% Here comes the whole magic: We set a discretionary break after each `output
-% unit'. However we redefine |\space| to be used inside |\discretionary| and
-% use \hookname{EveryLine} hook. After a bug report by \lsthelper{Carsten~Hamm}
-% {2002/04/19}{wrong frame rules with breaklines and xleftmargin>0pt} I've
-% added |\kern-\lst@xleftmargin|, which became |\kern-\@totalleftmargin| after
-% a bug report by \lsthelper{Christian~Kaiser}{2002/12/13}{wrong frame inside
-% itemize with breaklines=true}.
-%    \begin{macrocode}
-\gdef\lst@discretionary{%
-    \lst@ifbreakatwhitespace
-        \lst@ifwhitespace \lst@@discretionary \fi
-    \else
-        \lst@@discretionary
-    \fi}%
-\gdef\lst@@discretionary{%
-    \discretionary{\let\space\lst@spacekern\lst@prebreak}%
-                  {\llap{\lsthk@EveryLine
-                   \kern\lst@breakcurrindent \kern-\@totalleftmargin}%
-                   \let\space\lst@spacekern\lst@postbreak}{}}
-\lst@AddToHook{PostOutput}{\lst@discretionary}
-\gdef\lst@spacekern{\kern\lst@width}
-%    \end{macrocode}
-% \begin{ALTERNATIVE}
-% |\penalty\@M \hskip\z@ plus 1fil \penalty0\hskip\z@ plus-1fil| \emph{before}
-% each `output unit' (i.e.~before |\hbox{...}| in the output macros) also break
-% the lines as desired. But we wouldn't have |prebreak| and |postbreak|.
-% \end{ALTERNATIVE}
-% \end{macro}\end{macro}
-%
-% \begin{macro}{\lst@breakNewLine}
-% We use \keyname{breakindent}, and additionally the current line indention
-% (coming from white spaces at the beginning of the line) if `auto indent' is
-% on.
-%    \begin{macrocode}
-\gdef\lst@breakNewLine{%
-    \@tempdima\lst@breakindent\relax
-    \lst@ifbreakautoindent \advance\@tempdima\lst@lostspace \fi
-%    \end{macrocode}
-% Now we calculate the margin and line width of the wrapped part \ldots
-%    \begin{macrocode}
-    \@tempdimc-\@tempdima \advance\@tempdimc\linewidth
-                          \advance\@tempdima\@totalleftmargin
-%    \end{macrocode}
-% \ldots\space and store it in |\lst@breakshape|.
-%    \begin{macrocode}
-    \xdef\lst@breakshape{\noexpand\lst@breakcurrindent \the\@tempdimc}%
-    \xdef\lst@breakcurrindent{\the\@tempdima}}
-\global\let\lst@breakcurrindent\z@ % init
-%    \end{macrocode}
-% The initialization of |\lst@breakcurrindent| has been added after a bug
-% report by \lsthelper{Alvaro~Herrera}{2002/12/09}{`undefined control
-% sequence \lst@breakcurrindent' with fancyvrb and breaklines}.
-% \begin{TODO}
-% We could speed this up by allocating two global dimensions.
-% \end{TODO}
-% \end{macro}
-%
-% \begin{macro}{\lst@breakshape}
-% \lsthelper{Andreas~Deininger}{2000/08/25}{`breaklines,first>1' leads to
-% ``undefined control sequence'' error} reported a problem which is resolved
-% by providing a default break shape.
-%    \begin{macrocode}
-\gdef\lst@breakshape{\@totalleftmargin \linewidth}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@breakProcessOther}
-% is the same as |\lst@ProcessOther| except that it also outputs the current
-% token string. This inserts a potential linebreak point.
-% Only the closing parenthesis uses this macro yet.
-%    \begin{macrocode}
-\gdef\lst@breakProcessOther#1{\lst@ProcessOther#1\lst@OutputOther}
-\lst@AddToHook{SelectCharTable}
-    {\lst@ifbreaklines \lst@Def{`)}{\lst@breakProcessOther)}\fi}
-%    \end{macrocode}
-% A bug reported by \lsthelper{Gabriel~Tauro}{2001/04/18}{unexpected `)' if
-% the character appears before first printed line} has been removed by using
-% |\lst@ProcessOther| instead of |\lst@AppendOther|.
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsection{Frames}
-%
-% \begin{aspect}{frames}
-% Another aspect.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[lineshape]{frames}
-%    \end{macrocode}
-%
-% \begin{lstkey}{framexleftmargin}
-% \begin{lstkey}{framexrightmargin}
-% \begin{lstkey}{framextopmargin}
-% \begin{lstkey}{framexbottommargin}
-% These keys just save the argument.
-%    \begin{macrocode}
-\lst@Key{framexleftmargin}{\z@}{\def\lst@framexleftmargin{#1}}
-\lst@Key{framexrightmargin}{\z@}{\def\lst@framexrightmargin{#1}}
-\lst@Key{framextopmargin}{\z@}{\def\lst@framextopmargin{#1}}
-\lst@Key{framexbottommargin}{\z@}{\def\lst@framexbottommargin{#1}}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{lstkey}{backgroundcolor}
-% \lsthelper{Ralf~Imh\"auser}{2000/01/08}{coloured background} inspired the
-% key \keyname{backgroundcolor}. All keys save the argument, and \ldots
-%    \begin{macrocode}
-\lst@Key{backgroundcolor}{}{\def\lst@bkgcolor{#1}}
-\lst@Key{fillcolor}{}{\def\lst@fillcolor{#1}}
-\lst@Key{rulecolor}{}{\def\lst@rulecolor{#1}}
-\lst@Key{rulesepcolor}{}{\def\lst@rulesepcolor{#1}}
-%    \end{macrocode}
-% \ldots\space some have default settings if they are empty.
-%    \begin{macrocode}
-\lst@AddToHook{Init}{%
-    \ifx\lst@fillcolor\@empty
-        \let\lst@fillcolor\lst@bkgcolor
-    \fi
-    \ifx\lst@rulesepcolor\@empty
-        \let\lst@rulesepcolor\lst@fillcolor
-    \fi}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{lstkey}{rulesep}
-% \begin{lstkey}{framerule}
-% \begin{lstkey}{framesep}
-% \begin{lstkey}{frameshape}
-% Another set of keys, which mainly save their respective argument.
-% \keyname{frameshape} capitalizes all letters, and checks whether at least one
-% round corner is specified. Eventually we define |\lst@frame| to be empty if
-% and only if there is no frameshape.
-%    \begin{macrocode}
-\lst@Key{rulesep}{2pt}{\def\lst@rulesep{#1}}
-\lst@Key{framerule}{.4pt}{\def\lst@framerulewidth{#1}}
-\lst@Key{framesep}{3pt}{\def\lst@frametextsep{#1}}
-\lst@Key{frameshape}{}{%
-    \let\lst@xrulecolor\@empty
-    \lstKV@FourArg{#1}%
-    {\uppercase{\def\lst@frametshape{##1}}%
-     \uppercase{\def\lst@framelshape{##2}}%
-     \uppercase{\def\lst@framershape{##3}}%
-     \uppercase{\def\lst@framebshape{##4}}%
-     \let\lst@ifframeround\iffalse
-     \lst@IfSubstring R\lst@frametshape{\let\lst@ifframeround\iftrue}{}%
-     \lst@IfSubstring R\lst@framebshape{\let\lst@ifframeround\iftrue}{}%
-     \def\lst@frame{##1##2##3##4}}}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{lstkey}{frameround}
-% \begin{lstkey}{frame}
-% We have to do some conversion here.
-%    \begin{macrocode}
-\lst@Key{frameround}\relax
-    {\uppercase{\def\lst@frameround{#1}}%
-     \expandafter\lstframe@\lst@frameround ffff\relax}
-\global\let\lst@frameround\@empty
-%    \end{macrocode}
-% In case of an verbose argument, we use the |trbl|-subset replacement.
-%    \begin{macrocode}
-\lst@Key{frame}\relax{%
-    \let\lst@xrulecolor\@empty
-    \lstKV@SwitchCases{#1}%
-    {none&\let\lst@frame\@empty\\%
-     leftline&\def\lst@frame{l}\\%
-     topline&\def\lst@frame{t}\\%
-     bottomline&\def\lst@frame{b}\\%
-     lines&\def\lst@frame{tb}\\%
-     single&\def\lst@frame{trbl}\\%
-     shadowbox&\def\lst@frame{tRBl}%
-            \def\lst@xrulecolor{\lst@rulesepcolor}%
-            \def\lst@rulesep{\lst@frametextsep}%
-    }{\def\lst@frame{#1}}%
-    \expandafter\lstframe@\lst@frameround ffff\relax}
-%    \end{macrocode}
-% Adding |t|, |r|, |b|, and |l| in case of their upper case versions makes
-% later tests easier.
-%    \begin{macrocode}
-\gdef\lstframe@#1#2#3#4#5\relax{%
-    \lst@IfSubstring T\lst@frame{\edef\lst@frame{t\lst@frame}}{}%
-    \lst@IfSubstring R\lst@frame{\edef\lst@frame{r\lst@frame}}{}%
-    \lst@IfSubstring B\lst@frame{\edef\lst@frame{b\lst@frame}}{}%
-    \lst@IfSubstring L\lst@frame{\edef\lst@frame{l\lst@frame}}{}%
-%    \end{macrocode}
-% We now check top and bottom frame rules, \ldots
-%    \begin{macrocode}
-    \let\lst@frametshape\@empty \let\lst@framebshape\@empty
-    \lst@frameCheck
-        ltr\lst@framelshape\lst@frametshape\lst@framershape #4#1%
-    \lst@frameCheck
-        LTR\lst@framelshape\lst@frametshape\lst@framershape #4#1%
-    \lst@frameCheck
-        lbr\lst@framelshape\lst@framebshape\lst@framershape #3#2%
-    \lst@frameCheck
-        LBR\lst@framelshape\lst@framebshape\lst@framershape #3#2%
-%    \end{macrocode}
-% \ldots\space look for round corners \ldots
-%    \begin{macrocode}
-    \let\lst@ifframeround\iffalse
-    \lst@IfSubstring R\lst@frametshape{\let\lst@ifframeround\iftrue}{}%
-    \lst@IfSubstring R\lst@framebshape{\let\lst@ifframeround\iftrue}{}%
-%    \end{macrocode}
-% and define left and right frame shape.
-%    \begin{macrocode}
-    \let\lst@framelshape\@empty \let\lst@framershape\@empty
-    \lst@IfSubstring L\lst@frame
-        {\def\lst@framelshape{YY}}%
-        {\lst@IfSubstring l\lst@frame{\def\lst@framelshape{Y}}{}}%
-    \lst@IfSubstring R\lst@frame
-        {\def\lst@framershape{YY}}%
-        {\lst@IfSubstring r\lst@frame{\def\lst@framershape{Y}}{}}}
-%    \end{macrocode}
-% Now comes the macro used to define top and bottom frame shape.
-% It extends the macro |#5|.
-% The last two arguments show whether left and right corners are round.
-% |#4| and |#6| are temporary macros.
-% |#1#2#3| are the three characters we test for.
-%    \begin{macrocode}
-\gdef\lst@frameCheck#1#2#3#4#5#6#7#8{%
-    \lst@IfSubstring #1\lst@frame
-        {\if #7T\def#4{R}\else \def#4{Y}\fi}%
-        {\def#4{N}}%
-    \lst@IfSubstring #3\lst@frame
-        {\if #8T\def#6{R}\else \def#6{Y}\fi}%
-        {\def#6{N}}%
-    \lst@IfSubstring #2\lst@frame{\edef#5{#5#4Y#6}}{}}
-%    \end{macrocode}
-% For text style listings all frames and the background color are
-% deactivated -- added after bug reports by \lsthelper{Stephen~Reindl}%
-% {2002/06/04}{frames not deactivated for text style listings} and
-% \lsthelper{Thomas~ten~Cate}{2006/07/14}{inline listings get background
-% color after a line break}
-%    \begin{macrocode}
-\lst@AddToHook{TextStyle}
-   {\let\lst@frame\@empty
-    \let\lst@frametshape\@empty
-    \let\lst@framershape\@empty
-    \let\lst@framebshape\@empty
-    \let\lst@framelshape\@empty
-    \let\lst@bkgcolor\@empty}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-%
-% As per a bug report by \lsthelper{Ignacio~Fern\'andez~Galv\'an}{2006/07/26}%
-% {Frame with background color has slight hole on left side}, the small section
-% of background color to the left of the margin is now drawn before the left
-% side of the frame is drawn, so that they overlap correctly in Acrobat.
-%
-% \begin{macro}{\lst@frameMakeVBox}
-%    \begin{macrocode}
-\gdef\lst@frameMakeBoxV#1#2#3{%
-    \setbox#1\hbox{%
-      \color@begingroup \lst@rulecolor
-      \ifx\lst@framelshape\@empty
-      \else
-            \llap{%
-                \lst@frameBlock\lst@fillcolor\lst@frametextsep{#2}{#3}%
-                \kern\lst@framexleftmargin}%
-      \fi
-      \llap{\setbox\z@\hbox{\vrule\@width\z@\@height#2\@depth#3%
-                            \lst@frameL}%
-            \rlap{\lst@frameBlock\lst@rulesepcolor{\wd\z@}%
-                                                  {\ht\z@}{\dp\z@}}%
-            \box\z@
-            \kern\lst@frametextsep\relax
-            \kern\lst@framexleftmargin}%
-      \rlap{\kern-\lst@framexleftmargin
-                    \@tempdima\linewidth
-            \advance\@tempdima\lst@framexleftmargin
-            \advance\@tempdima\lst@framexrightmargin
-            \lst@frameBlock\lst@bkgcolor\@tempdima{#2}{#3}%
-            \ifx\lst@framershape\@empty
-                \kern\lst@frametextsep\relax
-            \else
-                \lst@frameBlock\lst@fillcolor\lst@frametextsep{#2}{#3}%
-            \fi
-            \setbox\z@\hbox{\vrule\@width\z@\@height#2\@depth#3%
-                            \lst@frameR}%
-            \rlap{\lst@frameBlock\lst@rulesepcolor{\wd\z@}%
-                                                  {\ht\z@}{\dp\z@}}%
-            \box\z@}%
-      \color@endgroup}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameBlock}
-%    \begin{macrocode}
-\gdef\lst@frameBlock#1#2#3#4{%
-    \color@begingroup
-      #1%
-      \setbox\z@\hbox{\vrule\@height#3\@depth#4%
-                      \ifx#1\@empty \@width\z@ \kern#2\relax
-                              \else \@width#2\relax \fi}%
-      \box\z@
-    \color@endgroup}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameR}
-% typesets right rules.
-% We only need to iterate through |\lst@framershape|.
-%    \begin{macrocode}
-\gdef\lst@frameR{%
-    \expandafter\lst@frameR@\lst@framershape\relax
-    \kern-\lst@rulesep}
-\gdef\lst@frameR@#1{%
-    \ifx\relax#1\@empty\else
-        \if #1Y\lst@framevrule \else \kern\lst@framerulewidth \fi
-        \kern\lst@rulesep
-        \expandafter\lst@frameR@b
-    \fi}
-\gdef\lst@frameR@b#1{%
-    \ifx\relax#1\@empty
-    \else
-        \if #1Y\color@begingroup
-               \lst@xrulecolor
-               \lst@framevrule
-               \color@endgroup
-        \else
-               \kern\lst@framerulewidth
-        \fi
-        \kern\lst@rulesep
-        \expandafter\lst@frameR@
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameL}
-% Ditto left rules.
-%    \begin{macrocode}
-\gdef\lst@frameL{%
-    \kern-\lst@rulesep
-    \expandafter\lst@frameL@\lst@framelshape\relax}
-\gdef\lst@frameL@#1{%
-    \ifx\relax#1\@empty\else
-        \kern\lst@rulesep
-        \if#1Y\lst@framevrule \else \kern\lst@framerulewidth \fi
-        \expandafter\lst@frameL@
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameH}
-% This is the central macro used to draw top and bottom frame rules.
-% The first argument is either |T| or |B| and the second contains the shape.
-% We use |\@tempcntb| as size counter.
-%    \begin{macrocode}
-\gdef\lst@frameH#1#2{%
-    \global\let\lst@framediml\z@ \global\let\lst@framedimr\z@
-    \setbox\z@\hbox{}\@tempcntb\z@
-    \expandafter\lst@frameH@\expandafter#1#2\relax\relax\relax
-            \@tempdimb\lst@frametextsep\relax
-    \advance\@tempdimb\lst@framerulewidth\relax
-            \@tempdimc-\@tempdimb
-    \advance\@tempdimc\ht\z@
-    \advance\@tempdimc\dp\z@
-    \setbox\z@=\hbox{%
-      \lst@frameHBkg\lst@fillcolor\@tempdimb\@firstoftwo
-      \if#1T\rlap{\raise\dp\@tempboxa\box\@tempboxa}%
-       \else\rlap{\lower\ht\@tempboxa\box\@tempboxa}\fi
-      \lst@frameHBkg\lst@rulesepcolor\@tempdimc\@secondoftwo
-      \advance\@tempdimb\ht\@tempboxa
-      \if#1T\rlap{\raise\lst@frametextsep\box\@tempboxa}%
-       \else\rlap{\lower\@tempdimb\box\@tempboxa}\fi
-      \rlap{\box\z@}%
-    }}
-\gdef\lst@frameH@#1#2#3#4{%
-    \ifx\relax#4\@empty\else
-        \lst@frameh \@tempcntb#1#2#3#4%
-        \advance\@tempcntb\@ne
-        \expandafter\lst@frameH@\expandafter#1%
-    \fi}
-\gdef\lst@frameHBkg#1#2#3{%
-    \setbox\@tempboxa\hbox{%
-        \kern-\lst@framexleftmargin
-        #3{\kern-\lst@framediml\relax}{\@tempdima\z@}%
-        \ifdim\lst@framediml>\@tempdimb
-            #3{\@tempdima\lst@framediml \advance\@tempdima-\@tempdimb
-               \lst@frameBlock\lst@rulesepcolor\@tempdima\@tempdimb\z@}%
-              {\kern-\lst@framediml
-               \advance\@tempdima\lst@framediml\relax}%
-        \fi
-        #3{\@tempdima\z@
-           \ifx\lst@framelshape\@empty\else
-               \advance\@tempdima\@tempdimb
-           \fi
-           \ifx\lst@framershape\@empty\else
-               \advance\@tempdima\@tempdimb
-           \fi}%
-          {\ifdim\lst@framedimr>\@tempdimb
-              \advance\@tempdima\lst@framedimr\relax
-           \fi}%
-        \advance\@tempdima\linewidth
-        \advance\@tempdima\lst@framexleftmargin
-        \advance\@tempdima\lst@framexrightmargin
-        \lst@frameBlock#1\@tempdima#2\z@
-        #3{\ifdim\lst@framedimr>\@tempdimb
-               \@tempdima-\@tempdimb
-               \advance\@tempdima\lst@framedimr\relax
-               \lst@frameBlock\lst@rulesepcolor\@tempdima\@tempdimb\z@
-           \fi}{}%
-        }}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameh}
-% This is the low-level macro used to draw top and bottom frame rules.
-% It \emph{adds} one rule plus corners to box 0.
-% The first parameter gives the size of the corners and the second is either
-% |T| or |B|.
-% |#3#4#5| is a left-to-right description of the frame and is in
-% $\{$\texttt{Y,N,R}$\}\times\{$\texttt{Y,N}$\}\times\{$\texttt{Y,N,R}$\}$.
-% We move to the correct horizontal position, set the left corner, the
-% horizontal line, and the right corner.
-%    \begin{macrocode}
-\gdef\lst@frameh#1#2#3#4#5{%
-    \lst@frameCalcDimA#1%
-    \lst@ifframeround \@getcirc\@tempdima \fi
-%    \end{macrocode}
-%    \begin{macrocode}
-    \setbox\z@\hbox{%
-      \begingroup
-      \setbox\z@\hbox{%
-        \kern-\lst@framexleftmargin
-        \color@begingroup
-        \ifnum#1=\z@ \lst@rulecolor \else \lst@xrulecolor \fi
-%    \end{macrocode}
-% |\lst@frameCorner| gets four arguments:
-% |\llap|, |TL| or |BL|, the corner type $\in\{$\texttt{Y,N,R}$\}$, and the
-% size |#1|.
-%    \begin{macrocode}
-        \lst@frameCornerX\llap{#2L}#3#1%
-        \ifdim\lst@framediml<\@tempdimb
-            \xdef\lst@framediml{\the\@tempdimb}%
-        \fi
-        \begingroup
-        \if#4Y\else \let\lst@framerulewidth\z@ \fi
-                \@tempdima\lst@framexleftmargin
-        \advance\@tempdima\lst@framexrightmargin
-        \advance\@tempdima\linewidth
-        \vrule\@width\@tempdima\@height\lst@framerulewidth \@depth\z@
-        \endgroup
-        \lst@frameCornerX\rlap{#2R}#5#1%
-        \ifdim\lst@framedimr<\@tempdimb
-            \xdef\lst@framedimr{\the\@tempdimb}%
-        \fi
-        \color@endgroup}%
-%    \end{macrocode}
-%    \begin{macrocode}
-      \if#2T\rlap{\raise\dp\z@\box\z@}%
-       \else\rlap{\lower\ht\z@\box\z@}\fi
-      \endgroup
-      \box\z@}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameCornerX}
-% typesets a single corner and returns |\@tempdimb|, the width of the corner.
-%    \begin{macrocode}
-\gdef\lst@frameCornerX#1#2#3#4{%
-    \setbox\@tempboxa\hbox{\csname\@lst @frame\if#3RR\fi #2\endcsname}%
-    \@tempdimb\wd\@tempboxa
-    \if #3R%
-        #1{\box\@tempboxa}%
-    \else
-        \if #3Y\expandafter#1\else
-               \@tempdimb\z@ \expandafter\vphantom \fi
-        {\box\@tempboxa}%
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameCalcDimA}
-% calculates an all over width; used by |\lst@frameh| and |\lst@frameInit|.
-%    \begin{macrocode}
-\gdef\lst@frameCalcDimA#1{%
-            \@tempdima\lst@rulesep
-    \advance\@tempdima\lst@framerulewidth
-    \multiply\@tempdima#1\relax
-    \advance\@tempdima\lst@frametextsep
-    \advance\@tempdima\lst@framerulewidth
-    \multiply\@tempdima\tw@}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameInit}
-% First we look which frame types we have on the left and on the right.
-% We speed up things if there are no vertical rules.
-%    \begin{macrocode}
-\lst@AddToHook{Init}{\lst@frameInit}
-\newbox\lst@framebox
-\gdef\lst@frameInit{%
-    \ifx\lst@framelshape\@empty \let\lst@frameL\@empty \fi
-    \ifx\lst@framershape\@empty \let\lst@frameR\@empty \fi
-    \def\lst@framevrule{\vrule\@width\lst@framerulewidth\relax}%
-%    \end{macrocode}
-% We adjust values to round corners if necessary.
-%    \begin{macrocode}
-    \lst@ifframeround
-        \lst@frameCalcDimA\z@ \@getcirc\@tempdima
-        \@tempdimb\@tempdima \divide\@tempdimb\tw@
-        \advance\@tempdimb -\@wholewidth
-        \edef\lst@frametextsep{\the\@tempdimb}%
-        \edef\lst@framerulewidth{\the\@wholewidth}%
-%    \end{macrocode}
-%    \begin{macrocode}
-        \lst@frameCalcDimA\@ne \@getcirc\@tempdima
-        \@tempdimb\@tempdima \divide\@tempdimb\tw@
-        \advance\@tempdimb -\tw@\@wholewidth
-        \advance\@tempdimb -\lst@frametextsep
-        \edef\lst@rulesep{\the\@tempdimb}%
-    \fi
-%    \end{macrocode}
-%    \begin{macrocode}
-    \lst@frameMakeBoxV\lst@framebox{\ht\strutbox}{\dp\strutbox}%
-    \def\lst@framelr{\copy\lst@framebox}%
-%    \end{macrocode}
-% Finally we typeset the rules (+ corners).
-% We possibly need to insert negative |\vskip| to remove space between
-% preceding text and top rule.
-% \begin{TODO}
-% Use |\vspace| instead of |\vskip|?
-% \end{TODO}
-%    \begin{macrocode}
-    \ifx\lst@frametshape\@empty\else
-        \lst@frameH T\lst@frametshape
-        \ifvoid\z@\else
-            \par\lst@parshape
-            \@tempdima-\baselineskip \advance\@tempdima\ht\z@
-            \ifdim\prevdepth<\@cclvi\p@\else
-                \advance\@tempdima\prevdepth
-            \fi
-            \ifdim\@tempdima<\z@
-                \vskip\@tempdima\vskip\lineskip
-            \fi
-            \noindent\box\z@\par
-            \lineskiplimit\maxdimen \lineskip\z@
-        \fi
-        \lst@frameSpreadV\lst@framextopmargin
-    \fi}
-%    \end{macrocode}
-% |\parshape\lst@parshape| ensures that the top rules correctly indented.
-% The bug was reported by \lsthelper{Marcin~Kasperski}{1999/04/28}{top rules
-% indented right inside itemize}.
-%
-% We typeset left and right rules every line.
-%    \begin{macrocode}
-\lst@AddToHook{EveryLine}{\lst@framelr}
-\global\let\lst@framelr\@empty
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameExit}
-% The rules at the bottom.
-%    \begin{macrocode}
-\lst@AddToHook{DeInit}
-    {\ifx\lst@framebshape\@empty\else \lst@frameExit \fi}
-\gdef\lst@frameExit{%
-    \lst@frameSpreadV\lst@framexbottommargin
-    \lst@frameH B\lst@framebshape
-    \ifvoid\z@\else
-        \everypar{}\par\lst@parshape\nointerlineskip\noindent\box\z@
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameSpreadV}
-% sets rules for vertical spread.
-%    \begin{macrocode}
-\gdef\lst@frameSpreadV#1{%
-    \ifdim\z@=#1\else
-        \everypar{}\par\lst@parshape\nointerlineskip\noindent
-        \lst@frameMakeBoxV\z@{#1}{\z@}%
-        \box\z@
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameTR}
-% \begin{macro}{\lst@frameBR}
-% \begin{macro}{\lst@frameBL}
-% \begin{macro}{\lst@frameTL}
-% These macros make a vertical and horizontal rule.
-% The implicit argument |\@tempdima| gives the size of two corners and is
-% provided by |\lst@frameh|.
-%    \begin{macrocode}
-\gdef\lst@frameTR{%
-    \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@
-    \kern-\lst@framerulewidth
-    \raise\lst@framerulewidth\hbox{%
-        \vrule\@width\lst@framerulewidth\@height\z@\@depth.5\@tempdima}}
-\gdef\lst@frameBR{%
-    \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@
-    \kern-\lst@framerulewidth
-    \vrule\@width\lst@framerulewidth\@height.5\@tempdima\@depth\z@}
-\gdef\lst@frameBL{%
-    \vrule\@width\lst@framerulewidth\@height.5\@tempdima\@depth\z@
-    \kern-\lst@framerulewidth
-    \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@}
-\gdef\lst@frameTL{%
-    \raise\lst@framerulewidth\hbox{%
-        \vrule\@width\lst@framerulewidth\@height\z@\@depth.5\@tempdima}%
-    \kern-\lst@framerulewidth
-    \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@}
-%    \end{macrocode}
-% \end{macro}\end{macro}\end{macro}\end{macro}
-%
-% \begin{macro}{\lst@frameRoundT}
-% \begin{macro}{\lst@frameRoundB}
-% are helper macros to typeset round corners. We set height and depth to
-% the visible parts of the circle font.
-%    \begin{macrocode}
-\gdef\lst@frameRoundT{%
-    \setbox\@tempboxa\hbox{\@circlefnt\char\@tempcnta}%
-    \ht\@tempboxa\lst@framerulewidth
-    \box\@tempboxa}
-\gdef\lst@frameRoundB{%
-    \setbox\@tempboxa\hbox{\@circlefnt\char\@tempcnta}%
-    \dp\@tempboxa\z@
-    \box\@tempboxa}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@frameRTR}
-% \begin{macro}{\lst@frameRBR}
-% \begin{macro}{\lst@frameRBL}
-% \begin{macro}{\lst@frameRTL}
-% The round corners.
-%    \begin{macrocode}
-\gdef\lst@frameRTR{%
-    \hb@xt@.5\@tempdima{\kern-\lst@framerulewidth
-                           \kern.5\@tempdima \lst@frameRoundT \hss}}
-\gdef\lst@frameRBR{%
-    \hb@xt@.5\@tempdima{\kern-\lst@framerulewidth
-    \advance\@tempcnta\@ne \kern.5\@tempdima \lst@frameRoundB \hss}}
-\gdef\lst@frameRBL{%
-    \advance\@tempcnta\tw@ \lst@frameRoundB
-    \kern-.5\@tempdima}
-\gdef\lst@frameRTL{%
-    \advance\@tempcnta\thr@@\lst@frameRoundT
-    \kern-.5\@tempdima}
-%    \end{macrocode}
-% \end{macro}\end{macro}\end{macro}\end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsection{Macro use for make}
-%
-% \begin{aspect}{make}
-% \begin{macro}{\lst@makemode}
-% \begin{macro}{\lst@ifmakekey}
-% If we've entered the special mode for Make, we save whether the last
-% identifier has been a first order keyword.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[keywords]{make}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@NewMode\lst@makemode
-\lst@AddToHook{Output}{%
-    \ifnum\lst@mode=\lst@makemode
-        \ifx\lst@thestyle\lst@gkeywords@sty
-            \lst@makekeytrue
-        \fi
-    \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\gdef\lst@makekeytrue{\let\lst@ifmakekey\iftrue}
-\gdef\lst@makekeyfalse{\let\lst@ifmakekey\iffalse}
-\global\lst@makekeyfalse % init
-%    \end{macrocode}
-% \end{macro}\end{macro}
-%
-% \begin{lstkey}{makemacrouse}
-% adjusts the character table if necessary
-%    \begin{macrocode}
-\lst@Key{makemacrouse}f[t]{\lstKV@SetIf{#1}\lst@ifmakemacrouse}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@MakeSCT}
-% If `macro use' is on, the opening |$(| prints preceding characters, enters
-% the special mode and merges the two characters with the following output.
-%
-%    \begin{macrocode}
-\gdef\lst@MakeSCT{%
-    \lst@ifmakemacrouse
-        \lst@ReplaceInput{$(}{%
-            \lst@PrintToken
-            \lst@EnterMode\lst@makemode{\lst@makekeyfalse}%
-            \lst@Merge{\lst@ProcessOther\$\lst@ProcessOther(}}%
-%    \end{macrocode}
-% The closing parenthesis tests for the mode and either processes |)| as usual
-% or outputs it right here (in keyword style if a keyword was between |$(| and
-% |)|).
-%    \begin{macrocode}
-        \lst@ReplaceInput{)}{%
-            \ifnum\lst@mode=\lst@makemode
-                \lst@PrintToken
-                \begingroup
-                    \lst@ProcessOther)%
-                    \lst@ifmakekey
-                        \let\lst@currstyle\lst@gkeywords@sty
-                    \fi
-                    \lst@OutputOther
-                \endgroup
-                \lst@LeaveMode
-            \else
-                \expandafter\lst@ProcessOther\expandafter)%
-            \fi}%
-%    \end{macrocode}
-% If \keyname{makemacrouse} is off then both |$(| are just `others'.
-%    \begin{macrocode}
-    \else
-        \lst@ReplaceInput{$(}{\lst@ProcessOther\$\lst@ProcessOther(}%
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \section{Typesetting a listing}
-%
-% \begingroup
-%    \begin{macrocode}
-%<*kernel>
-%    \end{macrocode}
-% \endgroup
-% \begin{macro}{\lst@lineno}
-% \begin{lstkey}{print}
-% \begin{lstkey}{firstline}
-% \begin{lstkey}{lastline}
-% \begin{lstkey}{linerange}
-% The `current line' counter and three keys.
-%    \begin{macrocode}
-\newcount\lst@lineno % \global
-\lst@AddToHook{InitVars}{\global\lst@lineno\@ne}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@Key{print}{true}[t]{\lstKV@SetIf{#1}\lst@ifprint}
-\lst@Key{firstline}\relax{\def\lst@firstline{#1\relax}}
-\lst@Key{lastline}\relax{\def\lst@lastline{#1\relax}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{PreSet}
-    {\let\lst@firstline\@ne \def\lst@lastline{9999999\relax}}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}\end{lstkey}\end{lstkey}\end{macro}
-% The following code is just copied from the current development version, and
-% from the |lstpatch.sty| file that Carsten left in version 1.3b for doing
-% line ranges with numbers and range markers.
-%
-% First, the options that control the line-range handling.
-%    \begin{macrocode}
-\lst@Key{linerange}\relax{\lstKV@OptArg[]{#1}{%
-    \def\lst@interrange{##1}\def\lst@linerange{##2,}}}
-\lst@Key{rangeprefix}\relax{\def\lst@rangebeginprefix{#1}%
-                            \def\lst@rangeendprefix{#1}}
-\lst@Key{rangesuffix}\relax{\def\lst@rangebeginsuffix{#1}%
-                            \def\lst@rangeendsuffix{#1}}
-\lst@Key{rangebeginprefix}{}{\def\lst@rangebeginprefix{#1}}
-\lst@Key{rangebeginsuffix}{}{\def\lst@rangebeginsuffix{#1}}
-\lst@Key{rangeendprefix}{}{\def\lst@rangeendprefix{#1}}
-\lst@Key{rangeendsuffix}{}{\def\lst@rangeendsuffix{#1}}
-\lst@Key{includerangemarker}{true}[t]{\lstKV@SetIf{#1}\lst@ifincluderangemarker}
-\lst@AddToHook{PreSet}{\def\lst@firstline{1\relax}%
-                       \let\lst@linerange\@empty}
-\lst@AddToHook{Init}
-{\ifx\lst@linerange\@empty
-     \edef\lst@linerange{{\lst@firstline}-{\lst@lastline},}%
- \fi
- \lst@GetLineInterval}%
-\def\lst@GetLineInterval{\expandafter\lst@GLI\lst@linerange\@nil}
-\def\lst@GLI#1,#2\@nil{\def\lst@linerange{#2}\lst@GLI@#1--\@nil}
-\def\lst@GLI@#1-#2-#3\@nil{%
-    \lst@IfNumber{#1}%
-    {\ifx\@empty#1\@empty
-         \let\lst@firstline\@ne
-     \else
-         \def\lst@firstline{#1\relax}%
-     \fi
-     \ifx\@empty#3\@empty
-         \def\lst@lastline{9999999\relax}%
-     \else
-         \ifx\@empty#2\@empty
-             \let\lst@lastline\lst@firstline
-         \else
-             \def\lst@lastline{#2\relax}%
-         \fi
-     \fi}%
-%    \end{macrocode}
-%    If we've found a general marker, we set firstline and lastline to 9999999.
-%    This prevents (almost) anything from being printed for now.
-%    \begin{macrocode}
-    {\def\lst@firstline{9999999\relax}%
-     \let\lst@lastline\lst@firstline
-%    \end{macrocode}
-%    We add the prefixes and suffixes to the markers.
-%    \begin{macrocode}
-     \let\lst@rangebegin\lst@rangebeginprefix
-     \lst@AddTo\lst@rangebegin{#1}\lst@Extend\lst@rangebegin\lst@rangebeginsuffix
-     \ifx\@empty#3\@empty
-         \let\lst@rangeend\lst@rangeendprefix
-         \lst@AddTo\lst@rangeend{#1}\lst@Extend\lst@rangeend\lst@rangeendsuffix
-     \else
-         \ifx\@empty#2\@empty
-             \let\lst@rangeend\@empty
-         \else
-             \let\lst@rangeend\lst@rangeendprefix
-             \lst@AddTo\lst@rangeend{#2}\lst@Extend\lst@rangeend\lst@rangeendsuffix
-         \fi
-     \fi
-%    \end{macrocode}
-%    The following definition will be executed in the SelectCharTable hook
-%    and here right now if we are already processing a listing.
-%    \begin{macrocode}
-     \global\def\lst@DefRange{\expandafter\lst@CArgX\lst@rangebegin\relax\lst@DefRangeB}%
-     \ifnum\lst@mode=\lst@Pmode \expandafter\lst@DefRange \fi}}
-%    \end{macrocode}
-%    \lst@DefRange is not inserted via a hook anymore. Instead it is now called
-%    directly from \lst@SelectCharTable. This was necessary to get rid of an
-%    interference with the escape-to-LaTeX-feature. The bug was reported by
-%    \lsthelper{Michael~Bachmann}{2004/07/21}{Keine label-Referenzierung
-%    m\"oglich...}. Another chance is due to the same bug: \lst@DefRange is
-%    redefined globally when the begin of code is found, see below. The bug was
-%    reported by \lsthelper{Tobias~Rapp}{2004/04/06}{undetected end of range if
-%    listing crosses page break} \lsthelper{Markus~Luisser}{2004/08/13}{Bug mit
-%    'linerangemarker' in umgebrochenen listings}
-%    \begin{macrocode}
-\lst@AddToHookExe{DeInit}{\global\let\lst@DefRange\@empty}
-%    \end{macrocode}
-%
-%    Actually defining the marker (via \lst@GLI@, \lst@DefRange, \lst@CArgX as
-%    seen above) is similar to \lst@DefDelimB---except that we unfold the first
-%    parameter and use different <execute>, <pre>, and <post> statements.
-%    \begin{macrocode}
-\def\lst@DefRangeB#1#2{\lst@DefRangeB@#1#2}
-\def\lst@DefRangeB@#1#2#3#4{%
-    \lst@CDef{#1{#2}{#3}}#4{}%
-    {\lst@ifincluderangemarker
-         \lst@LeaveMode
-         \let#1#4%
-         \lst@DefRangeEnd
-         \lst@InitLstNumber
-     \else
-         \@tempcnta\lst@lineno \advance\@tempcnta\@ne
-         \edef\lst@firstline{\the\@tempcnta\relax}%
-         \gdef\lst@OnceAtEOL{\let#1#4\lst@DefRangeEnd}%
-         \lst@InitLstNumber
-     \fi
-	 \global\let\lst@DefRange\lst@DefRangeEnd
-     \lst@CArgEmpty}%
-    \@empty}
-%    \end{macrocode}
-%
-% Modify labels and define |\lst@InitLstNumber| used above.
-% \lsthelper{Omair-Inam~Abdul-Matin}{2004/05/10}{experimental linerange
-% feature does not work with firstnumber}
-%    \begin{macrocode}
-\def\lstpatch@labels{%
-\gdef\lst@SetFirstNumber{%
-    \ifx\lst@firstnumber\@undefined
-        \@tempcnta 0\csname\@lst no@\lst@intname\endcsname\relax
-        \ifnum\@tempcnta=\z@ \else
-            \lst@nololtrue
-            \advance\@tempcnta\lst@advancenumber
-            \edef\lst@firstnumber{\the\@tempcnta\relax}%
-        \fi
-    \fi}%
-}
-\def\lst@InitLstNumber{%
-     \global\c@lstnumber\lst@firstnumber
-     \global\advance\c@lstnumber\lst@advancenumber
-     \global\advance\c@lstnumber-\lst@advancelstnum
-     \ifx \lst@firstnumber\c@lstnumber
-         \global\advance\c@lstnumber-\lst@advancelstnum
-     \fi%
-%    \end{macrocode}
-% \lstthanks{Byron~K.~Boulton}{bkboulton@berriehill.com}{2013/11/21}
-% reported, that the line numbers are off by one, if the are displayed when
-% a linerange is given by patterns and |includerangemarker=false| is
-% set. Adding this test corrects this behaviour.
-%    \begin{macrocode}
-     \lst@ifincluderangemarker\else%
-         \global\advance\c@lstnumber by 1%
-     \fi%
-     }
-%    \end{macrocode}
-%
-%    The end-marker is defined if and only if it's not empty. The definition is
-%    similar to \lst@DefDelimE---with the above exceptions and except that we
-%    define the re-entry point \lst@DefRangeE@@ as it is defined in the new
-%    version of \lst@MProcessListing above.
-%    \begin{macrocode}
-\def\lst@DefRangeEnd{%
-    \ifx\lst@rangeend\@empty\else
-        \expandafter\lst@CArgX\lst@rangeend\relax\lst@DefRangeE
-    \fi}
-\def\lst@DefRangeE#1#2{\lst@DefRangeE@#1#2}
-\def\lst@DefRangeE@#1#2#3#4{%
-    \lst@CDef{#1#2{#3}}#4{}%
-    {\let#1#4%
-     \edef\lst@lastline{\the\lst@lineno\relax}%
-     \lst@DefRangeE@@}%
-    \@empty}
-\def\lst@DefRangeE@@#1\@empty{%
-    \lst@ifincluderangemarker
-        #1\lst@XPrintToken
-    \fi
-    \lst@LeaveModeToPmode
-    \lst@BeginDropInput{\lst@Pmode}}
-\def\lst@LeaveModeToPmode{%
-    \ifnum\lst@mode=\lst@Pmode
-        \expandafter\lsthk@EndGroup
-    \else
-        \expandafter\egroup\expandafter\lst@LeaveModeToPmode
-    \fi}
-%    \end{macrocode}
-%
-%    Eventually we shouldn't forget to install \lst@OnceAtEOL, which must
-%    also be called in \lst@MSkipToFirst.
-%    \begin{macrocode}
-\lst@AddToHook{EOL}{\lst@OnceAtEOL\global\let\lst@OnceAtEOL\@empty}
-\gdef\lst@OnceAtEOL{}% Init
-\def\lst@MSkipToFirst{%
-    \global\advance\lst@lineno\@ne
-    \ifnum \lst@lineno=\lst@firstline
-        \def\lst@next{\lst@LeaveMode \global\lst@newlines\z@
-        \lst@OnceAtEOL \global\let\lst@OnceAtEOL\@empty
-        \lst@InitLstNumber % Added to work with modified \lsthk@PreInit.
-        \lsthk@InitVarsBOL
-        \lst@BOLGobble}%
-        \expandafter\lst@next
-    \fi}
-\def\lst@SkipToFirst{%
-    \ifnum \lst@lineno<\lst@firstline
-        \def\lst@next{\lst@BeginDropInput\lst@Pmode
-        \lst@Let{13}\lst@MSkipToFirst
-        \lst@Let{10}\lst@MSkipToFirst}%
-        \expandafter\lst@next
-    \else
-        \expandafter\lst@BOLGobble
-    \fi}
-%    \end{macrocode}
-%
-%    Finally the service macro \lst@IfNumber:
-%    \begin{macrocode}
-\def\lst@IfNumber#1{%
-    \ifx\@empty#1\@empty
-        \let\lst@next\@firstoftwo
-    \else
-        \lst@IfNumber@#1\@nil
-    \fi
-    \lst@next}
-\def\lst@IfNumber@#1#2\@nil{%
-    \let\lst@next\@secondoftwo
-    \ifnum`#1>47\relax \ifnum`#1>57\relax\else
-        \let\lst@next\@firstoftwo
-    \fi\fi}
-%    \end{macrocode}
-%
-% \begin{lstkey}{nolol}
-% is just a key here. We'll use it below, of course.
-%    \begin{macrocode}
-\lst@Key{nolol}{false}[t]{\lstKV@SetIf{#1}\lst@ifnolol}
-\def\lst@nololtrue{\let\lst@ifnolol\iftrue}
-\let\lst@ifnolol\iffalse % init
-%    \end{macrocode}
-% \end{lstkey}
-%
-%
-% \subsection{Floats, boxes and captions}
-%
-% \begin{lstkey}{captionpos}
-% \begin{lstkey}{abovecaptionskip}
-% \begin{lstkey}{belowcaptionskip}
-% \begin{lstkey}{label}
-% \begin{lstkey}{title}
-% \begin{lstkey}{caption}
-% Some keys and \ldots
-%    \begin{macrocode}
-\lst@Key{captionpos}{t}{\def\lst@captionpos{#1}}
-\lst@Key{abovecaptionskip}\smallskipamount{\def\lst@abovecaption{#1}}
-\lst@Key{belowcaptionskip}\smallskipamount{\def\lst@belowcaption{#1}}
-%    \end{macrocode}
-% \lsthelper{Rolf~Niepraschk}{2000/01/10}{key: title} proposed \keyname{title}.
-%    \begin{macrocode}
-\lst@Key{label}\relax{\def\lst@label{#1}}
-\lst@Key{title}\relax{\def\lst@title{#1}\let\lst@caption\relax}
-\lst@Key{caption}\relax{\lstKV@OptArg[{#1}]{#1}%
-    {\def\lst@caption{##2}\def\lst@@caption{##1}}%
-     \let\lst@title\@empty}
-\lst@AddToHookExe{TextStyle}
-    {\let\lst@caption\@empty \let\lst@@caption\@empty
-     \let\lst@title\@empty \let\lst@label\@empty}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\thelstlisting}
-% \begin{macro}{\lstlistingname}
-% \begin{lstkey}{numberbychapter}
-% \ldots\space and how the caption numbers look like. I switched to
-% |\@ifundefined| (instead of |\ifx| |\@undefined|) after an error report from
-% \lsthelper{Denis~Girou}{1999/07/26}{incompatible if hyperref loaded before
-% listings}.
-%
-% This is set |\AtBeginDocument| so that the user can specify whether or not
-% the counter should be reset at each chapter before the counter is defined,
-% using the |numberbychapter| key.
-%    \begin{macrocode}
-\AtBeginDocument{
-  \@ifundefined{thechapter}{\let\lst@ifnumberbychapter\iffalse}{}
-  \lst@ifnumberbychapter
-      \newcounter{lstlisting}[chapter]
-      \gdef\thelstlisting%
-           {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@lstlisting}
-  \else
-      \newcounter{lstlisting}
-      \gdef\thelstlisting{\@arabic\c@lstlisting}
-  \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@UserCommand\lstlistingname{Listing}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@Key{numberbychapter}{true}[t]{\lstKV@SetIf{#1}\lst@ifnumberbychapter}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@MakeCaption}
-% Before defining this macro, we ensure that some other control sequences
-% exist---\lsthelper{Adam~Prugel-Bennett}{2001/02/19}{\abovecaptionskip
-% undefined in slides.cls} reported problems with the slides document class.
-% In particular we allocate above- and belowcaption skip registers and define
-% |\@makecaption|, which is an exact copy of the definition in the article
-% class. To respect the LPPL: you should have a copy of this class on your
-% \TeX\ system or you can obtain a copy from the CTAN, e.g.~from the ftp-server
-% \texttt{ftp.dante.de}.
-%
-% Axel Sommerfeldt proposed a couple of improvements regarding captions and
-% titles. The first is to separate the definitions of the skip registers and
-% |\@makecaption|.
-%    \begin{macrocode}
-\@ifundefined{abovecaptionskip}
-{\newskip\abovecaptionskip
- \newskip\belowcaptionskip}{}
-\@ifundefined{@makecaption}
-{\long\def\@makecaption#1#2{%
-   \vskip\abovecaptionskip
-   \sbox\@tempboxa{#1: #2}%
-   \ifdim \wd\@tempboxa >\hsize
-     #1: #2\par
-   \else
-     \global \@minipagefalse
-     \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
-   \fi
-   \vskip\belowcaptionskip}%
-}{}
-%    \end{macrocode}
-% The introduction of |\fnum@lstlisting| is also due to Axel. Previously the
-% replacement text was used directly in |\lst@MakeCaption|. A |\noindent| has
-% been moved elsewhere and became |\@parboxrestore| after a bug report from
-% \lsthelper{Frank~Mittelbach}{2004/02/13}{Re: Info: Inkompatibilit\"at
-% zwischen caption und listings}.
-%    \begin{macrocode}
-\def\fnum@lstlisting{%
-  \lstlistingname
-  \ifx\lst@@caption\@empty\else~\thelstlisting\fi}%
-%    \end{macrocode}
-% Captions are set only for display style listings -- thanks to
-% \lsthelper{Peter~L\"offler}{2004/04/24}{pdfTeX warning (dest): name{figure.1}
-% has been referenced but does not exist} for reporting the bug and to
-% \lsthelper{Axel~Sommerfeldt}{2004/02/27}{Re: caption + listings + hyperref}
-% for analyzing the bug.
-% We |\refstepcounter| the listing counter if and only if |\lst@@caption| is
-% not empty. Otherwise we ensure correct hyper-references,
-% see |\lst@HRefStepCounter| below. We do this once a listing, namely at the
-% top.
-%    \begin{macrocode}
-\def\lst@MakeCaption#1{%
-  \lst@ifdisplaystyle
-    \ifx #1t%
-        \ifx\lst@@caption\@empty\expandafter\lst@HRefStepCounter \else
-                                \expandafter\refstepcounter
-        \fi {lstlisting}%
-        \ifx\lst@label\@empty\else \label{\lst@label}\fi
-%    \end{macrocode}
-% The following code has been moved here from the \hookname{Init} hook after
-% a bug report from \lsthelper{Rolf~Niepraschk}{2003/06/11}{pagebreak between
-% caption and listing}. Moreover the initialization of |\lst@name| et al have
-% been inserted here after a bug report from \lsthelper{Werner~Struckmann}
-% {2003/06/25}{undefined control sequence \lst@name}.
-% We make a `lol' entry if the name is neither empty nor a single space. But
-% we test |\lst@|(|@|)|caption| and |\lst@ifnolol| first.
-%    \begin{macrocode}
-        \let\lst@arg\lst@intname \lst@ReplaceIn\lst@arg\lst@filenamerpl
-        \global\let\lst@name\lst@arg \global\let\lstname\lst@name
-        \lst@ifnolol\else
-            \ifx\lst@@caption\@empty
-                \ifx\lst@caption\@empty
-                    \ifx\lst@intname\@empty \else \def\lst@temp{ }%
-                    \ifx\lst@intname\lst@temp \else
-                        \addcontentsline{lol}{lstlisting}\lst@name
-                    \fi\fi
-                \fi
-            \else
-                \addcontentsline{lol}{lstlisting}%
-                    {\protect\numberline{\thelstlisting}\lst@@caption}%
-            \fi
-         \fi
-     \fi
-%    \end{macrocode}
-% We make a caption if and only if the caption is not empty and the user
-% requested a caption at |#1| $\in\{\mathtt t,\mathtt b\}$. To disallow
-% pagebreaks between caption (or title) and a listing, we redefine the
-% primitive |\vskip| locally to insert |\nobreak|s. Note that we allow
-% pagebreaks in front of a `top-caption' and after a `bottom-caption'.
-% Also, the |\ignorespaces| in the |\@makecaption| call is added to match
-% what \LaTeX\ does in |\@caption|; the AMSbook class (and perhaps others)
-% assume this is present and attempt to strip it off when testing for an
-% empty caption, causing a bug noted by \lsthelper{Xiaobo~Peng}{2006/06/29}%
-% {captions not shown with amsbook class}.
-% \begin{TODO}
-% This redefinition is a brute force method. Is there a better one?
-% \end{TODO}
-%    \begin{macrocode}
-    \ifx\lst@caption\@empty\else
-        \lst@IfSubstring #1\lst@captionpos
-            {\begingroup \let\@@vskip\vskip
-             \def\vskip{\afterassignment\lst@vskip \@tempskipa}%
-             \def\lst@vskip{\nobreak\@@vskip\@tempskipa\nobreak}%
-             \par\@parboxrestore\normalsize\normalfont % \noindent (AS)
-             \ifx #1t\allowbreak \fi
-             \ifx\lst@title\@empty
-                 \lst@makecaption\fnum@lstlisting{\ignorespaces \lst@caption}
-             \else
-                 \lst@maketitle\lst@title % (AS)
-             \fi
-             \ifx #1b\allowbreak \fi
-             \endgroup}{}%
-    \fi
-  \fi}
-%    \end{macrocode}
-% I've inserted |\normalsize| after a bug report from
-% \lsthelper{Andreas~Matthias}{2000/01/04}{caption affected by basicstyle}
-% and moved it in front of |\@makecaption| after receiving another from
-% \lsthelper{Sonja~Weidmann}{2000/02/01}{listings and caption packages
-% not compatible}.
-% \end{macro}
-%
-% \begin{macro}{\lst@makecaption}
-% \begin{macro}{\lst@maketitle}
-% Axel proposed the first definition. The other two are default definitions.
-% They may be adjusted to make \packagename{listings} compatible with other
-% packages and classes.
-%    \begin{macrocode}
-\def\lst@makecaption{\@makecaption}
-\def\lst@maketitle{\@makecaption\lst@title@dropdelim}
-\def\lst@title@dropdelim#1{\ignorespaces}
-%    \end{macrocode}
-% The following \packagename{caption}(\packagename{2}) support comes also from
-% Axel.
-%    \begin{macrocode}
-\AtBeginDocument{%
-\@ifundefined{captionlabelfalse}{}{%
-  \def\lst@maketitle{\captionlabelfalse\@makecaption\@empty}}%
-\@ifundefined{caption@startrue}{}{%
-  \def\lst@maketitle{\caption@startrue\@makecaption\@empty}}%
-}
-%    \end{macrocode}
-% \end{macro}\end{macro}
-%
-% \begin{macro}{\lst@HRefStepCounter}
-% This macro sets the listing number to a negative value since the user
-% shouldn't refer to such a listing. If the \packagename{hyperref} package
-% is present, we use `lstlisting' (argument from above) to hyperref to.
-% The groups have been added to prevent other packages (namely
-% \packagename{tabularx}) from reading the locally changed counter
-% and writing it back globally. Thanks to \lsthelper{Michael~Niedermair}
-% {2001/09/18}{strange numbering of listings} for the report. Unfortunately
-% this localization led to another bug, see |\theHlstnumber|.
-%    \begin{macrocode}
-\def\lst@HRefStepCounter#1{%
-    \begingroup
-    \c@lstlisting\lst@neglisting
-    \advance\c@lstlisting\m@ne \xdef\lst@neglisting{\the\c@lstlisting}%
-    \ifx\hyper@refstepcounter\@undefined\else
-        \hyper@refstepcounter{#1}%
-    \fi
-    \endgroup}
-\gdef\lst@neglisting{\z@}% init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{boxpos}
-% \begin{macro}{\lst@boxtrue}
-% sets the vertical alignment of the (possibly) used box respectively indicates
-% that a box is used.
-%    \begin{macrocode}
-\lst@Key{boxpos}{c}{\def\lst@boxpos{#1}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\def\lst@boxtrue{\let\lst@ifbox\iftrue}
-\let\lst@ifbox\iffalse
-%    \end{macrocode}
-% \end{macro}\end{lstkey}
-%
-% \begin{lstkey}{float}
-% \begin{lstkey}{floatplacement}
-% Matthias Zenger asked for double-column floats, so I've inserted some code.
-% We first check for a star \ldots
-%    \begin{macrocode}
-\lst@Key{float}\relax[\lst@floatplacement]{%
-    \lstKV@SwitchCases{#1}%
-    {true&\let\lst@floatdefault\lst@floatplacement
-          \let\lst@float\lst@floatdefault\\%
-     false&\let\lst@floatdefault\relax
-           \let\lst@float\lst@floatdefault
-    }{\def\lst@next{\@ifstar{\let\lst@beginfloat\@dblfloat
-                             \let\lst@endfloat\end@dblfloat
-                             \lst@KFloat}%
-                            {\let\lst@beginfloat\@float
-                             \let\lst@endfloat\end@float
-                             \lst@KFloat}}
-      \edef\lst@float{#1}%
-      \expandafter\lst@next\lst@float\relax}}
-%    \end{macrocode}
-% \ldots\ and define |\lst@float|.
-%    \begin{macrocode}
-\def\lst@KFloat#1\relax{%
-    \ifx\@empty#1\@empty
-        \let\lst@float\lst@floatplacement
-    \else
-        \def\lst@float{#1}%
-    \fi}
-%    \end{macrocode}
-% The setting |\lst@AddToHook{PreSet}{\let\lst@float\relax}| has been
-% changed on request of \lsthelper{Tanguy~Fautr\'e}{2004/02/02}{listings
-% not following float directive?}. This also led to some adjustments above.
-%    \begin{macrocode}
-\lst@Key{floatplacement}{tbp}{\def\lst@floatplacement{#1}}
-\lst@AddToHook{PreSet}{\let\lst@float\lst@floatdefault}
-\lst@AddToHook{TextStyle}{\let\lst@float\relax}
-\let\lst@floatdefault\relax % init
-%    \end{macrocode}
-% |\lst@doendpe| is set according to |\lst@float| -- thanks to
-% \lsthelper{Andreas~Schmidt}{2004/05/15}{wrong spacing when a floating listing
-% follows \section} and \lsthelper{Heiko~Oberdiek}{2004/05/18}{dito}.
-%    \begin{macrocode}
-\lst@AddToHook{DeInit}{%
-    \ifx\lst@float\relax
-        \global\let\lst@doendpe\@doendpe
-    \else
-        \global\let\lst@doendpe\@empty
-    \fi}
-%    \end{macrocode}
-% The float type |\ftype@lstlisting| is set according to whether the
-% \packagename{float} package is loaded and whether \texttt{figure} and
-% \texttt{table} floats are defined. This is done at |\begin{document}| to
-% make the code independent of the order of package loading.
-%    \begin{macrocode}
-\AtBeginDocument{%
-\@ifundefined{c@float@type}%
-    {\edef\ftype@lstlisting{\ifx\c@figure\@undefined 1\else 4\fi}}
-    {\edef\ftype@lstlisting{\the\c@float@type}%
-     \addtocounter{float@type}{\value{float@type}}}%
-}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-%
-%
-% \subsection{Init and EOL}
-%
-% \begin{lstkey}{aboveskip}
-% \begin{lstkey}{belowskip}
-% We define and initialize these keys and prevent extra spacing for `inline'
-% listings (in particular if \packagename{fancyvrb} interface is active,
-% problem reported by \lsthelper{Denis~Girou}{1999/08/03}{wrong spacing}).
-%    \begin{macrocode}
-\lst@Key{aboveskip}\medskipamount{\def\lst@aboveskip{#1}}
-\lst@Key{belowskip}\medskipamount{\def\lst@belowskip{#1}}
-\lst@AddToHook{TextStyle}
-    {\let\lst@aboveskip\z@ \let\lst@belowskip\z@}
-%    \end{macrocode}
-% \end{lstkey}\end{lstkey}
-%
-% \begin{lstkey}{everydisplay}
-% \begin{macro}{\lst@ifdisplaystyle}
-% Some things depend on display-style listings.
-%    \begin{macrocode}
-\lst@Key{everydisplay}{}{\def\lst@EveryDisplay{#1}}
-\lst@AddToHook{TextStyle}{\let\lst@ifdisplaystyle\iffalse}
-\lst@AddToHook{DisplayStyle}{\let\lst@ifdisplaystyle\iftrue}
-\let\lst@ifdisplaystyle\iffalse
-%    \end{macrocode}
-% \end{macro}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@Init}
-% Begin a float or multicolumn environment if requested.
-%    \begin{macrocode}
-\def\lst@Init#1{%
-    \begingroup
-    \ifx\lst@float\relax\else
-        \edef\@tempa{\noexpand\lst@beginfloat{lstlisting}[\lst@float]}%
-        \expandafter\@tempa
-    \fi
-    \ifx\lst@multicols\@empty\else
-        \edef\lst@next{\noexpand\multicols{\lst@multicols}}
-        \expandafter\lst@next
-    \fi
-%    \end{macrocode}
-% In restricted horizontal \TeX\ mode we switch to |\lst@boxtrue|.
-% In that case we make appropriate box(es) around the listing.
-%    \begin{macrocode}
-    \ifhmode\ifinner \lst@boxtrue \fi\fi
-    \lst@ifbox
-        \lsthk@BoxUnsafe
-        \hbox to\z@\bgroup
-             $\if t\lst@boxpos \vtop
-        \else \if b\lst@boxpos \vbox
-        \else \vcenter \fi\fi
-        \bgroup \par\noindent
-    \else
-        \lst@ifdisplaystyle
-            \lst@EveryDisplay
-            \par\penalty-50\relax
-            \vspace\lst@aboveskip
-        \fi
-    \fi
-%    \end{macrocode}
-% Moved |\vspace| after |\par|---or we can get an empty line atop listings.
-% Bug reported by \lsthelper{Jim~Hefferon}{1999/08/27}{empty line before
-% listings with |\lstinputlisting|}.
-%
-% Now make the top caption.
-%    \begin{macrocode}
-    \normalbaselines
-    \abovecaptionskip\lst@abovecaption\relax
-    \belowcaptionskip\lst@belowcaption\relax
-    \lst@MakeCaption t%
-%    \end{macrocode}
-% Some initialization.
-% I removed |\par\nointerlineskip| |\normalbaselines| after bug report from
-% \lsthelper{Jim~Hefferon}{1999/08/23}{bad vertical space after lstlisting}.
-% He reported the same problem as Aidan Philip Heerdegen (see below), but I
-% immediately saw the bug here since Jim used |\parskip|$\,\neq0$.
-%    \begin{macrocode}
-    \lsthk@PreInit \lsthk@Init
-    \lst@ifdisplaystyle
-        \global\let\lst@ltxlabel\@empty
-        \if@inlabel
-            \lst@ifresetmargins
-                \leavevmode
-            \else
-                \xdef\lst@ltxlabel{\the\everypar}%
-                \lst@AddTo\lst@ltxlabel{%
-                    \global\let\lst@ltxlabel\@empty
-                    \everypar{\lsthk@EveryLine\lsthk@EveryPar}}%
-            \fi
-        \fi
-        \everypar\expandafter{\lst@ltxlabel
-                              \lsthk@EveryLine\lsthk@EveryPar}%
-    \else
-        \everypar{}\let\lst@NewLine\@empty
-    \fi
-    \lsthk@InitVars \lsthk@InitVarsBOL
-%    \end{macrocode}
-% The end of line character chr(13)=|^^M| controls the processing, see the
-% definition of |\lst@MProcessListing| below.
-% The argument |#1| is either |\relax| or |\lstenv@backslash|.
-%    \begin{macrocode}
-    \lst@Let{13}\lst@MProcessListing
-    \let\lst@Backslash#1%
-    \lst@EnterMode{\lst@Pmode}{\lst@SelectCharTable}%
-    \lst@InitFinalize}
-%    \end{macrocode}
-% Note: From version 0.19 on `listing processing' is implemented as an internal
-% mode, namely a mode with special character table. Since a bug report from
-% \lsthelper{Fermin~Reig}{2002/09/04}{bad top frame inside figure+centering}
-% |\rightskip| and the others are reset via \hookname{PreInit} and not via
-% \hookname{InitVars}.
-%    \begin{macrocode}
-\let\lst@InitFinalize\@empty % init
-\lst@AddToHook{PreInit}
-    {\rightskip\z@ \leftskip\z@ \parfillskip=\z@ plus 1fil
-     \let\par\@@par}
-\lst@AddToHook{EveryLine}{}% init
-\lst@AddToHook{EveryPar}{}% init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{showlines}
-% lets the user control whether empty lines at the end of a listing are
-% printed. But you know that if you've read the User's guide.
-%    \begin{macrocode}
-\lst@Key{showlines}f[t]{\lstKV@SetIf{#1}\lst@ifshowlines}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@DeInit}
-% Output the remaining characters and update all things. First I missed to
-% to use |\lst@ifdisplaystyle| here, but then \lsthelper{KP~Gores}{2001/07/11}
-% {\csname{par} after each \lstinline} reported a problem.
-% The |\everypar| has been put behind |\lsthk@ExitVars| after a bug report by
-% \lsthelper{Michael~Niedermair}{2002/05/14}{listings.sty und caption} and
-% I've added |\normalbaselines| after a bug report by \lsthelper{Georg~Rehm}
-% {2002/05/14}{listings.sty und lange captions} and |\normalcolor| after a
-% report by \lsthelper{Walter~E.~Brown}{2004/03/01}{captions at bottom of
-% listings inherit color from basicstyle}.
-%    \begin{macrocode}
-\def\lst@DeInit{%
-    \lst@XPrintToken \lst@EOLUpdate
-    \global\advance\lst@newlines\m@ne
-    \lst@ifshowlines
-        \lst@DoNewLines
-    \else
-        \setbox\@tempboxa\vbox{\lst@DoNewLines}%
-    \fi
-    \lst@ifdisplaystyle \par\removelastskip \fi
-    \lsthk@ExitVars\everypar{}\lsthk@DeInit\normalbaselines\normalcolor
-%    \end{macrocode}
-% Place the bottom caption.
-%    \begin{macrocode}
-    \lst@MakeCaption b%
-%    \end{macrocode}
-% Close the boxes if necessary and make a rule to get the right width.
-% I added the |\par\nointerlineskip| (and removed |\nointerlineskip| later
-% again) after receiving a bug report from \lsthelper{Aidan~Philip~Heerdegen}
-% {1999/07/23}{wrong vertical spacing}. |\everypar{}| is due to a bug report
-% from \lsthelper{Sonja~Weidmann}{2000/02/01}{listings and caption packages
-% not compatible}.
-%    \begin{macrocode}
-    \lst@ifbox
-        \egroup $\hss \egroup
-        \vrule\@width\lst@maxwidth\@height\z@\@depth\z@
-    \else
-        \lst@ifdisplaystyle
-            \par\penalty-50\vspace\lst@belowskip
-        \fi
-    \fi
-%    \end{macrocode}
-% End the multicolumn environment and/or float if necessary.
-%    \begin{macrocode}
-    \ifx\lst@multicols\@empty\else
-        \def\lst@next{\global\let\@checkend\@gobble
-                      \endmulticols
-                      \global\let\@checkend\lst@@checkend}
-        \expandafter\lst@next
-    \fi
-    \ifx\lst@float\relax\else
-        \expandafter\lst@endfloat
-    \fi
-    \endgroup}
-\let\lst@@checkend\@checkend
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@maxwidth}
-% is to be allocated, initialized and updated.
-%    \begin{macrocode}
-\newdimen\lst@maxwidth % \global
-\lst@AddToHook{InitVars}{\global\lst@maxwidth\z@}
-\lst@AddToHook{InitVarsEOL}
-    {\ifdim\lst@currlwidth>\lst@maxwidth
-         \global\lst@maxwidth\lst@currlwidth
-     \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@EOLUpdate}
-% What do you think this macro does?
-%    \begin{macrocode}
-\def\lst@EOLUpdate{\lsthk@EOL \lsthk@InitVarsEOL}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@MProcessListing}
-% This is what we have to do at EOL while processing a listing.
-% We output all remaining characters and update the variables.
-% If we've reached the last line, we check whether there is a next line
-% interval to input or not.
-%    \begin{macrocode}
-\def\lst@MProcessListing{%
-    \lst@XPrintToken \lst@EOLUpdate \lsthk@InitVarsBOL
-    \global\advance\lst@lineno\@ne
-    \ifnum \lst@lineno>\lst@lastline
-        \lst@ifdropinput \lst@LeaveMode \fi
-        \ifx\lst@linerange\@empty
-            \expandafter\expandafter\expandafter\lst@EndProcessListing
-        \else
-            \lst@interrange
-            \lst@GetLineInterval
-            \expandafter\expandafter\expandafter\lst@SkipToFirst
-        \fi
-    \else
-        \expandafter\lst@BOLGobble
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@EndProcessListing}
-% Default definition is |\endinput|.
-% This works for |\lstinputlisting|.
-%    \begin{macrocode}
-\let\lst@EndProcessListing\endinput
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{gobble}
-% The key sets the number of characters to gobble each line.
-%    \begin{macrocode}
-\lst@Key{gobble}{0}{\def\lst@gobble{#1}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@BOLGobble}
-% If the number is positive, we set a temporary counter and start a loop.
-%    \begin{macrocode}
-\def\lst@BOLGobble{%
-    \ifnum\lst@gobble>\z@
-        \@tempcnta\lst@gobble\relax
-        \expandafter\lst@BOLGobble@
-	\fi}
-%    \end{macrocode}
-% A nonpositive number terminates the loop (by not continuing).
-% Note: This is not the macro just used in |\lst@BOLGobble|.
-%    \begin{macrocode}
-\def\lst@BOLGobble@@{%
-    \ifnum\@tempcnta>\z@
-        \expandafter\lst@BOLGobble@
-    \fi}
-%    \end{macrocode}
-% If we gobble a backslash, we have to look whether this backslash ends an
-% environment. Whether the coming characters equal e.g.~|end{lstlisting}|,
-% we either end the environment or insert all just eaten characters after the
-% `continue loop' macro.
-%    \begin{macrocode}
-\def\lstenv@BOLGobble@@{%
-    \lst@IfNextChars\lstenv@endstring{\lstenv@End}%
-    {\advance\@tempcnta\m@ne \expandafter\lst@BOLGobble@@\lst@eaten}}
-%    \end{macrocode}
-% Now comes the loop: if we read |\relax|, EOL or FF, the next operation is
-% exactly the same token. Note that for FF (and tabs below) we test against
-% a macro which contains |\lst@ProcessFormFeed|. This was a bug analyzed by
-% \lsthelper{Heiko~Oberdiek}{2002/04/16}{Re: first experience ...}.
-%    \begin{macrocode}
-\def\lst@BOLGobble@#1{%
-    \let\lst@next#1%
-    \ifx \lst@next\relax\else
-    \ifx \lst@next\lst@MProcessListing\else
-    \ifx \lst@next\lst@processformfeed\else
-%    \end{macrocode}
-% Otherwise we use one of the two submacros.
-%    \begin{macrocode}
-    \ifx \lst@next\lstenv@backslash
-        \let\lst@next\lstenv@BOLGobble@@
-    \else
-        \let\lst@next\lst@BOLGobble@@
-%    \end{macrocode}
-% Now we really gobble characters. A tabulator decreases the temporary counter
-% by |\lst@tabsize| (and deals with remaining amounts, if necessary), \ldots
-%    \begin{macrocode}
-        \ifx #1\lst@processtabulator
-            \advance\@tempcnta-\lst@tabsize\relax
-            \ifnum\@tempcnta<\z@
-                \lst@length-\@tempcnta \lst@PreGotoTabStop
-            \fi
-%    \end{macrocode}
-% \ldots\space whereas any other character decreases the counter by one.
-%    \begin{macrocode}
-        \else
-            \advance\@tempcnta\m@ne
-        \fi
-    \fi \fi \fi \fi
-    \lst@next}
-%    \end{macrocode}
-%    \begin{macrocode}
-\def\lst@processformfeed{\lst@ProcessFormFeed}
-\def\lst@processtabulator{\lst@ProcessTabulator}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{List of listings}
-%
-% \begin{lstkey}{name}
-% \begin{macro}{\lstname}
-% \begin{macro}{\lst@name}
-% \begin{macro}{\lst@intname}
-% Each pretty-printing command values |\lst@intname| before setting any keys.
-%    \begin{macrocode}
-\lst@Key{name}\relax{\def\lst@intname{#1}}
-\lst@AddToHookExe{PreSet}{\global\let\lst@intname\@empty}
-\lst@AddToHook{PreInit}{%
-    \let\lst@arg\lst@intname \lst@ReplaceIn\lst@arg\lst@filenamerpl
-    \global\let\lst@name\lst@arg \global\let\lstname\lst@name}
-%    \end{macrocode}
-% Use of |\lst@ReplaceIn| removes a bug first reported by
-% \lsthelper{Magne~Rudshaug}{1998/01/09}{_ and list of listings}.
-% Here is the replacement list.
-%    \begin{macrocode}
-\def\lst@filenamerpl{_\textunderscore $\textdollar -\textendash}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{lstkey}
-%
-% \begin{macro}{\l@lstlisting}
-% prints one `lol' line.
-%    \begin{macrocode}
-\def\l@lstlisting#1#2{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstlistlistingname}
-% contains simply the header name.
-%    \begin{macrocode}
-\lst@UserCommand\lstlistlistingname{Listings}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstlistoflistings}
-% We make local adjustments and call |\tableofcontents|. This way,
-% redefinitions of that macro (e.g.~without any |\MakeUppercase| inside)
-% also take effect on the list of listings.
-%    \begin{macrocode}
-\lst@UserCommand\lstlistoflistings{\bgroup
-    \let\contentsname\lstlistlistingname
-    \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
-    \tableofcontents \egroup}
-%    \end{macrocode}
-% For KOMA-script classes, we define it a la KOMA thanks to a bug report by
-% \lsthelper{Tino~Langer}{2003/11/01}{koma-script's listsleft option does not
-% affect lol}.  \lsthelper{Markus~Kohm}{2006/08/12}{koma-script support is
-% broken} suggested a much-improved version of this, which also works with
-% the \packagename{float} package.  The following few comments are from Markus.
-%
-% Make use of |\float@listhead| if defined (e.g. using float or KOMA-Script)
-%    \begin{macrocode}
-\@ifundefined{float@listhead}{}{%
-  \renewcommand*{\lstlistoflistings}{%
-    \begingroup
-%    \end{macrocode}
-% Switch to one-column mode if the switch for switching is available.
-%    \begin{macrocode}
-      \@ifundefined{@restonecoltrue}{}{%
-        \if@twocolumn
-          \@restonecoltrue\onecolumn
-        \else
-          \@restonecolfalse
-        \fi
-      }%
-      \float@listhead{\lstlistlistingname}%
-%    \end{macrocode}
-% Set |\parskip| to 0pt (should be!), |\parindent| to 0pt (better but not always
-% needed), |\parfillskip| to 0pt plus 1fil (should be!).
-%    \begin{macrocode}
-      \parskip\z@\parindent\z@\parfillskip \z@ \@plus 1fil%
-      \@starttoc{lol}%
-%    \end{macrocode}
-% Switch back to twocolumn (see above).
-%    \begin{macrocode}
-      \@ifundefined{@restonecoltrue}{}{%
-        \if@restonecol\twocolumn\fi
-      }%
-    \endgroup
-  }%
-}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\float@addtolists}
-% The \packagename{float} package defines a generic way for packages to add
-% things (such as chapter names) to all of the lists of floats other than the
-% standard figure and table lists.  Each package that defines a list of
-% floats adds a command to |\float@addtolists|, and then packages (such as
-% the KOMA-script document classes) which wish to add things to all lists of
-% floats can then use it, without needing to be aware of all of the possible
-% lists that could exist.  Thanks to \lsthelper{Markus~Kohm}{-}{2007/02/25}
-% for the suggestion.
-%
-% Unfortunately, \packagename{float} defines this with |\newcommand|; thus,
-% to avoid conflict, we have to redefine it after \packagename{float} is
-% loaded.  |\AtBeginDocument| is the easiest way to do this.  Again, thanks
-% to Markus for the advice.
-%    \begin{macrocode}
-\AtBeginDocument{%
-  \@ifundefined{float@addtolists}%
-    {\gdef\float@addtolists#1{\addtocontents{lol}{#1}}}%
-    {\let\orig@float@addtolists\float@addtolists
-     \gdef\float@addtolists#1{%
-       \addtocontents{lol}{#1}%
-       \orig@float@addtolists{#1}}}%
-}%
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Inline listings}\label{iInlineListings}
-%
-% \subsubsection{Processing inline listings}\label{uProcessingInline}
-%
-% \begin{macro}{\lstinline}
-% In addition to |\lsthk@PreSet|, we use |boxpos=b| and flexiblecolumns.
-% I've inserted |\leavevmode| after bug report from \lsthelper{Michael~Weber}
-% {1999/12/16}{wrong spacing in list environments}. \lsthelper{Olivier~Lecarme}
-% {2001/07/30}{inconsistent `break' when \lstinline is used inside caption}
-% reported a problem which has gone after removing |\let| |\lst@newlines|
-% |\@empty| (now |\lst@newlines| is a counter!). Unfortunately I don't know
-% the reason for inserting this code some time ago! At the end of the macro we
-% check the delimiter.
-%    \begin{macrocode}
-\newcommand\lstinline[1][]{%
-    \leavevmode\bgroup % \hbox\bgroup --> \bgroup
-      \def\lst@boxpos{b}%
-      \lsthk@PreSet\lstset{flexiblecolumns,#1}%
-      \lsthk@TextStyle
-      \@ifnextchar\bgroup{%
-%    \end{macrocode}
-% \lstthanks{Luc~Van~Eycken}{Luc.VanEycken@esat.kuleuven.be}{2014/01/22}
-% reported, that the experimental implementation of |\lstinline| with
-% braces instead of characters surrounding the source code resulted in an
-% error if used in a tabular environment. He found that this error comes
-% from the master counter (cf. appendix D (Dirty Tricks), item 5. (Brace
-% hacks), of the TeXbook (p. 385-386)). Adding the following line at this
-% point
-% \begin{verbatim}
-%         \ifnum`{=0}\fi%
-% \end{verbatim}
-% remedies the wrong behaviour. But \lstthanks{Qing Lee}{2014/06/28} pointed out,
-% that this breaks code like the one showed in \ref{uListingsArguments} on
-% \pageref{uListingsArguments} and proposed another
-% solution which in turn broke the code needed by Luc:
-% \begin{verbatim}
-% % \renewcommand\lstinline[1][]{%
-% %   \leavevmode\bgroup % \hbox\bgroup --> \bgroup
-% %   \def\lst@boxpos{b}%
-% %   \lsthk@PreSet\lstset{flexiblecolumns,#1}%
-% %   \lsthk@TextStyle
-% %   \ifnum\iffalse{\fi`}=\z@\fi
-% %   \@ifnextchar\bgroup{%
-% %     \ifnum`{=\z@}\fi%
-% %     \afterassignment\lst@InlineG \let\@let@token}{%
-% %     \ifnum`{=\z@}\fi\lstinline@}}
-% \end{verbatim}
-% So finally the old code comes back and the people, who need a
-% |\lstinline| with braces, should use the workaround from section
-% \ref{uListingsArguments} on page \pageref{uListingsArguments}.
-%    \begin{macrocode}
-        \afterassignment\lst@InlineG \let\@let@token}%
-                         \lstinline@}
-\def\lstinline@#1{%
-    \lst@Init\relax
-    \lst@IfNextCharActive{\lst@InlineM#1}{\lst@InlineJ#1}}
-\lst@AddToHook{TextStyle}{}% init
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@AddToHook{SelectCharTable}{\lst@inlinechars}
-\global\let\lst@inlinechars\@empty
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@InlineM}
-% \begin{macro}{\lst@InlineJ}
-% treat the cases of `normal' inlines and inline listings inside an argument.
-% In the first case the given character ends the inline listing and EOL within
-% such a listing immediately ends it and produces an error message.
-%    \begin{macrocode}
-\def\lst@InlineM#1{\gdef\lst@inlinechars{%
-    \lst@Def{`#1}{\lst@DeInit\egroup\global\let\lst@inlinechars\@empty}%
-    \lst@Def{13}{\lst@DeInit\egroup \global\let\lst@inlinechars\@empty
-        \PackageError{Listings}{lstinline ended by EOL}\@ehc}}%
-    \lst@inlinechars}
-%    \end{macrocode}
-% In the other case we get all characters up to |#1|, make these characters
-% active, execute (typeset) them and end the listing (all via temporary macro).
-% That's all about it.
-%    \begin{macrocode}
-\def\lst@InlineJ#1{%
-    \def\lst@temp##1#1{%
-        \let\lst@arg\@empty \lst@InsideConvert{##1}\lst@arg
-        \lst@DeInit\egroup}%
-    \lst@temp}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lst@InlineG}
-% is experimental.
-%    \begin{macrocode}
-\def\lst@InlineG{%
-    \lst@Init\relax
-    \lst@IfNextCharActive{\lst@InlineM\}}%
-                         {\let\lst@arg\@empty \lst@InlineGJ}}
-\def\lst@InlineGJ{\futurelet\@let@token\lst@InlineGJTest}
-\def\lst@InlineGJTest{%
-    \ifx\@let@token\egroup
-        \afterassignment\lst@InlineGJEnd
-        \expandafter\let\expandafter\@let@token
-    \else
-        \ifx\@let@token\@sptoken
-            \let\lst@next\lst@InlineGJReadSp
-        \else
-            \let\lst@next\lst@InlineGJRead
-        \fi
-        \expandafter\lst@next
-    \fi}
-\def\lst@InlineGJEnd{\lst@arg\lst@DeInit\egroup}
-\def\lst@InlineGJRead#1{%
-    \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
-    \lst@InlineGJ}
-\def\lst@InlineGJReadSp#1{%
-    \lccode`\~=`\ \lowercase{\lst@lAddTo\lst@arg~}%
-    \lst@InlineGJ#1}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsubsection{Short inline listing environments}
-%
-% The implementation in this section is based on the \packagename{shortvrb}
-% package, which is part of |doc.dtx| from the Standard \LaTeX\ documentation
-% package, version 2006/02/02 v2.1d.  Portions of it are thus copyright
-% 1993--2006 by The \LaTeX3 Project and copyright 1989--1999 by Frank
-% Mittelbach.
-%
-% \begin{macro}{\lstMakeShortInline}
-% \begin{macro}{\lstMakeShortInline@}
-% First, we supply an optional argument if it's omitted.
-%    \begin{macrocode}
-\newcommand\lstMakeShortInline[1][]{%
-  \def\lst@shortinlinedef{\lstinline[#1]}%
-  \lstMakeShortInline@}%
-\def\lstMakeShortInline@#1{%
-  \expandafter\ifx\csname lst@ShortInlineOldCatcode\string#1\endcsname\relax
-    \lst@shortlstinlineinfo{Made }{#1}%
-    \lst@add@special{#1}%
-%    \end{macrocode}
-% The character's current catcode is stored in
-% |\lst@ShortInlineOldCatcode\|\meta{c}.
-%    \begin{macrocode}
-    \expandafter
-    \xdef\csname lst@ShortInlineOldCatcode\string#1\endcsname{\the\catcode`#1}%
-%    \end{macrocode}
-% The character is spliced into the definition using the same trick as
-% used in |\verb| (for instance), having activated |~| in a group.
-%    \begin{macrocode}
-    \begingroup
-      \catcode`\~\active  \lccode`\~`#1%
-      \lowercase{%
-%    \end{macrocode}
-% The character's old meaning is recorded
-% in |\lst@ShortInlineOldMeaning\|\meta{c} prior to assigning it a new one.
-%    \begin{macrocode}
-        \global\expandafter\let
-          \csname lst@ShortInlineOldMeaning\string#1\endcsname~%
-          \expandafter\gdef\expandafter~\expandafter{\lst@shortinlinedef#1}}%
-    \endgroup
-%    \end{macrocode}
-% Finally the character is made active.
-%    \begin{macrocode}
-    \global\catcode`#1\active
-%    \end{macrocode}
-% If we suspect that \meta{c} is already a short reference, we tell
-% the user. Now he or she is responsible if anything goes wrong\,\dots
-% (Change in \packagename{listings}: We give a proper error here.)
-%    \begin{macrocode}
-  \else
-    \PackageError{Listings}%
-    {\string\lstMakeShorterInline\ definitions cannot be nested}%
-    {Use \string\lstDeleteShortInline first.}%
-    {}%
-  \fi}
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\lstDeleteShortInline}
-%    \begin{macrocode}
-\def\lstDeleteShortInline#1{%
-  \expandafter\ifx\csname lst@ShortInlineOldCatcode\string#1\endcsname\relax
-    \PackageError{Listings}%
-    {#1 is not a short reference for \string\lstinline}%
-    {Use \string\lstMakeShortInline first.}%
-    {}%
-  \else
-    \lst@shortlstinlineinfo{Deleted }{#1 as}%
-    \lst@rem@special{#1}%
-    \global\catcode`#1\csname lst@ShortInlineOldCatcode\string#1\endcsname
-    \global \expandafter\let%
-      \csname lst@ShortInlineOldCatcode\string#1\endcsname \relax
-    \ifnum\catcode`#1=\active
-      \begingroup
-        \catcode`\~\active  \lccode`\~`#1%
-        \lowercase{%
-          \global\expandafter\let\expandafter~%
-          \csname lst@ShortInlineOldMeaning\string#1\endcsname}%
-      \endgroup
-    \fi
-  \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@shortlstinlineinfo}
-%    \begin{macrocode}
-\def\lst@shortlstinlineinfo#1#2{%
-     \PackageInfo{Listings}{%
-       #1\string#2 a short reference for \string\lstinline}}
-%    \end{macrocode}
-%  \end{macro}
-%
-% \begin{macro}{\lst@add@special}
-% This helper macro adds its argument to the
-% |\dospecials| macro which is conventionally used by verbatim macros
-% to alter the catcodes of the currently active characters.  We need
-% to add |\do\|\meta{c} to the expansion of |\dospecials| after
-% removing the character if it was already there to avoid multiple
-% copies building up should |\lstMakeShortInline| not be balanced by
-% |\lstDeleteShortInline| (in case anything that uses |\dospecials|
-% cares about repetitions).
-%    \begin{macrocode}
-\def\lst@add@special#1{%
-  \lst@rem@special{#1}%
-  \expandafter\gdef\expandafter\dospecials\expandafter
-    {\dospecials \do #1}%
-%    \end{macrocode}
-% Similarly we have to add |\@makeother\|\meta{c} to |\@sanitize|
-% (which is used in things like "\index" to re-catcode all special
-% characters except braces).
-%    \begin{macrocode}
-  \expandafter\gdef\expandafter\@sanitize\expandafter
-    {\@sanitize \@makeother #1}}
-%    \end{macrocode}
-% \end{macro}
-% \begin{macro}{\lst@rem@special}
-% The inverse of |\lst@add@special| is slightly trickier.  |\do| is
-% re-defined to expand to nothing if its argument is the character of
-% interest, otherwise to expand simply to the argument.  We can then
-% re-define |\dospecials| to be the expansion of itself.  The space
-% after |=`##1| prevents an expansion to |\relax|!
-%    \begin{macrocode}
-\def\lst@rem@special#1{%
-  \def\do##1{%
-    \ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}%
-  \xdef\dospecials{\dospecials}%
-%    \end{macrocode}
-% Fixing |\@sanitize| is the same except that we need to re-define
-% |\@makeother| which obviously needs to be done in a group.
-%    \begin{macrocode}
-  \begingroup
-    \def\@makeother##1{%
-      \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
-    \xdef\@sanitize{\@sanitize}%
-  \endgroup}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{The input command}\label{iTheInputCommand}
-%
-% \begin{macro}{\lst@MakePath}
-% \begin{lstkey}{inputpath}
-% The macro appends a slash to a path if necessary.
-%    \begin{macrocode}
-\def\lst@MakePath#1{\ifx\@empty#1\@empty\else\lst@MakePath@#1/\@nil/\fi}
-\def\lst@MakePath@#1/{#1/\lst@MakePath@@}
-\def\lst@MakePath@@#1/{%
-    \ifx\@nil#1\expandafter\@gobble
-         \else \ifx\@empty#1\else #1/\fi \fi
-    \lst@MakePath@@}
-%    \end{macrocode}
-% Now we can empty the path or use |\lst@MakePath|.
-%    \begin{macrocode}
-\lst@Key{inputpath}{}{\edef\lst@inputpath{\lst@MakePath{#1}}}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{macro}
-%
-% \begin{macro}{\lstinputlisting}
-% inputs the listing or asks the user for a new file name.
-%    \begin{macrocode}
-\def\lstinputlisting{%
-    \begingroup \lst@setcatcodes \lst@inputlisting}
-\newcommand\lst@inputlisting[2][]{%
-    \endgroup
-    \def\lst@set{#1}%
-    \IfFileExists{\lst@inputpath#2}%
-        {\expandafter\lst@InputListing\expandafter{\lst@inputpath#2}}%
-        {\filename@parse{\lst@inputpath#2}%
-         \edef\reserved@a{\noexpand\lst@MissingFileError
-             {\filename@area\filename@base}%
-             {\ifx\filename@ext\relax tex\else\filename@ext\fi}}%
-         \reserved@a}%
-    \lst@doendpe \@newlistfalse \ignorespaces}
-%    \end{macrocode}
-% We use |\lst@doendpe| to remove indention at the beginning of the next
-% line---except there is an empty line after |\lstinputlisting|. Bug was
-% reported by \lsthelper{David~John~Evans}{1999/06/08}{indention after
-% listings} and \lsthelper{David~Carlisle}{1999/06/08}{LaTeX `display
-% environment' code} pointed me to the solution.
-% \end{macro}
-%
-% \begin{macro}{\lst@MissingFileError}
-% is a derivation of \LaTeX's |\@missingfileerror|. The parenthesis have been
-% added after \lsthelper{Heiko~Oberdiek}{2003/01/14}{File `Makefile.tex' not
-% found} reported about a problem discussed on TEX-D-L.
-%    \begin{macrocode}
-\def\lst@MissingFileError#1#2{%
-    \typeout{^^J! Package Listings Error: File `#1(.#2)' not found.^^J%
-        ^^JType X to quit or <RETURN> to proceed,^^J%
-        or enter new name. (Default extension: #2)^^J}%
-    \message{Enter file name: }%
-    {\endlinechar\m@ne \global\read\m@ne to\@gtempa}%
-%    \end{macrocode}
-% Typing |x| or |X| exits.
-%    \begin{macrocode}
-    \ifx\@gtempa\@empty \else
-        \def\reserved@a{x}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
-        \def\reserved@a{X}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
-%    \end{macrocode}
-% In all other cases we try the new file name.
-%    \begin{macrocode}
-        \filename@parse\@gtempa
-        \edef\filename@ext{%
-            \ifx\filename@ext\relax#2\else\filename@ext\fi}%
-        \edef\reserved@a{\noexpand\IfFileExists %
-                {\filename@area\filename@base.\filename@ext}%
-            {\noexpand\lst@InputListing %
-                {\filename@area\filename@base.\filename@ext}}%
-            {\noexpand\lst@MissingFileError
-                {\filename@area\filename@base}{\filename@ext}}}%
-        \expandafter\reserved@a %
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@ifdraft}
-% makes use of |\lst@ifprint|. \lsthelper{Enrico~Straube}{2002/02/12}
-% {de.comp.text.tex: listings und draft Modus} requested the final option.
-%    \begin{macrocode}
-\let\lst@ifdraft\iffalse
-\DeclareOption{draft}{\let\lst@ifdraft\iftrue}
-\DeclareOption{final}{\let\lst@ifdraft\iffalse}
-\lst@AddToHook{PreSet}
-    {\lst@ifdraft
-         \let\lst@ifprint\iffalse
-         \@gobbletwo\fi\fi
-     \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@InputListing}
-% The one and only argument is the file name, but we have the `implicit'
-% argument |\lst@set|. Note that |\lst@Init| takes |\relax| as argument.
-%    \begin{macrocode}
-\def\lst@InputListing#1{%
-    \begingroup
-      \lsthk@PreSet \gdef\lst@intname{#1}%
-      \expandafter\lstset\expandafter{\lst@set}%
-      \lsthk@DisplayStyle
-      \catcode\active=\active
-      \lst@Init\relax \let\lst@gobble\z@
-      \lst@SkipToFirst
-      \lst@ifprint \def\lst@next{\input{#1}}%
-             \else \let\lst@next\@empty \fi
-      \lst@next
-      \lst@DeInit
-    \endgroup}
-%    \end{macrocode}
-% The line |\catcode\active=\active|, which makes the CR-character active,
-% has been added after a bug report by \lsthelper{Rene~H.~Larsen}{2002/04/15}
-% {\lstinputlistings and texcl conflict}.
-% \end{macro}
-%
-% \begin{macro}{\lst@SkipToFirst}
-% The end of line character either processes the listing or is responsible for
-% dropping lines up to first printing line.
-%    \begin{macrocode}
-\def\lst@SkipToFirst{%
-    \ifnum \lst@lineno<\lst@firstline
-%    \end{macrocode}
-% We drop the input and redefine the end of line characters.
-%    \begin{macrocode}
-        \lst@BeginDropInput\lst@Pmode
-        \lst@Let{13}\lst@MSkipToFirst
-        \lst@Let{10}\lst@MSkipToFirst
-    \else
-        \expandafter\lst@BOLGobble
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@MSkipToFirst}
-% We just look whether to drop more lines or to leave the mode which restores
-% the definition of chr(13) and chr(10).
-%    \begin{macrocode}
-\def\lst@MSkipToFirst{%
-    \global\advance\lst@lineno\@ne
-    \ifnum \lst@lineno=\lst@firstline
-        \lst@LeaveMode \global\lst@newlines\z@
-        \lsthk@InitVarsBOL
-        \expandafter\lst@BOLGobble
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{The environment}
-%
-%
-% \subsubsection{Low-level processing}
-%
-% \begin{macro}{\lstenv@DroppedWarning}
-% gives a warning if characters have been dropped.
-%    \begin{macrocode}
-\def\lstenv@DroppedWarning{%
-    \ifx\lst@dropped\@undefined\else
-        \PackageWarning{Listings}{Text dropped after begin of listing}%
-    \fi}
-\let\lst@dropped\@undefined % init
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstenv@Process}
-% We execute `|\lstenv@ProcessM|' or |\lstenv@ProcessJ| according to whether we
-% find an active EOL or a nonactive |^^J|.
-%    \begin{macrocode}
-\begingroup \lccode`\~=`\^^M\lowercase{%
-\gdef\lstenv@Process#1{%
-    \ifx~#1%
-%    \end{macrocode}
-% We make no extra |\lstenv@ProcessM| definition since there is nothing to do
-% at all if we've found an active EOL.
-%    \begin{macrocode}
-        \lstenv@DroppedWarning \let\lst@next\lst@SkipToFirst
-    \else\ifx^^J#1%
-        \lstenv@DroppedWarning \let\lst@next\lstenv@ProcessJ
-    \else
-        \let\lst@dropped#1\let\lst@next\lstenv@Process
-    \fi \fi
-    \lst@next}
-}\endgroup
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstenv@ProcessJ}
-% Now comes the horrible scenario: a listing inside an argument. We've
-% already worked in section \ref{iApplicationsTo} for this. Here we must get
-% all characters up to `end environment'. We distinguish the cases `command
-% fashion' and `true environment'.
-%    \begin{macrocode}
-\def\lstenv@ProcessJ{%
-    \let\lst@arg\@empty
-    \ifx\@currenvir\lstenv@name
-        \expandafter\lstenv@ProcessJEnv
-    \else
-%    \end{macrocode}
-% The first case is pretty simple: The code is terminated by
-% |\end|\meta{name of environment}. Thus we expand that control sequence
-% before defining a temporary macro, which gets the listing and does all
-% the rest. Back to the definition of |\lstenv@ProcessJ| we call the
-% temporary macro after expanding |\fi|.
-%    \begin{macrocode}
-        \expandafter\def\expandafter\lst@temp\expandafter##1%
-            \csname end\lstenv@name\endcsname
-                {\lst@InsideConvert{##1}\lstenv@ProcessJ@}%
-        \expandafter\lst@temp
-    \fi}
-%    \end{macrocode}
-% We must append an active backslash and the `end string' to |\lst@arg|. So all
-% (in fact most) other processing won't notice that the code has been inside
-% an argument. But the EOL character is chr(10)=|^^J| now and not chr(13).
-%    \begin{macrocode}
-\begingroup \lccode`\~=`\\\lowercase{%
-\gdef\lstenv@ProcessJ@{%
-    \lst@lExtend\lst@arg
-        {\expandafter\ \expandafter~\lstenv@endstring}%
-    \catcode10=\active \lst@Let{10}\lst@MProcessListing
-%    \end{macrocode}
-% We execute |\lst@arg| to typeset the listing.
-%    \begin{macrocode}
-    \lst@SkipToFirst \lst@arg}
-}\endgroup
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstenv@ProcessJEnv}
-% The `true environment' case is more complicated. We get all characters up to
-% an |\end| and the following argument. If that equals |\lstenv@name|, we have
-% found the end of environment and start typesetting.
-%    \begin{macrocode}
-\def\lstenv@ProcessJEnv#1\end#2{\def\lst@temp{#2}%
-    \ifx\lstenv@name\lst@temp
-        \lst@InsideConvert{#1}%
-        \expandafter\lstenv@ProcessJ@
-    \else
-%    \end{macrocode}
-% Otherwise we append the characters including the eaten |\end| and the eaten
-% argument to current |\lst@arg|. And we look for the end of environment again.
-%    \begin{macrocode}
-        \lst@InsideConvert{#1\\end\{#2\}}%
-        \expandafter\lstenv@ProcessJEnv
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstenv@backslash}
-% Coming to a backslash we either end the listing or process a backslash and
-% insert the eaten characters again.
-%    \begin{macrocode}
-\def\lstenv@backslash{%
-    \lst@IfNextChars\lstenv@endstring
-        {\lstenv@End}%
-        {\expandafter\lsts@backslash \lst@eaten}}%
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstenv@End}
-% This macro has just been used and terminates a listing environment:
-% We call the `end environment' macro using |\end| or as a command.
-%    \begin{macrocode}
-\def\lstenv@End{%
-    \ifx\@currenvir\lstenv@name
-        \edef\lst@next{\noexpand\end{\lstenv@name}}%
-    \else
-        \def\lst@next{\csname end\lstenv@name\endcsname}%
-    \fi
-    \lst@next}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsubsection{Defining new environments}
-%
-% \begin{macro}{\lstnewenvironment}
-% Now comes the main command. We define undefined environments only. On the
-% parameter text |#1#2#| (in particular the last sharp) see the paragraph
-% following example 20.5 on page 204 of `The \TeX book'.
-%    \begin{macrocode}
-\lst@UserCommand\lstnewenvironment#1#2#{%
-    \@ifundefined{#1}%
-        {\let\lst@arg\@empty
-         \lst@XConvert{#1}\@nil
-         \expandafter\lstnewenvironment@\lst@arg{#1}{#2}}%
-        {\PackageError{Listings}{Environment `#1' already defined}\@eha
-         \@gobbletwo}}
-\def\@tempa#1#2#3{%
-\gdef\lstnewenvironment@##1##2##3##4##5{%
-    \begingroup
-%    \end{macrocode}
-% A lonely `end environment' produces an error.
-%    \begin{macrocode}
-    \global\@namedef{end##2}{\lstenv@Error{##2}}%
-%    \end{macrocode}
-% The `main' environment macro defines the environment name for later use and
-% calls a submacro getting all arguments. We open a group and make EOL active.
-% This ensures |\@ifnextchar[| not to read characters of the listing---it reads
-% the active EOL instead.
-%    \begin{macrocode}
-    \global\@namedef{##2}{\def\lstenv@name{##2}%
-        \begingroup \lst@setcatcodes \catcode\active=\active
-        \csname##2@\endcsname}%
-%    \end{macrocode}
-% The submacro is defined via |\new@command|. We misuse |\l@ngrel@x| to make
-% the definition |\global| and refine \LaTeX's |\@xargdef|.
-%    \begin{macrocode}
-    \let\l@ngrel@x\global
-    \let\@xargdef\lstenv@xargdef
-    \expandafter\new@command\csname##2@\endcsname##3%
-%    \end{macrocode}
-% First we execute |##4|=\meta{begin code}. Then follows the definition of
-% the terminating string (|end{lstlisting}| or |endlstlisting|, for example):
-%    \begin{macrocode}
-        {\lsthk@PreSet ##4%
-         \ifx\@currenvir\lstenv@name
-             \def\lstenv@endstring{#1#2##1#3}%
-         \else
-             \def\lstenv@endstring{#1##1}%
-         \fi
-%    \end{macrocode}
-% We redefine (locally) `end environment' since ending is legal now.
-% Note that the redefinition also works inside a \TeX\ comment line.
-%    \begin{macrocode}
-         \@namedef{end##2}{\lst@DeInit ##5\endgroup
-                          \lst@doendpe \@ignoretrue}%
-%    \end{macrocode}
-% |\lst@doendpe| again removes the indention problem.
-%
-% Finally we start the processing. The |\lst@EndProcessListing| assignment
-% has been moved in front of |\lst@Init| after a bug report by
-% \lsthelper{Andreas~Deininger}{2002/11/11}{Compiling just stops}.
-%    \begin{macrocode}
-         \lsthk@DisplayStyle
-         \let\lst@EndProcessListing\lstenv@SkipToEnd
-         \lst@Init\lstenv@backslash
-         \lst@ifprint
-             \expandafter\expandafter\expandafter\lstenv@Process
-         \else
-             \expandafter\lstenv@SkipToEnd
-         \fi
-         \lst@insertargs}%
-    \endgroup}%
-}
-\let\lst@arg\@empty \lst@XConvert{end}\{\}\@nil
-\expandafter\@tempa\lst@arg
-\let\lst@insertargs\@empty
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstenv@xargdef}
-% This is a derivation of \LaTeX's |\@xargdef|. We expand the submacro's name,
-% use |\gdef| instead of |\def|, and hard code a kind of |\@protected@testopt|.
-%    \begin{macrocode}
-\def\lstenv@xargdef#1{
-    \expandafter\lstenv@xargdef@\csname\string#1\endcsname#1}
-\def\lstenv@xargdef@#1#2[#3][#4]#5{%
-  \@ifdefinable#2{%
-       \gdef#2{%
-          \ifx\protect\@typeset@protect
-            \expandafter\lstenv@testopt
-          \else
-            \@x@protect#2%
-          \fi
-          #1%
-          {#4}}%
-       \@yargdef
-          #1%
-           \tw@
-           {#3}%
-           {#5}}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstenv@testopt}
-% The difference between this macro and |\@testopt| is that we temporaryly
-% reset the catcode of the EOL character |^^M| to read the optional argument.
-%    \begin{macrocode}
-\long\def\lstenv@testopt#1#2{%
-  \@ifnextchar[{\catcode\active5\relax \lstenv@testopt@#1}%
-               {#1[{#2}]}}
-\def\lstenv@testopt@#1[#2]{%
-    \catcode\active\active
-    #1[#2]}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstenv@SkipToEnd}
-% We use the temporary definition
-% \begin{itemize}\item[]
-%    |\long\def\lst@temp##1\|\meta{content of \textup{\cs{lstenv@endstring}}}|{\lstenv@End}|
-% \end{itemize}
-% which gobbles all characters up to the end of environment and finishes it.
-%    \begin{macrocode}
-\begingroup \lccode`\~=`\\\lowercase{%
-\gdef\lstenv@SkipToEnd{%
-    \long\expandafter\def\expandafter\lst@temp\expandafter##\expandafter
-        1\expandafter~\lstenv@endstring{\lstenv@End}%
-    \lst@temp}
-}\endgroup
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstenv@Error}
-% is called by a lonely `end environment'.
-%    \begin{macrocode}
-\def\lstenv@Error#1{\PackageError{Listings}{Extra \string\end#1}%
-    {I'm ignoring this, since I wasn't doing a \csname#1\endcsname.}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@TestEOLChar}
-% Here we test for the two possible EOL characters.
-%    \begin{macrocode}
-\begingroup \lccode`\~=`\^^M\lowercase{%
-\gdef\lst@TestEOLChar#1{%
-    \def\lst@insertargs{#1}%
-    \ifx ~#1\@empty \else
-    \ifx^^J#1\@empty \else
-        \global\let\lst@intname\lst@insertargs
-        \let\lst@insertargs\@empty
-    \fi \fi}
-}\endgroup
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{environment}{lstlisting}
-% The awkward work is done, the definition is quite easy now. We test whether
-% the user has given the name argument, set the keys, and deal with
-% continued line numbering.
-%    \begin{macrocode}
-\lstnewenvironment{lstlisting}[2][]
-    {\lst@TestEOLChar{#2}%
-     \lstset{#1}%
-     \csname\@lst @SetFirstNumber\endcsname}
-    {\csname\@lst @SaveFirstNumber\endcsname}
-%    \end{macrocode}
-%    \begin{macrocode}
-%</kernel>
-%    \end{macrocode}
-% \end{environment}
-%
-%
-% \section{Documentation support}
-%
-% \begin{syntax}
-% \item[0.19]
-%   |\begin{lstsample}|\marg{point list}\marg{left}\marg{right}
-%
-%   \leavevmode\hspace*{-\leftmargini}|\end{lstsample}|
-%
-%       Roughly speaking all material in between this environment is executed
-%       `on the left side' and typeset verbatim on the right. \meta{left} is
-%       executed before the left side is typeset, and similarly \meta{right}
-%       before the right-hand side.
-%
-%       \meta{point list} is used as argument to the \keyname{point} key.
-%       This is a special key used to highlight the keys in the examples.
-%
-% \item[1.0]
-%   |\begin{lstxsample}|\marg{point list}
-%
-%   \leavevmode\hspace*{-\leftmargini}|\end{lstxsample}|
-%
-%       The material in between is (a) added to the left side of the next
-%       \texttt{lstsample} environment and (b) typeset verbatim using the
-%       whole line width.
-%
-% \item[0.21] |\newdocenvironment|\marg{name}\marg{short name}\marg{begin code}\marg{end code}
-%
-%       The \meta{name} environment can be used in the same way as `macro'.
-%       The provided(!) definitions
-%           |\Print|\meta{short name}|Name|
-%       and |\SpecialMain|\meta{short name}|Index|
-%       control printing in the margin and indexing as the defaults
-%       |\PrintMacroName| and |\SpecialMainIndex| do.
-%
-%       This command is used to define the `aspect' and `lstkey' environments.
-%
-%\item[0.21] \texttt{macroargs} environment
-%
-%       This `enumerate' environment uses as labels `|#1| =', `|#2| =',
-%       and so on.
-%
-% \item \texttt{TODO} environment
-% \item \texttt{ALTERNATIVE} environment
-% \item \texttt{REMOVED} environment
-% \item \texttt{OLDDEF} environment
-%
-%       These environments enclose comments on `to do's', alternatives and
-%       removed or old definitions.
-%
-% \item[0.21] |\lstscanlanguages|\meta{list macro}\marg{input files}\marg{don't input}
-%
-%       scans \marg{input files}$\setminus$\marg{don't input} for language
-%       definitions. The available languages are stored in \meta{list macro}
-%       using the form \meta{language}|(|\meta{dialect}|),|.
-%
-% \item[0.21] |\lstprintlanguages|\meta{list macro}
-%
-%       prints the languages in two column format.
-% \end{syntax}
-% and a lot of more simple commands.
-%
-%
-% \subsection{Required packages}
-%
-% Most of the `required' packages are optional.
-% \lsthelper{Stephan~Hennig}{2006-09-25}{documentation incompatible with algorithmic}
-% noted a bug where |\ifalgorithmic| conflicts with an update to |algorithmic.sty|, so
-% this has been changed to |\ifalgorithmicpkg|.
-%    \begin{macrocode}
-%<*doc>
-\let\lstdoc@currversion\fileversion
-\RequirePackage[writefile]{listings}[2004/09/07]
-\newif\iffancyvrb \IfFileExists{fancyvrb.sty}{\fancyvrbtrue}{}
-\newif\ifcolor \IfFileExists{color.sty}{\colortrue}{}
-\lst@false
-\newif\ifhyper
-\@ifundefined{pdfoutput}
-    {}
-    {\ifnum\pdfoutput>\z@ \lst@true \fi}
-\@ifundefined{VTeXversion}
-    {}
-    {\ifnum\OpMode>\z@ \lst@true \fi}
-\lst@if \IfFileExists{hyperref.sty}{\hypertrue}{}\fi
-\newif\ifalgorithmicpkg \IfFileExists{algorithmic.sty}{\algorithmicpkgtrue}{}
-\newif\iflgrind \IfFileExists{lgrind.sty}{\lgrindtrue}{}
-\iffancyvrb \RequirePackage{fancyvrb}\fi
-\ifhyper \RequirePackage[colorlinks]{hyperref}\else
-    \def\href#1{\texttt}\fi
-\ifcolor \RequirePackage{color}\fi
-\ifalgorithmicpkg \RequirePackage{algorithmic}\fi
-\iflgrind \RequirePackage{lgrind}\fi
-\RequirePackage{nameref}
-\RequirePackage{url}
-\renewcommand\ref{\protect\T@ref}
-\renewcommand\pageref{\protect\T@pageref}
-%    \end{macrocode}
-%
-%
-% \subsection{Environments for notes}
-%
-% \begin{macro}{\lst@BeginRemark}
-% \begin{macro}{\lst@EndRemark}
-% We begin with two simple definitions \ldots
-%    \begin{macrocode}
-\def\lst@BeginRemark#1{%
-    \begin{quote}\topsep0pt\let\small\footnotesize\small#1:}
-\def\lst@EndRemark{\end{quote}}
-%    \end{macrocode}
-% \end{macro}\end{macro}
-%
-% \begin{environment}{TODO}
-% \begin{environment}{ALTERNATIVE}
-% \begin{environment}{REMOVED}
-% \begin{environment}{OLDDEF}
-% \ldots\space used to define some environments.
-%    \begin{macrocode}
-\newenvironment{TODO}
-    {\lst@BeginRemark{To do}}{\lst@EndRemark}
-\newenvironment{ALTERNATIVE}
-    {\lst@BeginRemark{Alternative}}{\lst@EndRemark}
-\newenvironment{REMOVED}
-    {\lst@BeginRemark{Removed}}{\lst@EndRemark}
-\newenvironment{OLDDEF}
-    {\lst@BeginRemark{Old definition}}{\lst@EndRemark}
-%    \end{macrocode}
-% \end{environment}\end{environment}\end{environment}\end{environment}
-%
-% \begin{environment}{advise}
-% \begin{macro}{\advisespace}
-% The environment uses |\@listi|.
-%    \begin{macrocode}
-\def\advise{\par\list\labeladvise
-    {\advance\linewidth\@totalleftmargin
-     \@totalleftmargin\z@
-     \@listi
-     \let\small\footnotesize \small\sffamily
-     \parsep \z@ \@plus\z@ \@minus\z@
-     \topsep6\p@ \@plus1\p@\@minus2\p@
-     \def\makelabel##1{\hss\llap{##1}}}}
-\let\endadvise\endlist
-%    \end{macrocode}
-%    \begin{macrocode}
-\def\advisespace{\hbox{}\qquad}
-\def\labeladvise{$\to$}
-%    \end{macrocode}
-% \end{macro}
-% \end{environment}
-%
-% \begin{environment}{syntax}
-% \begin{macro}{\syntaxbreak}
-% \begin{macro}{\syntaxnewline}
-% \begin{macro}{\syntaxor}
-% This environment uses |\list| with a special |\makelabel|, \ldots
-%    \begin{macrocode}
-\newenvironment{syntax}
-   {\list{}{\itemindent-\leftmargin
-    \def\makelabel##1{\hss\lst@syntaxlabel##1,,,,\relax}}}
-   {\endlist}
-%    \end{macrocode}
-% \ldots\ which is defined here. The comma separated items are placed as
-% needed.
-%    \begin{macrocode}
-\def\lst@syntaxlabel#1,#2,#3,#4\relax{%
-    \llap{\scriptsize\itshape#3}%
-    \def\lst@temp{#2}%
-    \expandafter\lst@syntaxlabel@\meaning\lst@temp\relax
-    \rlap{\hskip-\itemindent\hskip\itemsep\hskip\linewidth
-          \llap{\ttfamily\lst@temp}\hskip\labelwidth
-          \def\lst@temp{#1}%
-          \ifx\lst@temp\lstdoc@currversion#1\fi}}
-\def\lst@syntaxlabel@#1>#2\relax
-    {\edef\lst@temp{\zap@space#2 \@empty}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\newcommand*\syntaxnewline{\newline\hbox{}\kern\labelwidth}
-\newcommand*\syntaxor{\qquad or\qquad}
-\newcommand*\syntaxbreak
-    {\hfill\kern0pt\discretionary{}{\kern\labelwidth}{}}
-\let\syntaxfill\hfill
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{environment}
-%
-% \begin{macro}{\alternative}
-% iterates down the list and inserts vertical rule(s).
-%    \begin{macrocode}
-\def\alternative#1{\lst@true \alternative@#1,\relax,}
-\def\alternative@#1,{%
-    \ifx\relax#1\@empty
-        \expandafter\@gobble
-    \else
-        \ifx\@empty#1\@empty\else
-            \lst@if \lst@false \else $\vert$\fi
-            \textup{\texttt{#1}}%
-        \fi
-    \fi
-    \alternative@}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Extensions to \textsf{doc}}
-%
-% \begin{macro}{\m@cro@}
-% We need a slight modification of \packagename{doc}'s internal macro.
-% The former argument |#2| has become |#3|. This change is not marked below.
-% The second argument is now \meta{short name}.
-%    \begin{macrocode}
-\long\def\m@cro@#1#2#3{\endgroup \topsep\MacroTopsep \trivlist
-  \edef\saved@macroname{\string#3}%
-  \def\makelabel##1{\llap{##1}}%
-  \if@inlabel
-    \let\@tempa\@empty \count@\macro@cnt
-    \loop \ifnum\count@>\z@
-      \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
-    \edef\makelabel##1{\llap{\vtop to\baselineskip
-                               {\@tempa\hbox{##1}\vss}}}%
-    \advance \macro@cnt \@ne
-  \else  \macro@cnt\@ne  \fi
-  \edef\@tempa{\noexpand\item[%
-     #1%
-       \noexpand\PrintMacroName
-     \else
-%    \end{macrocode}
-% The next line has been modified.
-%    \begin{macrocode}
-       \expandafter\noexpand\csname Print#2Name\endcsname % MODIFIED
-     \fi
-     {\string#3}]}%
-  \@tempa
-  \global\advance\c@CodelineNo\@ne
-   #1%
-      \SpecialMainIndex{#3}\nobreak
-      \DoNotIndex{#3}%
-   \else
-%    \end{macrocode}
-% Ditto.
-%    \begin{macrocode}
-      \csname SpecialMain#2Index\endcsname{#3}\nobreak % MODIFIED
-   \fi
-  \global\advance\c@CodelineNo\m@ne
-  \ignorespaces}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\macro}
-% \begin{macro}{\environment}
-% These two definitions need small adjustments due to the modified |\m@cro@|.
-%    \begin{macrocode}
-\def\macro{\begingroup
-   \catcode`\\12
-   \MakePrivateLetters \m@cro@ \iftrue {Macro}}% MODIFIED
-\def\environment{\begingroup
-   \catcode`\\12
-   \MakePrivateLetters \m@cro@ \iffalse {Env}}% MODIFIED
-%    \end{macrocode}
-% \end{macro}\end{macro}
-%
-% \begin{macro}{\newdocenvironment}
-% This command simply makes definitions similar to `environment' and provides
-% the printing and indexing commands.
-%    \begin{macrocode}
-\def\newdocenvironment#1#2#3#4{%
-    \@namedef{#1}{#3\begingroup \catcode`\\12\relax
-                  \MakePrivateLetters \m@cro@ \iffalse {#2}}%
-    \@namedef{end#1}{#4\endmacro}%
-    \@ifundefined{Print#2Name}{\expandafter
-        \let\csname Print#2Name\endcsname\PrintMacroName}{}%
-    \@ifundefined{SpecialMain#2Index}{\expandafter
-        \let\csname SpecialMain#2Index\endcsname\SpecialMainIndex}{}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{environment}{aspect}
-% \begin{macro}{\PrintAspectName}
-% \begin{macro}{\SpecialMainAspectIndex}
-% The environment and its `print' and `index' commands.
-%    \begin{macrocode}
-\newdocenvironment{aspect}{Aspect}{}{}
-\def\PrintAspectName#1{}
-\def\SpecialMainAspectIndex#1{%
-    \@bsphack
-    \index{aspects:\levelchar\protect\aspectname{#1}}%
-    \@esphack}
-%    \end{macrocode}
-% \end{macro}\end{macro}\end{environment}
-%
-% \begin{environment}{lstkey}
-% \begin{macro}{\PrintKeyName}
-% \begin{macro}{\SpecialMainKeyIndex}
-% One more environment with its `print' and `index' commands.
-%    \begin{macrocode}
-\newdocenvironment{lstkey}{Key}{}{}
-\def\PrintKeyName#1{\strut\keyname{#1}\ }
-\def\SpecialMainKeyIndex#1{%
-    \@bsphack
-    \index{keys\levelchar\protect\keyname{#1}}%
-    \@esphack}
-%    \end{macrocode}
-% \end{macro}\end{macro}\end{environment}
-%
-% \begin{macro}{\labelargcount}
-% \begin{environment}{macroargs}
-% We just allocate a counter and use \LaTeX's |\list| to implement this
-% environment.
-%    \begin{macrocode}
-\newcounter{argcount}
-\def\labelargcount{\texttt{\#\arabic{argcount}}\hskip\labelsep$=$}
-%    \end{macrocode}
-%    \begin{macrocode}
-\def\macroargs{\list\labelargcount
-    {\usecounter{argcount}\leftmargin=2\leftmargin
-     \parsep \z@ \@plus\z@ \@minus\z@
-     \topsep4\p@ \@plus\p@ \@minus2\p@
-     \itemsep\z@ \@plus\z@ \@minus\z@
-     \def\makelabel##1{\hss\llap{##1}}}}
-\def\endmacroargs{\endlist\@endparenv}
-%    \end{macrocode}
-% \end{environment}\end{macro}
-%
-%
-% \subsection{The \texttt{lstsample} environment}
-%
-% \begin{environment}{lstsample}
-% We store the verbatim part and write the source code also to file.
-%    \begin{macrocode}
-\lst@RequireAspects{writefile}
-%    \end{macrocode}
-%    \begin{macrocode}
-\newbox\lst@samplebox
-\lstnewenvironment{lstsample}[3][]
-    {\global\let\lst@intname\@empty
-     \gdef\lst@sample{#2}%
-     \setbox\lst@samplebox=\hbox\bgroup
-         \setkeys{lst}{language={},style={},tabsize=4,gobble=5,%
-             basicstyle=\small\ttfamily,basewidth=0.51em,point={#1}}
-         #3%
-         \lst@BeginAlsoWriteFile{\jobname.tmp}}
-    {\lst@EndWriteFile\egroup
-%    \end{macrocode}
-% Now |\lst@samplebox| contains the verbatim part.
-% If it's too wide, we use atop and below instead of left and right.
-%    \begin{macrocode}
-     \ifdim \wd\lst@samplebox>.5\linewidth
-         \begin{center}%
-             \hbox to\linewidth{\box\lst@samplebox\hss}%
-         \end{center}%
-         \lst@sampleInput
-     \else
-         \begin{center}%
-         \begin{minipage}{0.45\linewidth}\lst@sampleInput\end{minipage}%
-         \qquad
-         \begin{minipage}{0.45\linewidth}%
-             \hbox to\linewidth{\box\lst@samplebox\hss}%
-         \end{minipage}%
-         \end{center}%
-     \fi}
-%    \end{macrocode}
-% The new keyword class \keyname{point}.
-%    \begin{macrocode}
-\lst@InstallKeywords{p}{point}{pointstyle}\relax{keywordstyle}{}ld
-%    \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{lstxsample}
-% Omitting |\lst@EndWriteFile| leaves the file open.
-%    \begin{macrocode}
-\lstnewenvironment{lstxsample}[1][]
-    {\begingroup
-         \setkeys{lst}{belowskip=-\medskipamount,language={},style={},%
-             tabsize=4,gobble=5,basicstyle=\small\ttfamily,%
-             basewidth=0.51em,point={#1}}
-         \lst@BeginAlsoWriteFile{\jobname.tmp}}
-    {\endgroup
-     \endgroup}
-%    \end{macrocode}
-% \end{environment}
-%
-% \begin{macro}{\lst@sampleInput}
-% inputs the `left-hand' side.
-%    \begin{macrocode}
-\def\lst@sampleInput{%
-    \MakePercentComment\catcode`\^^M=10\relax
-    \small\lst@sample
-    {\setkeys{lst}{SelectCharTable=\lst@ReplaceInput{\^\^I}%
-                                  {\lst@ProcessTabulator}}%
-     \leavevmode \input{\jobname.tmp}}\MakePercentIgnore}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Miscellaneous}
-%
-% \paragraph{Sectioning and cross referencing}
-% We begin with a redefinition paragraph.
-%    \begin{macrocode}
-\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
-                                      {1.25ex \@plus1ex \@minus.2ex}%
-                                      {-1em}%
-                                      {\normalfont\normalsize\bfseries}}
-%    \end{macrocode}
-% We introduce |\lstref| which prints section number together with its name.
-%    \begin{macrocode}
-\def\lstref#1{\emph{\ref{#1} \nameref{#1}}}
-%    \end{macrocode}
-% Moreover we adjust the table of contents.  The |\phantomsection| before
-% adding the contents line provides \packagename{hyperref} with an appropriate
-% destination for the contents line link, thereby ensuring that the contents
-% line is at the right level in the PDF bookmark tree.
-%    \begin{macrocode}
-\def\@part[#1]#2{\ifhyper\phantomsection\fi
-    \addcontentsline{toc}{part}{#1}%
-    {\parindent\z@ \raggedright \interlinepenalty\@M
-     \normalfont \huge \bfseries #2\markboth{}{}\par}%
-    \nobreak\vskip 3ex\@afterheading}
-\renewcommand*\l@section[2]{%
-    \addpenalty\@secpenalty
-    \addvspace{.25em \@plus\p@}%
-    \setlength\@tempdima{1.5em}%
-    \begingroup
-      \parindent \z@ \rightskip \@pnumwidth
-      \parfillskip -\@pnumwidth
-      \leavevmode
-      \advance\leftskip\@tempdima
-      \hskip -\leftskip
-      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
-    \endgroup}
-\renewcommand*\l@subsection{\@dottedtocline{2}{0pt}{2.3em}}
-\renewcommand*\l@subsubsection{\@dottedtocline{3}{0pt}{3.2em}}
-%    \end{macrocode}
-%
-% \paragraph{Indexing}
-% The `user' commands. |\rstyle| is defined below.
-%    \begin{macrocode}
-\newcommand\ikeyname[1]{%
-    \lstkeyindex{#1}{}%
-    \lstaspectindex{#1}{}%
-    \keyname{#1}}
-\newcommand\ekeyname[1]{%
-    \@bsphack
-    \lstkeyindex{#1}{}%
-    \lstaspectindex{#1}{}%
-    \@esphack}
-\newcommand\rkeyname[1]{%
-    \@bsphack
-    \lstkeyindex{#1}{}%
-    \lstaspectindex{#1}{}%
-    \@esphack{\rstyle\keyname{#1}}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\newcommand\icmdname[1]{%
-    \@bsphack
-    \lstaspectindex{#1}{}%
-    \@esphack\texttt{\string#1}}
-\newcommand\rcmdname[1]{%
-    \@bsphack
-    \lstaspectindex{#1}{}%
-    \@esphack\texttt{\rstyle\string#1}}
-%    \end{macrocode}
-% One of the two yet unknown `index'-macros is empty, the other looks up
-% the aspect name for the given argument.
-%    \begin{macrocode}
-\def\lstaspectindex#1#2{%
-    \global\@namedef{lstkandc@\string#1}{}%
-    \@ifundefined{lstisaspect@\string#1}
-        {\index{unknown\levelchar
-                \protect\texttt{\protect\string\string#1}#2}}%
-        {\index{\@nameuse{lstisaspect@\string#1}\levelchar
-                \protect\texttt{\protect\string\string#1}#2}}%
-}
-\def\lstkeyindex#1#2{%
-%    \index{key\levelchar\protect\keyname{#1}#2}%
-}
-%    \end{macrocode}
-% The key/command to aspect relation is defined near the top of this file using
-% the following command. In future the package should read this information
-% from the aspect files.
-%    \begin{macrocode}
-\def\lstisaspect[#1]#2{%
-    \global\@namedef{lstaspect@#1}{#2}%
-    \lst@AddTo\lst@allkeysandcmds{,#2}%
-    \@for\lst@temp:=#2\do
-    {\ifx\@empty\lst@temp\else
-         \global\@namedef{lstisaspect@\lst@temp}{#1}%
-     \fi}}
-\gdef\lst@allkeysandcmds{}
-%    \end{macrocode}
-% This relation is also good to print all keys and commands of a particular
-% aspect \ldots
-%    \begin{macrocode}
-\def\lstprintaspectkeysandcmds#1{%
-    \lst@true
-    \expandafter\@for\expandafter\lst@temp
-    \expandafter:\expandafter=\csname lstaspect@#1\endcsname\do
-    {\lst@if\lst@false\else, \fi \texttt{\lst@temp}}}
-%    \end{macrocode}
-% \ldots\ or to check the reference. Note that we've defined
-% |\lstkandc@|\meta{name} in |\lstaspectindex|.
-%    \begin{macrocode}
-\def\lstcheckreference{%
-   \@for\lst@temp:=\lst@allkeysandcmds\do
-   {\ifx\lst@temp\@empty\else
-        \@ifundefined{lstkandc@\lst@temp}
-        {\typeout{\lst@temp\space not in reference guide?}}{}%
-    \fi}}
-%    \end{macrocode}
-%
-% \paragraph{Unique styles}
-%    \begin{macrocode}
-\newcommand*\lst{\texttt{lst}}
-\newcommand*\Cpp{C\texttt{++}}
-\let\keyname\texttt
-\let\keyvalue\texttt
-\let\hookname\texttt
-\newcommand*\aspectname[1]{{\normalfont\sffamily#1}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\DeclareRobustCommand\packagename[1]{%
-    {\leavevmode\text@command{#1}%
-     \switchfontfamily\sfdefault\rmdefault
-     \check@icl #1\check@icr
-     \expandafter}}%
-\renewcommand\packagename[1]{{\normalfont\sffamily#1}}
-\def\switchfontfamily#1#2{%
-    \begingroup\xdef\@gtempa{#1}\endgroup
-    \ifx\f@family\@gtempa\fontfamily#2%
-                    \else\fontfamily#1\fi
-    \selectfont}
-%    \end{macrocode}
-% The color mainly for keys and commands in the reference guide.
-%    \begin{macrocode}
-\ifcolor
-    \definecolor{darkgreen}{rgb}{0,0.5,0}
-    \def\rstyle{\color{darkgreen}}
-\else
-    \let\rstyle\empty
-\fi
-%    \end{macrocode}
-%
-% \paragraph{Commands for credits and helpers}
-%    \begin{macrocode}
-\gdef\lst@emails{}
-\newcommand*\lstthanks[2]
-    {#1\lst@AddTo\lst@emails{,#1,<#2>}%
-     \ifx\@empty#2\@empty\typeout{Missing email for #1}\fi}
-\newcommand*\lsthelper[3]
-    {{\let~\ #1}%
-     \lst@IfOneOf#1\relax\lst@emails
-     {}{\typeout{^^JWarning: Unknown helper #1.^^J}}}
-%    \end{macrocode}
-%
-% \paragraph{Languages and styles}
-%    \begin{macrocode}
-\lstdefinelanguage[doc]{Pascal}{%
-  morekeywords={alfa,and,array,begin,boolean,byte,case,char,const,div,%
-     do,downto,else,end,false,file,for,function,get,goto,if,in,%
-     integer,label,maxint,mod,new,not,of,or,pack,packed,page,program,%
-     procedure,put,read,readln,real,record,repeat,reset,rewrite,set,%
-     text,then,to,true,type,unpack,until,var,while,with,write,writeln},%
-  sensitive=false,%
-  morecomment=[s]{(*}{*)},%
-  morecomment=[s]{\{}{\}},%
-  morestring=[d]{'}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lstdefinestyle{}
-    {basicstyle={},%
-     keywordstyle=\bfseries,identifierstyle={},%
-     commentstyle=\itshape,stringstyle={},%
-     numberstyle={},stepnumber=1,%
-     pointstyle=\pointstyle}
-\def\pointstyle{%
-    {\let\lst@um\@empty \xdef\@gtempa{\the\lst@token}}%
-    \expandafter\lstkeyindex\expandafter{\@gtempa}{}%
-    \expandafter\lstaspectindex\expandafter{\@gtempa}{}%
-    \rstyle}
-\lstset{defaultdialect=[doc]Pascal,language=Pascal,style={}}
-%    \end{macrocode}
-%
-%
-% \subsection{Scanning languages}
-%
-% \begin{macro}{\lstscanlanguages}
-% We modify some internal definitions and input the files.
-%    \begin{macrocode}
-\def\lstscanlanguages#1#2#3{%
-    \begingroup
-        \def\lst@DefDriver@##1##2##3##4[##5]##6{%
-           \lst@false
-           \lst@lAddTo\lst@scan{##6(##5),}%
-           \begingroup
-           \@ifnextchar[{\lst@XDefDriver{##1}##3}{\lst@DefDriver@@##3}}%
-        \def\lst@XXDefDriver[##1]{}%
-        \lst@InputCatcodes
-        \def\lst@dontinput{#3}%
-        \let\lst@scan\@empty
-        \lst@for{#2}\do{%
-            \lst@IfOneOf##1\relax\lst@dontinput
-                {}%
-                {\InputIfFileExists{##1}{}{}}}%
-        \global\let\@gtempa\lst@scan
-    \endgroup
-    \let#1\@gtempa}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstprintlanguages}
-% |\do| creates a box of width 0.5|\linewidth| or |\linewidth| depending
-% on how wide the argument is. This leads to `two column' output.
-% The other main thing is sorting the list and begin with the output.
-%    \begin{macrocode}
-\def\lstprintlanguages#1{%
-    \def\do##1{\setbox\@tempboxa\hbox{##1\space\space}%
-        \ifdim\wd\@tempboxa<.5\linewidth \wd\@tempboxa.5\linewidth
-                                   \else \wd\@tempboxa\linewidth \fi
-        \box\@tempboxa\allowbreak}%
-    \begin{quote}
-      \par\noindent
-      \hyphenpenalty=\@M \rightskip=\z@\@plus\linewidth\relax
-      \lst@BubbleSort#1%
-      \expandafter\lst@NextLanguage#1\relax(\relax),%
-    \end{quote}}
-%    \end{macrocode}
-% We get and define the current language and \ldots
-%    \begin{macrocode}
-\def\lst@NextLanguage#1(#2),{%
-    \ifx\relax#1\else
-        \def\lst@language{#1}\def\lst@dialects{(#2),}%
-        \expandafter\lst@NextLanguage@
-    \fi}
-%    \end{macrocode}
-% \ldots\space gather all available dialect of this language (note that the
-% list has been sorted)
-%    \begin{macrocode}
-\def\lst@NextLanguage@#1(#2),{%
-    \def\lst@temp{#1}%
-    \ifx\lst@temp\lst@language
-        \lst@lAddTo\lst@dialects{(#2),}%
-        \expandafter\lst@NextLanguage@
-    \else
-%    \end{macrocode}
-% or begin to print this language with all its dialects. Therefor we sort the
-% dialects
-%    \begin{macrocode}
-        \do{\lst@language
-        \ifx\lst@dialects\lst@emptydialect\else
-            \expandafter\lst@NormedDef\expandafter\lst@language
-                \expandafter{\lst@language}%
-            \space(%
-            \lst@BubbleSort\lst@dialects
-            \expandafter\lst@PrintDialects\lst@dialects(\relax),%
-            )%
-        \fi}%
-        \def\lst@next{\lst@NextLanguage#1(#2),}%
-        \expandafter\lst@next
-    \fi}
-\def\lst@emptydialect{(),}
-%    \end{macrocode}
-% and print the dialect with appropriate commas in between.
-%    \begin{macrocode}
-\def\lst@PrintDialects(#1),{%
-    \ifx\@empty#1\@empty empty\else
-        \lst@PrintDialect{#1}%
-    \fi
-    \lst@PrintDialects@}
-\def\lst@PrintDialects@(#1),{%
-    \ifx\relax#1\else
-        , \lst@PrintDialect{#1}%
-        \expandafter\lst@PrintDialects@
-    \fi}
-%    \end{macrocode}
-% Here we take care of default dialects.
-%    \begin{macrocode}
-\def\lst@PrintDialect#1{%
-    \lst@NormedDef\lst@temp{#1}%
-    \expandafter\ifx\csname\@lst dd@\lst@language\endcsname\lst@temp
-        \texttt{\underbar{#1}}%
-    \else
-        \texttt{#1}%
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \subsection{Bubble sort}
-%
-% \begin{macro}{\lst@IfLE}
-% \meta{string 1}|\relax\@empty|\meta{string 2}|\relax\@empty|\marg{then}\meta{else}.
-% If \meta{string 1} $\leq$ \meta{string 2}, we execute \meta{then} and
-% \meta{else} otherwise.
-% Note that this comparision is case insensitive.
-%    \begin{macrocode}
-\def\lst@IfLE#1#2\@empty#3#4\@empty{%
-    \ifx #1\relax
-        \let\lst@next\@firstoftwo
-    \else \ifx #3\relax
-        \let\lst@next\@secondoftwo
-    \else
-        \lowercase{\ifx#1#3}%
-            \def\lst@next{\lst@IfLE#2\@empty#4\@empty}%
-        \else
-            \lowercase{\ifnum`#1<`#3}\relax
-                \let\lst@next\@firstoftwo
-            \else
-                \let\lst@next\@secondoftwo
-            \fi
-        \fi
-    \fi \fi
-    \lst@next}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@BubbleSort}
-% is in fact a derivation of bubble sort.
-%    \begin{macrocode}
-\def\lst@BubbleSort#1{%
-    \ifx\@empty#1\else
-        \lst@false
-%    \end{macrocode}
-% We `bubble sort' the first, second, \ldots\ elements and \ldots
-%    \begin{macrocode}
-        \expandafter\lst@BubbleSort@#1\relax,\relax,%
-%    \end{macrocode}
-% \ldots\space then the second, third, \ldots\ elements until no elemets have
-% been swapped.
-%    \begin{macrocode}
-        \expandafter\lst@BubbleSort@\expandafter,\lst@sorted
-                                      \relax,\relax,%
-        \let#1\lst@sorted
-        \lst@if
-            \def\lst@next{\lst@BubbleSort#1}%
-            \expandafter\expandafter\expandafter\lst@next
-        \fi
-    \fi}
-\def\lst@BubbleSort@#1,#2,{%
-    \ifx\@empty#1\@empty
-        \def\lst@sorted{#2,}%
-        \def\lst@next{\lst@BubbleSort@@}%
-    \else
-        \let\lst@sorted\@empty
-        \def\lst@next{\lst@BubbleSort@@#1,#2,}%
-    \fi
-    \lst@next}
-%    \end{macrocode}
-% But the bubbles rise only one step per call. Putting the elements at their
-% top most place would be inefficient (since \TeX\ had to read much more
-% parameters in this case).
-%    \begin{macrocode}
-\def\lst@BubbleSort@@#1,#2,{%
-    \ifx\relax#1\else
-        \ifx\relax#2%
-            \lst@lAddTo\lst@sorted{#1,}%
-            \expandafter\expandafter\expandafter\lst@BubbleSort@@@
-        \else
-            \lst@IfLE #1\relax\@empty #2\relax\@empty
-                          {\lst@lAddTo\lst@sorted{#1,#2,}}%
-                {\lst@true \lst@lAddTo\lst@sorted{#2,#1,}}%
-            \expandafter\expandafter\expandafter\lst@BubbleSort@@
-        \fi
-    \fi}
-\def\lst@BubbleSort@@@#1\relax,{}
-%    \end{macrocode}
-%    \begin{macrocode}
-%</doc>
-%    \end{macrocode}
-% \end{macro}
-%
-%
-% \section{Interfaces to other programs}
-%
-%
-% \subsection{0.21 compatibility}
-%
-% \begin{aspect}{0.21}
-% Some keys have just been renamed.
-%    \begin{macrocode}
-%<*0.21>
-\lst@BeginAspect{0.21}
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\lst@Key{labelstyle}{}{\def\lst@numberstyle{#1}}
-\lst@Key{labelsep}{10pt}{\def\lst@numbersep{#1}}
-\lst@Key{labelstep}{0}{%
-    \ifnum #1=\z@ \KV@lst@numbers{none}%
-            \else \KV@lst@numbers{left}\fi
-    \def\lst@stepnumber{#1\relax}}
-\lst@Key{firstlabel}\relax{\def\lst@firstnumber{#1\relax}}
-\lst@Key{advancelabel}\relax{\def\lst@advancenumber{#1\relax}}
-\let\c@lstlabel\c@lstnumber
-\lst@AddToHook{Init}{\def\thelstnumber{\thelstlabel}}
-\newcommand*\thelstlabel{\@arabic\c@lstlabel}
-%    \end{macrocode}
-% A |\let| in the second last line has been changed to |\def| after a bug
-% report by \lsthelper{Venkatesh~Prasad~Ranganath}{2002/08/31}{Undefined
-% control sequence \thelstnumber with 0.21-option}.
-%    \begin{macrocode}
-\lst@Key{first}\relax{\def\lst@firstline{#1\relax}}
-\lst@Key{last}\relax{\def\lst@lastline{#1\relax}}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@Key{framerulewidth}{.4pt}{\def\lst@framerulewidth{#1}}
-\lst@Key{framerulesep}{2pt}{\def\lst@rulesep{#1}}
-\lst@Key{frametextsep}{3pt}{\def\lst@frametextsep{#1}}
-\lst@Key{framerulecolor}{}{\lstKV@OptArg[]{#1}%
-    {\ifx\@empty##2\@empty
-         \let\lst@rulecolor\@empty
-     \else
-         \ifx\@empty##1\@empty
-             \def\lst@rulecolor{\color{##2}}%
-         \else
-             \def\lst@rulecolor{\color[##1]{##2}}%
-         \fi
-     \fi}}
-\lst@Key{backgroundcolor}{}{\lstKV@OptArg[]{#1}%
-    {\ifx\@empty##2\@empty
-         \let\lst@bkgcolor\@empty
-     \else
-         \ifx\@empty##1\@empty
-             \def\lst@bkgcolor{\color{##2}}%
-         \else
-             \def\lst@bkgcolor{\color[##1]{##2}}%
-         \fi
-     \fi}}
-\lst@Key{framespread}{\z@}{\def\lst@framespread{#1}}
-\lst@AddToHook{PreInit}
-    {\@tempdima\lst@framespread\relax \divide\@tempdima\tw@
-     \edef\lst@framextopmargin{\the\@tempdima}%
-     \let\lst@framexrightmargin\lst@framextopmargin
-     \let\lst@framexbottommargin\lst@framextopmargin
-     \advance\@tempdima\lst@xleftmargin\relax
-     \edef\lst@framexleftmargin{\the\@tempdima}}
-%    \end{macrocode}
-% \lsthelper{Harald~Harders}{1998/03/30}{inner- and outerspread} had the idea
-% of two spreads (inner and outer). We either divide the dimension by two or
-% assign the two dimensions to inner- and outerspread.
-%    \begin{macrocode}
-\newdimen\lst@innerspread \newdimen\lst@outerspread
-\lst@Key{spread}{\z@,\z@}{\lstKV@CSTwoArg{#1}%
-    {\lst@innerspread##1\relax
-     \ifx\@empty##2\@empty
-         \divide\lst@innerspread\tw@\relax
-         \lst@outerspread\lst@innerspread
-     \else
-         \lst@outerspread##2\relax
-     \fi}}
-\lst@AddToHook{BoxUnsafe}{\lst@outerspread\z@ \lst@innerspread\z@}
-\lst@Key{wholeline}{false}[t]{\lstKV@SetIf{#1}\lst@ifresetmargins}
-\lst@Key{indent}{\z@}{\def\lst@xleftmargin{#1}}
-\lst@AddToHook{PreInit}
-    {\lst@innerspread=-\lst@innerspread
-     \lst@outerspread=-\lst@outerspread
-     \ifodd\c@page \advance\lst@innerspread\lst@xleftmargin
-             \else \advance\lst@outerspread\lst@xleftmargin \fi
-     \ifodd\c@page
-         \edef\lst@xleftmargin{\the\lst@innerspread}%
-         \edef\lst@xrightmargin{\the\lst@outerspread}%
-     \else
-         \edef\lst@xleftmargin{\the\lst@outerspread}%
-         \edef\lst@xrightmargin{\the\lst@innerspread}%
-     \fi}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@Key{defaultclass}\relax{\def\lst@classoffset{#1}}
-\lst@Key{stringtest}\relax{}% dummy
-\lst@Key{outputpos}\relax{\lst@outputpos#1\relax\relax}
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@Key{stringspaces}\relax[t]{\lstKV@SetIf{#1}\lst@ifshowstringspaces}
-\lst@Key{visiblespaces}\relax[t]{\lstKV@SetIf{#1}\lst@ifshowspaces}
-\lst@Key{visibletabs}\relax[t]{\lstKV@SetIf{#1}\lst@ifshowtabs}
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</0.21>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsection{\textsf{fancyvrb}}
-%
-% \lsthelper{Denis~Girou}{1998/07/26}{fancyvrb} asked whether
-% \packagename{fancyvrb} and \packagename{listings} could work together.
-%
-% \begin{lstkey}{fancyvrb}
-% We set the boolean and call a submacro.
-%    \begin{macrocode}
-%<*kernel>
-\lst@Key{fancyvrb}\relax[t]{%
-    \lstKV@SetIf{#1}\lst@iffancyvrb
-    \lstFV@fancyvrb}
-\ifx\lstFV@fancyvrb\@undefined
-    \gdef\lstFV@fancyvrb{\lst@RequireAspects{fancyvrb}\lstFV@fancyvrb}
-\fi
-%</kernel>
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{aspect}{fancyvrb}
-% We end the job if \packagename{fancyvrb} is not present.
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect{fancyvrb}
-%    \end{macrocode}
-%    \begin{macrocode}
-\@ifundefined{FancyVerbFormatLine}
-    {\typeout{^^J%
-     ***^^J%
-     *** `listings.sty' needs `fancyvrb.sty' right now.^^J%
-     *** Please ensure its availability and try again.^^J%
-     ***^^J}%
-     \batchmode \@@end}{}
-%    \end{macrocode}
-%
-% \begin{macro}{\lstFV@fancyvrb}
-% We assign the correct |\FancyVerbFormatLine| macro.
-%    \begin{macrocode}
-\gdef\lstFV@fancyvrb{%
-    \lst@iffancyvrb
-        \ifx\FancyVerbFormatLine\lstFV@FancyVerbFormatLine\else
-            \let\lstFV@FVFL\FancyVerbFormatLine
-            \let\FancyVerbFormatLine\lstFV@FancyVerbFormatLine
-        \fi
-    \else
-        \ifx\lstFV@FVFL\@undefined\else
-            \let\FancyVerbFormatLine\lstFV@FVFL
-            \let\lstFV@FVFL\@undefined
-        \fi
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstFV@VerbatimBegin}
-% We initialize things if necessary.
-%    \begin{macrocode}
-\gdef\lstFV@VerbatimBegin{%
-    \ifx\FancyVerbFormatLine\lstFV@FancyVerbFormatLine
-        \lsthk@TextStyle \lsthk@BoxUnsafe
-        \lsthk@PreSet
-        \lst@activecharsfalse
-        \let\normalbaselines\relax
-%    \end{macrocode}
-% \begin{TODO}
-% Is this |\let| bad?
-% \end{TODO}
-% I inserted |\lst@ifresetmargins|\ldots|\fi| after a bug report from
-% \lsthelper{Peter~Bartke}{1999/11/18}{wrong fancyvrb frame}. The linewidth
-% is saved and restored since a bug report by \lsthelper{Denis~Girou}
-% {2003/07/04}{problem in list environments with fancyvrb=true}.
-%    \begin{macrocode}
-\xdef\lstFV@RestoreData{\noexpand\linewidth\the\linewidth\relax}%
-        \lst@Init\relax
-        \lst@ifresetmargins \advance\linewidth-\@totalleftmargin \fi
-\lstFV@RestoreData
-        \everypar{}\global\lst@newlines\z@
-        \lst@mode\lst@nomode \let\lst@entermodes\@empty
-        \lst@InterruptModes
-%    \end{macrocode}
-% \lsthelper{Rolf~Niepraschk}{1998/11/25}{ligatures problem} reported a bug
-% concerning ligatures to \lsthelper{Denis~Girou}{1998/11/27}{use |\@noligs|}.
-%    \begin{macrocode}
-%% D.G. modification begin - Nov. 25, 1998
-        \let\@noligs\relax
-%% D.G. modification end
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lstFV@VerbatimEnd}
-% A box and macro must exist after |\lst@DeInit|.
-% We store them globally.
-%    \begin{macrocode}
-\gdef\lstFV@VerbatimEnd{%
-    \ifx\FancyVerbFormatLine\lstFV@FancyVerbFormatLine
-        \global\setbox\lstFV@gtempboxa\box\@tempboxa
-        \global\let\@gtempa\FV@ProcessLine
-        \lst@mode\lst@Pmode
-        \lst@DeInit
-        \let\FV@ProcessLine\@gtempa
-        \setbox\@tempboxa\box\lstFV@gtempboxa
-        \par
-    \fi}
-%    \end{macrocode}
-% The |\par| has been added after a bug report by \lsthelper{Peter~Bartke}
-% {2002/04/10}{TeX is not in vertical mode when leaving "Verbatim"}.
-%    \begin{macrocode}
-\newbox\lstFV@gtempboxa
-%    \end{macrocode}
-% \end{macro}
-%
-% \noindent
-% We insert |\lstFV@VerbatimBegin| and |\lstFV@VerbatimEnd| where necessary.
-%    \begin{macrocode}
-\lst@AddTo\FV@VerbatimBegin\lstFV@VerbatimBegin
-\lst@AddToAtTop\FV@VerbatimEnd\lstFV@VerbatimEnd
-\lst@AddTo\FV@LVerbatimBegin\lstFV@VerbatimBegin
-\lst@AddToAtTop\FV@LVerbatimEnd\lstFV@VerbatimEnd
-\lst@AddTo\FV@BVerbatimBegin\lstFV@VerbatimBegin
-\lst@AddToAtTop\FV@BVerbatimEnd\lstFV@VerbatimEnd
-%    \end{macrocode}
-%
-% \begin{macro}{\lstFV@FancyVerbFormatLine}
-% `@' terminates the argument of |\lst@FVConvert|.
-% Moreover |\lst@ReenterModes| and |\lst@InterruptModes| encloses some code.
-% This ensures that we have same group level at the beginning and at the end of
-% the macro---even if the user begins but doesn't end a comment, which means
-% one open group.
-% Furthermore we use |\vtop| and reset |\lst@newlines| to allow line breaking.
-%    \begin{macrocode}
-\gdef\lstFV@FancyVerbFormatLine#1{%
-    \let\lst@arg\@empty \lst@FVConvert#1\@nil
-    \global\lst@newlines\z@
-    \vtop{\noindent\lst@parshape
-          \lst@ReenterModes
-          \lst@arg \lst@PrintToken\lst@EOLUpdate\lsthk@InitVarsBOL
-          \lst@InterruptModes}}
-%    \end{macrocode}
-% The |\lst@parshape| inside |\vtop| is due to a bug report from
-% \lsthelper{Peter~Bartke}{1999/11/18}{wrong par indention with fancyvrb}.
-% A |\leavevmode| became |\noindent|.
-% \end{macro}
-%
-% \begin{lstkey}{fvcmdparams}
-% \begin{lstkey}{morefvcmdparams}
-% These keys adjust \lst@FVcmdparams, which will be used by the following
-% conversion macro. The base set of commands and parameter numbers was
-% provided by \lsthelper{Denis~Girou}{2002/05/31}{init of fvcmdparams}.
-%    \begin{macrocode}
-\lst@Key{fvcmdparams}%
-    {\overlay\@ne}%
-    {\def\lst@FVcmdparams{,#1}}
-\lst@Key{morefvcmdparams}\relax{\lst@lAddTo\lst@FVcmdparams{,#1}}
-%    \end{macrocode}
-% \end{lstkey}
-% \end{lstkey}
-%
-% \begin{macro}{\lst@FVConvert}
-% We do conversion or \ldots
-%    \begin{macrocode}
-\gdef\lst@FVConvert{\@tempcnta\z@ \lst@FVConvertO@}%
-\gdef\lst@FVConvertO@{%
-    \ifcase\@tempcnta
-        \expandafter\futurelet\expandafter\@let@token
-        \expandafter\lst@FVConvert@@
-    \else
-%    \end{macrocode}
-% \ldots\ we append arguments without conversion, argument by argument,
-% |\@tempcnta| times.
-%    \begin{macrocode}
-        \expandafter\lst@FVConvertO@a
-    \fi}
-\gdef\lst@FVConvertO@a#1{%
-    \lst@lAddTo\lst@arg{{#1}}\advance\@tempcnta\m@ne
-    \lst@FVConvertO@}%
-%    \end{macrocode}
-% Since |\@ifnextchar\bgroup| might fail, we have to use |\ifcat| here.
-% Bug reported by \lsthelper{Denis~Girou}{1999/07/26}{fancyvrb=true + `second
-% commandchar' other than \{ doesn't work}.
-% However we don't gobble space tokens as |\@ifnextchar| does.
-%    \begin{macrocode}
-\gdef\lst@FVConvert@@{%
-    \ifcat\noexpand\@let@token\bgroup \expandafter\lst@FVConvertArg
-                                \else \expandafter\lst@FVConvert@ \fi}
-%    \end{macrocode}
-% Coming to such a catcode${}={}$1 character we convert the argument and add
-% it together with group delimiters to |\lst@arg|.
-% We also add |\lst@PrintToken|, which prints all collected characters before
-% we forget them.
-% Finally we continue the conversion.
-%    \begin{macrocode}
-\gdef\lst@FVConvertArg#1{%
-    {\let\lst@arg\@empty
-     \lst@FVConvert#1\@nil
-     \global\let\@gtempa\lst@arg}%
-     \lst@lExtend\lst@arg{\expandafter{\@gtempa\lst@PrintToken}}%
-     \lst@FVConvert}
-%    \end{macrocode}
-%    \begin{macrocode}
-\gdef\lst@FVConvert@#1{%
-    \ifx \@nil#1\else
-       \if\relax\noexpand#1%
-          \lst@lAddTo\lst@arg{\lst@OutputLostSpace\lst@PrintToken#1}%
-       \else
-          \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
-       \fi
-       \expandafter\lst@FVConvert
-    \fi}
-%    \end{macrocode}
-% Having no |\bgroup|, we look whether we've found the end of the input, and
-% convert one token ((non)active character or control sequence).
-%    \begin{macrocode}
-\gdef\lst@FVConvert@#1{%
-    \ifx \@nil#1\else
-       \if\relax\noexpand#1%
-          \lst@lAddTo\lst@arg{\lst@OutputLostSpace\lst@PrintToken#1}%
-%    \end{macrocode}
-% Here we check for registered commands with arguments and set the value of
-% |\@tempcnta| as required.
-%    \begin{macrocode}
-          \def\lst@temp##1,#1##2,##3##4\relax{%
-              \ifx##3\@empty \else \@tempcnta##2\relax \fi}%
-          \expandafter\lst@temp\lst@FVcmdparams,#1\z@,\@empty\relax
-       \else
-          \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
-       \fi
-       \expandafter\lst@FVConvertO@
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsection{Omega support}
-%
-% \begingroup
-% $\Omega$ support looks easy---I hope it works at least in some cases.
-%    \begin{macrocode}
-%<*kernel>
-%    \end{macrocode}
-%    \begin{macrocode}
-\@ifundefined{ocp}{}
-    {\lst@AddToHook{OutputBox}%
-         {\let\lst@ProcessLetter\@firstofone
-          \let\lst@ProcessDigit\@firstofone
-          \let\lst@ProcessOther\@firstofone}}
-%    \end{macrocode}
-%    \begin{macrocode}
-%</kernel>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{\textsf{LGrind}}
-%
-% \begin{aspect}{lgrind}
-% \begin{macro}{\lst@LGGetNames}
-% is used to extract the language names from |\lst@arg| (the
-% \packagename{LGrind} definition).
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[keywords,comments,strings,language]{lgrind}
-%    \end{macrocode}
-%    \begin{macrocode}
-\gdef\lst@LGGetNames#1:#2\relax{%
-    \lst@NormedDef\lstlang@{#1}\lst@ReplaceInArg\lstlang@{|,}%
-    \def\lst@arg{:#2}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@LGGetValue}
-% returns in |\lst@LGvalue| the value of capability |#1| given by the list
-% |\lst@arg|. If |#1| is not found, we have |\lst@if|=|\iffalse|.
-% Otherwise it is true and the ``cap=value'' pair is removed from the list.
-% First we test for |#1| and
-%    \begin{macrocode}
-\gdef\lst@LGGetValue#1{%
-    \lst@false
-    \def\lst@temp##1:#1##2##3\relax{%
-        \ifx\@empty##2\else \lst@LGGetValue@{#1}\fi}
-    \expandafter\lst@temp\lst@arg:#1\@empty\relax}
-%    \end{macrocode}
-% remove the pair if necessary.
-%    \begin{macrocode}
-\gdef\lst@LGGetValue@#1{%
-    \lst@true
-    \def\lst@temp##1:#1##2:##3\relax{%
-        \@ifnextchar=\lst@LGGetValue@@{\lst@LGGetValue@@=}##2\relax
-        \def\lst@arg{##1:##3}}%
-    \expandafter\lst@temp\lst@arg\relax}
-\gdef\lst@LGGetValue@@=#1\relax{\def\lst@LGvalue{#1}}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@LGGetComment}
-% stores the comment delimiters (enclosed in braces) in |#2| if comment of type
-% |#1| is present and not a comment line. Otherwise |#2| is empty.
-%    \begin{macrocode}
-\gdef\lst@LGGetComment#1#2{%
-    \let#2\@empty
-    \lst@LGGetValue{#1b}%
-    \lst@if
-        \let#2\lst@LGvalue
-        \lst@LGGetValue{#1e}%
-        \ifx\lst@LGvalue\lst@LGEOL
-            \edef\lstlang@{\lstlang@,commentline={#2}}%
-            \let#2\@empty
-        \else
-            \edef#2{{#2}{\lst@LGvalue}}%
-        \fi
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@LGGetString}
-% does the same for string delimiters, but it doesn't `return' any value.
-%    \begin{macrocode}
-\gdef\lst@LGGetString#1#2{%
-    \lst@LGGetValue{#1b}%
-    \lst@if
-        \let#2\lst@LGvalue
-        \lst@LGGetValue{#1e}%
-        \ifx\lst@LGvalue\lst@LGEOL
-            \edef\lstlang@{\lstlang@,morestringizer=[l]{#2}}%
-        \else
-%    \end{macrocode}
-% we must check for |\e|, i.e.~whether we have to use \texttt doubled or
-% \texttt backslashed stringizer.
-%    \begin{macrocode}
-            \ifx #2\lst@LGvalue
-                \edef\lstlang@{\lstlang@,morestringizer=[d]{#2}}%
-            \else
-                \edef\lst@temp{\lst@LGe#2}%
-                \ifx \lst@temp\lst@LGvalue
-                    \edef\lstlang@{\lstlang@,morestringizer=[b]{#2}}%
-                \else
-                    \PackageWarning{Listings}%
-                    {String #2...\lst@LGvalue\space not supported}%
-                \fi
-            \fi
-        \fi
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@LGDefLang}
-% defines the language given by |\lst@arg|, the definition part, and
-% |\lst@language@|, the language name. First we remove unwanted stuff from
-% |\lst@arg|, e.g.~we replace |:\ :| by |:|.
-%    \begin{macrocode}
-\gdef\lst@LGDefLang{%
-    \lst@LGReplace
-    \let\lstlang@\empty
-%    \end{macrocode}
-% Get the keywords and values of friends.
-%    \begin{macrocode}
-    \lst@LGGetValue{kw}%
-    \lst@if
-        \lst@ReplaceInArg\lst@LGvalue{{ },}%
-        \edef\lstlang@{\lstlang@,keywords={\lst@LGvalue}}%
-    \fi
-%    \end{macrocode}
-%    \begin{macrocode}
-    \lst@LGGetValue{oc}%
-    \lst@if
-        \edef\lstlang@{\lstlang@,sensitive=f}%
-    \fi
-%    \end{macrocode}
-%    \begin{macrocode}
-    \lst@LGGetValue{id}%
-    \lst@if
-        \edef\lstlang@{\lstlang@,alsoletter=\lst@LGvalue}%
-    \fi
-%    \end{macrocode}
-% Now we get the comment delimiters and use them as single or double comments
-% according to whether there are two or four delimiters.
-% Note that |\lst@LGGetComment| takes care of comment lines.
-%    \begin{macrocode}
-    \lst@LGGetComment a\lst@LGa
-    \lst@LGGetComment c\lst@LGc
-    \ifx\lst@LGa\@empty
-        \ifx\lst@LGc\@empty\else
-            \edef\lstlang@{\lstlang@,singlecomment=\lst@LGc}%
-        \fi
-    \else
-        \ifx\lst@LGc\@empty
-            \edef\lstlang@{\lstlang@,singlecomment=\lst@LGa}%
-        \else
-            \edef\lstlang@{\lstlang@,doublecomment=\lst@LGc\lst@LGa}%
-        \fi
-    \fi
-%    \end{macrocode}
-% Now we parse the stringizers.
-%    \begin{macrocode}
-    \lst@LGGetString s\lst@LGa
-    \lst@LGGetString l\lst@LGa
-%    \end{macrocode}
-% We test for the continuation capability and
-%    \begin{macrocode}
-    \lst@LGGetValue{tc}%
-    \lst@if
-        \edef\lstlang@{\lstlang@,lgrindef=\lst@LGvalue}%
-    \fi
-%    \end{macrocode}
-% define the language.
-%    \begin{macrocode}
-    \expandafter\xdef\csname\@lst LGlang@\lst@language@\endcsname
-        {\noexpand\lstset{\lstlang@}}%
-%    \end{macrocode}
-% Finally we inform the user of all ignored capabilities.
-%    \begin{macrocode}
-    \lst@ReplaceInArg\lst@arg{{: :}:}\let\lst@LGvalue\@empty
-    \expandafter\lst@LGDroppedCaps\lst@arg\relax\relax
-    \ifx\lst@LGvalue\@empty\else
-        \PackageWarningNoLine{Listings}{Ignored capabilities for
-            \space `\lst@language@' are\MessageBreak\lst@LGvalue}%
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@LGDroppedCaps}
-% just drops a previous value and appends the next capabilty name to
-% |\lst@LGvalue|.
-%    \begin{macrocode}
-\gdef\lst@LGDroppedCaps#1:#2#3{%
-    \ifx#2\relax
-        \lst@RemoveCommas\lst@LGvalue
-    \else
-        \edef\lst@LGvalue{\lst@LGvalue,#2#3}%
-        \expandafter\lst@LGDroppedCaps
-    \fi}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\lst@LGReplace}
-% \begin{macro}{\lst@LGe}
-% We replace `escaped \verb!:^$|!' by catcode 11 versions, and other strings
-% by some kind of short versions (which is necessary to get the above
-% definitions work).
-%    \begin{macrocode}
-\begingroup
-\catcode`\/=0
-\lccode`\z=`\:\lccode`\y=`\^\lccode`\x=`\$\lccode`\v=`\|
-\catcode`\\=12\relax
-/lowercase{%
-/gdef/lst@LGReplace{/lst@ReplaceInArg/lst@arg
-    {{\:}{z }{\^}{y}{\$}{x}{\|}{v}{ \ }{ }{:\ :}{:}{\ }{ }{\(}({\)})}}
-/gdef/lst@LGe{\e}
-}
-/endgroup
-%    \end{macrocode}
-% \end{macro}\end{macro}
-%
-% \begin{macro}{\lst@LGRead}
-% reads one language definition and defines the language if the correct one
-% is found.
-%    \begin{macrocode}
-\gdef\lst@LGRead#1\par{%
-    \lst@LGGetNames#1:\relax
-    \def\lst@temp{endoflanguagedefinitions}%
-    \ifx\lstlang@\lst@temp
-        \let\lst@next\endinput
-    \else
-        \expandafter\lst@IfOneOf\lst@language@\relax\lstlang@
-            {\lst@LGDefLang \let\lst@next\endinput}%
-            {\let\lst@next\lst@LGRead}%
-    \fi
-    \lst@next}
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{lstkey}{lgrindef}
-% We only have to request the language and
-%    \begin{macrocode}
-\lst@Key{lgrindef}\relax{%
-    \lst@NormedDef\lst@language@{#1}%
-    \begingroup
-    \@ifundefined{lstLGlang@\lst@language@}%
-        {\everypar{\lst@LGRead}%
-         \catcode`\\=12\catcode`\{=12\catcode`\}=12\catcode`\%=12%
-         \catcode`\#=14\catcode`\$=12\catcode`\^=12\catcode`\_=12\relax
-         \input{\lstlgrindeffile}%
-        }{}%
-    \endgroup
-%    \end{macrocode}
-% select it or issue an error message.
-%    \begin{macrocode}
-    \@ifundefined{lstLGlang@\lst@language@}%
-        {\PackageError{Listings}%
-         {LGrind language \lst@language@\space undefined}%
-         {The language is not loadable. \@ehc}}%
-        {\lsthk@SetLanguage
-         \csname\@lst LGlang@\lst@language@\endcsname}}
-%    \end{macrocode}
-% \end{lstkey}
-%
-% \begin{macro}{\lstlgrindeffile}
-% contains just the file name.
-%    \begin{macrocode}
-\@ifundefined{lstlgrindeffile}
-    {\lst@UserCommand\lstlgrindeffile{lgrindef.}}{}
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \subsection{\textsf{hyperref}}
-%
-% \begin{aspect}{hyper}
-%    \begin{macrocode}
-%<*misc>
-\lst@BeginAspect[keywords]{hyper}
-%    \end{macrocode}
-%
-% \begin{lstkey}{hyperanchor}
-% \begin{lstkey}{hyperlink}
-% determine the macro to set an anchor and a link, respectively.
-%    \begin{macrocode}
-\lst@Key{hyperanchor}\hyper@@anchor{\let\lst@hyperanchor#1}
-\lst@Key{hyperlink}\hyperlink{\let\lst@hyperlink#1}
-%    \end{macrocode}
-% \end{lstkey}\end{lstkey}
-% Again, the main thing is a special working procedure. First we extract the
-% contents of |\lst@token| and get a free macro name for this current character
-% string (using prefix |lstHR@| and a number as suffix). Then we make this
-% free macro equivalent to |\@empty|, so it is not used the next time.
-%    \begin{macrocode}
-\lst@InstallKeywords{h}{hyperref}{}\relax{}
-    {\begingroup
-         \let\lst@UM\@empty \xdef\@gtempa{\the\lst@token}%
-     \endgroup
-     \lst@GetFreeMacro{lstHR@\@gtempa}%
-     \global\expandafter\let\lst@freemacro\@empty
-%    \end{macrocode}
-% |\@tempcnta| is the suffix of the free macro. We use it here to refer to
-% the last occurence of the same string. To do this, we redefine the output
-% macro |\lst@alloverstyle| to set an anchor \ldots
-%    \begin{macrocode}
-     \@tempcntb\@tempcnta \advance\@tempcntb\m@ne
-     \edef\lst@alloverstyle##1{%
-         \let\noexpand\lst@alloverstyle\noexpand\@empty
-         \noexpand\smash{\raise\baselineskip\hbox
-             {\noexpand\lst@hyperanchor{lst.\@gtempa\the\@tempcnta}%
-                                       {\relax}}}%
-%    \end{macrocode}
-% \ldots\space and a link to the last occurence (if there is any).
-%    \begin{macrocode}
-         \ifnum\@tempcnta=\z@ ##1\else
-             \noexpand\lst@hyperlink{lst.\@gtempa\the\@tempcntb}{##1}%
-         \fi}%
-    }
-    od
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\lst@EndAspect
-%</misc>
-%    \end{macrocode}
-% \end{aspect}
-%
-%
-% \section{Epilogue}
-%
-% \begingroup
-%    \begin{macrocode}
-%<*kernel>
-%    \end{macrocode}
-% Each option adds the aspect name to |\lst@loadaspects| or removes it from that data macro.
-%    \begin{macrocode}
-\DeclareOption*{\expandafter\lst@ProcessOption\CurrentOption\relax}
-\def\lst@ProcessOption#1#2\relax{%
-    \ifx #1!%
-        \lst@DeleteKeysIn\lst@loadaspects{#2}%
-    \else
-        \lst@lAddTo\lst@loadaspects{,#1#2}%
-    \fi}
-%    \end{macrocode}
-% The following aspects are loaded by default.
-%    \begin{macrocode}
-\@ifundefined{lst@loadaspects}
-  {\def\lst@loadaspects{strings,comments,escape,style,language,%
-      keywords,labels,lineshape,frames,emph,index}%
-  }{}
-%    \end{macrocode}
-% We load the patch file, \ldots
-%    \begin{macrocode}
-\InputIfFileExists{lstpatch.sty}{}{}
-%    \end{macrocode}
-% \ldots\ process the options, \ldots
-%    \begin{macrocode}
-\let\lst@ifsavemem\iffalse
-\DeclareOption{savemem}{\let\lst@ifsavemem\iftrue}
-\DeclareOption{noaspects}{\let\lst@loadaspects\@empty}
-\ProcessOptions
-%    \end{macrocode}
-% \ldots\ and load the aspects.
-%    \begin{macrocode}
-\lst@RequireAspects\lst@loadaspects
-\let\lst@loadaspects\@empty
-%    \end{macrocode}
-% If present we select the empty style and language.
-%    \begin{macrocode}
-\lst@UseHook{SetStyle}\lst@UseHook{EmptyStyle}
-\lst@UseHook{SetLanguage}\lst@UseHook{EmptyLanguage}
-%    \end{macrocode}
-% Finally we load the configuration files.
-%    \begin{macrocode}
-\InputIfFileExists{listings.cfg}{}{}
-\InputIfFileExists{lstlocal.cfg}{}{}
-%<info>\lst@ReportAllocs
-%    \end{macrocode}
-%    \begin{macrocode}
-%</kernel>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \section{History}
-% \begingroup\small
-% Only major changes are listed here. Introductory version numbers of commands
-% and keys are in the sources of the guides, which makes this history fairly
-% short.
-% \renewcommand\labelitemi{--}
-% \begin{itemize}
-% \item[0.1] from 1996/03/09
-%   \item test version to look whether package is possible or not
-% \item[0.11] from 1996/08/19
-%\iffalse
-%   \item additional blank option (= language)
-%\fi
-%   \item improved alignment
-% \item[0.12] from 1997/01/16
-%   \item nearly `perfect' alignment
-% \item[0.13] from 1997/02/11
-%\iffalse
-%   \item additional languages: Eiffel, Fortran 90, Modula-2, Pascal XSC
-%\fi
-%   \item load on demand: language specific macros moved to driver files
-%   \item comments are declared now and not implemented for each language again
-%         (this makes the \TeX\ sources easier to read)
-% \item[0.14] from 1997/02/18
-%   \item User's guide rewritten, Implementation guide uses macro environment
-%   \item (non) case sensitivity implemented and multiple string types,
-%         i.e.~Modula-2 handles both string types: quotes and double quotes
-%\iffalse
-%   \item comment declaration is user-accessible
-%   \item package compatible to \verb!german.sty!
-%\fi
-% \item[0.15] from 1997/04/18
-%\iffalse
-%   \item additional languages: Java, Turbo Pascal
-%\fi
-%   \item package renamed from \packagename{listing} to \packagename{listings}
-%         since the first already exists
-% \item[0.16] from 1997/06/01
-%\iffalse
-%   \item changed `$<$' to `$>$' in |\lst@SkipToFirst|
-%   \item bug removed: |\lst@Init| must be placed before |\lst@SkipToFirst|
-%\fi
-%   \item listing environment rewritten
-% \item[0.17] from 1997/09/29
-%\iffalse
-%   \item |\spreadlisting| works correct now (e.g.~page numbers don't move right)
-%\fi
-%   \item speed up things (quick `if parameter empty', all |\long| except one
-%         removed, faster \verb!\lst@GotoNextTabStop!, etc.)
-%   \item improved alignment of wide other characters (e.g.~$==$)
-%\iffalse
-%   \item many new languages: Ada, Algol, Cobol, Comal 80, Elan, Fortran 77,
-%         Lisp, Logo, Matlab, Oberon, Perl, PL/I, Simula, SQL, \TeX
-%\fi
-% \item[pre-0.18] from 1998/03/24 (unpublished)
-%\iffalse
-%   \item bug concerning |\labelstyle| (becomes \keyname{numberstyle}) removed
-%         (now oldstylenum example works)
-%\fi
-%   \item experimental implementation of character classes
-% \item[0.19] from 1998/11/09
-%   \item character classes and new \lst-aspects seem to be good
-%   \item user interface uses \packagename{keyval} package
-%   \item \packagename{fancyvrb} support
-% \item[0.20] from 1999/07/12
-%   \item new keyword detection mechanism
-%   \item new aspects: \aspectname{writefile}, \aspectname{breaklines},
-%         captions, \aspectname{html}
-%\iffalse
-%   \item improved \packagename{fancyvrb} support
-%\fi
-%   \item all aspects reside in a single file and the language drivers in
-%         currently two files
-% \item[0.21] 2000/08/23
-%   \item completely new User's guide
-%   \item experimental format definitions
-%   \item keyword classes replaced by families
-%   \item dynamic modes
-% \item[1.0$\beta$] 2001/09/21
-%   \item key names synchronized with \packagename{fancyvrb}
-%   \item \aspectname{frames} aspect extended
-%   \item new output concept (delaying and merging)
-% \item[1.0] 2002/04/01
-%   \item update of all documentation sections including Developer's guide
-%   \item delimiters unified
-% \item[1.1] 2003/06/21
-%   \item bugfix-release with some new keys
-% \item[1.2] 2004/02/13
-%   \item bugfix-release with two new keys and new section \ref{rArbitraryLinerangeMarkers}
-% \item[1.3] 2004/09/07
-%   \item another bugfix-release with LPPL-1.3-compliance
-% \item[1.4] 2007/02/26
-%   \item many bugfixes, and new maintainership
-%   \item several new and updated language definitions
-%   \item many small documentation improvements
-%   \item new keys, multicharacter string delimiters, short inline listings, and more.
-% \item[1.5] 2013/06/27
-%   \item new maintainership
-% \end{itemize}
-% \endgroup
-%
-%
-% \Finale
-%
-\endinput
Index: doc/LaTeXmacros/listings/listings.ins
===================================================================
--- doc/LaTeXmacros/listings/listings.ins	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,50 +1,0 @@
-%%
-%% This file generates files required to use the listings package.
-%% At your command prompt write
-%%
-%%     tex listings.ins
-%%
-%%
-%% (w)(c) 1996--1999,2002--2004 Carsten Heinz
-%%
-%% $Id: listings.ins 25 2013-06-05 08:04:03Z j_hoffmann $
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-\input docstrip
-\preamble
-\endpreamble
-
-\usedir{tex/latex/listings}
-\keepsilent
-\askforoverwritefalse
-
-
-%
-% generate base package
-%
-\generate{
-    \file{listings.sty}{\from{listings.dtx}{kernel}}
-    \file{lstmisc.sty}{\from{listings.dtx}{misc,0.21}}
-    \file{lstdoc.sty}{\from{listings.dtx}{doc}}
-    \file{lstdrvrs.ins}{\from{lstdrvrs.dtx}{install}}
-    \file{listings.cfg}{\from{lstdrvrs.dtx}{config}}
-}
-
-%
-% generate language driver files
-%
-\batchinput{lstdrvrs.ins}
-
-
-\Msg{*}
-\Msg{* You probably need to move all created `.sty' and `.cfg'}
-\Msg{* files into a directory searched by TeX.}
-\Msg{*}
-\Msg{* And don't forget to refresh your filename database}
-\Msg{* if your TeX distribution uses such a database.}
-\Msg{*}
-
-\endbatchfile
Index: doc/LaTeXmacros/listings/listings.log
===================================================================
--- doc/LaTeXmacros/listings/listings.log	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,142 +1,0 @@
-This is TeX, Version 3.1415926 (TeX Live 2009/Debian) (format=tex 2013.4.9)  27 MAY 2016 08:04
-**listings.ins
-(./listings.ins (/usr/share/texmf-texlive/tex/latex/base/docstrip.tex
-\blockLevel=\count26
-\emptyLines=\count27
-\processedLines=\count28
-\commentsRemoved=\count29
-\commentsPassed=\count30
-\codeLinesPassed=\count31
-\TotalprocessedLines=\count32
-\TotalcommentsRemoved=\count33
-\TotalcommentsPassed=\count34
-\TotalcodeLinesPassed=\count35
-\NumberOfFiles=\count36
-\inFile=\read0
-\inputcheck=\read1
-\@tempcnta=\count37
-\off@0=\count38
-\off@1=\count39
-\off@2=\count40
-\off@3=\count41
-\off@4=\count42
-\off@5=\count43
-\off@6=\count44
-\off@7=\count45
-\off@8=\count46
-\off@9=\count47
-\off@10=\count48
-\off@11=\count49
-\off@12=\count50
-\off@13=\count51
-\off@14=\count52
-\off@15=\count53
-\@temptokena=\toks12
-\@maxfiles=\count54
-\@maxoutfiles=\count55
-
-Utility: `docstrip' 2.5d <2005/07/29>
-English documentation    <1999/03/31>
-
-**********************************************************
-* This program converts documented macro-files into fast *
-* loadable files by stripping off (nearly) all comments! *
-**********************************************************
-
-********************************************************
-* No Configuration file found, using default settings. *
-********************************************************
-
-)
-
-Generating file(s) listings.sty lstmisc.sty lstdoc.sty lstdrvrs.ins listings.cf
-g 
-\openout0 = `listings.sty'.
-
-\openout1 = `lstmisc.sty'.
-
-\openout2 = `lstdoc.sty'.
-
-
-Processing file listings.dtx (kernel) -> listings.sty
-                             (misc,0.21) -> lstmisc.sty
-                             (doc) -> lstdoc.sty
-File listings.dtx ended by \endinput.
-Lines  processed: 16659
-Comments removed: 11804
-Comments  passed: 12
-Codelines passed: 4746
-
-\openout0 = `lstdrvrs.ins'.
-
-\openout1 = `listings.cfg'.
-
-
-Processing file lstdrvrs.dtx (install) -> lstdrvrs.ins
-                             (config) -> listings.cfg
-File lstdrvrs.dtx ended by \endinput.
-Lines  processed: 7491
-Comments removed: 2105
-Comments  passed: 293
-Codelines passed: 4882
-
-(./lstdrvrs.ins
-
-Generating file(s) lstlang1.sty lstlang2.sty lstlang3.sty 
-\openout0 = `lstlang1.sty'.
-
-\openout1 = `lstlang2.sty'.
-
-\openout2 = `lstlang3.sty'.
-
-
-Processing file lstdrvrs.dtx (lang1) -> lstlang1.sty
-                             (lang2) -> lstlang2.sty
-                             (lang3) -> lstlang3.sty
-File lstdrvrs.dtx ended by \endinput.
-Lines  processed: 7491
-Comments removed: 2105
-Comments  passed: 293
-Codelines passed: 4882
-
-
-Generating file(s) listings-acm.prf listings-bash.prf listings-fortran.prf list
-ings-lua.prf listings-python.prf 
-\openout0 = `listings-acm.prf'.
-
-\openout1 = `listings-bash.prf'.
-
-\openout2 = `listings-fortran.prf'.
-
-\openout3 = `listings-lua.prf'.
-
-\openout4 = `listings-python.prf'.
-
-
-Processing file lstdrvrs.dtx (acm-prf) -> listings-acm.prf
-                             (bash-prf) -> listings-bash.prf
-                             (fortran-prf) -> listings-fortran.prf
-                             (lua-prf) -> listings-lua.prf
-                             (python-prf) -> listings-python.prf
-File lstdrvrs.dtx ended by \endinput.
-Lines  processed: 7491
-Comments removed: 2105
-Comments  passed: 293
-Codelines passed: 4882
-
-)
-*
-* You probably need to move all created `.sty' and `.cfg'
-* files into a directory searched by TeX.
-*
-* And don't forget to refresh your filename database
-* if your TeX distribution uses such a database.
-*
-Overall statistics:
-Files  processed: 4
-Lines  processed: 39132
-Comments removed: 18119
-Comments  passed: 891
-Codelines passed: 19392
- )
-No pages of output.
Index: doc/LaTeXmacros/listings/listings.sty
===================================================================
--- doc/LaTeXmacros/listings/listings.sty	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,2243 +1,0 @@
-%%
-%% This is file `listings.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% listings.dtx  (with options: `kernel')
-%% 
-%% Please read the software license in listings-1.3.dtx or listings-1.3.pdf.
-%%
-%% (w)(c) 1996--2004 Carsten Heinz and/or any other author listed
-%% elsewhere in this file.
-%% (c) 2006 Brooks Moses
-%% (c) 2013- Jobst Hoffmann
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\def\filedate{2015/06/04}
-\def\fileversion{1.6}
-\NeedsTeXFormat{LaTeX2e}
-\AtEndOfPackage{\ProvidesPackage{listings}
-             [\filedate\space\fileversion\space(Carsten Heinz)]}
-\def\lst@CheckVersion#1{\edef\reserved@a{#1}%
-    \ifx\lst@version\reserved@a \expandafter\@gobble
-                          \else \expandafter\@firstofone \fi}
-\let\lst@version\fileversion
-\def\lst@InputCatcodes{%
-    \makeatletter \catcode`\"12%
-    \catcode`\^^@\active
-    \catcode`\^^I9%
-    \catcode`\^^L9%
-    \catcode`\^^M9%
-    \catcode`\%14%
-    \catcode`\~\active}
-\def\lst@RestoreCatcodes#1{%
-    \ifx\relax#1\else
-        \noexpand\catcode`\noexpand#1\the\catcode`#1\relax
-        \expandafter\lst@RestoreCatcodes
-    \fi}
-\edef\lst@RestoreCatcodes{%
-    \noexpand\lccode`\noexpand\/`\noexpand\/%
-    \lst@RestoreCatcodes\"\^^I\^^M\~\^^@\relax
-    \catcode12\active}
-\lst@InputCatcodes
-\AtEndOfPackage{\lst@RestoreCatcodes}
-\def\@lst{lst}
-\def\lst@IfSubstring#1#2{%
-    \def\lst@temp##1#1##2##3\relax{%
-        \ifx \@empty##2\expandafter\@secondoftwo
-                 \else \expandafter\@firstoftwo \fi}%
-    \expandafter\lst@temp#2#1\@empty\relax}
-\def\lst@IfOneOf#1\relax#2{%
-    \def\lst@temp##1,#1,##2##3\relax{%
-        \ifx \@empty##2\expandafter\@secondoftwo
-                 \else \expandafter\@firstoftwo \fi}%
-    \expandafter\lst@temp\expandafter,#2,#1,\@empty\relax}
-\def\lst@DeleteKeysIn#1#2{%
-    \expandafter\lst@DeleteKeysIn@\expandafter#1#2,\relax,}
-\def\lst@DeleteKeysIn@#1#2,{%
-    \ifx\relax#2\@empty
-        \expandafter\@firstoftwo\expandafter\lst@RemoveCommas
-    \else
-        \ifx\@empty#2\@empty\else
-            \def\lst@temp##1,#2,##2{%
-                ##1%
-                \ifx\@empty##2\@empty\else
-                    \expandafter\lst@temp\expandafter,%
-                \fi ##2}%
-            \edef#1{\expandafter\lst@temp\expandafter,#1,#2,\@empty}%
-        \fi
-    \fi
-    \lst@DeleteKeysIn@#1}
-\def\lst@RemoveCommas#1{\edef#1{\expandafter\lst@RC@#1\@empty}}
-\def\lst@RC@#1{\ifx,#1\expandafter\lst@RC@ \else #1\fi}
-\def\lst@ReplaceIn#1#2{%
-    \expandafter\lst@ReplaceIn@\expandafter#1#2\@empty\@empty}
-\def\lst@ReplaceInArg#1#2{\lst@ReplaceIn@#1#2\@empty\@empty}
-\def\lst@ReplaceIn@#1#2#3{%
-    \ifx\@empty#3\relax\else
-        \def\lst@temp##1#2##2{%
-            \ifx\@empty##2%
-                \lst@lAddTo#1{##1}%
-            \else
-                \lst@lAddTo#1{##1#3}\expandafter\lst@temp
-            \fi ##2}%
-        \let\@tempa#1\let#1\@empty
-        \expandafter\lst@temp\@tempa#2\@empty
-        \expandafter\lst@ReplaceIn@\expandafter#1%
-    \fi}
-\providecommand*\@gobblethree[3]{}
-\def\lst@GobbleNil#1\@nil{}
-\def\lst@Swap#1#2{#2#1}
-\def\lst@true{\let\lst@if\iftrue}
-\def\lst@false{\let\lst@if\iffalse}
-\lst@false
-\def\lst@IfNextCharsArg#1{%
-    \def\lst@tofind{#1}\lst@IfNextChars\lst@tofind}
-\def\lst@IfNextChars#1#2#3{%
-    \let\lst@tofind#1\def\@tempa{#2}\def\@tempb{#3}%
-    \let\lst@eaten\@empty \lst@IfNextChars@}
-\def\lst@IfNextChars@{\expandafter\lst@IfNextChars@@\lst@tofind\relax}
-\def\lst@IfNextChars@@#1#2\relax#3{%
-    \def\lst@tofind{#2}\lst@lAddTo\lst@eaten{#3}%
-    \ifx#1#3%
-        \ifx\lst@tofind\@empty
-            \let\lst@next\@tempa
-        \else
-            \let\lst@next\lst@IfNextChars@
-        \fi
-        \expandafter\lst@next
-    \else
-        \expandafter\@tempb
-    \fi}
-\def\lst@IfNextCharActive#1#2#3{%
-    \begingroup \lccode`\~=`#3\lowercase{\endgroup
-    \ifx~}#3%
-        \def\lst@next{#1}%
-    \else
-        \def\lst@next{#2}%
-    \fi \lst@next #3}
-\def\lst@for#1\do#2{%
-  \def\lst@forbody##1{#2}%
-  \def\@tempa{#1}%
-  \ifx\@tempa\@empty\else\expandafter\lst@f@r#1,\@nil,\fi
-}
-\def\lst@f@r#1,{%
-  \def\@tempa{#1}%
-  \ifx\@tempa\@nnil\else\lst@forbody{#1}\expandafter\lst@f@r\fi
-}
-\def\lst@MakeActive#1{%
-    \let\lst@temp\@empty \lst@MakeActive@#1%
-    \relax\relax\relax\relax\relax\relax\relax\relax\relax}
-\begingroup
-\catcode`\^^@=\active \catcode`\^^A=\active \catcode`\^^B=\active
-\catcode`\^^C=\active \catcode`\^^D=\active \catcode`\^^E=\active
-\catcode`\^^F=\active \catcode`\^^G=\active \catcode`\^^H=\active
-\gdef\lst@MakeActive@#1#2#3#4#5#6#7#8#9{\let\lst@next\relax
-    \ifx#1\relax
-    \else \lccode`\^^@=`#1%
-    \ifx#2\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@}}%
-    \else \lccode`\^^A=`#2%
-    \ifx#3\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A}}%
-    \else \lccode`\^^B=`#3%
-    \ifx#4\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B}}%
-    \else \lccode`\^^C=`#4%
-    \ifx#5\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C}}%
-    \else \lccode`\^^D=`#5%
-    \ifx#6\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D}}%
-    \else \lccode`\^^E=`#6%
-    \ifx#7\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E}}%
-    \else \lccode`\^^F=`#7%
-    \ifx#8\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F}}%
-    \else \lccode`\^^G=`#8%
-    \ifx#9\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F^^G}}%
-    \else \lccode`\^^H=`#9%
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F^^G^^H}}%
-        \let\lst@next\lst@MakeActive@
-    \fi \fi \fi \fi \fi \fi \fi \fi \fi
-    \lst@next}
-\endgroup
-\def\lst@DefActive#1#2{\lst@MakeActive{#2}\let#1\lst@temp}
-\def\lst@DefOther#1#2{%
-    \begingroup \def#1{#2}\escapechar\m@ne \expandafter\endgroup
-    \expandafter\lst@DefOther@\meaning#1\relax#1}
-\def\lst@DefOther@#1>#2\relax#3{\edef#3{\zap@space#2 \@empty}}
-\def\lst@InsideConvert#1{%
-   \lst@ifmathescape
-      \lst@InsideConvert@e#1$\@nil
-      \lst@if
-         \lst@InsideConvert@ey#1\@nil
-      \else
-         \lst@InsideConvert@#1 \@empty
-         \expandafter\@gobbletwo
-      \fi
-      \expandafter\lst@next
-   \else
-      \lst@InsideConvert@#1 \@empty
-   \fi}
-\begingroup \lccode`\~=`\ \relax \lowercase{%
-\gdef\lst@InsideConvert@#1 #2{%
-    \lst@MakeActive{#1}%
-    \ifx\@empty#2%
-        \lst@lExtend\lst@arg{\lst@temp}%
-    \else
-        \lst@lExtend\lst@arg{\lst@temp~}%
-        \expandafter\lst@InsideConvert@
-    \fi #2}
-}\endgroup
-\def\lst@InsideConvert@e#1$#2\@nil{%
-   \ifx\@empty#2\@empty \lst@false \else \lst@true \fi}
-\def\lst@InsideConvert@ey#1$#2$#3\@nil{%
-   \lst@InsideConvert@#1 \@empty
-   \lst@lAddTo\lst@arg{%
-      \lst@ifdropinput\else
-         \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken
-         \setbox\@tempboxa=\hbox\bgroup$\lst@escapebegin
-         #2%
-         \lst@escapeend$\egroup \lst@CalcLostSpaceAndOutput
-         \lst@whitespacefalse
-      \fi}%
-   \def\lst@next{\lst@InsideConvert{#3}}%
-}
-\def\lst@XConvert{\@ifnextchar\bgroup \lst@XConvertArg\lst@XConvert@}
-\def\lst@XConvertArg#1{%
-    {\lst@false \let\lst@arg\@empty
-     \lst@XConvert#1\@nil
-     \global\let\@gtempa\lst@arg}%
-    \lst@lExtend\lst@arg{\expandafter{\@gtempa}}%
-    \lst@XConvertNext}
-\def\lst@XConvert@#1{%
-    \ifx\@nil#1\else
-        \begingroup\lccode`\~=`#1\lowercase{\endgroup
-        \lst@lAddTo\lst@arg~}%
-        \expandafter\lst@XConvertNext
-    \fi}
-\def\lst@XConvertNext{%
-    \lst@if \expandafter\lst@XConvertX
-      \else \expandafter\lst@XConvert \fi}
-\def\lst@XConvertX#1{%
-    \ifx\@nil#1\else
-        \lst@XConvertX@#1\relax
-        \expandafter\lst@XConvert
-    \fi}
-\def\lst@XConvertX@#1#2\relax{%
-    \begingroup\lccode`\~=`#1\lowercase{\endgroup
-    \lst@XCConvertX@@~}{#2}}
-\def\lst@XCConvertX@@#1#2{\lst@lAddTo\lst@arg{{#1#2}}}
-\def\lst@Require#1#2#3#4#5{%
-    \begingroup
-    \aftergroup\lst@true
-    \ifx\@empty#3\@empty\else
-        \def\lst@prefix{#2}\let\lst@require\@empty
-        \edef\lst@temp{\expandafter\zap@space#3 \@empty}%
-        \lst@for\lst@temp\do{%
-          \ifx\@empty##1\@empty\else \lstKV@OptArg[]{##1}{%
-            #4[####1]{####2}%
-            \@ifundefined{\@lst\lst@prefix @\lst@malias $\lst@oalias}%
-            {\edef\lst@require{\lst@require,\lst@malias $\lst@oalias}}%
-            {}}%
-          \fi}%
-        \global\let\lst@loadaspects\@empty
-        \lst@InputCatcodes
-        \ifx\lst@require\@empty\else
-            \lst@for{#5}\do{%
-                \ifx\lst@require\@empty\else
-                    \InputIfFileExists{##1}{}{}%
-                \fi}%
-        \fi
-        \ifx\lst@require\@empty\else
-            \PackageError{Listings}{Couldn't load requested #1}%
-            {The following #1s weren't loadable:^^J\@spaces
-             \lst@require^^JThis may cause errors in the sequel.}%
-            \aftergroup\lst@false
-        \fi
-        \ifx\lst@loadaspects\@empty\else
-            \lst@RequireAspects\lst@loadaspects
-        \fi
-    \fi
-    \endgroup}
-\def\lst@IfRequired[#1]#2{%
-    \lst@NormedDef\lst@temp{[#1]#2}%
-    \expandafter\lst@IfRequired@\lst@temp\relax}
-\def\lst@IfRequired@[#1]#2\relax#3{%
-    \lst@IfOneOf #2$#1\relax\lst@require
-        {\lst@DeleteKeysIn@\lst@require#2$#1,\relax,%
-         \global\expandafter\let
-             \csname\@lst\lst@prefix @#2$#1\endcsname\@empty
-         #3}}
-\let\lst@require\@empty
-\def\lst@NoAlias[#1]#2{%
-    \lst@NormedDef\lst@oalias{#1}\lst@NormedDef\lst@malias{#2}}
-\gdef\lst@LAS#1#2#3#4#5#6#7{%
-    \lst@Require{#1}{#2}{#3}#4#5%
-    #4#3%
-    \@ifundefined{lst#2@\lst@malias$\lst@oalias}%
-        {\PackageError{Listings}%
-         {#1 \ifx\@empty\lst@oalias\else \lst@oalias\space of \fi
-          \lst@malias\space undefined}%
-         {The #1 is not loadable. \@ehc}}%
-        {#6\csname\@lst#2@\lst@malias $\lst@oalias\endcsname #7}}
-\def\lst@RequireAspects#1{%
-    \lst@Require{aspect}{asp}{#1}\lst@NoAlias\lstaspectfiles}
-\let\lstloadaspects\lst@RequireAspects
-\@ifundefined{lstaspectfiles}
-    {\newcommand\lstaspectfiles{lstmisc0.sty,lstmisc.sty}}{}
-\gdef\lst@DefDriver#1#2#3#4{%
-    \@ifnextchar[{\lst@DefDriver@{#1}{#2}#3#4}%
-                 {\lst@DefDriver@{#1}{#2}#3#4[]}}
-\gdef\lst@DefDriver@#1#2#3#4[#5]#6{%
-    \def\lst@name{#1}\let\lst@if#4%
-    \lst@NormedDef\lst@driver{\@lst#2@#6$#5}%
-    \lst@IfRequired[#5]{#6}{\begingroup \lst@true}%
-                           {\begingroup}%
-    \lst@setcatcodes
-    \@ifnextchar[{\lst@XDefDriver{#1}#3}{\lst@DefDriver@@#3}}
-\gdef\lst@DefDriver@@#1#2{%
-    \lst@if
-        \global\@namedef{\lst@driver}{#1{#2}}%
-    \fi
-    \endgroup
-    \@ifnextchar[\lst@XXDefDriver\@empty}
-\gdef\lst@XXDefDriver[#1]{%
-    \ifx\@empty#1\@empty\else
-        \lst@if
-            \lstloadaspects{#1}%
-        \else
-            \@ifundefined{\lst@driver}{}%
-            {\xdef\lst@loadaspects{\lst@loadaspects,#1}}%
-        \fi
-    \fi}
-\gdef\lst@XDefDriver#1#2[#3]#4#5{\lst@DefDriver@@#2{also#1=[#3]#4,#5}}
-\let\lst@UserCommand\gdef
-\newcommand*\lst@BeginAspect[2][]{%
-    \def\lst@curraspect{#2}%
-    \ifx \lst@curraspect\@empty
-        \expandafter\lst@GobbleAspect
-    \else
-        \let\lst@next\@empty
-        \lst@IfRequired[]{#2}%
-            {\lst@RequireAspects{#1}%
-             \lst@if\else \let\lst@next\lst@GobbleAspect \fi}%
-            {\let\lst@next\lst@GobbleAspect}%
-        \expandafter\lst@next
-    \fi}
-\def\lst@EndAspect{%
-    \csname\@lst patch@\lst@curraspect\endcsname
-    \let\lst@curraspect\@empty}
-\long\def\lst@GobbleAspect#1\lst@EndAspect{\let\lst@curraspect\@empty}
-\def\lst@Key#1#2{%
-    \@ifnextchar[{\lstKV@def{#1}{#2}}%
-                 {\def\lst@temp{\lst@Key@{#1}{#2}}
-                  \afterassignment\lst@temp
-                  \global\@namedef{KV@\@lst @#1}####1}}
-\def\lstKV@def#1#2[#3]{%
-    \global\@namedef{KV@\@lst @#1@default\expandafter}\expandafter
-        {\csname KV@\@lst @#1\endcsname{#3}}%
-    \def\lst@temp{\lst@Key@{#1}{#2}}\afterassignment\lst@temp
-    \global\@namedef{KV@\@lst @#1}##1}
-\def\lst@Key@#1#2{%
-    \ifx\relax#2\@empty\else
-        \begingroup \globaldefs\@ne
-        \csname KV@\@lst @#1\endcsname{#2}%
-        \endgroup
-    \fi}
-\def\lst@UseHook#1{\csname\@lst hk@#1\endcsname}
-\def\lst@AddToHook{\lst@ATH@\iffalse\lst@AddTo}
-\def\lst@AddToHookExe{\lst@ATH@\iftrue\lst@AddTo}
-\def\lst@AddToHookAtTop{\lst@ATH@\iffalse\lst@AddToAtTop}
-\long\def\lst@ATH@#1#2#3#4{%
-    \@ifundefined{\@lst hk@#3}{%
-        \expandafter\gdef\csname\@lst hk@#3\endcsname{}}{}%
-    \expandafter#2\csname\@lst hk@#3\endcsname{#4}%
-    \def\lst@temp{#4}%
-    #1% \iftrue|false
-        \begingroup \globaldefs\@ne \lst@temp \endgroup
-    \fi}
-\long\def\lst@AddTo#1#2{%
-    \expandafter\gdef\expandafter#1\expandafter{#1#2}}
-\def\lst@AddToAtTop#1#2{\def\lst@temp{#2}%
-    \expandafter\expandafter\expandafter\gdef
-    \expandafter\expandafter\expandafter#1%
-    \expandafter\expandafter\expandafter{\expandafter\lst@temp#1}}
-\def\lst@lAddTo#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
-\def\lst@Extend#1#2{%
-    \expandafter\lst@AddTo\expandafter#1\expandafter{#2}}
-\def\lst@lExtend#1#2{%
-    \expandafter\lst@lAddTo\expandafter#1\expandafter{#2}}
-\RequirePackage{keyval}[1997/11/10]
-\def\lstKV@TwoArg#1#2{\gdef\@gtempa##1##2{#2}\@gtempa#1{}{}}
-\def\lstKV@ThreeArg#1#2{\gdef\@gtempa##1##2##3{#2}\@gtempa#1{}{}{}}
-\def\lstKV@FourArg#1#2{\gdef\@gtempa##1##2##3##4{#2}\@gtempa#1{}{}{}{}}
-\def\lstKV@OptArg[#1]#2#3{%
-    \gdef\@gtempa[##1]##2{#3}\lstKV@OptArg@{#1}#2\@}
-\def\lstKV@OptArg@#1{\@ifnextchar[\lstKV@OptArg@@{\lstKV@OptArg@@[#1]}}
-\def\lstKV@OptArg@@[#1]#2\@{\@gtempa[#1]{#2}}
-\def\lstKV@XOptArg[#1]#2#3{%
-    \global\let\@gtempa#3\lstKV@OptArg@{#1}#2\@}
-\def\lstKV@CSTwoArg#1#2{%
-    \gdef\@gtempa##1,##2,##3\relax{#2}%
-    \@gtempa#1,,\relax}
-\def\lstKV@SetIf#1{\lstKV@SetIf@#1\relax}
-\def\lstKV@SetIf@#1#2\relax#3{\lowercase{%
-    \expandafter\let\expandafter#3%
-        \csname if\ifx #1t}true\else false\fi\endcsname}
-\def\lstKV@SwitchCases#1#2#3{%
-    \def\lst@temp##1\\#1&##2\\##3##4\@nil{%
-        \ifx\@empty##3%
-            #3%
-        \else
-            ##2%
-        \fi
-    }%
-    \lst@temp\\#2\\#1&\\\@empty\@nil}
-\lst@UserCommand\lstset{\begingroup \lst@setcatcodes \lstset@}
-\def\lstset@#1{\endgroup \ifx\@empty#1\@empty\else\setkeys{lst}{#1}\fi}
-\def\lst@setcatcodes{\makeatletter \catcode`\==12\relax}
-\def\lst@NewMode#1{%
-    \ifx\@undefined#1%
-        \lst@mode\lst@newmode\relax \advance\lst@mode\@ne
-        \xdef\lst@newmode{\the\lst@mode}%
-        \global\chardef#1=\lst@mode
-        \lst@mode\lst@nomode
-    \fi}
-\newcount\lst@mode
-\def\lst@newmode{\m@ne}% init
-\lst@NewMode\lst@nomode % init (of \lst@mode :-)
-\def\lst@UseDynamicMode{%
-    \@tempcnta\lst@dynamicmode\relax \advance\@tempcnta\@ne
-    \edef\lst@dynamicmode{\the\@tempcnta}%
-    \expandafter\lst@Swap\expandafter{\expandafter{\lst@dynamicmode}}}
-\lst@AddToHook{InitVars}{\let\lst@dynamicmode\lst@newmode}
-\def\lst@EnterMode#1#2{%
-    \bgroup \lst@mode=#1\relax #2%
-    \lst@FontAdjust
-    \lst@lAddTo\lst@entermodes{\lst@EnterMode{#1}{#2}}}
-\lst@AddToHook{InitVars}{\let\lst@entermodes\@empty}
-\let\lst@entermodes\@empty % init
-\def\lst@LeaveMode{%
-    \ifnum\lst@mode=\lst@nomode\else
-        \egroup \expandafter\lsthk@EndGroup
-    \fi}
-\lst@AddToHook{EndGroup}{}% init
-\def\lst@InterruptModes{%
-    \lst@Extend\lst@modestack{\expandafter{\lst@entermodes}}%
-    \lst@LeaveAllModes}
-\lst@AddToHook{InitVars}{\global\let\lst@modestack\@empty}
-\def\lst@ReenterModes{%
-    \ifx\lst@modestack\@empty\else
-        \lst@LeaveAllModes
-        \global\let\@gtempa\lst@modestack
-        \global\let\lst@modestack\@empty
-        \expandafter\lst@ReenterModes@\@gtempa\relax
-    \fi}
-\def\lst@ReenterModes@#1#2{%
-    \ifx\relax#2\@empty
-        \gdef\@gtempa##1{#1}%
-        \expandafter\@gtempa
-    \else
-        \lst@AddTo\lst@modestack{{#1}}%
-        \expandafter\lst@ReenterModes@
-    \fi
-    {#2}}
-\def\lst@LeaveAllModes{%
-    \ifnum\lst@mode=\lst@nomode
-        \expandafter\lsthk@EndGroup
-    \else
-        \expandafter\egroup\expandafter\lst@LeaveAllModes
-    \fi}
-\lst@AddToHook{ExitVars}{\lst@LeaveAllModes}
-\lst@NewMode\lst@Pmode
-\lst@NewMode\lst@GPmode
-\def\lst@modetrue{\let\lst@ifmode\iftrue \lsthk@ModeTrue}
-\let\lst@ifmode\iffalse % init
-\lst@AddToHook{ModeTrue}{}% init
-\def\lst@Lmodetrue{\let\lst@ifLmode\iftrue}
-\let\lst@ifLmode\iffalse % init
-\lst@AddToHook{EOL}{\@whilesw \lst@ifLmode\fi \lst@LeaveMode}
-\def\lst@NormedDef#1#2{\lowercase{\edef#1{\zap@space#2 \@empty}}}
-\def\lst@NormedNameDef#1#2{%
-    \lowercase{\edef\lst@temp{\zap@space#1 \@empty}%
-    \expandafter\xdef\csname\lst@temp\endcsname{\zap@space#2 \@empty}}}
-\def\lst@GetFreeMacro#1{%
-    \@tempcnta\z@ \def\lst@freemacro{#1\the\@tempcnta}%
-    \lst@GFM@}
-\def\lst@GFM@{%
-    \expandafter\ifx \csname\lst@freemacro\endcsname \relax
-        \edef\lst@freemacro{\csname\lst@freemacro\endcsname}%
-    \else
-        \advance\@tempcnta\@ne
-        \expandafter\lst@GFM@
-    \fi}
-\newbox\lst@gtempboxa
-\newtoks\lst@token \newcount\lst@length
-\def\lst@ResetToken{\lst@token{}\lst@length\z@}
-\lst@AddToHook{InitVarsBOL}{\lst@ResetToken \let\lst@lastother\@empty}
-\lst@AddToHook{EndGroup}{\lst@ResetToken \let\lst@lastother\@empty}
-\def\lst@lettertrue{\let\lst@ifletter\iftrue}
-\def\lst@letterfalse{\let\lst@ifletter\iffalse}
-\lst@AddToHook{InitVars}{\lst@letterfalse}
-\def\lst@Append#1{\advance\lst@length\@ne
-                  \lst@token=\expandafter{\the\lst@token#1}}
-\def\lst@AppendOther{%
-    \lst@ifletter \lst@Output\lst@letterfalse \fi
-    \futurelet\lst@lastother\lst@Append}
-\def\lst@AppendLetter{%
-    \lst@ifletter\else \lst@OutputOther\lst@lettertrue \fi
-    \lst@Append}
-\def\lst@SaveToken{%
-    \global\let\lst@gthestyle\lst@thestyle
-    \global\let\lst@glastother\lst@lastother
-    \xdef\lst@RestoreToken{\noexpand\lst@token{\the\lst@token}%
-                           \noexpand\lst@length\the\lst@length\relax
-                           \noexpand\let\noexpand\lst@thestyle
-                                        \noexpand\lst@gthestyle
-                           \noexpand\let\noexpand\lst@lastother
-                                        \noexpand\lst@glastother}}
-\def\lst@IfLastOtherOneOf#1{\lst@IfLastOtherOneOf@ #1\relax}
-\def\lst@IfLastOtherOneOf@#1{%
-    \ifx #1\relax
-        \expandafter\@secondoftwo
-    \else
-        \ifx\lst@lastother#1%
-            \lst@IfLastOtherOneOf@t
-        \else
-            \expandafter\expandafter\expandafter\lst@IfLastOtherOneOf@
-        \fi
-    \fi}
-\def\lst@IfLastOtherOneOf@t#1\fi\fi#2\relax{\fi\fi\@firstoftwo}
-\newdimen\lst@currlwidth % \global
-\newcount\lst@column \newcount\lst@pos % \global
-\lst@AddToHook{InitVarsBOL}
-    {\global\lst@currlwidth\z@ \global\lst@pos\z@ \global\lst@column\z@}
-\def\lst@CalcColumn{%
-            \@tempcnta\lst@column
-    \advance\@tempcnta\lst@length
-    \advance\@tempcnta-\lst@pos}
-\newdimen\lst@lostspace % \global
-\lst@AddToHook{InitVarsBOL}{\global\lst@lostspace\z@}
-\def\lst@UseLostSpace{\ifdim\lst@lostspace>\z@ \lst@InsertLostSpace \fi}
-\def\lst@InsertLostSpace{%
-    \lst@Kern\lst@lostspace \global\lst@lostspace\z@}
-\def\lst@InsertHalfLostSpace{%
-    \global\lst@lostspace.5\lst@lostspace \lst@Kern\lst@lostspace}
-\newdimen\lst@width
-\lst@Key{basewidth}{0.6em,0.45em}{\lstKV@CSTwoArg{#1}%
-    {\def\lst@widthfixed{##1}\def\lst@widthflexible{##2}%
-     \ifx\lst@widthflexible\@empty
-         \let\lst@widthflexible\lst@widthfixed
-     \fi
-     \def\lst@temp{\PackageError{Listings}%
-                                {Negative value(s) treated as zero}%
-                                \@ehc}%
-     \let\lst@error\@empty
-     \ifdim \lst@widthfixed<\z@
-         \let\lst@error\lst@temp \let\lst@widthfixed\z@
-     \fi
-     \ifdim \lst@widthflexible<\z@
-         \let\lst@error\lst@temp \let\lst@widthflexible\z@
-     \fi
-     \lst@error}}
-\lst@AddToHook{FontAdjust}
-    {\lst@width=\lst@ifflexible\lst@widthflexible
-                          \else\lst@widthfixed\fi \relax}
-\lst@Key{fontadjust}{false}[t]{\lstKV@SetIf{#1}\lst@iffontadjust}
-\def\lst@FontAdjust{\lst@iffontadjust \lsthk@FontAdjust \fi}
-\lst@AddToHook{InitVars}{\lsthk@FontAdjust}
-\def\lst@OutputBox#1{\lst@alloverstyle{\box#1}}
-\def\lst@alloverstyle#1{#1}% init
-\def\lst@Kern#1{%
-    \setbox\z@\hbox{{\lst@currstyle{\kern#1}}}%
-    \global\advance\lst@currlwidth \wd\z@
-    \lst@OutputBox\z@}
-\def\lst@CalcLostSpaceAndOutput{%
-    \global\advance\lst@lostspace \lst@length\lst@width
-    \global\advance\lst@lostspace-\wd\@tempboxa
-    \global\advance\lst@currlwidth \wd\@tempboxa
-    \global\advance\lst@pos -\lst@length
-    \setbox\@tempboxa\hbox{\let\lst@OutputBox\box
-        \ifdim\lst@lostspace>\z@ \lst@leftinsert \fi
-        \box\@tempboxa
-        \ifdim\lst@lostspace>\z@ \lst@rightinsert \fi}%
-    \lst@OutputBox\@tempboxa \lsthk@PostOutput}
-\lst@AddToHook{PostOutput}{}% init
-\def\lst@OutputToken{%
-    \lst@TrackNewLines \lst@OutputLostSpace
-    \lst@ifgobbledws
-        \lst@gobbledwhitespacefalse
-        \lst@@discretionary
-    \fi
-    \lst@CheckMerge
-    {\lst@thestyle{\lst@FontAdjust
-     \setbox\@tempboxa\lst@hbox
-        {\lsthk@OutputBox
-         \lst@lefthss
-         \expandafter\lst@FillOutputBox\the\lst@token\@empty
-         \lst@righthss}%
-     \lst@CalcLostSpaceAndOutput}}%
-    \lst@ResetToken}
-\lst@AddToHook{OutputBox}{}% init
-\def\lst@gobbledwhitespacetrue{\global\let\lst@ifgobbledws\iftrue}
-\def\lst@gobbledwhitespacefalse{\global\let\lst@ifgobbledws\iffalse}
-\lst@AddToHookExe{InitBOL}{\lst@gobbledwhitespacefalse}% init
-\def\lst@Delay#1{%
-    \lst@CheckDelay
-    #1%
-    \lst@GetOutputMacro\lst@delayedoutput
-    \edef\lst@delayed{\the\lst@token}%
-    \edef\lst@delayedlength{\the\lst@length}%
-    \lst@ResetToken}
-\def\lst@Merge#1{%
-    \lst@CheckMerge
-    #1%
-    \edef\lst@merged{\the\lst@token}%
-    \edef\lst@mergedlength{\the\lst@length}%
-    \lst@ResetToken}
-\def\lst@MergeToken#1#2{%
-    \advance\lst@length#2%
-    \lst@lExtend#1{\the\lst@token}%
-    \expandafter\lst@token\expandafter{#1}%
-    \let#1\@empty}
-\def\lst@CheckDelay{%
-    \ifx\lst@delayed\@empty\else
-        \lst@GetOutputMacro\@gtempa
-        \ifx\lst@delayedoutput\@gtempa
-            \lst@MergeToken\lst@delayed\lst@delayedlength
-        \else
-            {\lst@ResetToken
-             \lst@MergeToken\lst@delayed\lst@delayedlength
-             \lst@delayedoutput}%
-            \let\lst@delayed\@empty
-        \fi
-    \fi}
-\def\lst@CheckMerge{%
-    \ifx\lst@merged\@empty\else
-        \lst@MergeToken\lst@merged\lst@mergedlength
-    \fi}
-\let\lst@delayed\@empty % init
-\let\lst@merged\@empty % init
-\def\lst@column@fixed{%
-    \lst@flexiblefalse
-    \lst@width\lst@widthfixed\relax
-    \let\lst@OutputLostSpace\lst@UseLostSpace
-    \let\lst@FillOutputBox\lst@FillFixed
-    \let\lst@hss\hss
-    \def\lst@hbox{\hbox to\lst@length\lst@width}}
-\def\lst@FillFixed#1{#1\lst@FillFixed@}
-\def\lst@FillFixed@#1{%
-    \ifx\@empty#1\else \lst@hss#1\expandafter\lst@FillFixed@ \fi}
-\def\lst@column@flexible{%
-    \lst@flexibletrue
-    \lst@width\lst@widthflexible\relax
-    \let\lst@OutputLostSpace\lst@UseLostSpace
-    \let\lst@FillOutputBox\@empty
-    \let\lst@hss\@empty
-    \let\lst@hbox\hbox}
-\def\lst@column@fullflexible{%
-    \lst@column@flexible
-    \def\lst@OutputLostSpace{\lst@ifnewline \lst@UseLostSpace\fi}%
-    \let\lst@leftinsert\@empty
-    \let\lst@rightinsert\@empty}
-\def\lst@column@spaceflexible{%
-    \lst@column@flexible
-    \def\lst@OutputLostSpace{%
-      \lst@ifwhitespace
-        \ifx\lst@outputspace\lst@visiblespace
-        \else
-          \lst@UseLostSpace
-        \fi
-      \else
-        \lst@ifnewline \lst@UseLostSpace\fi
-      \fi}%
-    \let\lst@leftinsert\@empty
-    \let\lst@rightinsert\@empty}
-\def\lst@outputpos#1#2\relax{%
-    \def\lst@lefthss{\lst@hss}\let\lst@righthss\lst@lefthss
-    \let\lst@rightinsert\lst@InsertLostSpace
-    \ifx #1c%
-        \let\lst@leftinsert\lst@InsertHalfLostSpace
-    \else\ifx #1r%
-        \let\lst@righthss\@empty
-        \let\lst@leftinsert\lst@InsertLostSpace
-        \let\lst@rightinsert\@empty
-    \else
-        \let\lst@lefthss\@empty
-        \let\lst@leftinsert\@empty
-        \ifx #1l\else \PackageWarning{Listings}%
-            {Unknown positioning for output boxes}%
-        \fi
-    \fi\fi}
-\def\lst@flexibletrue{\let\lst@ifflexible\iftrue}
-\def\lst@flexiblefalse{\let\lst@ifflexible\iffalse}
-\lst@Key{columns}{[c]fixed}{\lstKV@OptArg[]{#1}{%
-    \ifx\@empty##1\@empty\else \lst@outputpos##1\relax\relax \fi
-    \expandafter\let\expandafter\lst@arg
-                                \csname\@lst @column@##2\endcsname
-    \lst@arg
-    \ifx\lst@arg\relax
-        \PackageWarning{Listings}{Unknown column format `##2'}%
-    \else
-        \lst@ifflexible
-            \let\lst@columnsflexible\lst@arg
-        \else
-            \let\lst@columnsfixed\lst@arg
-        \fi
-    \fi}}
-\let\lst@columnsfixed\lst@column@fixed % init
-\let\lst@columnsflexible\lst@column@flexible % init
-\lst@Key{flexiblecolumns}\relax[t]{%
-    \lstKV@SetIf{#1}\lst@ifflexible
-    \lst@ifflexible \lst@columnsflexible
-              \else \lst@columnsfixed \fi}
-\newcount\lst@newlines
-\lst@AddToHook{InitVars}{\global\lst@newlines\z@}
-\lst@AddToHook{InitVarsBOL}{\global\advance\lst@newlines\@ne}
-\def\lst@NewLine{%
-    \ifx\lst@OutputBox\@gobble\else
-        \par\noindent \hbox{}%
-    \fi
-    \global\advance\lst@newlines\m@ne
-    \lst@newlinetrue}
-\def\lst@newlinetrue{\global\let\lst@ifnewline\iftrue}
-\lst@AddToHookExe{PostOutput}{\global\let\lst@ifnewline\iffalse}% init
-\def\lst@TrackNewLines{%
-    \ifnum\lst@newlines>\z@
-        \lsthk@OnNewLine
-        \lst@DoNewLines
-    \fi}
-\lst@AddToHook{OnNewLine}{}% init
-\lst@Key{emptylines}\maxdimen{%
-    \@ifstar{\lst@true\@tempcnta\@gobble#1\relax\lst@GobbleNil}%
-            {\lst@false\@tempcnta#1\relax\lst@GobbleNil}#1\@nil
-    \advance\@tempcnta\@ne
-    \edef\lst@maxempty{\the\@tempcnta\relax}%
-    \let\lst@ifpreservenumber\lst@if}
-\def\lst@DoNewLines{
-    \@whilenum\lst@newlines>\lst@maxempty \do
-        {\lst@ifpreservenumber
-            \lsthk@OnEmptyLine
-            \global\advance\c@lstnumber\lst@advancelstnum
-         \fi
-         \global\advance\lst@newlines\m@ne}%
-    \@whilenum \lst@newlines>\@ne \do
-        {\lsthk@OnEmptyLine \lst@NewLine}%
-    \ifnum\lst@newlines>\z@ \lst@NewLine \fi}
-\lst@AddToHook{OnEmptyLine}{}% init
-\lst@Key{identifierstyle}{}{\def\lst@identifierstyle{#1}}
-\lst@AddToHook{EmptyStyle}{\let\lst@identifierstyle\@empty}
-\def\lst@GotoTabStop{%
-    \ifnum\lst@newlines=\z@
-        \setbox\@tempboxa\hbox{\lst@outputspace}%
-        \setbox\@tempboxa\hbox to\wd\@tempboxa{{\lst@currstyle{\hss}}}%
-        \lst@CalcLostSpaceAndOutput
-    \else
-        \global\advance\lst@lostspace \lst@length\lst@width
-        \global\advance\lst@column\lst@length \lst@length\z@
-    \fi}
-\def\lst@OutputOther{%
-    \lst@CheckDelay
-    \ifnum\lst@length=\z@\else
-        \let\lst@thestyle\lst@currstyle
-        \lsthk@OutputOther
-        \lst@OutputToken
-    \fi}
-\lst@AddToHook{OutputOther}{}% init
-\let\lst@currstyle\relax % init
-\def\lst@Output{%
-    \lst@CheckDelay
-    \ifnum\lst@length=\z@\else
-        \ifx\lst@currstyle\relax
-            \let\lst@thestyle\lst@identifierstyle
-        \else
-            \let\lst@thestyle\lst@currstyle
-        \fi
-        \lsthk@Output
-        \lst@OutputToken
-    \fi
-    \let\lst@lastother\relax}
-\lst@AddToHook{Output}{}% init
-\def\lst@GetOutputMacro#1{%
-    \lst@ifletter \global\let#1\lst@Output
-            \else \global\let#1\lst@OutputOther\fi}
-\def\lst@PrintToken{%
-    \lst@ifletter \lst@Output \lst@letterfalse
-            \else \lst@OutputOther \let\lst@lastother\@empty \fi}
-\def\lst@XPrintToken{%
-    \lst@PrintToken \lst@CheckMerge
-    \ifnum\lst@length=\z@\else \lst@PrintToken \fi}
-\def\lst@BeginDropOutput#1{%
-    \xdef\lst@BDOnewlines{\the\lst@newlines}%
-    \global\let\lst@BDOifnewline\lst@ifnewline
-    \lst@EnterMode{#1}%
-        {\lst@modetrue
-         \let\lst@OutputBox\@gobble
-         \aftergroup\lst@BDORestore}}
-\def\lst@BDORestore{%
-    \global\lst@newlines\lst@BDOnewlines
-    \global\let\lst@ifnewline\lst@BDOifnewline}
-\let\lst@EndDropOutput\lst@LeaveMode
-\def\lst@ProcessLetter{\lst@whitespacefalse \lst@AppendLetter}
-\def\lst@ProcessOther{\lst@whitespacefalse \lst@AppendOther}
-\def\lst@ProcessDigit{%
-    \lst@whitespacefalse
-    \lst@ifletter \expandafter\lst@AppendLetter
-            \else \expandafter\lst@AppendOther\fi}
-\def\lst@whitespacetrue{\global\let\lst@ifwhitespace\iftrue}
-\def\lst@whitespacefalse{\global\let\lst@ifwhitespace\iffalse}
-\lst@AddToHook{InitVarsBOL}{\lst@whitespacetrue}
-\lst@Key{tabsize}{8}
-    {\ifnum#1>\z@ \def\lst@tabsize{#1}\else
-         \PackageError{Listings}{Strict positive integer expected}%
-         {You can't use `#1' as tabsize. \@ehc}%
-     \fi}
-\lst@Key{showtabs}f[t]{\lstKV@SetIf{#1}\lst@ifshowtabs}
-\lst@Key{tab}{\kern.06em\hbox{\vrule\@height.3ex}%
-              \hrulefill\hbox{\vrule\@height.3ex}}
-    {\def\lst@tab{#1}}
-\def\lst@ProcessTabulator{%
-    \lst@XPrintToken \lst@whitespacetrue
-    \global\advance\lst@column -\lst@pos
-    \@whilenum \lst@pos<\@ne \do
-        {\global\advance\lst@pos\lst@tabsize}%
-    \lst@length\lst@pos
-    \lst@PreGotoTabStop}
-\def\lst@PreGotoTabStop{%
-    \lst@ifshowtabs
-        \lst@TrackNewLines
-        \setbox\@tempboxa\hbox to\lst@length\lst@width
-            {{\lst@currstyle{\hss\lst@tab}}}%
-        \lst@CalcLostSpaceAndOutput
-    \else
-        \lst@ifkeepspaces
-            \@tempcnta\lst@length \lst@length\z@
-            \@whilenum \@tempcnta>\z@ \do
-                {\lst@AppendOther\lst@outputspace
-                 \advance\@tempcnta\m@ne}%
-            \lst@OutputOther
-        \else
-            \lst@GotoTabStop
-        \fi
-    \fi
-    \lst@length\z@ \global\lst@pos\z@}
-\def\lst@outputspace{\ }
-\def\lst@visiblespace{\lst@ttfamily{\char32}\textvisiblespace}
-\lst@Key{showspaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifshowspaces}
-\lst@Key{keepspaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifkeepspaces}
-\lst@AddToHook{Init}
-    {\lst@ifshowspaces
-         \let\lst@outputspace\lst@visiblespace
-         \lst@keepspacestrue
-     \fi}
-\def\lst@keepspacestrue{\let\lst@ifkeepspaces\iftrue}
-\def\lst@ProcessSpace{%
-    \lst@ifkeepspaces
-        \lst@PrintToken
-        \lst@whitespacetrue
-        \lst@AppendOther\lst@outputspace
-        \lst@PrintToken
-    \else \ifnum\lst@newlines=\z@
-        \lst@AppendSpecialSpace
-    \else \ifnum\lst@length=\z@
-            \global\advance\lst@lostspace\lst@width
-            \global\advance\lst@pos\m@ne
-            \lst@whitespacetrue
-        \else
-            \lst@AppendSpecialSpace
-        \fi
-    \fi \fi}
-\def\lst@AppendSpecialSpace{%
-    \lst@ifwhitespace
-        \lst@PrintToken
-        \global\advance\lst@lostspace\lst@width
-        \global\advance\lst@pos\m@ne
-        \lst@gobbledwhitespacetrue
-    \else
-        \lst@PrintToken
-        \lst@whitespacetrue
-        \lst@AppendOther\lst@outputspace
-        \lst@PrintToken
-    \fi}
-\lst@Key{formfeed}{\bigbreak}{\def\lst@formfeed{#1}}
-\def\lst@ProcessFormFeed{%
-    \lst@XPrintToken
-    \ifnum\lst@newlines=\z@
-        \lst@EOLUpdate \lsthk@InitVarsBOL
-    \fi
-    \lst@formfeed
-    \lst@whitespacetrue}
-\def\lst@Def#1{\lccode`\~=#1\lowercase{\def~}}
-\def\lst@Let#1{\lccode`\~=#1\lowercase{\let~}}
-\lst@AddToAtTop{\try@load@fontshape}{\def\space{ }}
-\def\lst@SelectStdCharTable{%
-    \lst@Def{9}{\lst@ProcessTabulator}%
-    \lst@Def{12}{\lst@ProcessFormFeed}%
-    \lst@Def{32}{\lst@ProcessSpace}}
-\def\lst@CCPut#1#2{%
-    \ifnum#2=\z@
-        \expandafter\@gobbletwo
-    \else
-        \lccode`\~=#2\lccode`\/=#2\lowercase{\lst@CCPut@~{#1/}}%
-    \fi
-    \lst@CCPut#1}
-\def\lst@CCPut@#1#2{\lst@lAddTo\lst@SelectStdCharTable{\def#1{#2}}}
-\lst@CCPut \lst@ProcessOther
-    {"21}{"22}{"28}{"29}{"2B}{"2C}{"2E}{"2F}
-    {"3A}{"3B}{"3D}{"3F}{"5B}{"5D}
-    \z@
-\lst@CCPut \lst@ProcessDigit
-    {"30}{"31}{"32}{"33}{"34}{"35}{"36}{"37}{"38}{"39}
-    \z@
-\lst@CCPut \lst@ProcessLetter
-    {"40}{"41}{"42}{"43}{"44}{"45}{"46}{"47}
-    {"48}{"49}{"4A}{"4B}{"4C}{"4D}{"4E}{"4F}
-    {"50}{"51}{"52}{"53}{"54}{"55}{"56}{"57}
-    {"58}{"59}{"5A}
-         {"61}{"62}{"63}{"64}{"65}{"66}{"67}
-    {"68}{"69}{"6A}{"6B}{"6C}{"6D}{"6E}{"6F}
-    {"70}{"71}{"72}{"73}{"74}{"75}{"76}{"77}
-    {"78}{"79}{"7A}
-    \z@
-\def\lst@CCPutMacro#1#2#3{%
-    \ifnum#2=\z@ \else
-        \begingroup\lccode`\~=#2\relax \lccode`\/=#2\relax
-        \lowercase{\endgroup\expandafter\lst@CCPutMacro@
-            \csname\@lst @um/\expandafter\endcsname
-            \csname\@lst @um/@\endcsname /~}#1{#3}%
-        \expandafter\lst@CCPutMacro
-    \fi}
-\def\lst@CCPutMacro@#1#2#3#4#5#6{%
-    \lst@lAddTo\lst@SelectStdCharTable{\def#4{#5#1}}%
-    \def#1{\lst@UM#3}%
-    \def#2{#6}}
-\def\lst@UM#1{\csname\@lst @um#1@\endcsname}
-\lst@CCPutMacro
-    \lst@ProcessOther {"23}\#
-    \lst@ProcessLetter{"24}\textdollar
-    \lst@ProcessOther {"25}\%
-    \lst@ProcessOther {"26}\&
-    \lst@ProcessOther {"27}{\lst@ifupquote \textquotesingle
-                                     \else \char39\relax \fi}
-    \lst@ProcessOther {"2A}{\lst@ttfamily*\textasteriskcentered}
-    \lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{$-$}}
-    \lst@ProcessOther {"3C}{\lst@ttfamily<\textless}
-    \lst@ProcessOther {"3E}{\lst@ttfamily>\textgreater}
-    \lst@ProcessOther {"5C}{\lst@ttfamily{\char92}\textbackslash}
-    \lst@ProcessOther {"5E}\textasciicircum
-    \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}\textunderscore}
-    \lst@ProcessOther {"60}{\lst@ifupquote \textasciigrave
-                                     \else \char96\relax \fi}
-    \lst@ProcessOther {"7B}{\lst@ttfamily{\char123}\textbraceleft}
-    \lst@ProcessOther {"7C}{\lst@ttfamily|\textbar}
-    \lst@ProcessOther {"7D}{\lst@ttfamily{\char125}\textbraceright}
-    \lst@ProcessOther {"7E}\textasciitilde
-    \lst@ProcessOther {"7F}-
-    \@empty\z@\@empty
-\def\lst@ttfamily#1#2{\ifx\f@family\ttdefault#1\relax\else#2\fi}
-\lst@AddToHook{Init}{\edef\ttdefault{\ttdefault}}
-\lst@Key{upquote}{false}[t]{\lstKV@SetIf{#1}\lst@ifupquote
-    \lst@ifupquote
-       \@ifundefined{textasciigrave}%
-          {\let\KV@lst@upquote\@gobble
-           \lstKV@SetIf f\lst@ifupquote \@gobble\fi
-           \PackageError{Listings}{Option `upquote' requires `textcomp'
-            package.\MessageBreak The option has been disabled}%
-          {Add \string\usepackage{textcomp} to your preamble.}}%
-          {}%
-    \fi}
-\AtBeginDocument{%
-  \@ifpackageloaded{upquote}{\RequirePackage{textcomp}%
-                             \lstset{upquote}}{}%
-  \@ifpackageloaded{upquote2}{\lstset{upquote}}{}}
-\def\lst@activecharstrue{\let\lst@ifactivechars\iftrue}
-\def\lst@activecharsfalse{\let\lst@ifactivechars\iffalse}
-\lst@activecharstrue
-\def\lst@SelectCharTable{%
-    \lst@SelectStdCharTable
-    \lst@ifactivechars
-        \catcode9\active \catcode12\active \catcode13\active
-        \@tempcnta=32\relax
-        \@whilenum\@tempcnta<128\do
-            {\catcode\@tempcnta\active\advance\@tempcnta\@ne}%
-    \fi
-    \lst@ifec \lst@DefEC \fi
-    \let\do\lst@do@noligs \verbatim@nolig@list
-    \lsthk@SelectCharTable
-    \lst@DeveloperSCT
-\lst@DefRange
-    \ifx\lst@Backslash\relax\else
-        \lst@LetSaveDef{"5C}\lsts@backslash\lst@Backslash
-    \fi}
-\lst@Key{SelectCharTable}{}{\def\lst@DeveloperSCT{#1}}
-\lst@Key{MoreSelectCharTable}\relax{\lst@lAddTo\lst@DeveloperSCT{#1}}
-\lst@AddToHook{SetLanguage}{\let\lst@DeveloperSCT\@empty}
-\def\lst@do@noligs#1{%
-    \begingroup \lccode`\~=`#1\lowercase{\endgroup
-    \lst@do@noligs@~}}
-\def\lst@do@noligs@#1{%
-    \expandafter\expandafter\expandafter\def
-    \expandafter\expandafter\expandafter#1%
-    \expandafter\expandafter\expandafter{\expandafter\lst@NoLig#1}}
-\def\lst@NoLig{\advance\lst@length\m@ne \lst@Append\lst@nolig}
-\def\lst@nolig{\lst@UM\@empty}%
-\@namedef{\@lst @um@}{\leavevmode\kern\z@}
-\def\lst@SaveOutputDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup
-    \def\lst@temp##1\def~##2##3\relax}{%
-        \global\expandafter\let\expandafter#2\@gobble##2\relax}%
-    \expandafter\lst@temp\lst@SelectStdCharTable\relax}
-\lst@SaveOutputDef{"5C}\lstum@backslash
-\lst@Key{extendedchars}{true}[t]{\lstKV@SetIf{#1}\lst@ifec}
-\def\lst@DefEC{%
-    \lst@CCECUse \lst@ProcessLetter
-      ^^80^^81^^82^^83^^84^^85^^86^^87^^88^^89^^8a^^8b^^8c^^8d^^8e^^8f%
-      ^^90^^91^^92^^93^^94^^95^^96^^97^^98^^99^^9a^^9b^^9c^^9d^^9e^^9f%
-      ^^a0^^a1^^a2^^a3^^a4^^a5^^a6^^a7^^a8^^a9^^aa^^ab^^ac^^ad^^ae^^af%
-      ^^b0^^b1^^b2^^b3^^b4^^b5^^b6^^b7^^b8^^b9^^ba^^bb^^bc^^bd^^be^^bf%
-      ^^c0^^c1^^c2^^c3^^c4^^c5^^c6^^c7^^c8^^c9^^ca^^cb^^cc^^cd^^ce^^cf%
-      ^^d0^^d1^^d2^^d3^^d4^^d5^^d6^^d7^^d8^^d9^^da^^db^^dc^^dd^^de^^df%
-      ^^e0^^e1^^e2^^e3^^e4^^e5^^e6^^e7^^e8^^e9^^ea^^eb^^ec^^ed^^ee^^ef%
-      ^^f0^^f1^^f2^^f3^^f4^^f5^^f6^^f7^^f8^^f9^^fa^^fb^^fc^^fd^^fe^^ff%
-      ^^00}
-\def\lst@CCECUse#1#2{%
-    \ifnum`#2=\z@
-        \expandafter\@gobbletwo
-    \else
-        \ifnum\catcode`#2=\active
-            \lccode`\~=`#2\lccode`\/=`#2\lowercase{\lst@CCECUse@#1~/}%
-        \else
-            \lst@ifactivechars \catcode`#2=\active \fi
-            \lccode`\~=`#2\lccode`\/=`#2\lowercase{\def~{#1/}}%
-        \fi
-    \fi
-    \lst@CCECUse#1}
-\def\lst@CCECUse@#1#2#3{%
-    \expandafter\def\csname\@lst @EC#3\endcsname{\lst@UM#3}%
-    \expandafter\let\csname\@lst @um#3@\endcsname #2%
-    \edef#2{\noexpand#1%
-            \expandafter\noexpand\csname\@lst @EC#3\endcsname}}
-\lst@AddToHook{Init}
-    {\let\lsts@nfss@catcodes\nfss@catcodes
-     \let\nfss@catcodes\lst@nfss@catcodes}
-\def\lst@nfss@catcodes{%
-    \lst@makeletter
-        ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\relax
-    \@makeother (\@makeother )\@makeother ,\@makeother :\@makeother\&%
-    \@makeother 0\@makeother 1\@makeother 2\@makeother 3\@makeother 4%
-    \@makeother 5\@makeother 6\@makeother 7\@makeother 8\@makeother 9%
-    \@makeother =\lsts@nfss@catcodes}
-\def\lst@makeletter#1{%
-    \ifx\relax#1\else\catcode`#111\relax \expandafter\lst@makeletter\fi}
-\lst@Key{useoutput}{2}{\edef\lst@useoutput{\ifcase0#1 0\or 1\else 2\fi}}
-\lst@AddToHook{Init}
-{\edef\lst@OrgOutput{\the\output}%
-\ifcase\lst@useoutput\relax
-\or
- \output{\global\setbox\lst@gtempboxa\box\@cclv
-         \expandafter\egroup
-         \lst@SaveToken
-     \lst@InterruptModes
-     \setbox\@cclv\box\lst@gtempboxa
-     \bgroup\lst@OrgOutput\egroup
-     \bgroup
-     \aftergroup\pagegoal\aftergroup\vsize
-     \aftergroup\lst@ReenterModes\aftergroup\lst@RestoreToken}%
-\else
- \output{\lst@RestoreOrigCatcodes
-         \lst@ifec \lst@RestoreOrigExtendedCatcodes \fi
-         \lst@OrgOutput}%
-\fi}
-\def\lst@GetChars#1#2#3{%
-    \let#1\@empty
-    \@tempcnta#2\relax \@tempcntb#3\relax
-    \loop \ifnum\@tempcnta<\@tempcntb\relax
-        \lst@lExtend#1{\expandafter\catcode\the\@tempcnta=}%
-        \lst@lExtend#1{\the\catcode\@tempcnta\relax}%
-        \ifnum\the\catcode\@tempcnta=\active
-            \begingroup\lccode`\~=\@tempcnta
-            \lowercase{\endgroup
-            \lst@lExtend#1{\expandafter\let\expandafter~\csname
-                                    lstecs@\the\@tempcnta\endcsname}%
-            \expandafter\let\csname lstecs@\the\@tempcnta\endcsname~}%
-        \fi
-        \advance\@tempcnta\@ne
-    \repeat}
-\begingroup \catcode12=\active\let^^L\@empty
-\gdef\lst@ScanChars{%
-  \let\lsts@ssL^^L%
-  \def^^L{\par}%
-    \lst@GetChars\lst@RestoreOrigCatcodes\@ne {128}%
-  \let^^L\lsts@ssL
-    \lst@GetChars\lst@RestoreOrigExtendedCatcodes{128}{256}}
-\endgroup
-\lst@Key{rescanchars}\relax{\lst@ScanChars}
-\AtBeginDocument{\lst@ScanChars}
-\lst@Key{alsoletter}\relax{%
-    \lst@DoAlso{#1}\lst@alsoletter\lst@ProcessLetter}
-\lst@Key{alsodigit}\relax{%
-    \lst@DoAlso{#1}\lst@alsodigit\lst@ProcessDigit}
-\lst@Key{alsoother}\relax{%
-    \lst@DoAlso{#1}\lst@alsoother\lst@ProcessOther}
-\lst@AddToHook{SelectCharTable}
-    {\lst@alsoother \lst@alsodigit \lst@alsoletter}
-\lst@AddToHookExe{SetLanguage}% init
-    {\let\lst@alsoletter\@empty
-     \let\lst@alsodigit\@empty
-     \let\lst@alsoother\@empty}
-\def\lst@DoAlso#1#2#3{%
-    \lst@DefOther\lst@arg{#1}\let#2\@empty
-    \expandafter\lst@DoAlso@\expandafter#2\expandafter#3\lst@arg\relax}
-\def\lst@DoAlso@#1#2#3{%
-    \ifx\relax#3\expandafter\@gobblethree \else
-        \begingroup \lccode`\~=`#3\relax \lowercase{\endgroup
-        \def\lst@temp##1\def~##2##3\relax{%
-            \edef\lst@arg{\def\noexpand~{\noexpand#2\expandafter
-                                         \noexpand\@gobble##2}}}}%
-        \expandafter\lst@temp\lst@SelectStdCharTable\relax
-        \lst@lExtend#1{\lst@arg}%
-    \fi
-    \lst@DoAlso@#1#2}
-\def\lst@SaveDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~}}
-\def\lst@DefSaveDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~\def~}}
-\def\lst@LetSaveDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~\let~}}
-\def\lst@CDef#1{\lst@CDef@#1}
-\def\lst@CDef@#1#2#3#4{\lst@CDefIt#1{#2}{#3}{#4#2#3}#4}
-\def\lst@CDefX#1{\lst@CDefX@#1}
-\def\lst@CDefX@#1#2#3{\lst@CDefIt#1{#2}{#3}{}}
-\def\lst@CDefIt#1#2#3#4#5#6#7#8{%
-    \ifx\@empty#2\@empty
-        \def#1{#6\def\lst@next{#7#4#8}\lst@next}%
-    \else \ifx\@empty#3\@empty
-        \def#1##1{%
-            #6%
-            \ifx##1#2\def\lst@next{#7#4#8}\else
-                     \def\lst@next{#5##1}\fi
-            \lst@next}%
-    \else
-        \def#1{%
-            #6%
-            \lst@IfNextCharsArg{#2#3}{#7#4#8}%
-                                     {\expandafter#5\lst@eaten}}%
-    \fi \fi}
-\def\lst@CArgX#1#2\relax{%
-    \lst@DefActive\lst@arg{#1#2}%
-    \expandafter\lst@CArg\lst@arg\relax}
-\def\lst@CArg#1#2\relax{%
-    \lccode`\/=`#1\lowercase{\def\lst@temp{/}}%
-    \lst@GetFreeMacro{lst@c\lst@temp}%
-    \expandafter\lst@CArg@\lst@freemacro#1#2\@empty\@empty\relax}
-\def\lst@CArg@#1#2#3#4\@empty#5\relax#6{%
-    \let#1#2%
-    \ifx\@empty#3\@empty
-        \def\lst@next{#6{#2{}{}}}%
-    \else
-        \def\lst@next{#6{#2#3{#4}}}%
-    \fi
-    \lst@next #1}
-\def\lst@CArgEmpty#1\@empty{#1}
-\lst@Key{excludedelims}\relax
-    {\lsthk@ExcludeDelims \lst@NormedDef\lst@temp{#1}%
-     \expandafter\lst@for\lst@temp\do
-     {\expandafter\let\csname\@lst @ifex##1\endcsname\iftrue}}
-\def\lst@DelimPrint#1#2{%
-    #1%
-      \begingroup
-        \lst@mode\lst@nomode \lst@modetrue
-        #2\lst@XPrintToken
-      \endgroup
-      \lst@ResetToken
-    \fi}
-\def\lst@DelimOpen#1#2#3#4#5#6\@empty{%
-    \lst@TrackNewLines \lst@XPrintToken
-    \lst@DelimPrint#1{#6}%
-    \lst@EnterMode{#4}{\def\lst@currstyle#5}%
-    \lst@DelimPrint{#1#2}{#6}%
-    #3}
-\def\lst@DelimClose#1#2#3\@empty{%
-    \lst@TrackNewLines \lst@XPrintToken
-    \lst@DelimPrint{#1#2}{#3}%
-    \lst@LeaveMode
-    \lst@DelimPrint{#1}{#3}}
-\def\lst@BeginDelim{\lst@DelimOpen\iffalse\else{}}
-\def\lst@EndDelim{\lst@DelimClose\iffalse\else}
-\def\lst@BeginIDelim{\lst@DelimOpen\iffalse{}{}}
-\def\lst@EndIDelim{\lst@DelimClose\iffalse{}}
-\lst@AddToHook{SelectCharTable}{\lst@DefDelims}
-\lst@AddToHookExe{SetLanguage}{\let\lst@DefDelims\@empty}
-\def\lst@Delim#1{%
-    \lst@false \let\lst@cumulative\@empty \let\lst@arg\@empty
-    \@ifstar{\@ifstar{\lst@Delim@{#1}}%
-                     {\let\lst@cumulative\relax
-                      \lst@Delim@{#1}}}%
-            {\lst@true\lst@Delim@{#1}}}
-\def\lst@Delim@#1[#2]{%
-    \gdef\lst@delimtype{#2}%
-    \@ifnextchar[\lst@Delim@sty
-                 {\lst@Delim@sty[#1]}}
-\def\lst@Delim@sty[#1]{%
-    \def\lst@delimstyle{#1}%
-    \ifx\@empty#1\@empty\else
-        \lst@Delim@sty@ #1\@nil
-    \fi
-    \@ifnextchar[\lst@Delim@option
-                 \lst@Delim@delim}
-\def\lst@Delim@option[#1]{\def\lst@arg{[#1]}\lst@Delim@delim}
-\def\lst@Delim@sty@#1#2\@nil{%
-    \if\relax\noexpand#1\else
-        \edef\lst@delimstyle{\expandafter\noexpand
-                             \csname\@lst @\lst@delimstyle\endcsname}%
-    \fi}
-\def\lst@Delim@delim#1\relax#2#3#4#5#6#7#8{%
-    \ifx #4\@empty \lst@Delim@delall{#2}\fi
-    \ifx\@empty#1\@empty
-        \ifx #4\@nil
-            \@ifundefined{\@lst @#2DM@\lst@delimtype}%
-                {\lst@Delim@delall{#2@\lst@delimtype}}%
-                {\lst@Delim@delall{#2DM@\lst@delimtype}}%
-        \fi
-    \else
-        \expandafter\lst@Delim@args\expandafter
-            {\lst@delimtype}{#1}{#5}#6{#7}{#8}#4%
-        \let\lst@delim\@empty
-        \expandafter\lst@IfOneOf\lst@delimtype\relax#3%
-        {\@ifundefined{\@lst @#2DM@\lst@delimtype}%
-             {\lst@lExtend\lst@delim{\csname\@lst @#2@\lst@delimtype
-                                     \expandafter\endcsname\lst@arg}}%
-             {\lst@lExtend\lst@delim{\expandafter\lst@UseDynamicMode
-                                     \csname\@lst @#2DM@\lst@delimtype
-                                     \expandafter\endcsname\lst@arg}}%
-         \ifx #4\@nil
-             \let\lst@temp\lst@DefDelims \let\lst@DefDelims\@empty
-             \expandafter\lst@Delim@del\lst@temp\@empty\@nil\@nil\@nil
-         \else
-             \lst@lExtend\lst@DefDelims\lst@delim
-         \fi}%
-        {\PackageError{Listings}{Illegal type `\lst@delimtype'}%
-                                {#2 types are #3.}}%
-     \fi}
-\def\lst@Delim@args#1#2#3#4#5#6#7{%
-    \begingroup
-    \lst@false \let\lst@next\lst@XConvert
-    \@ifnextchar #4{\xdef\lst@delimtype{\expandafter\@gobble
-                                        \lst@delimtype}%
-                    #5\lst@next#2\@nil
-                    \lst@lAddTo\lst@arg{\@empty#6}%
-                    \lst@GobbleNil}%
-                   {\lst@next#2\@nil
-                    \lst@lAddTo\lst@arg{\@empty#3}%
-                    \lst@GobbleNil}%
-                 #1\@nil
-    \global\let\@gtempa\lst@arg
-    \endgroup
-    \let\lst@arg\@gtempa
-    \ifx #7\@nil\else
-        \expandafter\lst@Delim@args@\expandafter{\lst@delimstyle}%
-    \fi}
-\def\lst@Delim@args@#1{%
-    \lst@if
-        \lst@lAddTo\lst@arg{{{#1}\lst@modetrue}}%
-    \else
-        \ifx\lst@cumulative\@empty
-            \lst@lAddTo\lst@arg{{{}#1}}%
-        \else
-            \lst@lAddTo\lst@arg{{{#1}}}%
-        \fi
-    \fi}
-\def\lst@Delim@del#1\@empty#2#3#4{%
-    \ifx #2\@nil\else
-        \def\lst@temp{#1\@empty#2#3}%
-        \ifx\lst@temp\lst@delim\else
-            \lst@lAddTo\lst@DefDelims{#1\@empty#2#3{#4}}%
-        \fi
-        \expandafter\lst@Delim@del
-    \fi}
-\def\lst@Delim@delall#1{%
-    \begingroup
-    \edef\lst@delim{\expandafter\string\csname\@lst @#1\endcsname}%
-    \lst@false \global\let\@gtempa\@empty
-    \expandafter\lst@Delim@delall@\lst@DefDelims\@empty
-    \endgroup
-    \let\lst@DefDelims\@gtempa}
-\def\lst@Delim@delall@#1{%
-    \ifx #1\@empty\else
-        \ifx #1\lst@UseDynamicMode
-            \lst@true
-            \let\lst@next\lst@Delim@delall@do
-        \else
-            \def\lst@next{\lst@Delim@delall@do#1}%
-        \fi
-        \expandafter\lst@next
-    \fi}
-\def\lst@Delim@delall@do#1#2\@empty#3#4#5{%
-    \expandafter\lst@IfSubstring\expandafter{\lst@delim}{\string#1}%
-      {}%
-      {\lst@if \lst@AddTo\@gtempa\lst@UseDynamicMode \fi
-       \lst@AddTo\@gtempa{#1#2\@empty#3#4{#5}}}%
-    \lst@false \lst@Delim@delall@}
-\gdef\lst@DefDelimB#1#2#3#4#5#6#7#8{%
-    \lst@CDef{#1}#2%
-        {#3}%
-        {\let\lst@bnext\lst@CArgEmpty
-         \lst@ifmode #4\else
-             #5%
-             \def\lst@bnext{#6{#7}{#8}}%
-         \fi
-         \lst@bnext}%
-        \@empty}
-\gdef\lst@DefDelimE#1#2#3#4#5#6#7{%
-    \lst@CDef{#1}#2%
-        {#3}%
-        {\let\lst@enext\lst@CArgEmpty
-         \ifnum #7=\lst@mode%
-             #4%
-             \let\lst@enext#6%
-         \else
-             #5%
-         \fi
-         \lst@enext}%
-        \@empty}
-\lst@AddToHook{Init}{\let\lst@bnext\relax \let\lst@enext\relax}
-\gdef\lst@DefDelimBE#1#2#3#4#5#6#7#8#9{%
-    \lst@CDef{#1}#2%
-        {#3}%
-        {\let\lst@bnext\lst@CArgEmpty
-         \ifnum #7=\lst@mode
-             #4%
-             \let\lst@bnext#9%
-         \else
-             \lst@ifmode\else
-                 #5%
-                 \def\lst@bnext{#6{#7}{#8}}%
-             \fi
-         \fi
-         \lst@bnext}%
-        \@empty}
-\gdef\lst@delimtypes{s,l}
-\gdef\lst@DelimKey#1#2{%
-    \lst@Delim{}#2\relax
-        {Delim}\lst@delimtypes #1%
-                {\lst@BeginDelim\lst@EndDelim}
-        i\@empty{\lst@BeginIDelim\lst@EndIDelim}}
-\lst@Key{delim}\relax{\lst@DelimKey\@empty{#1}}
-\lst@Key{moredelim}\relax{\lst@DelimKey\relax{#1}}
-\lst@Key{deletedelim}\relax{\lst@DelimKey\@nil{#1}}
-\gdef\lst@DelimDM@l#1#2\@empty#3#4#5{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#3{#1}{#5\lst@Lmodetrue}}
-\gdef\lst@DelimDM@s#1#2#3\@empty#4#5#6{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#4{#1}{#6}%
-    \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}}
-\def\lst@ReplaceInput#1{\lst@CArgX #1\relax\lst@CDefX{}{}}
-\def\lst@Literatekey#1\@nil@{\let\lst@ifxliterate\lst@if
-                             \def\lst@literate{#1}}
-\lst@Key{literate}{}{\@ifstar{\lst@true \lst@Literatekey}
-                             {\lst@false\lst@Literatekey}#1\@nil@}
-\lst@AddToHook{SelectCharTable}
-    {\ifx\lst@literate\@empty\else
-         \expandafter\lst@Literate\lst@literate{}\relax\z@
-     \fi}
-\def\lst@Literate#1#2#3{%
-    \ifx\relax#2\@empty\else
-        \lst@CArgX #1\relax\lst@CDef
-            {}
-            {\let\lst@next\@empty
-             \lst@ifxliterate
-                \lst@ifmode \let\lst@next\lst@CArgEmpty \fi
-             \fi
-             \ifx\lst@next\@empty
-                 \ifx\lst@OutputBox\@gobble\else
-                   \lst@XPrintToken \let\lst@scanmode\lst@scan@m
-                   \lst@token{#2}\lst@length#3\relax
-                   \lst@XPrintToken
-                 \fi
-                 \let\lst@next\lst@CArgEmptyGobble
-             \fi
-             \lst@next}%
-            \@empty
-        \expandafter\lst@Literate
-    \fi}
-\def\lst@CArgEmptyGobble#1\@empty{}
-\def\lst@BeginDropInput#1{%
-    \lst@EnterMode{#1}%
-    {\lst@modetrue
-     \let\lst@OutputBox\@gobble
-     \let\lst@ifdropinput\iftrue
-     \let\lst@ProcessLetter\@gobble
-     \let\lst@ProcessDigit\@gobble
-     \let\lst@ProcessOther\@gobble
-     \let\lst@ProcessSpace\@empty
-     \let\lst@ProcessTabulator\@empty
-     \let\lst@ProcessFormFeed\@empty}}
-\let\lst@ifdropinput\iffalse % init
-\lst@Key{basicstyle}\relax{\def\lst@basicstyle{#1}}
-\lst@Key{inputencoding}\relax{\def\lst@inputenc{#1}}
-\lst@AddToHook{Init}
-    {\lst@basicstyle
-     \ifx\lst@inputenc\@empty\else
-         \@ifundefined{inputencoding}{}%
-            {\inputencoding\lst@inputenc}%
-     \fi}
-\lst@AddToHookExe{EmptyStyle}
-    {\let\lst@basicstyle\@empty
-     \let\lst@inputenc\@empty}
-\lst@Key{multicols}{}{\@tempcnta=0#1\relax\def\lst@multicols{#1}}
-\def\lst@parshape{\parshape\@ne \z@ \linewidth}
-\lst@AddToHookAtTop{EveryLine}{\lst@parshape}
-\lst@AddToHookAtTop{EndGroup}{\lst@parshape}
-\newcount\lst@lineno % \global
-\lst@AddToHook{InitVars}{\global\lst@lineno\@ne}
-\lst@Key{print}{true}[t]{\lstKV@SetIf{#1}\lst@ifprint}
-\lst@Key{firstline}\relax{\def\lst@firstline{#1\relax}}
-\lst@Key{lastline}\relax{\def\lst@lastline{#1\relax}}
-\lst@AddToHook{PreSet}
-    {\let\lst@firstline\@ne \def\lst@lastline{9999999\relax}}
-\lst@Key{linerange}\relax{\lstKV@OptArg[]{#1}{%
-    \def\lst@interrange{##1}\def\lst@linerange{##2,}}}
-\lst@Key{rangeprefix}\relax{\def\lst@rangebeginprefix{#1}%
-                            \def\lst@rangeendprefix{#1}}
-\lst@Key{rangesuffix}\relax{\def\lst@rangebeginsuffix{#1}%
-                            \def\lst@rangeendsuffix{#1}}
-\lst@Key{rangebeginprefix}{}{\def\lst@rangebeginprefix{#1}}
-\lst@Key{rangebeginsuffix}{}{\def\lst@rangebeginsuffix{#1}}
-\lst@Key{rangeendprefix}{}{\def\lst@rangeendprefix{#1}}
-\lst@Key{rangeendsuffix}{}{\def\lst@rangeendsuffix{#1}}
-\lst@Key{includerangemarker}{true}[t]{\lstKV@SetIf{#1}\lst@ifincluderangemarker}
-\lst@AddToHook{PreSet}{\def\lst@firstline{1\relax}%
-                       \let\lst@linerange\@empty}
-\lst@AddToHook{Init}
-{\ifx\lst@linerange\@empty
-     \edef\lst@linerange{{\lst@firstline}-{\lst@lastline},}%
- \fi
- \lst@GetLineInterval}%
-\def\lst@GetLineInterval{\expandafter\lst@GLI\lst@linerange\@nil}
-\def\lst@GLI#1,#2\@nil{\def\lst@linerange{#2}\lst@GLI@#1--\@nil}
-\def\lst@GLI@#1-#2-#3\@nil{%
-    \lst@IfNumber{#1}%
-    {\ifx\@empty#1\@empty
-         \let\lst@firstline\@ne
-     \else
-         \def\lst@firstline{#1\relax}%
-     \fi
-     \ifx\@empty#3\@empty
-         \def\lst@lastline{9999999\relax}%
-     \else
-         \ifx\@empty#2\@empty
-             \let\lst@lastline\lst@firstline
-         \else
-             \def\lst@lastline{#2\relax}%
-         \fi
-     \fi}%
-    {\def\lst@firstline{9999999\relax}%
-     \let\lst@lastline\lst@firstline
-     \let\lst@rangebegin\lst@rangebeginprefix
-     \lst@AddTo\lst@rangebegin{#1}\lst@Extend\lst@rangebegin\lst@rangebeginsuffix
-     \ifx\@empty#3\@empty
-         \let\lst@rangeend\lst@rangeendprefix
-         \lst@AddTo\lst@rangeend{#1}\lst@Extend\lst@rangeend\lst@rangeendsuffix
-     \else
-         \ifx\@empty#2\@empty
-             \let\lst@rangeend\@empty
-         \else
-             \let\lst@rangeend\lst@rangeendprefix
-             \lst@AddTo\lst@rangeend{#2}\lst@Extend\lst@rangeend\lst@rangeendsuffix
-         \fi
-     \fi
-     \global\def\lst@DefRange{\expandafter\lst@CArgX\lst@rangebegin\relax\lst@DefRangeB}%
-     \ifnum\lst@mode=\lst@Pmode \expandafter\lst@DefRange \fi}}
-\lst@AddToHookExe{DeInit}{\global\let\lst@DefRange\@empty}
-\def\lst@DefRangeB#1#2{\lst@DefRangeB@#1#2}
-\def\lst@DefRangeB@#1#2#3#4{%
-    \lst@CDef{#1{#2}{#3}}#4{}%
-    {\lst@ifincluderangemarker
-         \lst@LeaveMode
-         \let#1#4%
-         \lst@DefRangeEnd
-         \lst@InitLstNumber
-     \else
-         \@tempcnta\lst@lineno \advance\@tempcnta\@ne
-         \edef\lst@firstline{\the\@tempcnta\relax}%
-         \gdef\lst@OnceAtEOL{\let#1#4\lst@DefRangeEnd}%
-         \lst@InitLstNumber
-     \fi
- \global\let\lst@DefRange\lst@DefRangeEnd
-     \lst@CArgEmpty}%
-    \@empty}
-\def\lstpatch@labels{%
-\gdef\lst@SetFirstNumber{%
-    \ifx\lst@firstnumber\@undefined
-        \@tempcnta 0\csname\@lst no@\lst@intname\endcsname\relax
-        \ifnum\@tempcnta=\z@ \else
-            \lst@nololtrue
-            \advance\@tempcnta\lst@advancenumber
-            \edef\lst@firstnumber{\the\@tempcnta\relax}%
-        \fi
-    \fi}%
-}
-\def\lst@InitLstNumber{%
-     \global\c@lstnumber\lst@firstnumber
-     \global\advance\c@lstnumber\lst@advancenumber
-     \global\advance\c@lstnumber-\lst@advancelstnum
-     \ifx \lst@firstnumber\c@lstnumber
-         \global\advance\c@lstnumber-\lst@advancelstnum
-     \fi%
-     \lst@ifincluderangemarker\else%
-         \global\advance\c@lstnumber by 1%
-     \fi%
-     }
-\def\lst@DefRangeEnd{%
-    \ifx\lst@rangeend\@empty\else
-        \expandafter\lst@CArgX\lst@rangeend\relax\lst@DefRangeE
-    \fi}
-\def\lst@DefRangeE#1#2{\lst@DefRangeE@#1#2}
-\def\lst@DefRangeE@#1#2#3#4{%
-    \lst@CDef{#1#2{#3}}#4{}%
-    {\let#1#4%
-     \edef\lst@lastline{\the\lst@lineno\relax}%
-     \lst@DefRangeE@@}%
-    \@empty}
-\def\lst@DefRangeE@@#1\@empty{%
-    \lst@ifincluderangemarker
-        #1\lst@XPrintToken
-    \fi
-    \lst@LeaveModeToPmode
-    \lst@BeginDropInput{\lst@Pmode}}
-\def\lst@LeaveModeToPmode{%
-    \ifnum\lst@mode=\lst@Pmode
-        \expandafter\lsthk@EndGroup
-    \else
-        \expandafter\egroup\expandafter\lst@LeaveModeToPmode
-    \fi}
-\lst@AddToHook{EOL}{\lst@OnceAtEOL\global\let\lst@OnceAtEOL\@empty}
-\gdef\lst@OnceAtEOL{}% Init
-\def\lst@MSkipToFirst{%
-    \global\advance\lst@lineno\@ne
-    \ifnum \lst@lineno=\lst@firstline
-        \def\lst@next{\lst@LeaveMode \global\lst@newlines\z@
-        \lst@OnceAtEOL \global\let\lst@OnceAtEOL\@empty
-        \lst@InitLstNumber % Added to work with modified \lsthk@PreInit.
-        \lsthk@InitVarsBOL
-        \lst@BOLGobble}%
-        \expandafter\lst@next
-    \fi}
-\def\lst@SkipToFirst{%
-    \ifnum \lst@lineno<\lst@firstline
-        \def\lst@next{\lst@BeginDropInput\lst@Pmode
-        \lst@Let{13}\lst@MSkipToFirst
-        \lst@Let{10}\lst@MSkipToFirst}%
-        \expandafter\lst@next
-    \else
-        \expandafter\lst@BOLGobble
-    \fi}
-\def\lst@IfNumber#1{%
-    \ifx\@empty#1\@empty
-        \let\lst@next\@firstoftwo
-    \else
-        \lst@IfNumber@#1\@nil
-    \fi
-    \lst@next}
-\def\lst@IfNumber@#1#2\@nil{%
-    \let\lst@next\@secondoftwo
-    \ifnum`#1>47\relax \ifnum`#1>57\relax\else
-        \let\lst@next\@firstoftwo
-    \fi\fi}
-\lst@Key{nolol}{false}[t]{\lstKV@SetIf{#1}\lst@ifnolol}
-\def\lst@nololtrue{\let\lst@ifnolol\iftrue}
-\let\lst@ifnolol\iffalse % init
-\lst@Key{captionpos}{t}{\def\lst@captionpos{#1}}
-\lst@Key{abovecaptionskip}\smallskipamount{\def\lst@abovecaption{#1}}
-\lst@Key{belowcaptionskip}\smallskipamount{\def\lst@belowcaption{#1}}
-\lst@Key{label}\relax{\def\lst@label{#1}}
-\lst@Key{title}\relax{\def\lst@title{#1}\let\lst@caption\relax}
-\lst@Key{caption}\relax{\lstKV@OptArg[{#1}]{#1}%
-    {\def\lst@caption{##2}\def\lst@@caption{##1}}%
-     \let\lst@title\@empty}
-\lst@AddToHookExe{TextStyle}
-    {\let\lst@caption\@empty \let\lst@@caption\@empty
-     \let\lst@title\@empty \let\lst@label\@empty}
-\AtBeginDocument{
-  \@ifundefined{thechapter}{\let\lst@ifnumberbychapter\iffalse}{}
-  \lst@ifnumberbychapter
-      \newcounter{lstlisting}[chapter]
-      \gdef\thelstlisting%
-           {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@lstlisting}
-  \else
-      \newcounter{lstlisting}
-      \gdef\thelstlisting{\@arabic\c@lstlisting}
-  \fi}
-\lst@UserCommand\lstlistingname{Listing}
-\lst@Key{numberbychapter}{true}[t]{\lstKV@SetIf{#1}\lst@ifnumberbychapter}
-\@ifundefined{abovecaptionskip}
-{\newskip\abovecaptionskip
- \newskip\belowcaptionskip}{}
-\@ifundefined{@makecaption}
-{\long\def\@makecaption#1#2{%
-   \vskip\abovecaptionskip
-   \sbox\@tempboxa{#1: #2}%
-   \ifdim \wd\@tempboxa >\hsize
-     #1: #2\par
-   \else
-     \global \@minipagefalse
-     \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
-   \fi
-   \vskip\belowcaptionskip}%
-}{}
-\def\fnum@lstlisting{%
-  \lstlistingname
-  \ifx\lst@@caption\@empty\else~\thelstlisting\fi}%
-\def\lst@MakeCaption#1{%
-  \lst@ifdisplaystyle
-    \ifx #1t%
-        \ifx\lst@@caption\@empty\expandafter\lst@HRefStepCounter \else
-                                \expandafter\refstepcounter
-        \fi {lstlisting}%
-        \ifx\lst@label\@empty\else \label{\lst@label}\fi
-        \let\lst@arg\lst@intname \lst@ReplaceIn\lst@arg\lst@filenamerpl
-        \global\let\lst@name\lst@arg \global\let\lstname\lst@name
-        \lst@ifnolol\else
-            \ifx\lst@@caption\@empty
-                \ifx\lst@caption\@empty
-                    \ifx\lst@intname\@empty \else \def\lst@temp{ }%
-                    \ifx\lst@intname\lst@temp \else
-                        \addcontentsline{lol}{lstlisting}\lst@name
-                    \fi\fi
-                \fi
-            \else
-                \addcontentsline{lol}{lstlisting}%
-                    {\protect\numberline{\thelstlisting}\lst@@caption}%
-            \fi
-         \fi
-     \fi
-    \ifx\lst@caption\@empty\else
-        \lst@IfSubstring #1\lst@captionpos
-            {\begingroup \let\@@vskip\vskip
-             \def\vskip{\afterassignment\lst@vskip \@tempskipa}%
-             \def\lst@vskip{\nobreak\@@vskip\@tempskipa\nobreak}%
-             \par\@parboxrestore\normalsize\normalfont % \noindent (AS)
-             \ifx #1t\allowbreak \fi
-             \ifx\lst@title\@empty
-                 \lst@makecaption\fnum@lstlisting{\ignorespaces \lst@caption}
-             \else
-                 \lst@maketitle\lst@title % (AS)
-             \fi
-             \ifx #1b\allowbreak \fi
-             \endgroup}{}%
-    \fi
-  \fi}
-\def\lst@makecaption{\@makecaption}
-\def\lst@maketitle{\@makecaption\lst@title@dropdelim}
-\def\lst@title@dropdelim#1{\ignorespaces}
-\AtBeginDocument{%
-\@ifundefined{captionlabelfalse}{}{%
-  \def\lst@maketitle{\captionlabelfalse\@makecaption\@empty}}%
-\@ifundefined{caption@startrue}{}{%
-  \def\lst@maketitle{\caption@startrue\@makecaption\@empty}}%
-}
-\def\lst@HRefStepCounter#1{%
-    \begingroup
-    \c@lstlisting\lst@neglisting
-    \advance\c@lstlisting\m@ne \xdef\lst@neglisting{\the\c@lstlisting}%
-    \ifx\hyper@refstepcounter\@undefined\else
-        \hyper@refstepcounter{#1}%
-    \fi
-    \endgroup}
-\gdef\lst@neglisting{\z@}% init
-\lst@Key{boxpos}{c}{\def\lst@boxpos{#1}}
-\def\lst@boxtrue{\let\lst@ifbox\iftrue}
-\let\lst@ifbox\iffalse
-\lst@Key{float}\relax[\lst@floatplacement]{%
-    \lstKV@SwitchCases{#1}%
-    {true&\let\lst@floatdefault\lst@floatplacement
-          \let\lst@float\lst@floatdefault\\%
-     false&\let\lst@floatdefault\relax
-           \let\lst@float\lst@floatdefault
-    }{\def\lst@next{\@ifstar{\let\lst@beginfloat\@dblfloat
-                             \let\lst@endfloat\end@dblfloat
-                             \lst@KFloat}%
-                            {\let\lst@beginfloat\@float
-                             \let\lst@endfloat\end@float
-                             \lst@KFloat}}
-      \edef\lst@float{#1}%
-      \expandafter\lst@next\lst@float\relax}}
-\def\lst@KFloat#1\relax{%
-    \ifx\@empty#1\@empty
-        \let\lst@float\lst@floatplacement
-    \else
-        \def\lst@float{#1}%
-    \fi}
-\lst@Key{floatplacement}{tbp}{\def\lst@floatplacement{#1}}
-\lst@AddToHook{PreSet}{\let\lst@float\lst@floatdefault}
-\lst@AddToHook{TextStyle}{\let\lst@float\relax}
-\let\lst@floatdefault\relax % init
-\lst@AddToHook{DeInit}{%
-    \ifx\lst@float\relax
-        \global\let\lst@doendpe\@doendpe
-    \else
-        \global\let\lst@doendpe\@empty
-    \fi}
-\AtBeginDocument{%
-\@ifundefined{c@float@type}%
-    {\edef\ftype@lstlisting{\ifx\c@figure\@undefined 1\else 4\fi}}
-    {\edef\ftype@lstlisting{\the\c@float@type}%
-     \addtocounter{float@type}{\value{float@type}}}%
-}
-\lst@Key{aboveskip}\medskipamount{\def\lst@aboveskip{#1}}
-\lst@Key{belowskip}\medskipamount{\def\lst@belowskip{#1}}
-\lst@AddToHook{TextStyle}
-    {\let\lst@aboveskip\z@ \let\lst@belowskip\z@}
-\lst@Key{everydisplay}{}{\def\lst@EveryDisplay{#1}}
-\lst@AddToHook{TextStyle}{\let\lst@ifdisplaystyle\iffalse}
-\lst@AddToHook{DisplayStyle}{\let\lst@ifdisplaystyle\iftrue}
-\let\lst@ifdisplaystyle\iffalse
-\def\lst@Init#1{%
-    \begingroup
-    \ifx\lst@float\relax\else
-        \edef\@tempa{\noexpand\lst@beginfloat{lstlisting}[\lst@float]}%
-        \expandafter\@tempa
-    \fi
-    \ifx\lst@multicols\@empty\else
-        \edef\lst@next{\noexpand\multicols{\lst@multicols}}
-        \expandafter\lst@next
-    \fi
-    \ifhmode\ifinner \lst@boxtrue \fi\fi
-    \lst@ifbox
-        \lsthk@BoxUnsafe
-        \hbox to\z@\bgroup
-             $\if t\lst@boxpos \vtop
-        \else \if b\lst@boxpos \vbox
-        \else \vcenter \fi\fi
-        \bgroup \par\noindent
-    \else
-        \lst@ifdisplaystyle
-            \lst@EveryDisplay
-            \par\penalty-50\relax
-            \vspace\lst@aboveskip
-        \fi
-    \fi
-    \normalbaselines
-    \abovecaptionskip\lst@abovecaption\relax
-    \belowcaptionskip\lst@belowcaption\relax
-    \lst@MakeCaption t%
-    \lsthk@PreInit \lsthk@Init
-    \lst@ifdisplaystyle
-        \global\let\lst@ltxlabel\@empty
-        \if@inlabel
-            \lst@ifresetmargins
-                \leavevmode
-            \else
-                \xdef\lst@ltxlabel{\the\everypar}%
-                \lst@AddTo\lst@ltxlabel{%
-                    \global\let\lst@ltxlabel\@empty
-                    \everypar{\lsthk@EveryLine\lsthk@EveryPar}}%
-            \fi
-        \fi
-        \everypar\expandafter{\lst@ltxlabel
-                              \lsthk@EveryLine\lsthk@EveryPar}%
-    \else
-        \everypar{}\let\lst@NewLine\@empty
-    \fi
-    \lsthk@InitVars \lsthk@InitVarsBOL
-    \lst@Let{13}\lst@MProcessListing
-    \let\lst@Backslash#1%
-    \lst@EnterMode{\lst@Pmode}{\lst@SelectCharTable}%
-    \lst@InitFinalize}
-\let\lst@InitFinalize\@empty % init
-\lst@AddToHook{PreInit}
-    {\rightskip\z@ \leftskip\z@ \parfillskip=\z@ plus 1fil
-     \let\par\@@par}
-\lst@AddToHook{EveryLine}{}% init
-\lst@AddToHook{EveryPar}{}% init
-\lst@Key{showlines}f[t]{\lstKV@SetIf{#1}\lst@ifshowlines}
-\def\lst@DeInit{%
-    \lst@XPrintToken \lst@EOLUpdate
-    \global\advance\lst@newlines\m@ne
-    \lst@ifshowlines
-        \lst@DoNewLines
-    \else
-        \setbox\@tempboxa\vbox{\lst@DoNewLines}%
-    \fi
-    \lst@ifdisplaystyle \par\removelastskip \fi
-    \lsthk@ExitVars\everypar{}\lsthk@DeInit\normalbaselines\normalcolor
-    \lst@MakeCaption b%
-    \lst@ifbox
-        \egroup $\hss \egroup
-        \vrule\@width\lst@maxwidth\@height\z@\@depth\z@
-    \else
-        \lst@ifdisplaystyle
-            \par\penalty-50\vspace\lst@belowskip
-        \fi
-    \fi
-    \ifx\lst@multicols\@empty\else
-        \def\lst@next{\global\let\@checkend\@gobble
-                      \endmulticols
-                      \global\let\@checkend\lst@@checkend}
-        \expandafter\lst@next
-    \fi
-    \ifx\lst@float\relax\else
-        \expandafter\lst@endfloat
-    \fi
-    \endgroup}
-\let\lst@@checkend\@checkend
-\newdimen\lst@maxwidth % \global
-\lst@AddToHook{InitVars}{\global\lst@maxwidth\z@}
-\lst@AddToHook{InitVarsEOL}
-    {\ifdim\lst@currlwidth>\lst@maxwidth
-         \global\lst@maxwidth\lst@currlwidth
-     \fi}
-\def\lst@EOLUpdate{\lsthk@EOL \lsthk@InitVarsEOL}
-\def\lst@MProcessListing{%
-    \lst@XPrintToken \lst@EOLUpdate \lsthk@InitVarsBOL
-    \global\advance\lst@lineno\@ne
-    \ifnum \lst@lineno>\lst@lastline
-        \lst@ifdropinput \lst@LeaveMode \fi
-        \ifx\lst@linerange\@empty
-            \expandafter\expandafter\expandafter\lst@EndProcessListing
-        \else
-            \lst@interrange
-            \lst@GetLineInterval
-            \expandafter\expandafter\expandafter\lst@SkipToFirst
-        \fi
-    \else
-        \expandafter\lst@BOLGobble
-    \fi}
-\let\lst@EndProcessListing\endinput
-\lst@Key{gobble}{0}{\def\lst@gobble{#1}}
-\def\lst@BOLGobble{%
-    \ifnum\lst@gobble>\z@
-        \@tempcnta\lst@gobble\relax
-        \expandafter\lst@BOLGobble@
-\fi}
-\def\lst@BOLGobble@@{%
-    \ifnum\@tempcnta>\z@
-        \expandafter\lst@BOLGobble@
-    \fi}
-\def\lstenv@BOLGobble@@{%
-    \lst@IfNextChars\lstenv@endstring{\lstenv@End}%
-    {\advance\@tempcnta\m@ne \expandafter\lst@BOLGobble@@\lst@eaten}}
-\def\lst@BOLGobble@#1{%
-    \let\lst@next#1%
-    \ifx \lst@next\relax\else
-    \ifx \lst@next\lst@MProcessListing\else
-    \ifx \lst@next\lst@processformfeed\else
-    \ifx \lst@next\lstenv@backslash
-        \let\lst@next\lstenv@BOLGobble@@
-    \else
-        \let\lst@next\lst@BOLGobble@@
-        \ifx #1\lst@processtabulator
-            \advance\@tempcnta-\lst@tabsize\relax
-            \ifnum\@tempcnta<\z@
-                \lst@length-\@tempcnta \lst@PreGotoTabStop
-            \fi
-        \else
-            \advance\@tempcnta\m@ne
-        \fi
-    \fi \fi \fi \fi
-    \lst@next}
-\def\lst@processformfeed{\lst@ProcessFormFeed}
-\def\lst@processtabulator{\lst@ProcessTabulator}
-\lst@Key{name}\relax{\def\lst@intname{#1}}
-\lst@AddToHookExe{PreSet}{\global\let\lst@intname\@empty}
-\lst@AddToHook{PreInit}{%
-    \let\lst@arg\lst@intname \lst@ReplaceIn\lst@arg\lst@filenamerpl
-    \global\let\lst@name\lst@arg \global\let\lstname\lst@name}
-\def\lst@filenamerpl{_\textunderscore $\textdollar -\textendash}
-\def\l@lstlisting#1#2{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}
-\lst@UserCommand\lstlistlistingname{Listings}
-\lst@UserCommand\lstlistoflistings{\bgroup
-    \let\contentsname\lstlistlistingname
-    \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
-    \tableofcontents \egroup}
-\@ifundefined{float@listhead}{}{%
-  \renewcommand*{\lstlistoflistings}{%
-    \begingroup
-      \@ifundefined{@restonecoltrue}{}{%
-        \if@twocolumn
-          \@restonecoltrue\onecolumn
-        \else
-          \@restonecolfalse
-        \fi
-      }%
-      \float@listhead{\lstlistlistingname}%
-      \parskip\z@\parindent\z@\parfillskip \z@ \@plus 1fil%
-      \@starttoc{lol}%
-      \@ifundefined{@restonecoltrue}{}{%
-        \if@restonecol\twocolumn\fi
-      }%
-    \endgroup
-  }%
-}
-\AtBeginDocument{%
-  \@ifundefined{float@addtolists}%
-    {\gdef\float@addtolists#1{\addtocontents{lol}{#1}}}%
-    {\let\orig@float@addtolists\float@addtolists
-     \gdef\float@addtolists#1{%
-       \addtocontents{lol}{#1}%
-       \orig@float@addtolists{#1}}}%
-}%
-\newcommand\lstinline[1][]{%
-    \leavevmode\bgroup % \hbox\bgroup --> \bgroup
-      \def\lst@boxpos{b}%
-      \lsthk@PreSet\lstset{flexiblecolumns,#1}%
-      \lsthk@TextStyle
-      \@ifnextchar\bgroup{%
-        \afterassignment\lst@InlineG \let\@let@token}%
-                         \lstinline@}
-\def\lstinline@#1{%
-    \lst@Init\relax
-    \lst@IfNextCharActive{\lst@InlineM#1}{\lst@InlineJ#1}}
-\lst@AddToHook{TextStyle}{}% init
-\lst@AddToHook{SelectCharTable}{\lst@inlinechars}
-\global\let\lst@inlinechars\@empty
-\def\lst@InlineM#1{\gdef\lst@inlinechars{%
-    \lst@Def{`#1}{\lst@DeInit\egroup\global\let\lst@inlinechars\@empty}%
-    \lst@Def{13}{\lst@DeInit\egroup \global\let\lst@inlinechars\@empty
-        \PackageError{Listings}{lstinline ended by EOL}\@ehc}}%
-    \lst@inlinechars}
-\def\lst@InlineJ#1{%
-    \def\lst@temp##1#1{%
-        \let\lst@arg\@empty \lst@InsideConvert{##1}\lst@arg
-        \lst@DeInit\egroup}%
-    \lst@temp}
-\def\lst@InlineG{%
-    \lst@Init\relax
-    \lst@IfNextCharActive{\lst@InlineM\}}%
-                         {\let\lst@arg\@empty \lst@InlineGJ}}
-\def\lst@InlineGJ{\futurelet\@let@token\lst@InlineGJTest}
-\def\lst@InlineGJTest{%
-    \ifx\@let@token\egroup
-        \afterassignment\lst@InlineGJEnd
-        \expandafter\let\expandafter\@let@token
-    \else
-        \ifx\@let@token\@sptoken
-            \let\lst@next\lst@InlineGJReadSp
-        \else
-            \let\lst@next\lst@InlineGJRead
-        \fi
-        \expandafter\lst@next
-    \fi}
-\def\lst@InlineGJEnd{\lst@arg\lst@DeInit\egroup}
-\def\lst@InlineGJRead#1{%
-    \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
-    \lst@InlineGJ}
-\def\lst@InlineGJReadSp#1{%
-    \lccode`\~=`\ \lowercase{\lst@lAddTo\lst@arg~}%
-    \lst@InlineGJ#1}
-\newcommand\lstMakeShortInline[1][]{%
-  \def\lst@shortinlinedef{\lstinline[#1]}%
-  \lstMakeShortInline@}%
-\def\lstMakeShortInline@#1{%
-  \expandafter\ifx\csname lst@ShortInlineOldCatcode\string#1\endcsname\relax
-    \lst@shortlstinlineinfo{Made }{#1}%
-    \lst@add@special{#1}%
-    \expandafter
-    \xdef\csname lst@ShortInlineOldCatcode\string#1\endcsname{\the\catcode`#1}%
-    \begingroup
-      \catcode`\~\active  \lccode`\~`#1%
-      \lowercase{%
-        \global\expandafter\let
-          \csname lst@ShortInlineOldMeaning\string#1\endcsname~%
-          \expandafter\gdef\expandafter~\expandafter{\lst@shortinlinedef#1}}%
-    \endgroup
-    \global\catcode`#1\active
-  \else
-    \PackageError{Listings}%
-    {\string\lstMakeShorterInline\ definitions cannot be nested}%
-    {Use \string\lstDeleteShortInline first.}%
-    {}%
-  \fi}
-\def\lstDeleteShortInline#1{%
-  \expandafter\ifx\csname lst@ShortInlineOldCatcode\string#1\endcsname\relax
-    \PackageError{Listings}%
-    {#1 is not a short reference for \string\lstinline}%
-    {Use \string\lstMakeShortInline first.}%
-    {}%
-  \else
-    \lst@shortlstinlineinfo{Deleted }{#1 as}%
-    \lst@rem@special{#1}%
-    \global\catcode`#1\csname lst@ShortInlineOldCatcode\string#1\endcsname
-    \global \expandafter\let%
-      \csname lst@ShortInlineOldCatcode\string#1\endcsname \relax
-    \ifnum\catcode`#1=\active
-      \begingroup
-        \catcode`\~\active  \lccode`\~`#1%
-        \lowercase{%
-          \global\expandafter\let\expandafter~%
-          \csname lst@ShortInlineOldMeaning\string#1\endcsname}%
-      \endgroup
-    \fi
-  \fi}
-\def\lst@shortlstinlineinfo#1#2{%
-     \PackageInfo{Listings}{%
-       #1\string#2 a short reference for \string\lstinline}}
-\def\lst@add@special#1{%
-  \lst@rem@special{#1}%
-  \expandafter\gdef\expandafter\dospecials\expandafter
-    {\dospecials \do #1}%
-  \expandafter\gdef\expandafter\@sanitize\expandafter
-    {\@sanitize \@makeother #1}}
-\def\lst@rem@special#1{%
-  \def\do##1{%
-    \ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}%
-  \xdef\dospecials{\dospecials}%
-  \begingroup
-    \def\@makeother##1{%
-      \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
-    \xdef\@sanitize{\@sanitize}%
-  \endgroup}
-\def\lst@MakePath#1{\ifx\@empty#1\@empty\else\lst@MakePath@#1/\@nil/\fi}
-\def\lst@MakePath@#1/{#1/\lst@MakePath@@}
-\def\lst@MakePath@@#1/{%
-    \ifx\@nil#1\expandafter\@gobble
-         \else \ifx\@empty#1\else #1/\fi \fi
-    \lst@MakePath@@}
-\lst@Key{inputpath}{}{\edef\lst@inputpath{\lst@MakePath{#1}}}
-\def\lstinputlisting{%
-    \begingroup \lst@setcatcodes \lst@inputlisting}
-\newcommand\lst@inputlisting[2][]{%
-    \endgroup
-    \def\lst@set{#1}%
-    \IfFileExists{\lst@inputpath#2}%
-        {\expandafter\lst@InputListing\expandafter{\lst@inputpath#2}}%
-        {\filename@parse{\lst@inputpath#2}%
-         \edef\reserved@a{\noexpand\lst@MissingFileError
-             {\filename@area\filename@base}%
-             {\ifx\filename@ext\relax tex\else\filename@ext\fi}}%
-         \reserved@a}%
-    \lst@doendpe \@newlistfalse \ignorespaces}
-\def\lst@MissingFileError#1#2{%
-    \typeout{^^J! Package Listings Error: File `#1(.#2)' not found.^^J%
-        ^^JType X to quit or <RETURN> to proceed,^^J%
-        or enter new name. (Default extension: #2)^^J}%
-    \message{Enter file name: }%
-    {\endlinechar\m@ne \global\read\m@ne to\@gtempa}%
-    \ifx\@gtempa\@empty \else
-        \def\reserved@a{x}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
-        \def\reserved@a{X}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
-        \filename@parse\@gtempa
-        \edef\filename@ext{%
-            \ifx\filename@ext\relax#2\else\filename@ext\fi}%
-        \edef\reserved@a{\noexpand\IfFileExists %
-                {\filename@area\filename@base.\filename@ext}%
-            {\noexpand\lst@InputListing %
-                {\filename@area\filename@base.\filename@ext}}%
-            {\noexpand\lst@MissingFileError
-                {\filename@area\filename@base}{\filename@ext}}}%
-        \expandafter\reserved@a %
-    \fi}
-\let\lst@ifdraft\iffalse
-\DeclareOption{draft}{\let\lst@ifdraft\iftrue}
-\DeclareOption{final}{\let\lst@ifdraft\iffalse}
-\lst@AddToHook{PreSet}
-    {\lst@ifdraft
-         \let\lst@ifprint\iffalse
-         \@gobbletwo\fi\fi
-     \fi}
-\def\lst@InputListing#1{%
-    \begingroup
-      \lsthk@PreSet \gdef\lst@intname{#1}%
-      \expandafter\lstset\expandafter{\lst@set}%
-      \lsthk@DisplayStyle
-      \catcode\active=\active
-      \lst@Init\relax \let\lst@gobble\z@
-      \lst@SkipToFirst
-      \lst@ifprint \def\lst@next{\input{#1}}%
-             \else \let\lst@next\@empty \fi
-      \lst@next
-      \lst@DeInit
-    \endgroup}
-\def\lst@SkipToFirst{%
-    \ifnum \lst@lineno<\lst@firstline
-        \lst@BeginDropInput\lst@Pmode
-        \lst@Let{13}\lst@MSkipToFirst
-        \lst@Let{10}\lst@MSkipToFirst
-    \else
-        \expandafter\lst@BOLGobble
-    \fi}
-\def\lst@MSkipToFirst{%
-    \global\advance\lst@lineno\@ne
-    \ifnum \lst@lineno=\lst@firstline
-        \lst@LeaveMode \global\lst@newlines\z@
-        \lsthk@InitVarsBOL
-        \expandafter\lst@BOLGobble
-    \fi}
-\def\lstenv@DroppedWarning{%
-    \ifx\lst@dropped\@undefined\else
-        \PackageWarning{Listings}{Text dropped after begin of listing}%
-    \fi}
-\let\lst@dropped\@undefined % init
-\begingroup \lccode`\~=`\^^M\lowercase{%
-\gdef\lstenv@Process#1{%
-    \ifx~#1%
-        \lstenv@DroppedWarning \let\lst@next\lst@SkipToFirst
-    \else\ifx^^J#1%
-        \lstenv@DroppedWarning \let\lst@next\lstenv@ProcessJ
-    \else
-        \let\lst@dropped#1\let\lst@next\lstenv@Process
-    \fi \fi
-    \lst@next}
-}\endgroup
-\def\lstenv@ProcessJ{%
-    \let\lst@arg\@empty
-    \ifx\@currenvir\lstenv@name
-        \expandafter\lstenv@ProcessJEnv
-    \else
-        \expandafter\def\expandafter\lst@temp\expandafter##1%
-            \csname end\lstenv@name\endcsname
-                {\lst@InsideConvert{##1}\lstenv@ProcessJ@}%
-        \expandafter\lst@temp
-    \fi}
-\begingroup \lccode`\~=`\\\lowercase{%
-\gdef\lstenv@ProcessJ@{%
-    \lst@lExtend\lst@arg
-        {\expandafter\ \expandafter~\lstenv@endstring}%
-    \catcode10=\active \lst@Let{10}\lst@MProcessListing
-    \lst@SkipToFirst \lst@arg}
-}\endgroup
-\def\lstenv@ProcessJEnv#1\end#2{\def\lst@temp{#2}%
-    \ifx\lstenv@name\lst@temp
-        \lst@InsideConvert{#1}%
-        \expandafter\lstenv@ProcessJ@
-    \else
-        \lst@InsideConvert{#1\\end\{#2\}}%
-        \expandafter\lstenv@ProcessJEnv
-    \fi}
-\def\lstenv@backslash{%
-    \lst@IfNextChars\lstenv@endstring
-        {\lstenv@End}%
-        {\expandafter\lsts@backslash \lst@eaten}}%
-\def\lstenv@End{%
-    \ifx\@currenvir\lstenv@name
-        \edef\lst@next{\noexpand\end{\lstenv@name}}%
-    \else
-        \def\lst@next{\csname end\lstenv@name\endcsname}%
-    \fi
-    \lst@next}
-\lst@UserCommand\lstnewenvironment#1#2#{%
-    \@ifundefined{#1}%
-        {\let\lst@arg\@empty
-         \lst@XConvert{#1}\@nil
-         \expandafter\lstnewenvironment@\lst@arg{#1}{#2}}%
-        {\PackageError{Listings}{Environment `#1' already defined}\@eha
-         \@gobbletwo}}
-\def\@tempa#1#2#3{%
-\gdef\lstnewenvironment@##1##2##3##4##5{%
-    \begingroup
-    \global\@namedef{end##2}{\lstenv@Error{##2}}%
-    \global\@namedef{##2}{\def\lstenv@name{##2}%
-        \begingroup \lst@setcatcodes \catcode\active=\active
-        \csname##2@\endcsname}%
-    \let\l@ngrel@x\global
-    \let\@xargdef\lstenv@xargdef
-    \expandafter\new@command\csname##2@\endcsname##3%
-        {\lsthk@PreSet ##4%
-         \ifx\@currenvir\lstenv@name
-             \def\lstenv@endstring{#1#2##1#3}%
-         \else
-             \def\lstenv@endstring{#1##1}%
-         \fi
-         \@namedef{end##2}{\lst@DeInit ##5\endgroup
-                          \lst@doendpe \@ignoretrue}%
-         \lsthk@DisplayStyle
-         \let\lst@EndProcessListing\lstenv@SkipToEnd
-         \lst@Init\lstenv@backslash
-         \lst@ifprint
-             \expandafter\expandafter\expandafter\lstenv@Process
-         \else
-             \expandafter\lstenv@SkipToEnd
-         \fi
-         \lst@insertargs}%
-    \endgroup}%
-}
-\let\lst@arg\@empty \lst@XConvert{end}\{\}\@nil
-\expandafter\@tempa\lst@arg
-\let\lst@insertargs\@empty
-\def\lstenv@xargdef#1{
-    \expandafter\lstenv@xargdef@\csname\string#1\endcsname#1}
-\def\lstenv@xargdef@#1#2[#3][#4]#5{%
-  \@ifdefinable#2{%
-       \gdef#2{%
-          \ifx\protect\@typeset@protect
-            \expandafter\lstenv@testopt
-          \else
-            \@x@protect#2%
-          \fi
-          #1%
-          {#4}}%
-       \@yargdef
-          #1%
-           \tw@
-           {#3}%
-           {#5}}}
-\long\def\lstenv@testopt#1#2{%
-  \@ifnextchar[{\catcode\active5\relax \lstenv@testopt@#1}%
-               {#1[{#2}]}}
-\def\lstenv@testopt@#1[#2]{%
-    \catcode\active\active
-    #1[#2]}
-\begingroup \lccode`\~=`\\\lowercase{%
-\gdef\lstenv@SkipToEnd{%
-    \long\expandafter\def\expandafter\lst@temp\expandafter##\expandafter
-        1\expandafter~\lstenv@endstring{\lstenv@End}%
-    \lst@temp}
-}\endgroup
-\def\lstenv@Error#1{\PackageError{Listings}{Extra \string\end#1}%
-    {I'm ignoring this, since I wasn't doing a \csname#1\endcsname.}}
-\begingroup \lccode`\~=`\^^M\lowercase{%
-\gdef\lst@TestEOLChar#1{%
-    \def\lst@insertargs{#1}%
-    \ifx ~#1\@empty \else
-    \ifx^^J#1\@empty \else
-        \global\let\lst@intname\lst@insertargs
-        \let\lst@insertargs\@empty
-    \fi \fi}
-}\endgroup
-\lstnewenvironment{lstlisting}[2][]
-    {\lst@TestEOLChar{#2}%
-     \lstset{#1}%
-     \csname\@lst @SetFirstNumber\endcsname}
-    {\csname\@lst @SaveFirstNumber\endcsname}
-\lst@Key{fancyvrb}\relax[t]{%
-    \lstKV@SetIf{#1}\lst@iffancyvrb
-    \lstFV@fancyvrb}
-\ifx\lstFV@fancyvrb\@undefined
-    \gdef\lstFV@fancyvrb{\lst@RequireAspects{fancyvrb}\lstFV@fancyvrb}
-\fi
-\@ifundefined{ocp}{}
-    {\lst@AddToHook{OutputBox}%
-         {\let\lst@ProcessLetter\@firstofone
-          \let\lst@ProcessDigit\@firstofone
-          \let\lst@ProcessOther\@firstofone}}
-\DeclareOption*{\expandafter\lst@ProcessOption\CurrentOption\relax}
-\def\lst@ProcessOption#1#2\relax{%
-    \ifx #1!%
-        \lst@DeleteKeysIn\lst@loadaspects{#2}%
-    \else
-        \lst@lAddTo\lst@loadaspects{,#1#2}%
-    \fi}
-\@ifundefined{lst@loadaspects}
-  {\def\lst@loadaspects{strings,comments,escape,style,language,%
-      keywords,labels,lineshape,frames,emph,index}%
-  }{}
-\InputIfFileExists{lstpatch.sty}{}{}
-\let\lst@ifsavemem\iffalse
-\DeclareOption{savemem}{\let\lst@ifsavemem\iftrue}
-\DeclareOption{noaspects}{\let\lst@loadaspects\@empty}
-\ProcessOptions
-\lst@RequireAspects\lst@loadaspects
-\let\lst@loadaspects\@empty
-\lst@UseHook{SetStyle}\lst@UseHook{EmptyStyle}
-\lst@UseHook{SetLanguage}\lst@UseHook{EmptyLanguage}
-\InputIfFileExists{listings.cfg}{}{}
-\InputIfFileExists{lstlocal.cfg}{}{}
-\endinput
-%%
-%% End of file `listings.sty'.
Index: doc/LaTeXmacros/listings/listings.sty.new
===================================================================
--- doc/LaTeXmacros/listings/listings.sty.new	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,2260 +1,0 @@
-%%
-%% This is file `listings.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% listings.dtx  (with options: `kernel')
-%% 
-%% Please read the software license in listings-1.3.dtx or listings-1.3.pdf.
-%%
-%% (w)(c) 1996--2004 Carsten Heinz and/or any other author listed
-%% elsewhere in this file.
-%% (c) 2006 Brooks Moses
-%% (c) 2013- Jobst Hoffmann
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\def\filedate{2015/06/04}
-\def\fileversion{1.6}
-\NeedsTeXFormat{LaTeX2e}
-\AtEndOfPackage{\ProvidesPackage{listings}
-             [\filedate\space\fileversion\space(Carsten Heinz)]}
-\def\lst@CheckVersion#1{\edef\reserved@a{#1}%
-    \ifx\lst@version\reserved@a \expandafter\@gobble
-                          \else \expandafter\@firstofone \fi}
-\let\lst@version\fileversion
-\def\lst@InputCatcodes{%
-    \makeatletter \catcode`\"12%
-    \catcode`\^^@\active
-    \catcode`\^^I9%
-    \catcode`\^^L9%
-    \catcode`\^^M9%
-    \catcode`\%14%
-    \catcode`\~\active}
-\def\lst@RestoreCatcodes#1{%
-    \ifx\relax#1\else
-        \noexpand\catcode`\noexpand#1\the\catcode`#1\relax
-        \expandafter\lst@RestoreCatcodes
-    \fi}
-\edef\lst@RestoreCatcodes{%
-    \noexpand\lccode`\noexpand\/`\noexpand\/%
-    \lst@RestoreCatcodes\"\^^I\^^M\~\^^@\relax
-    \catcode12\active}
-\lst@InputCatcodes
-\AtEndOfPackage{\lst@RestoreCatcodes}
-\def\@lst{lst}
-\def\lst@IfSubstring#1#2{%
-    \def\lst@temp##1#1##2##3\relax{%
-        \ifx \@empty##2\expandafter\@secondoftwo
-                 \else \expandafter\@firstoftwo \fi}%
-    \expandafter\lst@temp#2#1\@empty\relax}
-\def\lst@IfOneOf#1\relax#2{%
-    \def\lst@temp##1,#1,##2##3\relax{%
-        \ifx \@empty##2\expandafter\@secondoftwo
-                 \else \expandafter\@firstoftwo \fi}%
-    \expandafter\lst@temp\expandafter,#2,#1,\@empty\relax}
-\def\lst@DeleteKeysIn#1#2{%
-    \expandafter\lst@DeleteKeysIn@\expandafter#1#2,\relax,}
-\def\lst@DeleteKeysIn@#1#2,{%
-    \ifx\relax#2\@empty
-        \expandafter\@firstoftwo\expandafter\lst@RemoveCommas
-    \else
-        \ifx\@empty#2\@empty\else
-            \def\lst@temp##1,#2,##2{%
-                ##1%
-                \ifx\@empty##2\@empty\else
-                    \expandafter\lst@temp\expandafter,%
-                \fi ##2}%
-            \edef#1{\expandafter\lst@temp\expandafter,#1,#2,\@empty}%
-        \fi
-    \fi
-    \lst@DeleteKeysIn@#1}
-\def\lst@RemoveCommas#1{\edef#1{\expandafter\lst@RC@#1\@empty}}
-\def\lst@RC@#1{\ifx,#1\expandafter\lst@RC@ \else #1\fi}
-\def\lst@ReplaceIn#1#2{%
-    \expandafter\lst@ReplaceIn@\expandafter#1#2\@empty\@empty}
-\def\lst@ReplaceInArg#1#2{\lst@ReplaceIn@#1#2\@empty\@empty}
-\def\lst@ReplaceIn@#1#2#3{%
-    \ifx\@empty#3\relax\else
-        \def\lst@temp##1#2##2{%
-            \ifx\@empty##2%
-                \lst@lAddTo#1{##1}%
-            \else
-                \lst@lAddTo#1{##1#3}\expandafter\lst@temp
-            \fi ##2}%
-        \let\@tempa#1\let#1\@empty
-        \expandafter\lst@temp\@tempa#2\@empty
-        \expandafter\lst@ReplaceIn@\expandafter#1%
-    \fi}
-\providecommand*\@gobblethree[3]{}
-\def\lst@GobbleNil#1\@nil{}
-\def\lst@Swap#1#2{#2#1}
-\def\lst@true{\let\lst@if\iftrue}
-\def\lst@false{\let\lst@if\iffalse}
-\lst@false
-\def\lst@IfNextCharsArg#1{%
-    \def\lst@tofind{#1}\lst@IfNextChars\lst@tofind}
-\def\lst@IfNextChars#1#2#3{%
-    \let\lst@tofind#1\def\@tempa{#2}\def\@tempb{#3}%
-    \let\lst@eaten\@empty \lst@IfNextChars@}
-\def\lst@IfNextChars@{\expandafter\lst@IfNextChars@@\lst@tofind\relax}
-\def\lst@IfNextChars@@#1#2\relax#3{%
-    \def\lst@tofind{#2}\lst@lAddTo\lst@eaten{#3}%
-    \ifx#1#3%
-        \ifx\lst@tofind\@empty
-            \let\lst@next\@tempa
-        \else
-            \let\lst@next\lst@IfNextChars@
-        \fi
-        \expandafter\lst@next
-    \else
-        \expandafter\@tempb
-    \fi}
-\def\lst@IfNextCharActive#1#2#3{%
-    \begingroup \lccode`\~=`#3\lowercase{\endgroup
-    \ifx~}#3%
-        \def\lst@next{#1}%
-    \else
-        \def\lst@next{#2}%
-    \fi \lst@next #3}
-\def\lst@for#1\do#2{%
-  \def\lst@forbody##1{#2}%
-  \def\@tempa{#1}%
-  \ifx\@tempa\@empty\else\expandafter\lst@f@r#1,\@nil,\fi
-}
-\def\lst@f@r#1,{%
-  \def\@tempa{#1}%
-  \ifx\@tempa\@nnil\else\lst@forbody{#1}\expandafter\lst@f@r\fi
-}
-\def\lst@MakeActive#1{%
-    \let\lst@temp\@empty \lst@MakeActive@#1%
-    \relax\relax\relax\relax\relax\relax\relax\relax\relax}
-\begingroup
-\catcode`\^^@=\active \catcode`\^^A=\active \catcode`\^^B=\active
-\catcode`\^^C=\active \catcode`\^^D=\active \catcode`\^^E=\active
-\catcode`\^^F=\active \catcode`\^^G=\active \catcode`\^^H=\active
-\gdef\lst@MakeActive@#1#2#3#4#5#6#7#8#9{\let\lst@next\relax
-    \ifx#1\relax
-    \else \lccode`\^^@=`#1%
-    \ifx#2\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@}}%
-    \else \lccode`\^^A=`#2%
-    \ifx#3\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A}}%
-    \else \lccode`\^^B=`#3%
-    \ifx#4\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B}}%
-    \else \lccode`\^^C=`#4%
-    \ifx#5\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C}}%
-    \else \lccode`\^^D=`#5%
-    \ifx#6\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D}}%
-    \else \lccode`\^^E=`#6%
-    \ifx#7\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E}}%
-    \else \lccode`\^^F=`#7%
-    \ifx#8\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F}}%
-    \else \lccode`\^^G=`#8%
-    \ifx#9\relax
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F^^G}}%
-    \else \lccode`\^^H=`#9%
-        \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F^^G^^H}}%
-        \let\lst@next\lst@MakeActive@
-    \fi \fi \fi \fi \fi \fi \fi \fi \fi
-    \lst@next}
-\endgroup
-\def\lst@DefActive#1#2{\lst@MakeActive{#2}\let#1\lst@temp}
-\def\lst@DefOther#1#2{%
-    \begingroup \def#1{#2}\escapechar\m@ne \expandafter\endgroup
-    \expandafter\lst@DefOther@\meaning#1\relax#1}
-\def\lst@DefOther@#1>#2\relax#3{\edef#3{\zap@space#2 \@empty}}
-\def\lst@InsideConvert#1{%
-   \lst@ifmathescape
-      \lst@InsideConvert@e#1$\@nil
-      \lst@if
-         \lst@InsideConvert@ey#1\@nil
-      \else
-         \lst@InsideConvert@#1 \@empty
-         \expandafter\@gobbletwo
-      \fi
-      \expandafter\lst@next
-   \else
-      \lst@InsideConvert@#1 \@empty
-   \fi}
-\begingroup \lccode`\~=`\ \relax \lowercase{%
-\gdef\lst@InsideConvert@#1 #2{%
-    \lst@MakeActive{#1}%
-    \ifx\@empty#2%
-        \lst@lExtend\lst@arg{\lst@temp}%
-    \else
-        \lst@lExtend\lst@arg{\lst@temp~}%
-        \expandafter\lst@InsideConvert@
-    \fi #2}
-}\endgroup
-\def\lst@InsideConvert@e#1$#2\@nil{%
-   \ifx\@empty#2\@empty \lst@false \else \lst@true \fi}
-\def\lst@InsideConvert@ey#1$#2$#3\@nil{%
-   \lst@InsideConvert@#1 \@empty
-   \lst@lAddTo\lst@arg{%
-      \lst@ifdropinput\else
-         \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken
-         \setbox\@tempboxa=\hbox\bgroup$\lst@escapebegin
-         #2%
-         \lst@escapeend$\egroup \lst@CalcLostSpaceAndOutput
-         \lst@whitespacefalse
-      \fi}%
-   \def\lst@next{\lst@InsideConvert{#3}}%
-}
-\def\lst@XConvert{\@ifnextchar\bgroup \lst@XConvertArg\lst@XConvert@}
-\def\lst@XConvertArg#1{%
-    {\lst@false \let\lst@arg\@empty
-     \lst@XConvert#1\@nil
-     \global\let\@gtempa\lst@arg}%
-    \lst@lExtend\lst@arg{\expandafter{\@gtempa}}%
-    \lst@XConvertNext}
-\def\lst@XConvert@#1{%
-    \ifx\@nil#1\else
-        \begingroup\lccode`\~=`#1\lowercase{\endgroup
-        \lst@lAddTo\lst@arg~}%
-        \expandafter\lst@XConvertNext
-    \fi}
-\def\lst@XConvertNext{%
-    \lst@if \expandafter\lst@XConvertX
-      \else \expandafter\lst@XConvert \fi}
-\def\lst@XConvertX#1{%
-    \ifx\@nil#1\else
-        \lst@XConvertX@#1\relax
-        \expandafter\lst@XConvert
-    \fi}
-\def\lst@XConvertX@#1#2\relax{%
-    \begingroup\lccode`\~=`#1\lowercase{\endgroup
-    \lst@XCConvertX@@~}{#2}}
-\def\lst@XCConvertX@@#1#2{\lst@lAddTo\lst@arg{{#1#2}}}
-\def\lst@Require#1#2#3#4#5{%
-    \begingroup
-    \aftergroup\lst@true
-    \ifx\@empty#3\@empty\else
-        \def\lst@prefix{#2}\let\lst@require\@empty
-        \edef\lst@temp{\expandafter\zap@space#3 \@empty}%
-        \lst@for\lst@temp\do{%
-          \ifx\@empty##1\@empty\else \lstKV@OptArg[]{##1}{%
-            #4[####1]{####2}%
-            \@ifundefined{\@lst\lst@prefix @\lst@malias $\lst@oalias}%
-            {\edef\lst@require{\lst@require,\lst@malias $\lst@oalias}}%
-            {}}%
-          \fi}%
-        \global\let\lst@loadaspects\@empty
-        \lst@InputCatcodes
-        \ifx\lst@require\@empty\else
-            \lst@for{#5}\do{%
-                \ifx\lst@require\@empty\else
-                    \InputIfFileExists{##1}{}{}%
-                \fi}%
-        \fi
-        \ifx\lst@require\@empty\else
-            \PackageError{Listings}{Couldn't load requested #1}%
-            {The following #1s weren't loadable:^^J\@spaces
-             \lst@require^^JThis may cause errors in the sequel.}%
-            \aftergroup\lst@false
-        \fi
-        \ifx\lst@loadaspects\@empty\else
-            \lst@RequireAspects\lst@loadaspects
-        \fi
-    \fi
-    \endgroup}
-\def\lst@IfRequired[#1]#2{%
-    \lst@NormedDef\lst@temp{[#1]#2}%
-    \expandafter\lst@IfRequired@\lst@temp\relax}
-\def\lst@IfRequired@[#1]#2\relax#3{%
-    \lst@IfOneOf #2$#1\relax\lst@require
-        {\lst@DeleteKeysIn@\lst@require#2$#1,\relax,%
-         \global\expandafter\let
-             \csname\@lst\lst@prefix @#2$#1\endcsname\@empty
-         #3}}
-\let\lst@require\@empty
-\def\lst@NoAlias[#1]#2{%
-    \lst@NormedDef\lst@oalias{#1}\lst@NormedDef\lst@malias{#2}}
-\gdef\lst@LAS#1#2#3#4#5#6#7{%
-    \lst@Require{#1}{#2}{#3}#4#5%
-    #4#3%
-    \@ifundefined{lst#2@\lst@malias$\lst@oalias}%
-        {\PackageError{Listings}%
-         {#1 \ifx\@empty\lst@oalias\else \lst@oalias\space of \fi
-          \lst@malias\space undefined}%
-         {The #1 is not loadable. \@ehc}}%
-        {#6\csname\@lst#2@\lst@malias $\lst@oalias\endcsname #7}}
-\def\lst@RequireAspects#1{%
-    \lst@Require{aspect}{asp}{#1}\lst@NoAlias\lstaspectfiles}
-\let\lstloadaspects\lst@RequireAspects
-\@ifundefined{lstaspectfiles}
-    {\newcommand\lstaspectfiles{lstmisc0.sty,lstmisc.sty}}{}
-\gdef\lst@DefDriver#1#2#3#4{%
-    \@ifnextchar[{\lst@DefDriver@{#1}{#2}#3#4}%
-                 {\lst@DefDriver@{#1}{#2}#3#4[]}}
-\gdef\lst@DefDriver@#1#2#3#4[#5]#6{%
-    \def\lst@name{#1}\let\lst@if#4%
-    \lst@NormedDef\lst@driver{\@lst#2@#6$#5}%
-    \lst@IfRequired[#5]{#6}{\begingroup \lst@true}%
-                           {\begingroup}%
-    \lst@setcatcodes
-    \@ifnextchar[{\lst@XDefDriver{#1}#3}{\lst@DefDriver@@#3}}
-\gdef\lst@DefDriver@@#1#2{%
-    \lst@if
-        \global\@namedef{\lst@driver}{#1{#2}}%
-    \fi
-    \endgroup
-    \@ifnextchar[\lst@XXDefDriver\@empty}
-\gdef\lst@XXDefDriver[#1]{%
-    \ifx\@empty#1\@empty\else
-        \lst@if
-            \lstloadaspects{#1}%
-        \else
-            \@ifundefined{\lst@driver}{}%
-            {\xdef\lst@loadaspects{\lst@loadaspects,#1}}%
-        \fi
-    \fi}
-\gdef\lst@XDefDriver#1#2[#3]#4#5{\lst@DefDriver@@#2{also#1=[#3]#4,#5}}
-\let\lst@UserCommand\gdef
-\newcommand*\lst@BeginAspect[2][]{%
-    \def\lst@curraspect{#2}%
-    \ifx \lst@curraspect\@empty
-        \expandafter\lst@GobbleAspect
-    \else
-        \let\lst@next\@empty
-        \lst@IfRequired[]{#2}%
-            {\lst@RequireAspects{#1}%
-             \lst@if\else \let\lst@next\lst@GobbleAspect \fi}%
-            {\let\lst@next\lst@GobbleAspect}%
-        \expandafter\lst@next
-    \fi}
-\def\lst@EndAspect{%
-    \csname\@lst patch@\lst@curraspect\endcsname
-    \let\lst@curraspect\@empty}
-\long\def\lst@GobbleAspect#1\lst@EndAspect{\let\lst@curraspect\@empty}
-\def\lst@Key#1#2{%
-    \@ifnextchar[{\lstKV@def{#1}{#2}}%
-                 {\def\lst@temp{\lst@Key@{#1}{#2}}
-                  \afterassignment\lst@temp
-                  \global\@namedef{KV@\@lst @#1}####1}}
-\def\lstKV@def#1#2[#3]{%
-    \global\@namedef{KV@\@lst @#1@default\expandafter}\expandafter
-        {\csname KV@\@lst @#1\endcsname{#3}}%
-    \def\lst@temp{\lst@Key@{#1}{#2}}\afterassignment\lst@temp
-    \global\@namedef{KV@\@lst @#1}##1}
-\def\lst@Key@#1#2{%
-    \ifx\relax#2\@empty\else
-        \begingroup \globaldefs\@ne
-        \csname KV@\@lst @#1\endcsname{#2}%
-        \endgroup
-    \fi}
-\def\lst@UseHook#1{\csname\@lst hk@#1\endcsname}
-\def\lst@AddToHook{\lst@ATH@\iffalse\lst@AddTo}
-\def\lst@AddToHookExe{\lst@ATH@\iftrue\lst@AddTo}
-\def\lst@AddToHookAtTop{\lst@ATH@\iffalse\lst@AddToAtTop}
-\long\def\lst@ATH@#1#2#3#4{%
-    \@ifundefined{\@lst hk@#3}{%
-        \expandafter\gdef\csname\@lst hk@#3\endcsname{}}{}%
-    \expandafter#2\csname\@lst hk@#3\endcsname{#4}%
-    \def\lst@temp{#4}%
-    #1% \iftrue|false
-        \begingroup \globaldefs\@ne \lst@temp \endgroup
-    \fi}
-\long\def\lst@AddTo#1#2{%
-    \expandafter\gdef\expandafter#1\expandafter{#1#2}}
-\def\lst@AddToAtTop#1#2{\def\lst@temp{#2}%
-    \expandafter\expandafter\expandafter\gdef
-    \expandafter\expandafter\expandafter#1%
-    \expandafter\expandafter\expandafter{\expandafter\lst@temp#1}}
-\def\lst@lAddTo#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
-\def\lst@Extend#1#2{%
-    \expandafter\lst@AddTo\expandafter#1\expandafter{#2}}
-\def\lst@lExtend#1#2{%
-    \expandafter\lst@lAddTo\expandafter#1\expandafter{#2}}
-\RequirePackage{keyval}[1997/11/10]
-\def\lstKV@TwoArg#1#2{\gdef\@gtempa##1##2{#2}\@gtempa#1{}{}}
-\def\lstKV@ThreeArg#1#2{\gdef\@gtempa##1##2##3{#2}\@gtempa#1{}{}{}}
-\def\lstKV@FourArg#1#2{\gdef\@gtempa##1##2##3##4{#2}\@gtempa#1{}{}{}{}}
-\def\lstKV@OptArg[#1]#2#3{%
-    \gdef\@gtempa[##1]##2{#3}\lstKV@OptArg@{#1}#2\@}
-\def\lstKV@OptArg@#1{\@ifnextchar[\lstKV@OptArg@@{\lstKV@OptArg@@[#1]}}
-\def\lstKV@OptArg@@[#1]#2\@{\@gtempa[#1]{#2}}
-\def\lstKV@XOptArg[#1]#2#3{%
-    \global\let\@gtempa#3\lstKV@OptArg@{#1}#2\@}
-\def\lstKV@CSTwoArg#1#2{%
-    \gdef\@gtempa##1,##2,##3\relax{#2}%
-    \@gtempa#1,,\relax}
-\def\lstKV@SetIf#1{\lstKV@SetIf@#1\relax}
-\def\lstKV@SetIf@#1#2\relax#3{\lowercase{%
-    \expandafter\let\expandafter#3%
-        \csname if\ifx #1t}true\else false\fi\endcsname}
-\def\lstKV@SwitchCases#1#2#3{%
-    \def\lst@temp##1\\#1&##2\\##3##4\@nil{%
-        \ifx\@empty##3%
-            #3%
-        \else
-            ##2%
-        \fi
-    }%
-    \lst@temp\\#2\\#1&\\\@empty\@nil}
-\lst@UserCommand\lstset{\begingroup \lst@setcatcodes \lstset@}
-\def\lstset@#1{\endgroup \ifx\@empty#1\@empty\else\setkeys{lst}{#1}\fi}
-\def\lst@setcatcodes{\makeatletter \catcode`\==12\relax}
-\def\lst@NewMode#1{%
-    \ifx\@undefined#1%
-        \lst@mode\lst@newmode\relax \advance\lst@mode\@ne
-        \xdef\lst@newmode{\the\lst@mode}%
-        \global\chardef#1=\lst@mode
-        \lst@mode\lst@nomode
-    \fi}
-\newcount\lst@mode
-\def\lst@newmode{\m@ne}% init
-\lst@NewMode\lst@nomode % init (of \lst@mode :-)
-\def\lst@UseDynamicMode{%
-    \@tempcnta\lst@dynamicmode\relax \advance\@tempcnta\@ne
-    \edef\lst@dynamicmode{\the\@tempcnta}%
-    \expandafter\lst@Swap\expandafter{\expandafter{\lst@dynamicmode}}}
-\lst@AddToHook{InitVars}{\let\lst@dynamicmode\lst@newmode}
-\def\lst@EnterMode#1#2{%
-    \bgroup \lst@mode=#1\relax #2%
-    \lst@FontAdjust
-    \lst@lAddTo\lst@entermodes{\lst@EnterMode{#1}{#2}}}
-\lst@AddToHook{InitVars}{\let\lst@entermodes\@empty}
-\let\lst@entermodes\@empty % init
-\def\lst@LeaveMode{%
-    \ifnum\lst@mode=\lst@nomode\else
-        \egroup \expandafter\lsthk@EndGroup
-    \fi}
-\lst@AddToHook{EndGroup}{}% init
-\def\lst@InterruptModes{%
-    \lst@Extend\lst@modestack{\expandafter{\lst@entermodes}}%
-    \lst@LeaveAllModes}
-\lst@AddToHook{InitVars}{\global\let\lst@modestack\@empty}
-\def\lst@ReenterModes{%
-    \ifx\lst@modestack\@empty\else
-        \lst@LeaveAllModes
-        \global\let\@gtempa\lst@modestack
-        \global\let\lst@modestack\@empty
-        \expandafter\lst@ReenterModes@\@gtempa\relax
-    \fi}
-\def\lst@ReenterModes@#1#2{%
-    \ifx\relax#2\@empty
-        \gdef\@gtempa##1{#1}%
-        \expandafter\@gtempa
-    \else
-        \lst@AddTo\lst@modestack{{#1}}%
-        \expandafter\lst@ReenterModes@
-    \fi
-    {#2}}
-\def\lst@LeaveAllModes{%
-    \ifnum\lst@mode=\lst@nomode
-        \expandafter\lsthk@EndGroup
-    \else
-        \expandafter\egroup\expandafter\lst@LeaveAllModes
-    \fi}
-\lst@AddToHook{ExitVars}{\lst@LeaveAllModes}
-\lst@NewMode\lst@Pmode
-\lst@NewMode\lst@GPmode
-\def\lst@modetrue{\let\lst@ifmode\iftrue \lsthk@ModeTrue}
-\let\lst@ifmode\iffalse % init
-\lst@AddToHook{ModeTrue}{}% init
-\def\lst@Lmodetrue{\let\lst@ifLmode\iftrue}
-\let\lst@ifLmode\iffalse % init
-\lst@AddToHook{EOL}{\@whilesw \lst@ifLmode\fi \lst@LeaveMode}
-\def\lst@NormedDef#1#2{\lowercase{\edef#1{\zap@space#2 \@empty}}}
-\def\lst@NormedNameDef#1#2{%
-    \lowercase{\edef\lst@temp{\zap@space#1 \@empty}%
-    \expandafter\xdef\csname\lst@temp\endcsname{\zap@space#2 \@empty}}}
-\def\lst@GetFreeMacro#1{%
-    \@tempcnta\z@ \def\lst@freemacro{#1\the\@tempcnta}%
-    \lst@GFM@}
-\def\lst@GFM@{%
-    \expandafter\ifx \csname\lst@freemacro\endcsname \relax
-        \edef\lst@freemacro{\csname\lst@freemacro\endcsname}%
-    \else
-        \advance\@tempcnta\@ne
-        \expandafter\lst@GFM@
-    \fi}
-\newbox\lst@gtempboxa
-\newtoks\lst@token \newcount\lst@length \newcount\lst@colposn
-\def\lst@ResetToken{\lst@token{}\lst@length\z@}
-\lst@AddToHook{InitVarsBOL}{\lst@ResetToken \let\lst@lastother\@empty}
-\lst@AddToHook{EndGroup}{\lst@ResetToken \let\lst@lastother\@empty}
-\def\lst@lettertrue{\let\lst@ifletter\iftrue}
-\def\lst@letterfalse{\let\lst@ifletter\iffalse}
-\lst@AddToHook{InitVars}{\lst@letterfalse}
-\def\lst@Append#1{\advance\lst@length\@ne
-                  \lst@token=\expandafter{\the\lst@token#1}}
-\def\lst@AppendOther{%
-    \lst@ifletter \lst@Output\lst@letterfalse \fi
-    \futurelet\lst@lastother\lst@Append}
-\def\lst@AppendLetter{%
-    \lst@ifletter\else \lst@OutputOther\lst@lettertrue \fi
-    \lst@Append}
-\def\lst@SaveToken{%
-    \global\let\lst@gthestyle\lst@thestyle
-    \global\let\lst@glastother\lst@lastother
-    \xdef\lst@RestoreToken{\noexpand\lst@token{\the\lst@token}%
-                           \noexpand\lst@length\the\lst@length\relax
-                           \noexpand\let\noexpand\lst@thestyle
-                                        \noexpand\lst@gthestyle
-                           \noexpand\let\noexpand\lst@lastother
-                                        \noexpand\lst@glastother}}
-\def\lst@IfLastOtherOneOf#1{\lst@IfLastOtherOneOf@ #1\relax}
-\def\lst@IfLastOtherOneOf@#1{%
-    \ifx #1\relax
-        \expandafter\@secondoftwo
-    \else
-        \ifx\lst@lastother#1%
-            \lst@IfLastOtherOneOf@t
-        \else
-            \expandafter\expandafter\expandafter\lst@IfLastOtherOneOf@
-        \fi
-    \fi}
-\def\lst@IfLastOtherOneOf@t#1\fi\fi#2\relax{\fi\fi\@firstoftwo}
-\newdimen\lst@currlwidth % \global
-\newcount\lst@column \newcount\lst@pos % \global
-\lst@AddToHook{InitVarsBOL}
-    {\global\lst@currlwidth\z@ \global\lst@pos\z@ \global\lst@column\z@}
-\def\lst@CalcColumn{%
-            \@tempcnta\lst@column
-    \advance\@tempcnta\lst@length
-    \advance\@tempcnta-\lst@pos}
-\newdimen\lst@lostspace % \global
-\lst@AddToHook{InitVarsBOL}{\global\lst@lostspace\z@}
-\def\lst@UseLostSpace{\ifdim\lst@lostspace>\z@ \lst@InsertLostSpace \fi}
-\def\lst@InsertLostSpace{%
-    \lst@Kern\lst@lostspace \global\lst@lostspace\z@}
-\def\lst@InsertHalfLostSpace{%
-    \global\lst@lostspace.5\lst@lostspace \lst@Kern\lst@lostspace}
-\newdimen\lst@width
-\lst@Key{basewidth}{0.6em,0.45em}{\lstKV@CSTwoArg{#1}%
-    {\def\lst@widthfixed{##1}\def\lst@widthflexible{##2}%
-     \ifx\lst@widthflexible\@empty
-         \let\lst@widthflexible\lst@widthfixed
-     \fi
-     \def\lst@temp{\PackageError{Listings}%
-                                {Negative value(s) treated as zero}%
-                                \@ehc}%
-     \let\lst@error\@empty
-     \ifdim \lst@widthfixed<\z@
-         \let\lst@error\lst@temp \let\lst@widthfixed\z@
-     \fi
-     \ifdim \lst@widthflexible<\z@
-         \let\lst@error\lst@temp \let\lst@widthflexible\z@
-     \fi
-     \lst@error}}
-\lst@AddToHook{FontAdjust}
-    {\lst@width=\lst@ifflexible\lst@widthflexible
-                          \else\lst@widthfixed\fi \relax}
-\lst@Key{fontadjust}{false}[t]{\lstKV@SetIf{#1}\lst@iffontadjust}
-\def\lst@FontAdjust{\lst@iffontadjust \lsthk@FontAdjust \fi}
-\lst@AddToHook{InitVars}{\lsthk@FontAdjust}
-\def\lst@OutputBox#1{\lst@alloverstyle{\box#1}}
-\def\lst@alloverstyle#1{#1}% init
-\def\lst@Kern#1{%
-    \setbox\z@\hbox{{\lst@currstyle{\kern#1}}}%
-    \global\advance\lst@currlwidth \wd\z@
-    \lst@OutputBox\z@}
-\def\lst@CalcLostSpaceAndOutput{%
-    \global\advance\lst@lostspace \lst@length\lst@width
-    \global\advance\lst@lostspace-\wd\@tempboxa
-    \global\advance\lst@currlwidth \wd\@tempboxa
-    \global\advance\lst@pos -\lst@length
-    \setbox\@tempboxa\hbox{\let\lst@OutputBox\box
-        \ifdim\lst@lostspace>\z@ \lst@leftinsert \fi
-        \box\@tempboxa
-        \ifdim\lst@lostspace>\z@ \lst@rightinsert \fi}%
-    \lst@OutputBox\@tempboxa \lsthk@PostOutput}
-\lst@AddToHook{PostOutput}{}% init
-\def\lst@OutputToken{%
-    \lst@TrackNewLines \lst@OutputLostSpace
-    \lst@ifgobbledws
-        \lst@gobbledwhitespacefalse
-        \lst@@discretionary
-    \fi
-    \lst@CheckMerge
-    {\lst@thestyle{\lst@FontAdjust
-     \setbox\@tempboxa\lst@hbox
-        {\lsthk@OutputBox
-         \lst@lefthss
-         \expandafter\lst@FillOutputBox\the\lst@token\@empty
-         \lst@righthss}%
-     \lst@CalcLostSpaceAndOutput}}%
-    \lst@ResetToken}
-\lst@AddToHook{OutputBox}{}% init
-\def\lst@gobbledwhitespacetrue{\global\let\lst@ifgobbledws\iftrue}
-\def\lst@gobbledwhitespacefalse{\global\let\lst@ifgobbledws\iffalse}
-\lst@AddToHookExe{InitBOL}{\lst@gobbledwhitespacefalse}% init
-\def\lst@Delay#1{%
-    \lst@CheckDelay
-    #1%
-    \lst@GetOutputMacro\lst@delayedoutput
-    \edef\lst@delayed{\the\lst@token}%
-    \edef\lst@delayedlength{\the\lst@length}%
-    \lst@ResetToken}
-\def\lst@Merge#1{%
-    \lst@CheckMerge
-    #1%
-    \edef\lst@merged{\the\lst@token}%
-    \edef\lst@mergedlength{\the\lst@length}%
-    \lst@ResetToken}
-\def\lst@MergeToken#1#2{%
-    \advance\lst@length#2%
-    \lst@lExtend#1{\the\lst@token}%
-    \expandafter\lst@token\expandafter{#1}%
-    \let#1\@empty}
-\def\lst@CheckDelay{%
-    \ifx\lst@delayed\@empty\else
-        \lst@GetOutputMacro\@gtempa
-        \ifx\lst@delayedoutput\@gtempa
-            \lst@MergeToken\lst@delayed\lst@delayedlength
-        \else
-            {\lst@ResetToken
-             \lst@MergeToken\lst@delayed\lst@delayedlength
-             \lst@delayedoutput}%
-            \let\lst@delayed\@empty
-        \fi
-    \fi}
-\def\lst@CheckMerge{%
-    \ifx\lst@merged\@empty\else
-        \lst@MergeToken\lst@merged\lst@mergedlength
-    \fi}
-\let\lst@delayed\@empty % init
-\let\lst@merged\@empty % init
-\def\lst@column@fixed{%
-    \lst@flexiblefalse
-    \lst@width\lst@widthfixed\relax
-    \let\lst@OutputLostSpace\lst@UseLostSpace
-    \let\lst@FillOutputBox\lst@FillFixed
-    \let\lst@hss\hss
-    \def\lst@hbox{\hbox to\lst@length\lst@width}}
-\def\lst@FillFixed#1{#1\lst@FillFixed@}
-\def\lst@FillFixed@#1{%
-    \ifx\@empty#1\else \lst@hss#1\expandafter\lst@FillFixed@ \fi}
-\def\lst@column@flexible{%
-    \lst@flexibletrue
-    \lst@width\lst@widthflexible\relax
-    \let\lst@OutputLostSpace\lst@UseLostSpace
-    \let\lst@FillOutputBox\@empty
-    \let\lst@hss\@empty
-    \let\lst@hbox\hbox}
-\def\lst@column@fullflexible{%
-    \lst@column@flexible
-    \def\lst@OutputLostSpace{\lst@ifnewline \lst@UseLostSpace\fi}%
-    \let\lst@leftinsert\@empty
-    \let\lst@rightinsert\@empty}
-\def\lst@column@spaceflexible{%
-    \lst@column@flexible
-    \def\lst@OutputLostSpace{%
-      \lst@ifwhitespace
-        \ifx\lst@outputspace\lst@visiblespace
-        \else
-          \lst@UseLostSpace
-        \fi
-      \else
-        \lst@ifnewline \lst@UseLostSpace\fi
-      \fi}%
-    \let\lst@leftinsert\@empty
-    \let\lst@rightinsert\@empty}
-\def\lst@outputpos#1#2\relax{%
-    \def\lst@lefthss{\lst@hss}\let\lst@righthss\lst@lefthss
-    \let\lst@rightinsert\lst@InsertLostSpace
-    \ifx #1c%
-        \let\lst@leftinsert\lst@InsertHalfLostSpace
-    \else\ifx #1r%
-        \let\lst@righthss\@empty
-        \let\lst@leftinsert\lst@InsertLostSpace
-        \let\lst@rightinsert\@empty
-    \else
-        \let\lst@lefthss\@empty
-        \let\lst@leftinsert\@empty
-        \ifx #1l\else \PackageWarning{Listings}%
-            {Unknown positioning for output boxes}%
-        \fi
-    \fi\fi}
-\def\lst@flexibletrue{\let\lst@ifflexible\iftrue}
-\def\lst@flexiblefalse{\let\lst@ifflexible\iffalse}
-\lst@Key{columns}{[c]fixed}{\lstKV@OptArg[]{#1}{%
-    \ifx\@empty##1\@empty\else \lst@outputpos##1\relax\relax \fi
-    \expandafter\let\expandafter\lst@arg
-                                \csname\@lst @column@##2\endcsname
-    \lst@arg
-    \ifx\lst@arg\relax
-        \PackageWarning{Listings}{Unknown column format `##2'}%
-    \else
-        \lst@ifflexible
-            \let\lst@columnsflexible\lst@arg
-        \else
-            \let\lst@columnsfixed\lst@arg
-        \fi
-    \fi}}
-\let\lst@columnsfixed\lst@column@fixed % init
-\let\lst@columnsflexible\lst@column@flexible % init
-\lst@Key{flexiblecolumns}\relax[t]{%
-    \lstKV@SetIf{#1}\lst@ifflexible
-    \lst@ifflexible \lst@columnsflexible
-              \else \lst@columnsfixed \fi}
-\newcount\lst@newlines
-\lst@AddToHook{InitVars}{\global\lst@newlines\z@}
-\lst@AddToHook{InitVarsBOL}{\global\advance\lst@newlines\@ne}
-\def\lst@NewLine{%
-    \ifx\lst@OutputBox\@gobble\else
-        \par\noindent \hbox{}%
-    \fi
-    \lst@colposn\z@
-    \global\advance\lst@newlines\m@ne
-    \lst@newlinetrue}
-\def\lst@newlinetrue{\global\let\lst@ifnewline\iftrue}
-\lst@AddToHookExe{PostOutput}{\global\let\lst@ifnewline\iffalse}% init
-\def\lst@TrackNewLines{%
-    \ifnum\lst@newlines>\z@
-        \lsthk@OnNewLine
-        \lst@DoNewLines
-    \fi}
-\lst@AddToHook{OnNewLine}{}% init
-\lst@Key{emptylines}\maxdimen{%
-    \@ifstar{\lst@true\@tempcnta\@gobble#1\relax\lst@GobbleNil}%
-            {\lst@false\@tempcnta#1\relax\lst@GobbleNil}#1\@nil
-    \advance\@tempcnta\@ne
-    \edef\lst@maxempty{\the\@tempcnta\relax}%
-    \let\lst@ifpreservenumber\lst@if}
-\def\lst@DoNewLines{
-    \@whilenum\lst@newlines>\lst@maxempty \do
-        {\lst@ifpreservenumber
-            \lsthk@OnEmptyLine
-            \global\advance\c@lstnumber\lst@advancelstnum
-         \fi
-         \global\advance\lst@newlines\m@ne}%
-    \@whilenum \lst@newlines>\@ne \do
-        {\lsthk@OnEmptyLine \lst@NewLine}%
-    \ifnum\lst@newlines>\z@ \lst@NewLine \fi}
-\lst@AddToHook{OnEmptyLine}{}% init
-\lst@Key{identifierstyle}{}{\def\lst@identifierstyle{#1}}
-\lst@AddToHook{EmptyStyle}{\let\lst@identifierstyle\@empty}
-\def\lst@GotoTabStop{%
-    \ifnum\lst@newlines=\z@
-        \setbox\@tempboxa\hbox{\lst@outputspace}%
-        \setbox\@tempboxa\hbox to\wd\@tempboxa{{\lst@currstyle{\hss}}}%
-        \lst@CalcLostSpaceAndOutput
-    \else
-        \global\advance\lst@lostspace \lst@length\lst@width
-        \global\advance\lst@column\lst@length \lst@length\z@
-    \fi}
-\def\lst@OutputOther{%
-    \lst@CheckDelay
-    \ifnum\lst@length=\z@\else
-        \let\lst@thestyle\lst@currstyle
-        \lsthk@OutputOther
-        \lst@OutputToken
-    \fi}
-\lst@AddToHook{OutputOther}{}% init
-\let\lst@currstyle\relax % init
-\def\lst@Output{%
-    \lst@CheckDelay
-    \ifnum\lst@length=\z@\else
-        \ifx\lst@currstyle\relax
-            \let\lst@thestyle\lst@identifierstyle
-        \else
-            \let\lst@thestyle\lst@currstyle
-        \fi
-        \lsthk@Output
-        \lst@OutputToken
-    \fi
-    \let\lst@lastother\relax}
-\lst@AddToHook{Output}{}% init
-\def\lst@GetOutputMacro#1{%
-    \lst@ifletter \global\let#1\lst@Output
-            \else \global\let#1\lst@OutputOther\fi}
-\def\lst@PrintToken{%
-    \lst@ifletter \lst@Output \lst@letterfalse
-            \else \lst@OutputOther \let\lst@lastother\@empty \fi}
-\def\lst@XPrintToken{%
-    \lst@PrintToken \lst@CheckMerge
-    \ifnum\lst@length=\z@\else \lst@PrintToken \fi}
-\def\lst@BeginDropOutput#1{%
-    \xdef\lst@BDOnewlines{\the\lst@newlines}%
-    \global\let\lst@BDOifnewline\lst@ifnewline
-    \lst@EnterMode{#1}%
-        {\lst@modetrue
-         \let\lst@OutputBox\@gobble
-         \aftergroup\lst@BDORestore}}
-\def\lst@BDORestore{%
-    \global\lst@newlines\lst@BDOnewlines
-    \global\let\lst@ifnewline\lst@BDOifnewline}
-\let\lst@EndDropOutput\lst@LeaveMode
-\def\lst@ProcessLetter{\lst@whitespacefalse \lst@AppendLetter}
-\def\lst@ProcessOther{\lst@whitespacefalse \lst@AppendOther}
-\def\lst@ProcessDigit{%
-    \lst@whitespacefalse
-    \lst@ifletter \expandafter\lst@AppendLetter
-            \else \expandafter\lst@AppendOther\fi}
-\def\lst@whitespacetrue{\global\let\lst@ifwhitespace\iftrue}
-\def\lst@whitespacefalse{\global\let\lst@ifwhitespace\iffalse}
-\lst@AddToHook{InitVarsBOL}{\lst@whitespacetrue}
-\lst@Key{tabsize}{8}
-    {\ifnum#1>\z@ \def\lst@tabsize{#1}\else
-         \PackageError{Listings}{Strict positive integer expected}%
-         {You can't use `#1' as tabsize. \@ehc}%
-     \fi}
-\lst@Key{showtabs}f[t]{\lstKV@SetIf{#1}\lst@ifshowtabs}
-\lst@Key{tab}{\kern.06em\hbox{\vrule\@height.3ex}%
-              \hrulefill\hbox{\vrule\@height.3ex}}
-    {\def\lst@tab{#1}}
-\def\lst@ProcessTabulator{%
-    \lst@XPrintToken \lst@whitespacetrue
-    \global\advance\lst@column -\lst@pos
-    \@whilenum \lst@pos<\@ne \do
-        {\global\advance\lst@pos\lst@tabsize}%
-    \lst@length\lst@pos
-    \lst@PreGotoTabStop}
-\def\lst@PreGotoTabStop{%
-    \lst@ifshowtabs
-        \lst@TrackNewLines
-        \setbox\@tempboxa\hbox to\lst@length\lst@width
-            {{\lst@currstyle{\hss\lst@tab}}}%
-        \lst@CalcLostSpaceAndOutput
-    \else
-        \lst@ifkeepspaces
-%            \@tempcnta\lst@length \lst@length\z@
-            \@tempcnta\lst@length
-%            \@whilenum \@tempcnta>\z@ \do
-%                {
-%                  \lst@AppendOther\lst@outputspace
-%\the\lst@column
-%\the\lst@colposn/\the\lst@length/\the\lst@column/\the\numexpr ( \lst@column + \lst@tabsize )
-\the\lst@currlwidth
-		\ifnum\lst@colposn=\z@
-                \ifnum\lst@length=\lst@tabsize
-                \makebox[\the\numexpr ( \lst@tabsize ) * 10pt]{}
-                \else
-                \makebox[\the\numexpr ( \lst@length ) * 5pt]{}
-                \fi
-                \else
-                \makebox[\the\numexpr ( \lst@length ) * 5pt]{}
-                \fi
-                   \advance\lst@column\lst@length
-%                  \advance\@tempcnta\m@ne
-%                }%
-            \lst@OutputOther
-        \else
-            \lst@GotoTabStop
-        \fi
-    \fi
-    \lst@length\z@ \global\lst@pos\z@}
-\def\lst@outputspace{\ }
-\def\lst@visiblespace{\lst@ttfamily{\char32}\textvisiblespace}
-\lst@Key{showspaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifshowspaces}
-\lst@Key{keepspaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifkeepspaces}
-\lst@AddToHook{Init}
-    {\lst@ifshowspaces
-         \let\lst@outputspace\lst@visiblespace
-         \lst@keepspacestrue
-     \fi}
-\def\lst@keepspacestrue{\let\lst@ifkeepspaces\iftrue}
-\def\lst@ProcessSpace{%
-    \lst@ifkeepspaces
-        \lst@PrintToken
-        \lst@whitespacetrue
-        \lst@AppendOther\lst@outputspace
-        \lst@PrintToken
-    \else \ifnum\lst@newlines=\z@
-        \lst@AppendSpecialSpace
-    \else \ifnum\lst@length=\z@
-            \global\advance\lst@lostspace\lst@width
-            \global\advance\lst@pos\m@ne
-            \lst@whitespacetrue
-        \else
-            \lst@AppendSpecialSpace
-        \fi
-    \fi \fi}
-\def\lst@AppendSpecialSpace{%
-    \lst@ifwhitespace
-        \lst@PrintToken
-        \global\advance\lst@lostspace\lst@width
-        \global\advance\lst@pos\m@ne
-        \lst@gobbledwhitespacetrue
-    \else
-        \lst@PrintToken
-        \lst@whitespacetrue
-        \lst@AppendOther\lst@outputspace
-        \lst@PrintToken
-    \fi}
-\lst@Key{formfeed}{\bigbreak}{\def\lst@formfeed{#1}}
-\def\lst@ProcessFormFeed{%
-    \lst@XPrintToken
-    \ifnum\lst@newlines=\z@
-        \lst@EOLUpdate \lsthk@InitVarsBOL
-    \fi
-    \lst@formfeed
-    \lst@whitespacetrue}
-\def\lst@Def#1{\lccode`\~=#1\lowercase{\def~}}
-\def\lst@Let#1{\lccode`\~=#1\lowercase{\let~}}
-\lst@AddToAtTop{\try@load@fontshape}{\def\space{ }}
-\def\lst@SelectStdCharTable{%
-    \lst@Def{9}{\lst@ProcessTabulator}%
-    \lst@Def{12}{\lst@ProcessFormFeed}%
-    \lst@Def{32}{\lst@ProcessSpace}}
-\def\lst@CCPut#1#2{%
-    \ifnum#2=\z@
-        \expandafter\@gobbletwo
-    \else
-        \lccode`\~=#2\lccode`\/=#2\lowercase{\lst@CCPut@~{#1/}}%
-    \fi
-    \lst@CCPut#1}
-\def\lst@CCPut@#1#2{\lst@lAddTo\lst@SelectStdCharTable{\def#1{#2}}}
-\lst@CCPut \lst@ProcessOther
-    {"21}{"22}{"28}{"29}{"2B}{"2C}{"2E}{"2F}
-    {"3A}{"3B}{"3D}{"3F}{"5B}{"5D}
-    \z@
-\lst@CCPut \lst@ProcessDigit
-    {"30}{"31}{"32}{"33}{"34}{"35}{"36}{"37}{"38}{"39}
-    \z@
-\lst@CCPut \lst@ProcessLetter
-    {"40}{"41}{"42}{"43}{"44}{"45}{"46}{"47}
-    {"48}{"49}{"4A}{"4B}{"4C}{"4D}{"4E}{"4F}
-    {"50}{"51}{"52}{"53}{"54}{"55}{"56}{"57}
-    {"58}{"59}{"5A}
-         {"61}{"62}{"63}{"64}{"65}{"66}{"67}
-    {"68}{"69}{"6A}{"6B}{"6C}{"6D}{"6E}{"6F}
-    {"70}{"71}{"72}{"73}{"74}{"75}{"76}{"77}
-    {"78}{"79}{"7A}
-    \z@
-\def\lst@CCPutMacro#1#2#3{%
-    \ifnum#2=\z@ \else
-        \begingroup\lccode`\~=#2\relax \lccode`\/=#2\relax
-        \lowercase{\endgroup\expandafter\lst@CCPutMacro@
-            \csname\@lst @um/\expandafter\endcsname
-            \csname\@lst @um/@\endcsname /~}#1{#3}%
-        \expandafter\lst@CCPutMacro
-    \fi}
-\def\lst@CCPutMacro@#1#2#3#4#5#6{%
-    \lst@lAddTo\lst@SelectStdCharTable{\def#4{#5#1}}%
-    \def#1{\lst@UM#3}%
-    \def#2{#6}}
-\def\lst@UM#1{\csname\@lst @um#1@\endcsname}
-\lst@CCPutMacro
-    \lst@ProcessOther {"23}\#
-    \lst@ProcessLetter{"24}\textdollar
-    \lst@ProcessOther {"25}\%
-    \lst@ProcessOther {"26}\&
-    \lst@ProcessOther {"27}{\lst@ifupquote \textquotesingle
-                                     \else \char39\relax \fi}
-    \lst@ProcessOther {"2A}{\lst@ttfamily*\textasteriskcentered}
-    \lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{$-$}}
-    \lst@ProcessOther {"3C}{\lst@ttfamily<\textless}
-    \lst@ProcessOther {"3E}{\lst@ttfamily>\textgreater}
-    \lst@ProcessOther {"5C}{\lst@ttfamily{\char92}\textbackslash}
-    \lst@ProcessOther {"5E}\textasciicircum
-    \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}\textunderscore}
-    \lst@ProcessOther {"60}{\lst@ifupquote \textasciigrave
-                                     \else \char96\relax \fi}
-    \lst@ProcessOther {"7B}{\lst@ttfamily{\char123}\textbraceleft}
-    \lst@ProcessOther {"7C}{\lst@ttfamily|\textbar}
-    \lst@ProcessOther {"7D}{\lst@ttfamily{\char125}\textbraceright}
-    \lst@ProcessOther {"7E}\textasciitilde
-    \lst@ProcessOther {"7F}-
-    \@empty\z@\@empty
-\def\lst@ttfamily#1#2{\ifx\f@family\ttdefault#1\relax\else#2\fi}
-\lst@AddToHook{Init}{\edef\ttdefault{\ttdefault}}
-\lst@Key{upquote}{false}[t]{\lstKV@SetIf{#1}\lst@ifupquote
-    \lst@ifupquote
-       \@ifundefined{textasciigrave}%
-          {\let\KV@lst@upquote\@gobble
-           \lstKV@SetIf f\lst@ifupquote \@gobble\fi
-           \PackageError{Listings}{Option `upquote' requires `textcomp'
-            package.\MessageBreak The option has been disabled}%
-          {Add \string\usepackage{textcomp} to your preamble.}}%
-          {}%
-    \fi}
-\AtBeginDocument{%
-  \@ifpackageloaded{upquote}{\RequirePackage{textcomp}%
-                             \lstset{upquote}}{}%
-  \@ifpackageloaded{upquote2}{\lstset{upquote}}{}}
-\def\lst@activecharstrue{\let\lst@ifactivechars\iftrue}
-\def\lst@activecharsfalse{\let\lst@ifactivechars\iffalse}
-\lst@activecharstrue
-\def\lst@SelectCharTable{%
-    \lst@SelectStdCharTable
-    \lst@ifactivechars
-        \catcode9\active \catcode12\active \catcode13\active
-        \@tempcnta=32\relax
-        \@whilenum\@tempcnta<128\do
-            {\catcode\@tempcnta\active\advance\@tempcnta\@ne}%
-    \fi
-    \lst@ifec \lst@DefEC \fi
-    \let\do\lst@do@noligs \verbatim@nolig@list
-    \lsthk@SelectCharTable
-    \lst@DeveloperSCT
-\lst@DefRange
-    \ifx\lst@Backslash\relax\else
-        \lst@LetSaveDef{"5C}\lsts@backslash\lst@Backslash
-    \fi}
-\lst@Key{SelectCharTable}{}{\def\lst@DeveloperSCT{#1}}
-\lst@Key{MoreSelectCharTable}\relax{\lst@lAddTo\lst@DeveloperSCT{#1}}
-\lst@AddToHook{SetLanguage}{\let\lst@DeveloperSCT\@empty}
-\def\lst@do@noligs#1{%
-    \begingroup \lccode`\~=`#1\lowercase{\endgroup
-    \lst@do@noligs@~}}
-\def\lst@do@noligs@#1{%
-    \expandafter\expandafter\expandafter\def
-    \expandafter\expandafter\expandafter#1%
-    \expandafter\expandafter\expandafter{\expandafter\lst@NoLig#1}}
-\def\lst@NoLig{\advance\lst@length\m@ne \lst@Append\lst@nolig}
-\def\lst@nolig{\lst@UM\@empty}%
-\@namedef{\@lst @um@}{\leavevmode\kern\z@}
-\def\lst@SaveOutputDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup
-    \def\lst@temp##1\def~##2##3\relax}{%
-        \global\expandafter\let\expandafter#2\@gobble##2\relax}%
-    \expandafter\lst@temp\lst@SelectStdCharTable\relax}
-\lst@SaveOutputDef{"5C}\lstum@backslash
-\lst@Key{extendedchars}{true}[t]{\lstKV@SetIf{#1}\lst@ifec}
-\def\lst@DefEC{%
-    \lst@CCECUse \lst@ProcessLetter
-      ^^80^^81^^82^^83^^84^^85^^86^^87^^88^^89^^8a^^8b^^8c^^8d^^8e^^8f%
-      ^^90^^91^^92^^93^^94^^95^^96^^97^^98^^99^^9a^^9b^^9c^^9d^^9e^^9f%
-      ^^a0^^a1^^a2^^a3^^a4^^a5^^a6^^a7^^a8^^a9^^aa^^ab^^ac^^ad^^ae^^af%
-      ^^b0^^b1^^b2^^b3^^b4^^b5^^b6^^b7^^b8^^b9^^ba^^bb^^bc^^bd^^be^^bf%
-      ^^c0^^c1^^c2^^c3^^c4^^c5^^c6^^c7^^c8^^c9^^ca^^cb^^cc^^cd^^ce^^cf%
-      ^^d0^^d1^^d2^^d3^^d4^^d5^^d6^^d7^^d8^^d9^^da^^db^^dc^^dd^^de^^df%
-      ^^e0^^e1^^e2^^e3^^e4^^e5^^e6^^e7^^e8^^e9^^ea^^eb^^ec^^ed^^ee^^ef%
-      ^^f0^^f1^^f2^^f3^^f4^^f5^^f6^^f7^^f8^^f9^^fa^^fb^^fc^^fd^^fe^^ff%
-      ^^00}
-\def\lst@CCECUse#1#2{%
-    \ifnum`#2=\z@
-        \expandafter\@gobbletwo
-    \else
-        \ifnum\catcode`#2=\active
-            \lccode`\~=`#2\lccode`\/=`#2\lowercase{\lst@CCECUse@#1~/}%
-        \else
-            \lst@ifactivechars \catcode`#2=\active \fi
-            \lccode`\~=`#2\lccode`\/=`#2\lowercase{\def~{#1/}}%
-        \fi
-    \fi
-    \lst@CCECUse#1}
-\def\lst@CCECUse@#1#2#3{%
-    \expandafter\def\csname\@lst @EC#3\endcsname{\lst@UM#3}%
-    \expandafter\let\csname\@lst @um#3@\endcsname #2%
-    \edef#2{\noexpand#1%
-            \expandafter\noexpand\csname\@lst @EC#3\endcsname}}
-\lst@AddToHook{Init}
-    {\let\lsts@nfss@catcodes\nfss@catcodes
-     \let\nfss@catcodes\lst@nfss@catcodes}
-\def\lst@nfss@catcodes{%
-    \lst@makeletter
-        ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\relax
-    \@makeother (\@makeother )\@makeother ,\@makeother :\@makeother\&%
-    \@makeother 0\@makeother 1\@makeother 2\@makeother 3\@makeother 4%
-    \@makeother 5\@makeother 6\@makeother 7\@makeother 8\@makeother 9%
-    \@makeother =\lsts@nfss@catcodes}
-\def\lst@makeletter#1{%
-    \ifx\relax#1\else\catcode`#111\relax \expandafter\lst@makeletter\fi}
-\lst@Key{useoutput}{2}{\edef\lst@useoutput{\ifcase0#1 0\or 1\else 2\fi}}
-\lst@AddToHook{Init}
-{\edef\lst@OrgOutput{\the\output}%
-\ifcase\lst@useoutput\relax
-\or
- \output{\global\setbox\lst@gtempboxa\box\@cclv
-         \expandafter\egroup
-         \lst@SaveToken
-     \lst@InterruptModes
-     \setbox\@cclv\box\lst@gtempboxa
-     \bgroup\lst@OrgOutput\egroup
-     \bgroup
-     \aftergroup\pagegoal\aftergroup\vsize
-     \aftergroup\lst@ReenterModes\aftergroup\lst@RestoreToken}%
-\else
- \output{\lst@RestoreOrigCatcodes
-         \lst@ifec \lst@RestoreOrigExtendedCatcodes \fi
-         \lst@OrgOutput}%
-\fi}
-\def\lst@GetChars#1#2#3{%
-    \let#1\@empty
-    \@tempcnta#2\relax \@tempcntb#3\relax
-    \loop \ifnum\@tempcnta<\@tempcntb\relax
-        \lst@lExtend#1{\expandafter\catcode\the\@tempcnta=}%
-        \lst@lExtend#1{\the\catcode\@tempcnta\relax}%
-        \ifnum\the\catcode\@tempcnta=\active
-            \begingroup\lccode`\~=\@tempcnta
-            \lowercase{\endgroup
-            \lst@lExtend#1{\expandafter\let\expandafter~\csname
-                                    lstecs@\the\@tempcnta\endcsname}%
-            \expandafter\let\csname lstecs@\the\@tempcnta\endcsname~}%
-        \fi
-        \advance\@tempcnta\@ne
-    \repeat}
-\begingroup \catcode12=\active\let^^L\@empty
-\gdef\lst@ScanChars{%
-  \let\lsts@ssL^^L%
-  \def^^L{\par}%
-    \lst@GetChars\lst@RestoreOrigCatcodes\@ne {128}%
-  \let^^L\lsts@ssL
-    \lst@GetChars\lst@RestoreOrigExtendedCatcodes{128}{256}}
-\endgroup
-\lst@Key{rescanchars}\relax{\lst@ScanChars}
-\AtBeginDocument{\lst@ScanChars}
-\lst@Key{alsoletter}\relax{%
-    \lst@DoAlso{#1}\lst@alsoletter\lst@ProcessLetter}
-\lst@Key{alsodigit}\relax{%
-    \lst@DoAlso{#1}\lst@alsodigit\lst@ProcessDigit}
-\lst@Key{alsoother}\relax{%
-    \lst@DoAlso{#1}\lst@alsoother\lst@ProcessOther}
-\lst@AddToHook{SelectCharTable}
-    {\lst@alsoother \lst@alsodigit \lst@alsoletter}
-\lst@AddToHookExe{SetLanguage}% init
-    {\let\lst@alsoletter\@empty
-     \let\lst@alsodigit\@empty
-     \let\lst@alsoother\@empty}
-\def\lst@DoAlso#1#2#3{%
-    \lst@DefOther\lst@arg{#1}\let#2\@empty
-    \expandafter\lst@DoAlso@\expandafter#2\expandafter#3\lst@arg\relax}
-\def\lst@DoAlso@#1#2#3{%
-    \ifx\relax#3\expandafter\@gobblethree \else
-        \begingroup \lccode`\~=`#3\relax \lowercase{\endgroup
-        \def\lst@temp##1\def~##2##3\relax{%
-            \edef\lst@arg{\def\noexpand~{\noexpand#2\expandafter
-                                         \noexpand\@gobble##2}}}}%
-        \expandafter\lst@temp\lst@SelectStdCharTable\relax
-        \lst@lExtend#1{\lst@arg}%
-    \fi
-    \lst@DoAlso@#1#2}
-\def\lst@SaveDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~}}
-\def\lst@DefSaveDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~\def~}}
-\def\lst@LetSaveDef#1#2{%
-    \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~\let~}}
-\def\lst@CDef#1{\lst@CDef@#1}
-\def\lst@CDef@#1#2#3#4{\lst@CDefIt#1{#2}{#3}{#4#2#3}#4}
-\def\lst@CDefX#1{\lst@CDefX@#1}
-\def\lst@CDefX@#1#2#3{\lst@CDefIt#1{#2}{#3}{}}
-\def\lst@CDefIt#1#2#3#4#5#6#7#8{%
-    \ifx\@empty#2\@empty
-        \def#1{#6\def\lst@next{#7#4#8}\lst@next}%
-    \else \ifx\@empty#3\@empty
-        \def#1##1{%
-            #6%
-            \ifx##1#2\def\lst@next{#7#4#8}\else
-                     \def\lst@next{#5##1}\fi
-            \lst@next}%
-    \else
-        \def#1{%
-            #6%
-            \lst@IfNextCharsArg{#2#3}{#7#4#8}%
-                                     {\expandafter#5\lst@eaten}}%
-    \fi \fi}
-\def\lst@CArgX#1#2\relax{%
-    \lst@DefActive\lst@arg{#1#2}%
-    \expandafter\lst@CArg\lst@arg\relax}
-\def\lst@CArg#1#2\relax{%
-    \lccode`\/=`#1\lowercase{\def\lst@temp{/}}%
-    \lst@GetFreeMacro{lst@c\lst@temp}%
-    \expandafter\lst@CArg@\lst@freemacro#1#2\@empty\@empty\relax}
-\def\lst@CArg@#1#2#3#4\@empty#5\relax#6{%
-    \let#1#2%
-    \ifx\@empty#3\@empty
-        \def\lst@next{#6{#2{}{}}}%
-    \else
-        \def\lst@next{#6{#2#3{#4}}}%
-    \fi
-    \lst@next #1}
-\def\lst@CArgEmpty#1\@empty{#1}
-\lst@Key{excludedelims}\relax
-    {\lsthk@ExcludeDelims \lst@NormedDef\lst@temp{#1}%
-     \expandafter\lst@for\lst@temp\do
-     {\expandafter\let\csname\@lst @ifex##1\endcsname\iftrue}}
-\def\lst@DelimPrint#1#2{%
-    #1%
-      \begingroup
-        \lst@mode\lst@nomode \lst@modetrue
-        #2\lst@XPrintToken
-      \endgroup
-      \lst@ResetToken
-    \fi}
-\def\lst@DelimOpen#1#2#3#4#5#6\@empty{%
-    \lst@TrackNewLines \lst@XPrintToken
-    \lst@DelimPrint#1{#6}%
-    \lst@EnterMode{#4}{\def\lst@currstyle#5}%
-    \lst@DelimPrint{#1#2}{#6}%
-    #3}
-\def\lst@DelimClose#1#2#3\@empty{%
-    \lst@TrackNewLines \lst@XPrintToken
-    \lst@DelimPrint{#1#2}{#3}%
-    \lst@LeaveMode
-    \lst@DelimPrint{#1}{#3}}
-\def\lst@BeginDelim{\lst@DelimOpen\iffalse\else{}}
-\def\lst@EndDelim{\lst@DelimClose\iffalse\else}
-\def\lst@BeginIDelim{\lst@DelimOpen\iffalse{}{}}
-\def\lst@EndIDelim{\lst@DelimClose\iffalse{}}
-\lst@AddToHook{SelectCharTable}{\lst@DefDelims}
-\lst@AddToHookExe{SetLanguage}{\let\lst@DefDelims\@empty}
-\def\lst@Delim#1{%
-    \lst@false \let\lst@cumulative\@empty \let\lst@arg\@empty
-    \@ifstar{\@ifstar{\lst@Delim@{#1}}%
-                     {\let\lst@cumulative\relax
-                      \lst@Delim@{#1}}}%
-            {\lst@true\lst@Delim@{#1}}}
-\def\lst@Delim@#1[#2]{%
-    \gdef\lst@delimtype{#2}%
-    \@ifnextchar[\lst@Delim@sty
-                 {\lst@Delim@sty[#1]}}
-\def\lst@Delim@sty[#1]{%
-    \def\lst@delimstyle{#1}%
-    \ifx\@empty#1\@empty\else
-        \lst@Delim@sty@ #1\@nil
-    \fi
-    \@ifnextchar[\lst@Delim@option
-                 \lst@Delim@delim}
-\def\lst@Delim@option[#1]{\def\lst@arg{[#1]}\lst@Delim@delim}
-\def\lst@Delim@sty@#1#2\@nil{%
-    \if\relax\noexpand#1\else
-        \edef\lst@delimstyle{\expandafter\noexpand
-                             \csname\@lst @\lst@delimstyle\endcsname}%
-    \fi}
-\def\lst@Delim@delim#1\relax#2#3#4#5#6#7#8{%
-    \ifx #4\@empty \lst@Delim@delall{#2}\fi
-    \ifx\@empty#1\@empty
-        \ifx #4\@nil
-            \@ifundefined{\@lst @#2DM@\lst@delimtype}%
-                {\lst@Delim@delall{#2@\lst@delimtype}}%
-                {\lst@Delim@delall{#2DM@\lst@delimtype}}%
-        \fi
-    \else
-        \expandafter\lst@Delim@args\expandafter
-            {\lst@delimtype}{#1}{#5}#6{#7}{#8}#4%
-        \let\lst@delim\@empty
-        \expandafter\lst@IfOneOf\lst@delimtype\relax#3%
-        {\@ifundefined{\@lst @#2DM@\lst@delimtype}%
-             {\lst@lExtend\lst@delim{\csname\@lst @#2@\lst@delimtype
-                                     \expandafter\endcsname\lst@arg}}%
-             {\lst@lExtend\lst@delim{\expandafter\lst@UseDynamicMode
-                                     \csname\@lst @#2DM@\lst@delimtype
-                                     \expandafter\endcsname\lst@arg}}%
-         \ifx #4\@nil
-             \let\lst@temp\lst@DefDelims \let\lst@DefDelims\@empty
-             \expandafter\lst@Delim@del\lst@temp\@empty\@nil\@nil\@nil
-         \else
-             \lst@lExtend\lst@DefDelims\lst@delim
-         \fi}%
-        {\PackageError{Listings}{Illegal type `\lst@delimtype'}%
-                                {#2 types are #3.}}%
-     \fi}
-\def\lst@Delim@args#1#2#3#4#5#6#7{%
-    \begingroup
-    \lst@false \let\lst@next\lst@XConvert
-    \@ifnextchar #4{\xdef\lst@delimtype{\expandafter\@gobble
-                                        \lst@delimtype}%
-                    #5\lst@next#2\@nil
-                    \lst@lAddTo\lst@arg{\@empty#6}%
-                    \lst@GobbleNil}%
-                   {\lst@next#2\@nil
-                    \lst@lAddTo\lst@arg{\@empty#3}%
-                    \lst@GobbleNil}%
-                 #1\@nil
-    \global\let\@gtempa\lst@arg
-    \endgroup
-    \let\lst@arg\@gtempa
-    \ifx #7\@nil\else
-        \expandafter\lst@Delim@args@\expandafter{\lst@delimstyle}%
-    \fi}
-\def\lst@Delim@args@#1{%
-    \lst@if
-        \lst@lAddTo\lst@arg{{{#1}\lst@modetrue}}%
-    \else
-        \ifx\lst@cumulative\@empty
-            \lst@lAddTo\lst@arg{{{}#1}}%
-        \else
-            \lst@lAddTo\lst@arg{{{#1}}}%
-        \fi
-    \fi}
-\def\lst@Delim@del#1\@empty#2#3#4{%
-    \ifx #2\@nil\else
-        \def\lst@temp{#1\@empty#2#3}%
-        \ifx\lst@temp\lst@delim\else
-            \lst@lAddTo\lst@DefDelims{#1\@empty#2#3{#4}}%
-        \fi
-        \expandafter\lst@Delim@del
-    \fi}
-\def\lst@Delim@delall#1{%
-    \begingroup
-    \edef\lst@delim{\expandafter\string\csname\@lst @#1\endcsname}%
-    \lst@false \global\let\@gtempa\@empty
-    \expandafter\lst@Delim@delall@\lst@DefDelims\@empty
-    \endgroup
-    \let\lst@DefDelims\@gtempa}
-\def\lst@Delim@delall@#1{%
-    \ifx #1\@empty\else
-        \ifx #1\lst@UseDynamicMode
-            \lst@true
-            \let\lst@next\lst@Delim@delall@do
-        \else
-            \def\lst@next{\lst@Delim@delall@do#1}%
-        \fi
-        \expandafter\lst@next
-    \fi}
-\def\lst@Delim@delall@do#1#2\@empty#3#4#5{%
-    \expandafter\lst@IfSubstring\expandafter{\lst@delim}{\string#1}%
-      {}%
-      {\lst@if \lst@AddTo\@gtempa\lst@UseDynamicMode \fi
-       \lst@AddTo\@gtempa{#1#2\@empty#3#4{#5}}}%
-    \lst@false \lst@Delim@delall@}
-\gdef\lst@DefDelimB#1#2#3#4#5#6#7#8{%
-    \lst@CDef{#1}#2%
-        {#3}%
-        {\let\lst@bnext\lst@CArgEmpty
-         \lst@ifmode #4\else
-             #5%
-             \def\lst@bnext{#6{#7}{#8}}%
-         \fi
-         \lst@bnext}%
-        \@empty}
-\gdef\lst@DefDelimE#1#2#3#4#5#6#7{%
-    \lst@CDef{#1}#2%
-        {#3}%
-        {\let\lst@enext\lst@CArgEmpty
-         \ifnum #7=\lst@mode%
-             #4%
-             \let\lst@enext#6%
-         \else
-             #5%
-         \fi
-         \lst@enext}%
-        \@empty}
-\lst@AddToHook{Init}{\let\lst@bnext\relax \let\lst@enext\relax}
-\gdef\lst@DefDelimBE#1#2#3#4#5#6#7#8#9{%
-    \lst@CDef{#1}#2%
-        {#3}%
-        {\let\lst@bnext\lst@CArgEmpty
-         \ifnum #7=\lst@mode
-             #4%
-             \let\lst@bnext#9%
-         \else
-             \lst@ifmode\else
-                 #5%
-                 \def\lst@bnext{#6{#7}{#8}}%
-             \fi
-         \fi
-         \lst@bnext}%
-        \@empty}
-\gdef\lst@delimtypes{s,l}
-\gdef\lst@DelimKey#1#2{%
-    \lst@Delim{}#2\relax
-        {Delim}\lst@delimtypes #1%
-                {\lst@BeginDelim\lst@EndDelim}
-        i\@empty{\lst@BeginIDelim\lst@EndIDelim}}
-\lst@Key{delim}\relax{\lst@DelimKey\@empty{#1}}
-\lst@Key{moredelim}\relax{\lst@DelimKey\relax{#1}}
-\lst@Key{deletedelim}\relax{\lst@DelimKey\@nil{#1}}
-\gdef\lst@DelimDM@l#1#2\@empty#3#4#5{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#3{#1}{#5\lst@Lmodetrue}}
-\gdef\lst@DelimDM@s#1#2#3\@empty#4#5#6{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#4{#1}{#6}%
-    \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}}
-\def\lst@ReplaceInput#1{\lst@CArgX #1\relax\lst@CDefX{}{}}
-\def\lst@Literatekey#1\@nil@{\let\lst@ifxliterate\lst@if
-                             \def\lst@literate{#1}}
-\lst@Key{literate}{}{\@ifstar{\lst@true \lst@Literatekey}
-                             {\lst@false\lst@Literatekey}#1\@nil@}
-\lst@AddToHook{SelectCharTable}
-    {\ifx\lst@literate\@empty\else
-         \expandafter\lst@Literate\lst@literate{}\relax\z@
-     \fi}
-\def\lst@Literate#1#2#3{%
-    \ifx\relax#2\@empty\else
-        \lst@CArgX #1\relax\lst@CDef
-            {}
-            {\let\lst@next\@empty
-             \lst@ifxliterate
-                \lst@ifmode \let\lst@next\lst@CArgEmpty \fi
-             \fi
-             \ifx\lst@next\@empty
-                 \ifx\lst@OutputBox\@gobble\else
-                   \lst@XPrintToken \let\lst@scanmode\lst@scan@m
-                   \lst@token{#2}\lst@length#3\relax
-                   \lst@XPrintToken
-                 \fi
-                 \let\lst@next\lst@CArgEmptyGobble
-             \fi
-             \lst@next}%
-            \@empty
-        \expandafter\lst@Literate
-    \fi}
-\def\lst@CArgEmptyGobble#1\@empty{}
-\def\lst@BeginDropInput#1{%
-    \lst@EnterMode{#1}%
-    {\lst@modetrue
-     \let\lst@OutputBox\@gobble
-     \let\lst@ifdropinput\iftrue
-     \let\lst@ProcessLetter\@gobble
-     \let\lst@ProcessDigit\@gobble
-     \let\lst@ProcessOther\@gobble
-     \let\lst@ProcessSpace\@empty
-     \let\lst@ProcessTabulator\@empty
-     \let\lst@ProcessFormFeed\@empty}}
-\let\lst@ifdropinput\iffalse % init
-\lst@Key{basicstyle}\relax{\def\lst@basicstyle{#1}}
-\lst@Key{inputencoding}\relax{\def\lst@inputenc{#1}}
-\lst@AddToHook{Init}
-    {\lst@basicstyle
-     \ifx\lst@inputenc\@empty\else
-         \@ifundefined{inputencoding}{}%
-            {\inputencoding\lst@inputenc}%
-     \fi}
-\lst@AddToHookExe{EmptyStyle}
-    {\let\lst@basicstyle\@empty
-     \let\lst@inputenc\@empty}
-\lst@Key{multicols}{}{\@tempcnta=0#1\relax\def\lst@multicols{#1}}
-\def\lst@parshape{\parshape\@ne \z@ \linewidth}
-\lst@AddToHookAtTop{EveryLine}{\lst@parshape}
-\lst@AddToHookAtTop{EndGroup}{\lst@parshape}
-\newcount\lst@lineno % \global
-\lst@AddToHook{InitVars}{\global\lst@lineno\@ne}
-\lst@Key{print}{true}[t]{\lstKV@SetIf{#1}\lst@ifprint}
-\lst@Key{firstline}\relax{\def\lst@firstline{#1\relax}}
-\lst@Key{lastline}\relax{\def\lst@lastline{#1\relax}}
-\lst@AddToHook{PreSet}
-    {\let\lst@firstline\@ne \def\lst@lastline{9999999\relax}}
-\lst@Key{linerange}\relax{\lstKV@OptArg[]{#1}{%
-    \def\lst@interrange{##1}\def\lst@linerange{##2,}}}
-\lst@Key{rangeprefix}\relax{\def\lst@rangebeginprefix{#1}%
-                            \def\lst@rangeendprefix{#1}}
-\lst@Key{rangesuffix}\relax{\def\lst@rangebeginsuffix{#1}%
-                            \def\lst@rangeendsuffix{#1}}
-\lst@Key{rangebeginprefix}{}{\def\lst@rangebeginprefix{#1}}
-\lst@Key{rangebeginsuffix}{}{\def\lst@rangebeginsuffix{#1}}
-\lst@Key{rangeendprefix}{}{\def\lst@rangeendprefix{#1}}
-\lst@Key{rangeendsuffix}{}{\def\lst@rangeendsuffix{#1}}
-\lst@Key{includerangemarker}{true}[t]{\lstKV@SetIf{#1}\lst@ifincluderangemarker}
-\lst@AddToHook{PreSet}{\def\lst@firstline{1\relax}%
-                       \let\lst@linerange\@empty}
-\lst@AddToHook{Init}
-{\ifx\lst@linerange\@empty
-     \edef\lst@linerange{{\lst@firstline}-{\lst@lastline},}%
- \fi
- \lst@GetLineInterval}%
-\def\lst@GetLineInterval{\expandafter\lst@GLI\lst@linerange\@nil}
-\def\lst@GLI#1,#2\@nil{\def\lst@linerange{#2}\lst@GLI@#1--\@nil}
-\def\lst@GLI@#1-#2-#3\@nil{%
-    \lst@IfNumber{#1}%
-    {\ifx\@empty#1\@empty
-         \let\lst@firstline\@ne
-     \else
-         \def\lst@firstline{#1\relax}%
-     \fi
-     \ifx\@empty#3\@empty
-         \def\lst@lastline{9999999\relax}%
-     \else
-         \ifx\@empty#2\@empty
-             \let\lst@lastline\lst@firstline
-         \else
-             \def\lst@lastline{#2\relax}%
-         \fi
-     \fi}%
-    {\def\lst@firstline{9999999\relax}%
-     \let\lst@lastline\lst@firstline
-     \let\lst@rangebegin\lst@rangebeginprefix
-     \lst@AddTo\lst@rangebegin{#1}\lst@Extend\lst@rangebegin\lst@rangebeginsuffix
-     \ifx\@empty#3\@empty
-         \let\lst@rangeend\lst@rangeendprefix
-         \lst@AddTo\lst@rangeend{#1}\lst@Extend\lst@rangeend\lst@rangeendsuffix
-     \else
-         \ifx\@empty#2\@empty
-             \let\lst@rangeend\@empty
-         \else
-             \let\lst@rangeend\lst@rangeendprefix
-             \lst@AddTo\lst@rangeend{#2}\lst@Extend\lst@rangeend\lst@rangeendsuffix
-         \fi
-     \fi
-     \global\def\lst@DefRange{\expandafter\lst@CArgX\lst@rangebegin\relax\lst@DefRangeB}%
-     \ifnum\lst@mode=\lst@Pmode \expandafter\lst@DefRange \fi}}
-\lst@AddToHookExe{DeInit}{\global\let\lst@DefRange\@empty}
-\def\lst@DefRangeB#1#2{\lst@DefRangeB@#1#2}
-\def\lst@DefRangeB@#1#2#3#4{%
-    \lst@CDef{#1{#2}{#3}}#4{}%
-    {\lst@ifincluderangemarker
-         \lst@LeaveMode
-         \let#1#4%
-         \lst@DefRangeEnd
-         \lst@InitLstNumber
-     \else
-         \@tempcnta\lst@lineno \advance\@tempcnta\@ne
-         \edef\lst@firstline{\the\@tempcnta\relax}%
-         \gdef\lst@OnceAtEOL{\let#1#4\lst@DefRangeEnd}%
-         \lst@InitLstNumber
-     \fi
- \global\let\lst@DefRange\lst@DefRangeEnd
-     \lst@CArgEmpty}%
-    \@empty}
-\def\lstpatch@labels{%
-\gdef\lst@SetFirstNumber{%
-    \ifx\lst@firstnumber\@undefined
-        \@tempcnta 0\csname\@lst no@\lst@intname\endcsname\relax
-        \ifnum\@tempcnta=\z@ \else
-            \lst@nololtrue
-            \advance\@tempcnta\lst@advancenumber
-            \edef\lst@firstnumber{\the\@tempcnta\relax}%
-        \fi
-    \fi}%
-}
-\def\lst@InitLstNumber{%
-     \global\c@lstnumber\lst@firstnumber
-     \global\advance\c@lstnumber\lst@advancenumber
-     \global\advance\c@lstnumber-\lst@advancelstnum
-     \ifx \lst@firstnumber\c@lstnumber
-         \global\advance\c@lstnumber-\lst@advancelstnum
-     \fi%
-     \lst@ifincluderangemarker\else%
-         \global\advance\c@lstnumber by 1%
-     \fi%
-     }
-\def\lst@DefRangeEnd{%
-    \ifx\lst@rangeend\@empty\else
-        \expandafter\lst@CArgX\lst@rangeend\relax\lst@DefRangeE
-    \fi}
-\def\lst@DefRangeE#1#2{\lst@DefRangeE@#1#2}
-\def\lst@DefRangeE@#1#2#3#4{%
-    \lst@CDef{#1#2{#3}}#4{}%
-    {\let#1#4%
-     \edef\lst@lastline{\the\lst@lineno\relax}%
-     \lst@DefRangeE@@}%
-    \@empty}
-\def\lst@DefRangeE@@#1\@empty{%
-    \lst@ifincluderangemarker
-        #1\lst@XPrintToken
-    \fi
-    \lst@LeaveModeToPmode
-    \lst@BeginDropInput{\lst@Pmode}}
-\def\lst@LeaveModeToPmode{%
-    \ifnum\lst@mode=\lst@Pmode
-        \expandafter\lsthk@EndGroup
-    \else
-        \expandafter\egroup\expandafter\lst@LeaveModeToPmode
-    \fi}
-\lst@AddToHook{EOL}{\lst@OnceAtEOL\global\let\lst@OnceAtEOL\@empty}
-\gdef\lst@OnceAtEOL{}% Init
-\def\lst@MSkipToFirst{%
-    \global\advance\lst@lineno\@ne
-    \ifnum \lst@lineno=\lst@firstline
-        \def\lst@next{\lst@LeaveMode \global\lst@newlines\z@
-        \lst@OnceAtEOL \global\let\lst@OnceAtEOL\@empty
-        \lst@InitLstNumber % Added to work with modified \lsthk@PreInit.
-        \lsthk@InitVarsBOL
-        \lst@BOLGobble}%
-        \expandafter\lst@next
-    \fi}
-\def\lst@SkipToFirst{%
-    \ifnum \lst@lineno<\lst@firstline
-        \def\lst@next{\lst@BeginDropInput\lst@Pmode
-        \lst@Let{13}\lst@MSkipToFirst
-        \lst@Let{10}\lst@MSkipToFirst}%
-        \expandafter\lst@next
-    \else
-        \expandafter\lst@BOLGobble
-    \fi}
-\def\lst@IfNumber#1{%
-    \ifx\@empty#1\@empty
-        \let\lst@next\@firstoftwo
-    \else
-        \lst@IfNumber@#1\@nil
-    \fi
-    \lst@next}
-\def\lst@IfNumber@#1#2\@nil{%
-    \let\lst@next\@secondoftwo
-    \ifnum`#1>47\relax \ifnum`#1>57\relax\else
-        \let\lst@next\@firstoftwo
-    \fi\fi}
-\lst@Key{nolol}{false}[t]{\lstKV@SetIf{#1}\lst@ifnolol}
-\def\lst@nololtrue{\let\lst@ifnolol\iftrue}
-\let\lst@ifnolol\iffalse % init
-\lst@Key{captionpos}{t}{\def\lst@captionpos{#1}}
-\lst@Key{abovecaptionskip}\smallskipamount{\def\lst@abovecaption{#1}}
-\lst@Key{belowcaptionskip}\smallskipamount{\def\lst@belowcaption{#1}}
-\lst@Key{label}\relax{\def\lst@label{#1}}
-\lst@Key{title}\relax{\def\lst@title{#1}\let\lst@caption\relax}
-\lst@Key{caption}\relax{\lstKV@OptArg[{#1}]{#1}%
-    {\def\lst@caption{##2}\def\lst@@caption{##1}}%
-     \let\lst@title\@empty}
-\lst@AddToHookExe{TextStyle}
-    {\let\lst@caption\@empty \let\lst@@caption\@empty
-     \let\lst@title\@empty \let\lst@label\@empty}
-\AtBeginDocument{
-  \@ifundefined{thechapter}{\let\lst@ifnumberbychapter\iffalse}{}
-  \lst@ifnumberbychapter
-      \newcounter{lstlisting}[chapter]
-      \gdef\thelstlisting%
-           {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@lstlisting}
-  \else
-      \newcounter{lstlisting}
-      \gdef\thelstlisting{\@arabic\c@lstlisting}
-  \fi}
-\lst@UserCommand\lstlistingname{Listing}
-\lst@Key{numberbychapter}{true}[t]{\lstKV@SetIf{#1}\lst@ifnumberbychapter}
-\@ifundefined{abovecaptionskip}
-{\newskip\abovecaptionskip
- \newskip\belowcaptionskip}{}
-\@ifundefined{@makecaption}
-{\long\def\@makecaption#1#2{%
-   \vskip\abovecaptionskip
-   \sbox\@tempboxa{#1: #2}%
-   \ifdim \wd\@tempboxa >\hsize
-     #1: #2\par
-   \else
-     \global \@minipagefalse
-     \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
-   \fi
-   \vskip\belowcaptionskip}%
-}{}
-\def\fnum@lstlisting{%
-  \lstlistingname
-  \ifx\lst@@caption\@empty\else~\thelstlisting\fi}%
-\def\lst@MakeCaption#1{%
-  \lst@ifdisplaystyle
-    \ifx #1t%
-        \ifx\lst@@caption\@empty\expandafter\lst@HRefStepCounter \else
-                                \expandafter\refstepcounter
-        \fi {lstlisting}%
-        \ifx\lst@label\@empty\else \label{\lst@label}\fi
-        \let\lst@arg\lst@intname \lst@ReplaceIn\lst@arg\lst@filenamerpl
-        \global\let\lst@name\lst@arg \global\let\lstname\lst@name
-        \lst@ifnolol\else
-            \ifx\lst@@caption\@empty
-                \ifx\lst@caption\@empty
-                    \ifx\lst@intname\@empty \else \def\lst@temp{ }%
-                    \ifx\lst@intname\lst@temp \else
-                        \addcontentsline{lol}{lstlisting}\lst@name
-                    \fi\fi
-                \fi
-            \else
-                \addcontentsline{lol}{lstlisting}%
-                    {\protect\numberline{\thelstlisting}\lst@@caption}%
-            \fi
-         \fi
-     \fi
-    \ifx\lst@caption\@empty\else
-        \lst@IfSubstring #1\lst@captionpos
-            {\begingroup \let\@@vskip\vskip
-             \def\vskip{\afterassignment\lst@vskip \@tempskipa}%
-             \def\lst@vskip{\nobreak\@@vskip\@tempskipa\nobreak}%
-             \par\@parboxrestore\normalsize\normalfont % \noindent (AS)
-             \ifx #1t\allowbreak \fi
-             \ifx\lst@title\@empty
-                 \lst@makecaption\fnum@lstlisting{\ignorespaces \lst@caption}
-             \else
-                 \lst@maketitle\lst@title % (AS)
-             \fi
-             \ifx #1b\allowbreak \fi
-             \endgroup}{}%
-    \fi
-  \fi}
-\def\lst@makecaption{\@makecaption}
-\def\lst@maketitle{\@makecaption\lst@title@dropdelim}
-\def\lst@title@dropdelim#1{\ignorespaces}
-\AtBeginDocument{%
-\@ifundefined{captionlabelfalse}{}{%
-  \def\lst@maketitle{\captionlabelfalse\@makecaption\@empty}}%
-\@ifundefined{caption@startrue}{}{%
-  \def\lst@maketitle{\caption@startrue\@makecaption\@empty}}%
-}
-\def\lst@HRefStepCounter#1{%
-    \begingroup
-    \c@lstlisting\lst@neglisting
-    \advance\c@lstlisting\m@ne \xdef\lst@neglisting{\the\c@lstlisting}%
-    \ifx\hyper@refstepcounter\@undefined\else
-        \hyper@refstepcounter{#1}%
-    \fi
-    \endgroup}
-\gdef\lst@neglisting{\z@}% init
-\lst@Key{boxpos}{c}{\def\lst@boxpos{#1}}
-\def\lst@boxtrue{\let\lst@ifbox\iftrue}
-\let\lst@ifbox\iffalse
-\lst@Key{float}\relax[\lst@floatplacement]{%
-    \lstKV@SwitchCases{#1}%
-    {true&\let\lst@floatdefault\lst@floatplacement
-          \let\lst@float\lst@floatdefault\\%
-     false&\let\lst@floatdefault\relax
-           \let\lst@float\lst@floatdefault
-    }{\def\lst@next{\@ifstar{\let\lst@beginfloat\@dblfloat
-                             \let\lst@endfloat\end@dblfloat
-                             \lst@KFloat}%
-                            {\let\lst@beginfloat\@float
-                             \let\lst@endfloat\end@float
-                             \lst@KFloat}}
-      \edef\lst@float{#1}%
-      \expandafter\lst@next\lst@float\relax}}
-\def\lst@KFloat#1\relax{%
-    \ifx\@empty#1\@empty
-        \let\lst@float\lst@floatplacement
-    \else
-        \def\lst@float{#1}%
-    \fi}
-\lst@Key{floatplacement}{tbp}{\def\lst@floatplacement{#1}}
-\lst@AddToHook{PreSet}{\let\lst@float\lst@floatdefault}
-\lst@AddToHook{TextStyle}{\let\lst@float\relax}
-\let\lst@floatdefault\relax % init
-\lst@AddToHook{DeInit}{%
-    \ifx\lst@float\relax
-        \global\let\lst@doendpe\@doendpe
-    \else
-        \global\let\lst@doendpe\@empty
-    \fi}
-\AtBeginDocument{%
-\@ifundefined{c@float@type}%
-    {\edef\ftype@lstlisting{\ifx\c@figure\@undefined 1\else 4\fi}}
-    {\edef\ftype@lstlisting{\the\c@float@type}%
-     \addtocounter{float@type}{\value{float@type}}}%
-}
-\lst@Key{aboveskip}\medskipamount{\def\lst@aboveskip{#1}}
-\lst@Key{belowskip}\medskipamount{\def\lst@belowskip{#1}}
-\lst@AddToHook{TextStyle}
-    {\let\lst@aboveskip\z@ \let\lst@belowskip\z@}
-\lst@Key{everydisplay}{}{\def\lst@EveryDisplay{#1}}
-\lst@AddToHook{TextStyle}{\let\lst@ifdisplaystyle\iffalse}
-\lst@AddToHook{DisplayStyle}{\let\lst@ifdisplaystyle\iftrue}
-\let\lst@ifdisplaystyle\iffalse
-\def\lst@Init#1{%
-    \begingroup
-    \ifx\lst@float\relax\else
-        \edef\@tempa{\noexpand\lst@beginfloat{lstlisting}[\lst@float]}%
-        \expandafter\@tempa
-    \fi
-    \ifx\lst@multicols\@empty\else
-        \edef\lst@next{\noexpand\multicols{\lst@multicols}}
-        \expandafter\lst@next
-    \fi
-    \ifhmode\ifinner \lst@boxtrue \fi\fi
-    \lst@ifbox
-        \lsthk@BoxUnsafe
-        \hbox to\z@\bgroup
-             $\if t\lst@boxpos \vtop
-        \else \if b\lst@boxpos \vbox
-        \else \vcenter \fi\fi
-        \bgroup \par\noindent
-    \else
-        \lst@ifdisplaystyle
-            \lst@EveryDisplay
-            \par\penalty-50\relax
-            \vspace\lst@aboveskip
-        \fi
-    \fi
-    \normalbaselines
-    \abovecaptionskip\lst@abovecaption\relax
-    \belowcaptionskip\lst@belowcaption\relax
-    \lst@MakeCaption t%
-    \lsthk@PreInit \lsthk@Init
-    \lst@ifdisplaystyle
-        \global\let\lst@ltxlabel\@empty
-        \if@inlabel
-            \lst@ifresetmargins
-                \leavevmode
-            \else
-                \xdef\lst@ltxlabel{\the\everypar}%
-                \lst@AddTo\lst@ltxlabel{%
-                    \global\let\lst@ltxlabel\@empty
-                    \everypar{\lsthk@EveryLine\lsthk@EveryPar}}%
-            \fi
-        \fi
-        \everypar\expandafter{\lst@ltxlabel
-                              \lsthk@EveryLine\lsthk@EveryPar}%
-    \else
-        \everypar{}\let\lst@NewLine\@empty
-    \fi
-    \lsthk@InitVars \lsthk@InitVarsBOL
-    \lst@Let{13}\lst@MProcessListing
-    \let\lst@Backslash#1%
-    \lst@EnterMode{\lst@Pmode}{\lst@SelectCharTable}%
-    \lst@InitFinalize}
-\let\lst@InitFinalize\@empty % init
-\lst@AddToHook{PreInit}
-    {\rightskip\z@ \leftskip\z@ \parfillskip=\z@ plus 1fil
-     \let\par\@@par}
-\lst@AddToHook{EveryLine}{}% init
-\lst@AddToHook{EveryPar}{}% init
-\lst@Key{showlines}f[t]{\lstKV@SetIf{#1}\lst@ifshowlines}
-\def\lst@DeInit{%
-    \lst@XPrintToken \lst@EOLUpdate
-    \global\advance\lst@newlines\m@ne
-    \lst@ifshowlines
-        \lst@DoNewLines
-    \else
-        \setbox\@tempboxa\vbox{\lst@DoNewLines}%
-    \fi
-    \lst@ifdisplaystyle \par\removelastskip \fi
-    \lsthk@ExitVars\everypar{}\lsthk@DeInit\normalbaselines\normalcolor
-    \lst@MakeCaption b%
-    \lst@ifbox
-        \egroup $\hss \egroup
-        \vrule\@width\lst@maxwidth\@height\z@\@depth\z@
-    \else
-        \lst@ifdisplaystyle
-            \par\penalty-50\vspace\lst@belowskip
-        \fi
-    \fi
-    \ifx\lst@multicols\@empty\else
-        \def\lst@next{\global\let\@checkend\@gobble
-                      \endmulticols
-                      \global\let\@checkend\lst@@checkend}
-        \expandafter\lst@next
-    \fi
-    \ifx\lst@float\relax\else
-        \expandafter\lst@endfloat
-    \fi
-    \endgroup}
-\let\lst@@checkend\@checkend
-\newdimen\lst@maxwidth % \global
-\lst@AddToHook{InitVars}{\global\lst@maxwidth\z@}
-\lst@AddToHook{InitVarsEOL}
-    {\ifdim\lst@currlwidth>\lst@maxwidth
-         \global\lst@maxwidth\lst@currlwidth
-     \fi}
-\def\lst@EOLUpdate{\lsthk@EOL \lsthk@InitVarsEOL}
-\def\lst@MProcessListing{%
-    \lst@XPrintToken \lst@EOLUpdate \lsthk@InitVarsBOL
-    \global\advance\lst@lineno\@ne
-    \ifnum \lst@lineno>\lst@lastline
-        \lst@ifdropinput \lst@LeaveMode \fi
-        \ifx\lst@linerange\@empty
-            \expandafter\expandafter\expandafter\lst@EndProcessListing
-        \else
-            \lst@interrange
-            \lst@GetLineInterval
-            \expandafter\expandafter\expandafter\lst@SkipToFirst
-        \fi
-    \else
-        \expandafter\lst@BOLGobble
-    \fi}
-\let\lst@EndProcessListing\endinput
-\lst@Key{gobble}{0}{\def\lst@gobble{#1}}
-\def\lst@BOLGobble{%
-    \ifnum\lst@gobble>\z@
-        \@tempcnta\lst@gobble\relax
-        \expandafter\lst@BOLGobble@
-\fi}
-\def\lst@BOLGobble@@{%
-    \ifnum\@tempcnta>\z@
-        \expandafter\lst@BOLGobble@
-    \fi}
-\def\lstenv@BOLGobble@@{%
-    \lst@IfNextChars\lstenv@endstring{\lstenv@End}%
-    {\advance\@tempcnta\m@ne \expandafter\lst@BOLGobble@@\lst@eaten}}
-\def\lst@BOLGobble@#1{%
-    \let\lst@next#1%
-    \ifx \lst@next\relax\else
-    \ifx \lst@next\lst@MProcessListing\else
-    \ifx \lst@next\lst@processformfeed\else
-    \ifx \lst@next\lstenv@backslash
-        \let\lst@next\lstenv@BOLGobble@@
-    \else
-        \let\lst@next\lst@BOLGobble@@
-        \ifx #1\lst@processtabulator
-            \advance\@tempcnta-\lst@tabsize\relax
-            \ifnum\@tempcnta<\z@
-                \lst@length-\@tempcnta \lst@PreGotoTabStop
-            \fi
-        \else
-            \advance\@tempcnta\m@ne
-        \fi
-    \fi \fi \fi \fi
-    \lst@next}
-\def\lst@processformfeed{\lst@ProcessFormFeed}
-\def\lst@processtabulator{\lst@ProcessTabulator}
-\lst@Key{name}\relax{\def\lst@intname{#1}}
-\lst@AddToHookExe{PreSet}{\global\let\lst@intname\@empty}
-\lst@AddToHook{PreInit}{%
-    \let\lst@arg\lst@intname \lst@ReplaceIn\lst@arg\lst@filenamerpl
-    \global\let\lst@name\lst@arg \global\let\lstname\lst@name}
-\def\lst@filenamerpl{_\textunderscore $\textdollar -\textendash}
-\def\l@lstlisting#1#2{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}
-\lst@UserCommand\lstlistlistingname{Listings}
-\lst@UserCommand\lstlistoflistings{\bgroup
-    \let\contentsname\lstlistlistingname
-    \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
-    \tableofcontents \egroup}
-\@ifundefined{float@listhead}{}{%
-  \renewcommand*{\lstlistoflistings}{%
-    \begingroup
-      \@ifundefined{@restonecoltrue}{}{%
-        \if@twocolumn
-          \@restonecoltrue\onecolumn
-        \else
-          \@restonecolfalse
-        \fi
-      }%
-      \float@listhead{\lstlistlistingname}%
-      \parskip\z@\parindent\z@\parfillskip \z@ \@plus 1fil%
-      \@starttoc{lol}%
-      \@ifundefined{@restonecoltrue}{}{%
-        \if@restonecol\twocolumn\fi
-      }%
-    \endgroup
-  }%
-}
-\AtBeginDocument{%
-  \@ifundefined{float@addtolists}%
-    {\gdef\float@addtolists#1{\addtocontents{lol}{#1}}}%
-    {\let\orig@float@addtolists\float@addtolists
-     \gdef\float@addtolists#1{%
-       \addtocontents{lol}{#1}%
-       \orig@float@addtolists{#1}}}%
-}%
-\newcommand\lstinline[1][]{%
-    \leavevmode\bgroup % \hbox\bgroup --> \bgroup
-      \def\lst@boxpos{b}%
-      \lsthk@PreSet\lstset{flexiblecolumns,#1}%
-      \lsthk@TextStyle
-      \@ifnextchar\bgroup{%
-        \afterassignment\lst@InlineG \let\@let@token}%
-                         \lstinline@}
-\def\lstinline@#1{%
-    \lst@Init\relax
-    \lst@IfNextCharActive{\lst@InlineM#1}{\lst@InlineJ#1}}
-\lst@AddToHook{TextStyle}{}% init
-\lst@AddToHook{SelectCharTable}{\lst@inlinechars}
-\global\let\lst@inlinechars\@empty
-\def\lst@InlineM#1{\gdef\lst@inlinechars{%
-    \lst@Def{`#1}{\lst@DeInit\egroup\global\let\lst@inlinechars\@empty}%
-    \lst@Def{13}{\lst@DeInit\egroup \global\let\lst@inlinechars\@empty
-        \PackageError{Listings}{lstinline ended by EOL}\@ehc}}%
-    \lst@inlinechars}
-\def\lst@InlineJ#1{%
-    \def\lst@temp##1#1{%
-        \let\lst@arg\@empty \lst@InsideConvert{##1}\lst@arg
-        \lst@DeInit\egroup}%
-    \lst@temp}
-\def\lst@InlineG{%
-    \lst@Init\relax
-    \lst@IfNextCharActive{\lst@InlineM\}}%
-                         {\let\lst@arg\@empty \lst@InlineGJ}}
-\def\lst@InlineGJ{\futurelet\@let@token\lst@InlineGJTest}
-\def\lst@InlineGJTest{%
-    \ifx\@let@token\egroup
-        \afterassignment\lst@InlineGJEnd
-        \expandafter\let\expandafter\@let@token
-    \else
-        \ifx\@let@token\@sptoken
-            \let\lst@next\lst@InlineGJReadSp
-        \else
-            \let\lst@next\lst@InlineGJRead
-        \fi
-        \expandafter\lst@next
-    \fi}
-\def\lst@InlineGJEnd{\lst@arg\lst@DeInit\egroup}
-\def\lst@InlineGJRead#1{%
-    \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
-    \lst@InlineGJ}
-\def\lst@InlineGJReadSp#1{%
-    \lccode`\~=`\ \lowercase{\lst@lAddTo\lst@arg~}%
-    \lst@InlineGJ#1}
-\newcommand\lstMakeShortInline[1][]{%
-  \def\lst@shortinlinedef{\lstinline[#1]}%
-  \lstMakeShortInline@}%
-\def\lstMakeShortInline@#1{%
-  \expandafter\ifx\csname lst@ShortInlineOldCatcode\string#1\endcsname\relax
-    \lst@shortlstinlineinfo{Made }{#1}%
-    \lst@add@special{#1}%
-    \expandafter
-    \xdef\csname lst@ShortInlineOldCatcode\string#1\endcsname{\the\catcode`#1}%
-    \begingroup
-      \catcode`\~\active  \lccode`\~`#1%
-      \lowercase{%
-        \global\expandafter\let
-          \csname lst@ShortInlineOldMeaning\string#1\endcsname~%
-          \expandafter\gdef\expandafter~\expandafter{\lst@shortinlinedef#1}}%
-    \endgroup
-    \global\catcode`#1\active
-  \else
-    \PackageError{Listings}%
-    {\string\lstMakeShorterInline\ definitions cannot be nested}%
-    {Use \string\lstDeleteShortInline first.}%
-    {}%
-  \fi}
-\def\lstDeleteShortInline#1{%
-  \expandafter\ifx\csname lst@ShortInlineOldCatcode\string#1\endcsname\relax
-    \PackageError{Listings}%
-    {#1 is not a short reference for \string\lstinline}%
-    {Use \string\lstMakeShortInline first.}%
-    {}%
-  \else
-    \lst@shortlstinlineinfo{Deleted }{#1 as}%
-    \lst@rem@special{#1}%
-    \global\catcode`#1\csname lst@ShortInlineOldCatcode\string#1\endcsname
-    \global \expandafter\let%
-      \csname lst@ShortInlineOldCatcode\string#1\endcsname \relax
-    \ifnum\catcode`#1=\active
-      \begingroup
-        \catcode`\~\active  \lccode`\~`#1%
-        \lowercase{%
-          \global\expandafter\let\expandafter~%
-          \csname lst@ShortInlineOldMeaning\string#1\endcsname}%
-      \endgroup
-    \fi
-  \fi}
-\def\lst@shortlstinlineinfo#1#2{%
-     \PackageInfo{Listings}{%
-       #1\string#2 a short reference for \string\lstinline}}
-\def\lst@add@special#1{%
-  \lst@rem@special{#1}%
-  \expandafter\gdef\expandafter\dospecials\expandafter
-    {\dospecials \do #1}%
-  \expandafter\gdef\expandafter\@sanitize\expandafter
-    {\@sanitize \@makeother #1}}
-\def\lst@rem@special#1{%
-  \def\do##1{%
-    \ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}%
-  \xdef\dospecials{\dospecials}%
-  \begingroup
-    \def\@makeother##1{%
-      \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
-    \xdef\@sanitize{\@sanitize}%
-  \endgroup}
-\def\lst@MakePath#1{\ifx\@empty#1\@empty\else\lst@MakePath@#1/\@nil/\fi}
-\def\lst@MakePath@#1/{#1/\lst@MakePath@@}
-\def\lst@MakePath@@#1/{%
-    \ifx\@nil#1\expandafter\@gobble
-         \else \ifx\@empty#1\else #1/\fi \fi
-    \lst@MakePath@@}
-\lst@Key{inputpath}{}{\edef\lst@inputpath{\lst@MakePath{#1}}}
-\def\lstinputlisting{%
-    \begingroup \lst@setcatcodes \lst@inputlisting}
-\newcommand\lst@inputlisting[2][]{%
-    \endgroup
-    \def\lst@set{#1}%
-    \IfFileExists{\lst@inputpath#2}%
-        {\expandafter\lst@InputListing\expandafter{\lst@inputpath#2}}%
-        {\filename@parse{\lst@inputpath#2}%
-         \edef\reserved@a{\noexpand\lst@MissingFileError
-             {\filename@area\filename@base}%
-             {\ifx\filename@ext\relax tex\else\filename@ext\fi}}%
-         \reserved@a}%
-    \lst@doendpe \@newlistfalse \ignorespaces}
-\def\lst@MissingFileError#1#2{%
-    \typeout{^^J! Package Listings Error: File `#1(.#2)' not found.^^J%
-        ^^JType X to quit or <RETURN> to proceed,^^J%
-        or enter new name. (Default extension: #2)^^J}%
-    \message{Enter file name: }%
-    {\endlinechar\m@ne \global\read\m@ne to\@gtempa}%
-    \ifx\@gtempa\@empty \else
-        \def\reserved@a{x}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
-        \def\reserved@a{X}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
-        \filename@parse\@gtempa
-        \edef\filename@ext{%
-            \ifx\filename@ext\relax#2\else\filename@ext\fi}%
-        \edef\reserved@a{\noexpand\IfFileExists %
-                {\filename@area\filename@base.\filename@ext}%
-            {\noexpand\lst@InputListing %
-                {\filename@area\filename@base.\filename@ext}}%
-            {\noexpand\lst@MissingFileError
-                {\filename@area\filename@base}{\filename@ext}}}%
-        \expandafter\reserved@a %
-    \fi}
-\let\lst@ifdraft\iffalse
-\DeclareOption{draft}{\let\lst@ifdraft\iftrue}
-\DeclareOption{final}{\let\lst@ifdraft\iffalse}
-\lst@AddToHook{PreSet}
-    {\lst@ifdraft
-         \let\lst@ifprint\iffalse
-         \@gobbletwo\fi\fi
-     \fi}
-\def\lst@InputListing#1{%
-    \begingroup
-      \lsthk@PreSet \gdef\lst@intname{#1}%
-      \expandafter\lstset\expandafter{\lst@set}%
-      \lsthk@DisplayStyle
-      \catcode\active=\active
-      \lst@Init\relax \let\lst@gobble\z@
-      \lst@SkipToFirst
-      \lst@ifprint \def\lst@next{\input{#1}}%
-             \else \let\lst@next\@empty \fi
-      \lst@next
-      \lst@DeInit
-    \endgroup}
-\def\lst@SkipToFirst{%
-    \ifnum \lst@lineno<\lst@firstline
-        \lst@BeginDropInput\lst@Pmode
-        \lst@Let{13}\lst@MSkipToFirst
-        \lst@Let{10}\lst@MSkipToFirst
-    \else
-        \expandafter\lst@BOLGobble
-    \fi}
-\def\lst@MSkipToFirst{%
-    \global\advance\lst@lineno\@ne
-    \ifnum \lst@lineno=\lst@firstline
-        \lst@LeaveMode \global\lst@newlines\z@
-        \lsthk@InitVarsBOL
-        \expandafter\lst@BOLGobble
-    \fi}
-\def\lstenv@DroppedWarning{%
-    \ifx\lst@dropped\@undefined\else
-        \PackageWarning{Listings}{Text dropped after begin of listing}%
-    \fi}
-\let\lst@dropped\@undefined % init
-\begingroup \lccode`\~=`\^^M\lowercase{%
-\gdef\lstenv@Process#1{%
-    \ifx~#1%
-        \lstenv@DroppedWarning \let\lst@next\lst@SkipToFirst
-    \else\ifx^^J#1%
-        \lstenv@DroppedWarning \let\lst@next\lstenv@ProcessJ
-    \else
-        \let\lst@dropped#1\let\lst@next\lstenv@Process
-    \fi \fi
-    \lst@next}
-}\endgroup
-\def\lstenv@ProcessJ{%
-    \let\lst@arg\@empty
-    \ifx\@currenvir\lstenv@name
-        \expandafter\lstenv@ProcessJEnv
-    \else
-        \expandafter\def\expandafter\lst@temp\expandafter##1%
-            \csname end\lstenv@name\endcsname
-                {\lst@InsideConvert{##1}\lstenv@ProcessJ@}%
-        \expandafter\lst@temp
-    \fi}
-\begingroup \lccode`\~=`\\\lowercase{%
-\gdef\lstenv@ProcessJ@{%
-    \lst@lExtend\lst@arg
-        {\expandafter\ \expandafter~\lstenv@endstring}%
-    \catcode10=\active \lst@Let{10}\lst@MProcessListing
-    \lst@SkipToFirst \lst@arg}
-}\endgroup
-\def\lstenv@ProcessJEnv#1\end#2{\def\lst@temp{#2}%
-    \ifx\lstenv@name\lst@temp
-        \lst@InsideConvert{#1}%
-        \expandafter\lstenv@ProcessJ@
-    \else
-        \lst@InsideConvert{#1\\end\{#2\}}%
-        \expandafter\lstenv@ProcessJEnv
-    \fi}
-\def\lstenv@backslash{%
-    \lst@IfNextChars\lstenv@endstring
-        {\lstenv@End}%
-        {\expandafter\lsts@backslash \lst@eaten}}%
-\def\lstenv@End{%
-    \ifx\@currenvir\lstenv@name
-        \edef\lst@next{\noexpand\end{\lstenv@name}}%
-    \else
-        \def\lst@next{\csname end\lstenv@name\endcsname}%
-    \fi
-    \lst@next}
-\lst@UserCommand\lstnewenvironment#1#2#{%
-    \@ifundefined{#1}%
-        {\let\lst@arg\@empty
-         \lst@XConvert{#1}\@nil
-         \expandafter\lstnewenvironment@\lst@arg{#1}{#2}}%
-        {\PackageError{Listings}{Environment `#1' already defined}\@eha
-         \@gobbletwo}}
-\def\@tempa#1#2#3{%
-\gdef\lstnewenvironment@##1##2##3##4##5{%
-    \begingroup
-    \global\@namedef{end##2}{\lstenv@Error{##2}}%
-    \global\@namedef{##2}{\def\lstenv@name{##2}%
-        \begingroup \lst@setcatcodes \catcode\active=\active
-        \csname##2@\endcsname}%
-    \let\l@ngrel@x\global
-    \let\@xargdef\lstenv@xargdef
-    \expandafter\new@command\csname##2@\endcsname##3%
-        {\lsthk@PreSet ##4%
-         \ifx\@currenvir\lstenv@name
-             \def\lstenv@endstring{#1#2##1#3}%
-         \else
-             \def\lstenv@endstring{#1##1}%
-         \fi
-         \@namedef{end##2}{\lst@DeInit ##5\endgroup
-                          \lst@doendpe \@ignoretrue}%
-         \lsthk@DisplayStyle
-         \let\lst@EndProcessListing\lstenv@SkipToEnd
-         \lst@Init\lstenv@backslash
-         \lst@ifprint
-             \expandafter\expandafter\expandafter\lstenv@Process
-         \else
-             \expandafter\lstenv@SkipToEnd
-         \fi
-         \lst@insertargs}%
-    \endgroup}%
-}
-\let\lst@arg\@empty \lst@XConvert{end}\{\}\@nil
-\expandafter\@tempa\lst@arg
-\let\lst@insertargs\@empty
-\def\lstenv@xargdef#1{
-    \expandafter\lstenv@xargdef@\csname\string#1\endcsname#1}
-\def\lstenv@xargdef@#1#2[#3][#4]#5{%
-  \@ifdefinable#2{%
-       \gdef#2{%
-          \ifx\protect\@typeset@protect
-            \expandafter\lstenv@testopt
-          \else
-            \@x@protect#2%
-          \fi
-          #1%
-          {#4}}%
-       \@yargdef
-          #1%
-           \tw@
-           {#3}%
-           {#5}}}
-\long\def\lstenv@testopt#1#2{%
-  \@ifnextchar[{\catcode\active5\relax \lstenv@testopt@#1}%
-               {#1[{#2}]}}
-\def\lstenv@testopt@#1[#2]{%
-    \catcode\active\active
-    #1[#2]}
-\begingroup \lccode`\~=`\\\lowercase{%
-\gdef\lstenv@SkipToEnd{%
-    \long\expandafter\def\expandafter\lst@temp\expandafter##\expandafter
-        1\expandafter~\lstenv@endstring{\lstenv@End}%
-    \lst@temp}
-}\endgroup
-\def\lstenv@Error#1{\PackageError{Listings}{Extra \string\end#1}%
-    {I'm ignoring this, since I wasn't doing a \csname#1\endcsname.}}
-\begingroup \lccode`\~=`\^^M\lowercase{%
-\gdef\lst@TestEOLChar#1{%
-    \def\lst@insertargs{#1}%
-    \ifx ~#1\@empty \else
-    \ifx^^J#1\@empty \else
-        \global\let\lst@intname\lst@insertargs
-        \let\lst@insertargs\@empty
-    \fi \fi}
-}\endgroup
-\lstnewenvironment{lstlisting}[2][]
-    {\lst@TestEOLChar{#2}%
-     \lstset{#1}%
-     \csname\@lst @SetFirstNumber\endcsname}
-    {\csname\@lst @SaveFirstNumber\endcsname}
-\lst@Key{fancyvrb}\relax[t]{%
-    \lstKV@SetIf{#1}\lst@iffancyvrb
-    \lstFV@fancyvrb}
-\ifx\lstFV@fancyvrb\@undefined
-    \gdef\lstFV@fancyvrb{\lst@RequireAspects{fancyvrb}\lstFV@fancyvrb}
-\fi
-\@ifundefined{ocp}{}
-    {\lst@AddToHook{OutputBox}%
-         {\let\lst@ProcessLetter\@firstofone
-          \let\lst@ProcessDigit\@firstofone
-          \let\lst@ProcessOther\@firstofone}}
-\DeclareOption*{\expandafter\lst@ProcessOption\CurrentOption\relax}
-\def\lst@ProcessOption#1#2\relax{%
-    \ifx #1!%
-        \lst@DeleteKeysIn\lst@loadaspects{#2}%
-    \else
-        \lst@lAddTo\lst@loadaspects{,#1#2}%
-    \fi}
-\@ifundefined{lst@loadaspects}
-  {\def\lst@loadaspects{strings,comments,escape,style,language,%
-      keywords,labels,lineshape,frames,emph,index}%
-  }{}
-\InputIfFileExists{lstpatch.sty}{}{}
-\let\lst@ifsavemem\iffalse
-\DeclareOption{savemem}{\let\lst@ifsavemem\iftrue}
-\DeclareOption{noaspects}{\let\lst@loadaspects\@empty}
-\ProcessOptions
-\lst@RequireAspects\lst@loadaspects
-\let\lst@loadaspects\@empty
-\lst@UseHook{SetStyle}\lst@UseHook{EmptyStyle}
-\lst@UseHook{SetLanguage}\lst@UseHook{EmptyLanguage}
-\InputIfFileExists{listings.cfg}{}{}
-\InputIfFileExists{lstlocal.cfg}{}{}
-\endinput
-%%
-%% End of file `listings.sty'.
Index: doc/LaTeXmacros/listings/lstdoc.sty
===================================================================
--- doc/LaTeXmacros/listings/lstdoc.sty	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,454 +1,0 @@
-%%
-%% This is file `lstdoc.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% listings.dtx  (with options: `doc')
-%% 
-%% Please read the software license in listings-1.3.dtx or listings-1.3.pdf.
-%%
-%% (w)(c) 1996--2004 Carsten Heinz and/or any other author listed
-%% elsewhere in this file.
-%% (c) 2006 Brooks Moses
-%% (c) 2013- Jobst Hoffmann
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\def\filedate{2015/06/04}
-\def\fileversion{1.6}
-\ProvidesPackage{lstdoc}
-             [\filedate\space\fileversion\space(Carsten Heinz)]
-\let\lstdoc@currversion\fileversion
-\RequirePackage[writefile]{listings}[2004/09/07]
-\newif\iffancyvrb \IfFileExists{fancyvrb.sty}{\fancyvrbtrue}{}
-\newif\ifcolor \IfFileExists{color.sty}{\colortrue}{}
-\lst@false
-\newif\ifhyper
-\@ifundefined{pdfoutput}
-    {}
-    {\ifnum\pdfoutput>\z@ \lst@true \fi}
-\@ifundefined{VTeXversion}
-    {}
-    {\ifnum\OpMode>\z@ \lst@true \fi}
-\lst@if \IfFileExists{hyperref.sty}{\hypertrue}{}\fi
-\newif\ifalgorithmicpkg \IfFileExists{algorithmic.sty}{\algorithmicpkgtrue}{}
-\newif\iflgrind \IfFileExists{lgrind.sty}{\lgrindtrue}{}
-\iffancyvrb \RequirePackage{fancyvrb}\fi
-\ifhyper \RequirePackage[colorlinks]{hyperref}\else
-    \def\href#1{\texttt}\fi
-\ifcolor \RequirePackage{color}\fi
-\ifalgorithmicpkg \RequirePackage{algorithmic}\fi
-\iflgrind \RequirePackage{lgrind}\fi
-\RequirePackage{nameref}
-\RequirePackage{url}
-\renewcommand\ref{\protect\T@ref}
-\renewcommand\pageref{\protect\T@pageref}
-\def\lst@BeginRemark#1{%
-    \begin{quote}\topsep0pt\let\small\footnotesize\small#1:}
-\def\lst@EndRemark{\end{quote}}
-\newenvironment{TODO}
-    {\lst@BeginRemark{To do}}{\lst@EndRemark}
-\newenvironment{ALTERNATIVE}
-    {\lst@BeginRemark{Alternative}}{\lst@EndRemark}
-\newenvironment{REMOVED}
-    {\lst@BeginRemark{Removed}}{\lst@EndRemark}
-\newenvironment{OLDDEF}
-    {\lst@BeginRemark{Old definition}}{\lst@EndRemark}
-\def\advise{\par\list\labeladvise
-    {\advance\linewidth\@totalleftmargin
-     \@totalleftmargin\z@
-     \@listi
-     \let\small\footnotesize \small\sffamily
-     \parsep \z@ \@plus\z@ \@minus\z@
-     \topsep6\p@ \@plus1\p@\@minus2\p@
-     \def\makelabel##1{\hss\llap{##1}}}}
-\let\endadvise\endlist
-\def\advisespace{\hbox{}\qquad}
-\def\labeladvise{$\to$}
-\newenvironment{syntax}
-   {\list{}{\itemindent-\leftmargin
-    \def\makelabel##1{\hss\lst@syntaxlabel##1,,,,\relax}}}
-   {\endlist}
-\def\lst@syntaxlabel#1,#2,#3,#4\relax{%
-    \llap{\scriptsize\itshape#3}%
-    \def\lst@temp{#2}%
-    \expandafter\lst@syntaxlabel@\meaning\lst@temp\relax
-    \rlap{\hskip-\itemindent\hskip\itemsep\hskip\linewidth
-          \llap{\ttfamily\lst@temp}\hskip\labelwidth
-          \def\lst@temp{#1}%
-          \ifx\lst@temp\lstdoc@currversion#1\fi}}
-\def\lst@syntaxlabel@#1>#2\relax
-    {\edef\lst@temp{\zap@space#2 \@empty}}
-\newcommand*\syntaxnewline{\newline\hbox{}\kern\labelwidth}
-\newcommand*\syntaxor{\qquad or\qquad}
-\newcommand*\syntaxbreak
-    {\hfill\kern0pt\discretionary{}{\kern\labelwidth}{}}
-\let\syntaxfill\hfill
-\def\alternative#1{\lst@true \alternative@#1,\relax,}
-\def\alternative@#1,{%
-    \ifx\relax#1\@empty
-        \expandafter\@gobble
-    \else
-        \ifx\@empty#1\@empty\else
-            \lst@if \lst@false \else $\vert$\fi
-            \textup{\texttt{#1}}%
-        \fi
-    \fi
-    \alternative@}
-\long\def\m@cro@#1#2#3{\endgroup \topsep\MacroTopsep \trivlist
-  \edef\saved@macroname{\string#3}%
-  \def\makelabel##1{\llap{##1}}%
-  \if@inlabel
-    \let\@tempa\@empty \count@\macro@cnt
-    \loop \ifnum\count@>\z@
-      \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
-    \edef\makelabel##1{\llap{\vtop to\baselineskip
-                               {\@tempa\hbox{##1}\vss}}}%
-    \advance \macro@cnt \@ne
-  \else  \macro@cnt\@ne  \fi
-  \edef\@tempa{\noexpand\item[%
-     #1%
-       \noexpand\PrintMacroName
-     \else
-       \expandafter\noexpand\csname Print#2Name\endcsname % MODIFIED
-     \fi
-     {\string#3}]}%
-  \@tempa
-  \global\advance\c@CodelineNo\@ne
-   #1%
-      \SpecialMainIndex{#3}\nobreak
-      \DoNotIndex{#3}%
-   \else
-      \csname SpecialMain#2Index\endcsname{#3}\nobreak % MODIFIED
-   \fi
-  \global\advance\c@CodelineNo\m@ne
-  \ignorespaces}
-\def\macro{\begingroup
-   \catcode`\\12
-   \MakePrivateLetters \m@cro@ \iftrue {Macro}}% MODIFIED
-\def\environment{\begingroup
-   \catcode`\\12
-   \MakePrivateLetters \m@cro@ \iffalse {Env}}% MODIFIED
-\def\newdocenvironment#1#2#3#4{%
-    \@namedef{#1}{#3\begingroup \catcode`\\12\relax
-                  \MakePrivateLetters \m@cro@ \iffalse {#2}}%
-    \@namedef{end#1}{#4\endmacro}%
-    \@ifundefined{Print#2Name}{\expandafter
-        \let\csname Print#2Name\endcsname\PrintMacroName}{}%
-    \@ifundefined{SpecialMain#2Index}{\expandafter
-        \let\csname SpecialMain#2Index\endcsname\SpecialMainIndex}{}}
-\newdocenvironment{aspect}{Aspect}{}{}
-\def\PrintAspectName#1{}
-\def\SpecialMainAspectIndex#1{%
-    \@bsphack
-    \index{aspects:\levelchar\protect\aspectname{#1}}%
-    \@esphack}
-\newdocenvironment{lstkey}{Key}{}{}
-\def\PrintKeyName#1{\strut\keyname{#1}\ }
-\def\SpecialMainKeyIndex#1{%
-    \@bsphack
-    \index{keys\levelchar\protect\keyname{#1}}%
-    \@esphack}
-\newcounter{argcount}
-\def\labelargcount{\texttt{\#\arabic{argcount}}\hskip\labelsep$=$}
-\def\macroargs{\list\labelargcount
-    {\usecounter{argcount}\leftmargin=2\leftmargin
-     \parsep \z@ \@plus\z@ \@minus\z@
-     \topsep4\p@ \@plus\p@ \@minus2\p@
-     \itemsep\z@ \@plus\z@ \@minus\z@
-     \def\makelabel##1{\hss\llap{##1}}}}
-\def\endmacroargs{\endlist\@endparenv}
-\lst@RequireAspects{writefile}
-\newbox\lst@samplebox
-\lstnewenvironment{lstsample}[3][]
-    {\global\let\lst@intname\@empty
-     \gdef\lst@sample{#2}%
-     \setbox\lst@samplebox=\hbox\bgroup
-         \setkeys{lst}{language={},style={},tabsize=4,gobble=5,%
-             basicstyle=\small\ttfamily,basewidth=0.51em,point={#1}}
-         #3%
-         \lst@BeginAlsoWriteFile{\jobname.tmp}}
-    {\lst@EndWriteFile\egroup
-     \ifdim \wd\lst@samplebox>.5\linewidth
-         \begin{center}%
-             \hbox to\linewidth{\box\lst@samplebox\hss}%
-         \end{center}%
-         \lst@sampleInput
-     \else
-         \begin{center}%
-         \begin{minipage}{0.45\linewidth}\lst@sampleInput\end{minipage}%
-         \qquad
-         \begin{minipage}{0.45\linewidth}%
-             \hbox to\linewidth{\box\lst@samplebox\hss}%
-         \end{minipage}%
-         \end{center}%
-     \fi}
-\lst@InstallKeywords{p}{point}{pointstyle}\relax{keywordstyle}{}ld
-\lstnewenvironment{lstxsample}[1][]
-    {\begingroup
-         \setkeys{lst}{belowskip=-\medskipamount,language={},style={},%
-             tabsize=4,gobble=5,basicstyle=\small\ttfamily,%
-             basewidth=0.51em,point={#1}}
-         \lst@BeginAlsoWriteFile{\jobname.tmp}}
-    {\endgroup
-     \endgroup}
-\def\lst@sampleInput{%
-    \MakePercentComment\catcode`\^^M=10\relax
-    \small\lst@sample
-    {\setkeys{lst}{SelectCharTable=\lst@ReplaceInput{\^\^I}%
-                                  {\lst@ProcessTabulator}}%
-     \leavevmode \input{\jobname.tmp}}\MakePercentIgnore}
-\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
-                                      {1.25ex \@plus1ex \@minus.2ex}%
-                                      {-1em}%
-                                      {\normalfont\normalsize\bfseries}}
-\def\lstref#1{\emph{\ref{#1} \nameref{#1}}}
-\def\@part[#1]#2{\ifhyper\phantomsection\fi
-    \addcontentsline{toc}{part}{#1}%
-    {\parindent\z@ \raggedright \interlinepenalty\@M
-     \normalfont \huge \bfseries #2\markboth{}{}\par}%
-    \nobreak\vskip 3ex\@afterheading}
-\renewcommand*\l@section[2]{%
-    \addpenalty\@secpenalty
-    \addvspace{.25em \@plus\p@}%
-    \setlength\@tempdima{1.5em}%
-    \begingroup
-      \parindent \z@ \rightskip \@pnumwidth
-      \parfillskip -\@pnumwidth
-      \leavevmode
-      \advance\leftskip\@tempdima
-      \hskip -\leftskip
-      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
-    \endgroup}
-\renewcommand*\l@subsection{\@dottedtocline{2}{0pt}{2.3em}}
-\renewcommand*\l@subsubsection{\@dottedtocline{3}{0pt}{3.2em}}
-\newcommand\ikeyname[1]{%
-    \lstkeyindex{#1}{}%
-    \lstaspectindex{#1}{}%
-    \keyname{#1}}
-\newcommand\ekeyname[1]{%
-    \@bsphack
-    \lstkeyindex{#1}{}%
-    \lstaspectindex{#1}{}%
-    \@esphack}
-\newcommand\rkeyname[1]{%
-    \@bsphack
-    \lstkeyindex{#1}{}%
-    \lstaspectindex{#1}{}%
-    \@esphack{\rstyle\keyname{#1}}}
-\newcommand\icmdname[1]{%
-    \@bsphack
-    \lstaspectindex{#1}{}%
-    \@esphack\texttt{\string#1}}
-\newcommand\rcmdname[1]{%
-    \@bsphack
-    \lstaspectindex{#1}{}%
-    \@esphack\texttt{\rstyle\string#1}}
-\def\lstaspectindex#1#2{%
-    \global\@namedef{lstkandc@\string#1}{}%
-    \@ifundefined{lstisaspect@\string#1}
-        {\index{unknown\levelchar
-                \protect\texttt{\protect\string\string#1}#2}}%
-        {\index{\@nameuse{lstisaspect@\string#1}\levelchar
-                \protect\texttt{\protect\string\string#1}#2}}%
-}
-\def\lstkeyindex#1#2{%
-}
-\def\lstisaspect[#1]#2{%
-    \global\@namedef{lstaspect@#1}{#2}%
-    \lst@AddTo\lst@allkeysandcmds{,#2}%
-    \@for\lst@temp:=#2\do
-    {\ifx\@empty\lst@temp\else
-         \global\@namedef{lstisaspect@\lst@temp}{#1}%
-     \fi}}
-\gdef\lst@allkeysandcmds{}
-\def\lstprintaspectkeysandcmds#1{%
-    \lst@true
-    \expandafter\@for\expandafter\lst@temp
-    \expandafter:\expandafter=\csname lstaspect@#1\endcsname\do
-    {\lst@if\lst@false\else, \fi \texttt{\lst@temp}}}
-\def\lstcheckreference{%
-   \@for\lst@temp:=\lst@allkeysandcmds\do
-   {\ifx\lst@temp\@empty\else
-        \@ifundefined{lstkandc@\lst@temp}
-        {\typeout{\lst@temp\space not in reference guide?}}{}%
-    \fi}}
-\newcommand*\lst{\texttt{lst}}
-\newcommand*\Cpp{C\texttt{++}}
-\let\keyname\texttt
-\let\keyvalue\texttt
-\let\hookname\texttt
-\newcommand*\aspectname[1]{{\normalfont\sffamily#1}}
-\DeclareRobustCommand\packagename[1]{%
-    {\leavevmode\text@command{#1}%
-     \switchfontfamily\sfdefault\rmdefault
-     \check@icl #1\check@icr
-     \expandafter}}%
-\renewcommand\packagename[1]{{\normalfont\sffamily#1}}
-\def\switchfontfamily#1#2{%
-    \begingroup\xdef\@gtempa{#1}\endgroup
-    \ifx\f@family\@gtempa\fontfamily#2%
-                    \else\fontfamily#1\fi
-    \selectfont}
-\ifcolor
-    \definecolor{darkgreen}{rgb}{0,0.5,0}
-    \def\rstyle{\color{darkgreen}}
-\else
-    \let\rstyle\empty
-\fi
-\gdef\lst@emails{}
-\newcommand*\lstthanks[2]
-    {#1\lst@AddTo\lst@emails{,#1,<#2>}%
-     \ifx\@empty#2\@empty\typeout{Missing email for #1}\fi}
-\newcommand*\lsthelper[3]
-    {{\let~\ #1}%
-     \lst@IfOneOf#1\relax\lst@emails
-     {}{\typeout{^^JWarning: Unknown helper #1.^^J}}}
-\lstdefinelanguage[doc]{Pascal}{%
-  morekeywords={alfa,and,array,begin,boolean,byte,case,char,const,div,%
-     do,downto,else,end,false,file,for,function,get,goto,if,in,%
-     integer,label,maxint,mod,new,not,of,or,pack,packed,page,program,%
-     procedure,put,read,readln,real,record,repeat,reset,rewrite,set,%
-     text,then,to,true,type,unpack,until,var,while,with,write,writeln},%
-  sensitive=false,%
-  morecomment=[s]{(*}{*)},%
-  morecomment=[s]{\{}{\}},%
-  morestring=[d]{'}}
-\lstdefinestyle{}
-    {basicstyle={},%
-     keywordstyle=\bfseries,identifierstyle={},%
-     commentstyle=\itshape,stringstyle={},%
-     numberstyle={},stepnumber=1,%
-     pointstyle=\pointstyle}
-\def\pointstyle{%
-    {\let\lst@um\@empty \xdef\@gtempa{\the\lst@token}}%
-    \expandafter\lstkeyindex\expandafter{\@gtempa}{}%
-    \expandafter\lstaspectindex\expandafter{\@gtempa}{}%
-    \rstyle}
-\lstset{defaultdialect=[doc]Pascal,language=Pascal,style={}}
-\def\lstscanlanguages#1#2#3{%
-    \begingroup
-        \def\lst@DefDriver@##1##2##3##4[##5]##6{%
-           \lst@false
-           \lst@lAddTo\lst@scan{##6(##5),}%
-           \begingroup
-           \@ifnextchar[{\lst@XDefDriver{##1}##3}{\lst@DefDriver@@##3}}%
-        \def\lst@XXDefDriver[##1]{}%
-        \lst@InputCatcodes
-        \def\lst@dontinput{#3}%
-        \let\lst@scan\@empty
-        \lst@for{#2}\do{%
-            \lst@IfOneOf##1\relax\lst@dontinput
-                {}%
-                {\InputIfFileExists{##1}{}{}}}%
-        \global\let\@gtempa\lst@scan
-    \endgroup
-    \let#1\@gtempa}
-\def\lstprintlanguages#1{%
-    \def\do##1{\setbox\@tempboxa\hbox{##1\space\space}%
-        \ifdim\wd\@tempboxa<.5\linewidth \wd\@tempboxa.5\linewidth
-                                   \else \wd\@tempboxa\linewidth \fi
-        \box\@tempboxa\allowbreak}%
-    \begin{quote}
-      \par\noindent
-      \hyphenpenalty=\@M \rightskip=\z@\@plus\linewidth\relax
-      \lst@BubbleSort#1%
-      \expandafter\lst@NextLanguage#1\relax(\relax),%
-    \end{quote}}
-\def\lst@NextLanguage#1(#2),{%
-    \ifx\relax#1\else
-        \def\lst@language{#1}\def\lst@dialects{(#2),}%
-        \expandafter\lst@NextLanguage@
-    \fi}
-\def\lst@NextLanguage@#1(#2),{%
-    \def\lst@temp{#1}%
-    \ifx\lst@temp\lst@language
-        \lst@lAddTo\lst@dialects{(#2),}%
-        \expandafter\lst@NextLanguage@
-    \else
-        \do{\lst@language
-        \ifx\lst@dialects\lst@emptydialect\else
-            \expandafter\lst@NormedDef\expandafter\lst@language
-                \expandafter{\lst@language}%
-            \space(%
-            \lst@BubbleSort\lst@dialects
-            \expandafter\lst@PrintDialects\lst@dialects(\relax),%
-            )%
-        \fi}%
-        \def\lst@next{\lst@NextLanguage#1(#2),}%
-        \expandafter\lst@next
-    \fi}
-\def\lst@emptydialect{(),}
-\def\lst@PrintDialects(#1),{%
-    \ifx\@empty#1\@empty empty\else
-        \lst@PrintDialect{#1}%
-    \fi
-    \lst@PrintDialects@}
-\def\lst@PrintDialects@(#1),{%
-    \ifx\relax#1\else
-        , \lst@PrintDialect{#1}%
-        \expandafter\lst@PrintDialects@
-    \fi}
-\def\lst@PrintDialect#1{%
-    \lst@NormedDef\lst@temp{#1}%
-    \expandafter\ifx\csname\@lst dd@\lst@language\endcsname\lst@temp
-        \texttt{\underbar{#1}}%
-    \else
-        \texttt{#1}%
-    \fi}
-\def\lst@IfLE#1#2\@empty#3#4\@empty{%
-    \ifx #1\relax
-        \let\lst@next\@firstoftwo
-    \else \ifx #3\relax
-        \let\lst@next\@secondoftwo
-    \else
-        \lowercase{\ifx#1#3}%
-            \def\lst@next{\lst@IfLE#2\@empty#4\@empty}%
-        \else
-            \lowercase{\ifnum`#1<`#3}\relax
-                \let\lst@next\@firstoftwo
-            \else
-                \let\lst@next\@secondoftwo
-            \fi
-        \fi
-    \fi \fi
-    \lst@next}
-\def\lst@BubbleSort#1{%
-    \ifx\@empty#1\else
-        \lst@false
-        \expandafter\lst@BubbleSort@#1\relax,\relax,%
-        \expandafter\lst@BubbleSort@\expandafter,\lst@sorted
-                                      \relax,\relax,%
-        \let#1\lst@sorted
-        \lst@if
-            \def\lst@next{\lst@BubbleSort#1}%
-            \expandafter\expandafter\expandafter\lst@next
-        \fi
-    \fi}
-\def\lst@BubbleSort@#1,#2,{%
-    \ifx\@empty#1\@empty
-        \def\lst@sorted{#2,}%
-        \def\lst@next{\lst@BubbleSort@@}%
-    \else
-        \let\lst@sorted\@empty
-        \def\lst@next{\lst@BubbleSort@@#1,#2,}%
-    \fi
-    \lst@next}
-\def\lst@BubbleSort@@#1,#2,{%
-    \ifx\relax#1\else
-        \ifx\relax#2%
-            \lst@lAddTo\lst@sorted{#1,}%
-            \expandafter\expandafter\expandafter\lst@BubbleSort@@@
-        \else
-            \lst@IfLE #1\relax\@empty #2\relax\@empty
-                          {\lst@lAddTo\lst@sorted{#1,#2,}}%
-                {\lst@true \lst@lAddTo\lst@sorted{#2,#1,}}%
-            \expandafter\expandafter\expandafter\lst@BubbleSort@@
-        \fi
-    \fi}
-\def\lst@BubbleSort@@@#1\relax,{}
-\endinput
-%%
-%% End of file `lstdoc.sty'.
Index: doc/LaTeXmacros/listings/lstdrvrs.dtx
===================================================================
--- doc/LaTeXmacros/listings/lstdrvrs.dtx	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,7494 +1,0 @@
-% \iffalse
-%
-% $Id: lstdrvrs.dtx 200 2015-06-04 18:59:32Z j_hoffmann $
-%
-%<*driver>
-\documentclass{ltxdoc}
-\usepackage{lstdoc, textcomp}
-\EnableCrossrefs
-\CodelineIndex
-\begin{document}
-    \DocInput{lstdrvrs.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-%
-% \DoNotIndex{\[,\{,\},\],\1,\2,\3,\4,\5,\6,\7,\8,\9,\0}
-% \DoNotIndex{\`,\,,\!,\#,\$,\&,\',\(,\),\+,\.,\:,\;,\<,\=,\>,\?,\_}
-% \DoNotIndex{\askforoverwritefalse,\askforoverwritetrue,\batchfile}
-% \DoNotIndex{\begin,\def,\else,\@empty,\end,\endpreamble,\expandafter}
-% \DoNotIndex{\fi,\file,\from,\gdef,\generate,\ifnum,\ifx,\input}
-% \DoNotIndex{\keepsilent,\lccode,\let,\lowercase,\preamble,\relax}
-% \DoNotIndex{\undefined}
-%
-%
-% \newbox\abstractbox
-% \setbox\abstractbox=\vbox{
-%	\begin{abstract}
-%	This article describes the implementation of the language drivers for
-%	the \packagename{listings} package.
-%	\end{abstract}}
-%
-% \title{Language, Style and Format drivers\\ for \textsf{Listings}\\ {\large by Carsten Heinz and individual authors:}}
-% \author{\InputIfFileExists{lstdrvrs.tmp}{}{}}
-% \date{2015/06/04\enspace\enspace Version 1.6\ \box\abstractbox}
-%
-% \hypersetup{pdfsubject=Language definitions,pdfauthor=Jobst Hoffmann
-%    <j.hoffmann-(at)-fh-aachen.de>}
-%
-% \maketitle
-%
-% \newwrite\authors \immediate\openout\authors lstdrvrs.tmp\relax
-% \gdef\lstthanks#1#2#3{#1\global\let\lstthanks\lstthanksb\lstwrite{#1}}
-% \gdef\lstthanksb#1#2#3{#1\lstwrite{\string\and\space#1}}
-% \gdef\lstwrite#1{\begingroup\let~\space\def\"{\string\"}\def\'{\string\'}\immediate\write\authors{#1}\endgroup}
-%
-% \renewcommand*\lsthelper[4]{#1}
-%
-% \newif\ifmulticols
-% \IfFileExists{multicol.sty}{\multicolstrue}{}
-%
-% \ifmulticols
-% \addtocontents{toc}{\protect\begin{multicols}{2}}
-% \fi
-%
-% \tableofcontents
-%
-%
-% \section{Installation and configuration}
-% \label{sec:installation}
-%
-% \begingroup
-%    \begin{macrocode}
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-%    \end{macrocode}
-% \endgroup
-%
-% \begingroup
-%    \begin{macrocode}
-%<*install>
-\input docstrip
-\preamble
-\endpreamble
-
-\ifToplevel{
-\usedir{tex/latex/listings}
-\keepsilent
-\askonceonly
-}
-
-
-\generate{
-    \file{lstlang1.sty}{\from{lstdrvrs.dtx}{lang1}}
-    \file{lstlang2.sty}{\from{lstdrvrs.dtx}{lang2}}
-    \file{lstlang3.sty}{\from{lstdrvrs.dtx}{lang3}}
-}
-
-\generate{
-    \file{listings-acm.prf}{\from{lstdrvrs.dtx}{acm-prf}}
-    \file{listings-bash.prf}{\from{lstdrvrs.dtx}{bash-prf}}
-    \file{listings-fortran.prf}{\from{lstdrvrs.dtx}{fortran-prf}}
-    \file{listings-lua.prf}{\from{lstdrvrs.dtx}{lua-prf}}
-    \file{listings-python.prf}{\from{lstdrvrs.dtx}{python-prf}}
-}
-
-
-\ifToplevel{
-\Msg{*}
-\Msg{* You probably need to move all created `.sty' and `.cfg'}
-\Msg{* files into a directory searched by TeX.}
-\Msg{*}
-\Msg{* Run `lstdrvrs.dtx' through LaTeX2e to get the documentation.}
-\Msg{*}
-}
-
-\endbatchfile
-%</install>
-%    \end{macrocode}
-% \endgroup
-%
-% \begingroup
-%    \begin{macrocode}
-%<*config>
-%    \end{macrocode}
-% \endgroup
-% We mainly define default dialects.
-%    \begin{macrocode}
-\ProvidesFile{listings.cfg}[2015/06/04 1.6 listings configuration]
-\def\lstlanguagefiles
-    {lstlang0.sty,lstlang1.sty,lstlang2.sty,lstlang3.sty}
-\lstset{defaultdialect=[R/3 6.10]ABAP,
-        defaultdialect=[2005]Ada,
-        defaultdialect=[68]Algol,
-        defaultdialect=[gnu]Awk,
-        defaultdialect=[ANSI]C,
-        defaultdialect=[light]Caml,
-        defaultdialect=[1985]Cobol,
-        defaultdialect=[WinXP]command.com,
-        defaultdialect=[ISO]C++,
-        defaultdialect=[95]Fortran,
-        defaultdialect=[5.2]Mathematica,
-        defaultdialect=[OMG]OCL,
-        defaultdialect=[Standard]Pascal,
-        defaultdialect=[67]Simula,
-        defaultdialect=[plain]TeX,
-        defaultdialect=[97]VRML}
-\lstalias[]{TclTk}[tk]{tcl}
-%    \end{macrocode}
-% And now some shortcuts for the ABAP versions (provided by Knut Lickert).
-% I (Knut) think the leading R/2, R/3 is not necessary (The support for R/2
-% is finished). The version number with letter is important for the
-% runtime-system, but the programming language should be the same
-% for each version.
-%    \begin{macrocode}
-\lstalias[6.1]{ABAP}[R/3 6.10]{ABAP}
-\lstalias[3.1]{ABAP}[R/3 3.1C]{ABAP}
-\lstalias[4.6]{ABAP}[R/3 4.6C]{ABAP}
-%    \end{macrocode}
-% \begingroup
-%    \begin{macrocode}
-%</config>
-%    \end{macrocode}
-% \endgroup
-%
-%    \begin{macrocode}
-%<+lang1>\ProvidesFile{lstlang1.sty}
-%<+lang2>\ProvidesFile{lstlang2.sty}
-%<+lang3>\ProvidesFile{lstlang3.sty}
-%<+acm-prf>\ProvidesFile{listings-acm.prf}
-%<+bash-prf>\ProvidesFile{listings-bash.prf}
-%<+fortran-prf>\ProvidesFile{listings-fortran.prf}
-%<+lua-prf>\ProvidesFile{listings-lua.prf}
-%<+python-prf>\ProvidesFile{listings-python.prf}
-%<-config>    [2015/06/04 1.6 listings language file]
-%    \end{macrocode}
-%
-%
-% \section{Language drivers}
-%
-%
-% \subsection{Abap}
-%
-% \lstthanks{Knut Lickert}{knut.lickert@gmx.de}{2000/08/01,2001/12/29,2002/04/11}
-% added support for Abap.\footnote{In this section `I' is Knut Lickert.}
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Abap definition by Knut Lickert
-%%
-%    \end{macrocode}
-%
-% There are some other new commands in release 6.10.
-% They will follow later, but up to now I don't work
-% with 6.10.
-%
-%    \begin{macrocode}
-\lst@definelanguage[R/3 6.10]{ABAP}[R/3 4.6C]{ABAP}%
-  {morekeywords={try,endtry},%
-  }[keywords,comments,strings]
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[R/3 4.6C]{ABAP}[R/3 3.1]{ABAP}%
-  {morekeywords={method,ref,class,create,object,%
-        methods,endmethod,private,protected,public,section,%
-        catch,system-exceptions,endcatch,%
-        },%
-   moreprocnamekeys={class},%
-   literate={->}{{$\rightarrow$}}1{=>}{{$\Rightarrow$}}1,%
-  }[keywords,comments,strings,procnames]
-%    \end{macrocode}
-% Yes there are also some more releases in R/3 (2.1\ldots), but I
-% know them not really. So let's start with R/3~3.1.
-%    \begin{macrocode}
-\lst@definelanguage[R/3 3.1]{ABAP}[R/2 5.0]{ABAP}{}%
-%    \end{macrocode}
-% As I remember all this commands exists in R/2. Many commands are
-% new in R/2~5.0 (compared with R/2 4.3). But as I am not using
-% R/2~4.3 any more, I start with R/2~5.0.
-%    \begin{macrocode}
-\lst@definelanguage[R/2 5.0]{ABAP}%
-  {sensitive=f,%
-   procnamekeys={report,program,form,function,module},%
-   morekeywords={*,add,after,alias,analyzer,and,append,appending,area,assign,at,%
-        authority-check,before,binary,blank,break-point,calendar,call,%
-        case,change,changing,check,clear,cnt,co,collect,commit,common,%
-        component,compute,condense,corresponding,cos,cp,cs,currency-conversion,%
-        cursor,data,database,dataset,decimals,define,delete,deleting,dequeue,%
-        describe,detail,dialog,directory,div,divide,do,documentation,%
-        during,dynpro,else,end-of-page,end-of-selection,endat,endcase,%
-        enddo,endfor,endform,endif,endloop,endmodule,endselect,%
-        endwhile,enqueue,exceptions,exit,exp,export,exporting,extract,%
-        field,fields,field-groups,field-symbols,find,for,form,format,free,%
-        from,function,generating,get,giving,hide,id,if,import,%
-        importing,in,incl,include,initial,initialization,input,insert,%
-        interrupt,into,is,language,leave,leading,left-justified,like,line,lines,line-count,
-        line-selection,list-processing,load,local,log,logfile,loop,%
-        margin,mark,mask,memory,menue,message,mod,modify,module,move,%
-        move-text,multiply,na,new,new-line,new-page,no-gaps,np,ns,%
-        number,obligatory,occurs,of,on,or,others,output,parameter,%
-        parameters,parts,perform,pf-status,places,position,process,%
-        raise,raising,ranges,read,refresh,refresh-dynpro,reject,remote,%
-        replace,report,reserve,reset,restart,right-justified,run,screen,scroll,search,%
-        segments,select,select-options,selection-screen,set,shift,sin,%
-        single,sqrt,start-of-selection,statement,structure,submit,%
-        subtract,summary,summing,suppress,system,table,tables,task,%
-        text,time,to,top-of-page,trace,transaction,transfer,%
-        transfer-dynpro,translate,type,unpack,update,user-command,%
-        using,value,when,where,while,window,with,workfile,write,},%
-   morecomment=[l]",%
-   morecomment=[f][commentstyle][0]*,%
-   morestring=[d]'%
-  }[keywords,comments,strings,procnames]
-%    \end{macrocode}
-% This section for R/2~4.3 is not really maintained. It is just what I remember
-% of the past.
-%    \begin{macrocode}
-\lst@definelanguage[R/2 4.3]{ABAP}[R/2 5.0]{ABAP}%
-  {deletekeywords={function,importing,exporting,changing,exceptions,%
-        raise,raising}%
-  }[keywords,comments,strings]
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{ACM}
-%
-% ACM is the language of the Aspen Custom Modeler
-% (\url{http://www.aspentech.com/products/aspen-custom-modeler.aspx}), the
-% language definition was provided by \lstthanks{Stefan Pinnow}{Stefan
-% Pinnow <Mo-Gul@gmx.net>}{2013/09/08}. It is intended for writing models.
-% \lsthelper{Maximilian~Dammann}{maximilian.dammann@tu-clausthal.de}
-% {2014/09/16}{missing keyword} pointed out the missing keyword ``Description''.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% ACM and ACMscript definition
-%% (c) 2013 Stefan Pinnow
-%%
-\lst@definelanguage{ACM}{
-  morekeywords={
-    abs,After,acos,And,As,asin,atan,At,Call,Compatibility,Connect,cos,cosh,%
-    Create,Delay,Description,Difference,Do,Else,ElseIf,End,EndFor,EndIf,%
-    EndParallel,EndState,EndSwitch,EndText,EndWith,exp,External,Fixed,For,%
-    ForEach,Free,Global,Hidden,If,Implementation,In,Initial,Input,InterSection,%
-    IntegerSet,Invoke,Is,Language,Library,Link,Log10,LogE,Max,Min,Model,Of,%
-    Once,Options,Output,Parallel,Parameter,Pause,Port,Print,Private,%
-    Procedure,Product,Ramp,Repeat,Restart,Return,Round,Runs,Sigma,sin,sinh,%
-    Size,SnapShot,sqr,sqrt,SRamp,State,Stream,StringSet,Structure,Switch,%
-    SubRoutine,SymDiff,tan,tanh,Task,Text,Time,Then,Truncate,Union,Until,%
-    Uses,Variable,Wait,When,With,WithIn,WorkSpace%
-  },%
-  sensitive=false,%
-  morecomment=[l]{//},%
-  morecomment=[s]{/*}{*/},%
-  string=[b]{"},%
-}[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-% In addition to writing models there is a language ACMscript, which is
-% similar to VBScript. According to Stefan Pinnow this language is used for
-% writing scripts for the models.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{ACMscript}[]{VBScript}{%
-  morekeywords={%
-    ElseIf,False,In,Resume,True%
-  },%
-  deletekeywords={%
-    Abs,Array,Clear,CreateObject,CStr,Err,ForReading,ForWriting,%
-    OpenTextFile,Replace,WriteLine%
-  }%
-}[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-% \begingroup
-% Stefan Pinnow also supplied a definition of a style for printing ACM code:
-%    \begin{macrocode}
-%<*acm-prf>
-%    \end{macrocode}
-%    \begin{macrocode}
-\usepackage[rgb, x11names]{xcolor}
-
-\definecolor{Comments}{rgb}{0.00,0.50,0.00}
-\definecolor{KeyWords}{rgb}{0.00,0.00,0.63}
-\definecolor{Strings}{rgb}{0.84,0.00,0.00}
-
-\lstdefinestyle{ACM}{%
-  basicstyle=\scriptsize\ttfamily,%
-  keywordstyle=\color{KeyWords},%
-  showstringspaces=false,%
-  identifierstyle=\color{black},%
-  commentstyle=\color{Comments},%
-  stringstyle=\color{Strings},%
-  frame=shadowbox,%             % for ACM-Code scrartcl commented out
-%   frame=l,%                   % line on the left side
-  rulesepcolor=\color{black},%
-  numbers=left,%                % left
-  firstnumber=1,%
-  stepnumber=5,%
-  columns=fixed,%               % to prevent inserting spaces
-  fontadjust=true,%
-  basewidth=0.5em,%
-  captionpos=t,%
-  abovecaptionskip=\smallskipamount,% same amount as default
-  belowcaptionskip=\smallskipamount,% in caption package
-}%
-%    \end{macrocode}
-% This code is provided in the file |listings-acm.prf|, see section
-% 2.4.1 (Preferences) of the \packagename{listings} documentation.
-%    \begin{macrocode}
-%</acm-prf>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{ACSL}
-%
-% This language was provided by \lstthanks{Andreas~Matthias}{amat@kabsi.at}
-% {2000/03/21}. I'm sorry for forgetting to add this language for a long time.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% ACSL definition (c) 2000 by Andreas Matthias
-%%
-\lst@definelanguage{ACSL}[90]{Fortran}%
-   {morekeywords={algorithm,cinterval,constant,derivative,discrete,%
-         dynamic,errtag,initial,interval,maxterval,minterval,%
-         merror,xerror,nsteps,procedural,save,schedule,sort,%
-         table,terminal,termt,variable},%
-    sensitive=false,%
-    morecomment=[l]!%
-   }[keywords, comments]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Ada}
-%
-% Data come from
-% \begin{itemize}
-% \item
-%		\textsc{Barnes, John Gilbert Presslie}:
-%		\textbf{Programming in Ada plus language reference manual};
-%		{\copyright} 1991 Addison-Wesley Publishing Company, Inc.;
-%		ISBN 0-201-56539-0.
-% \end{itemize}
-% \lstthanks{Torsten~Neuer}{tneuer@inwise.de}{1998/11/23} added support for
-% Ada 95. I changed the definition to reduce the required string memory.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Ada 95 definition (c) Torsten Neuer
-%%
-%% Ada 2005 definition (c) 2006 Santiago Urue\~{n}a Pascual
-%%                              <Santiago.Uruena@upm.es>
-%%
-\lst@definelanguage[2005]{Ada}[95]{Ada}%
-  {morekeywords={interface,overriding,synchronized}}%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[95]{Ada}[83]{Ada}%
-  {morekeywords={abstract,aliased,protected,requeue,tagged,until}}%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[83]{Ada}%
-  {morekeywords={abort,abs,accept,access,all,and,array,at,begin,body,%
-      case,constant,declare,delay,delta,digits,do,else,elsif,end,entry,%
-      exception,exit,for,function,generic,goto,if,in,is,limited,loop,%
-      mod,new,not,null,of,or,others,out,package,pragma,private,%
-      procedure,raise,range,record,rem,renames,return,reverse,select,%
-      separate,subtype,task,terminate,then,type,use,when,while,with,%
-      xor},%
-   sensitive=f,%
-   morecomment=[l]--,%
-   morestring=[m]",% percent not defined as stringizer so far
-   morestring=[m]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Algol}
-%
-% Data come from
-% \begin{itemize}
-% \item
-%		\textsc{Uwe Pape}:
-%		\textbf{Programmieren in ALGOL 60};
-%		{\copyright} 1973 Carl Hanser Verlag M\"unchen;
-%		ISBN 3-446-11605-2
-% \item
-%		\textsc{Frank G.\ Pagan}:
-%		\textbf{A practical guide to ALGOL 68};
-%		{\copyright} 1976 by John Wiley $\&$ Sohn Ltd.;
-%		ISBN 0-471-65746-8 (Cloth); ISBN 0-471-65747-6 (Pbk).
-% \end{itemize}
-% The definition of Algol 68 doesn't support comments enclosed by \rlap{/}c.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[68]{Algol}%
-% ??? should 'i' be a keyword
-  {morekeywords={abs,and,arg,begin,bin,bits,bool,by,bytes,case,channel,%
-      char,co,comment,compl,conj,divab,do,down,elem,elif,else,empty,%
-      end,entier,eq,esac,exit,false,fi,file,flex,for,format,from,ge,%
-      goto,gt,heap,if,im,in,int,is,isnt,le,leng,level,loc,long,lt,lwb,%
-      minusab,mod,modab,mode,ne,nil,not,od,odd,of,op,or,ouse,out,over,%
-      overab,par,plusab,plusto,pr,pragmat,prio,proc,re,real,ref,repr,%
-      round,sema,shl,short,shorten,shr,sign,skip,string,struct,then,%
-      timesab,to,true,union,up,upb,void,while},%
-   sensitive=f,% ???
-   morecomment=[s]{\#}{\#},%
-   keywordcomment={co,comment}%
-  }[keywords,comments,keywordcomments]%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[60]{Algol}%
-  {morekeywords={array,begin,Boolean,code,comment,div,do,else,end,%
-      false,for,goto,if,integer,label,own,power,procedure,real,step,%
-      string,switch,then,true,until,value,while},%
-   sensitive=f,% ???
-   keywordcommentsemicolon={end}{else,end}{comment}%
-  }[keywords,keywordcomments]%
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Assembler}
-%
-% Credits go to \lstthanks{Michael~Franke}{-}{2006/05/13}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%%
-%% Motorola 68K definition (c) 2006 Michael Franke
-%%
-\lst@definelanguage[Motorola68k]{Assembler}%
- {morekeywords={ABCD,ADD,%
-ADDA,ADDI,ADDQ,ADDX,AND,ANDI,ASL,ASR,BCC,BLS,BCS,BLT,BEQ,BMI,BF,BNE,BGE,BPL,%
-BGT,BT,BHI,BVC,BLE,BVS,BCHG,BCLR,BRA,BSET,BSR,BTST,CHK,CLR,CMP,CMPA,CMPI,CMPM,%
-DBCC,DBLS,DBCS,DBLT,DBEQ,DBMI,DBF,DBNE,DBGE,DBPL,DBGT,DBT,DBHI,DBVC,DBLE,DBVS,DIVS,%
-DIVU,EOR,EORI,EXG,EXT,ILLEGAL,JMP,JSR,LEA,LINK,LSL,LSR,MOVE,MOVEA,MOVEM,MOVEP,MOVEQ,%
-MULS,MULU,NBCD,NEG,NEGX,NOP,NOT,OR,ORI,PEA,RESET,ROL,ROR,ROXL,ROXR,RTE,RTR,RTS,SBCD,%
-SCC,SLS,SCS,SLT,SEQ,SMI,SF,SNE,SGE,SPL,SGT,ST,SHI,SVC,SLE,SVS,STOP,SUB,SUBA,SUBI,SUBQ,%
-SUBX,SWAP,TAS,TRAP,TRAPV,TST,UNLK},%
-   sensitive=false,%
-   morecomment=[l]*,%
-   morecomment=[l];%
-   }[keywords,comments,strings]
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-% Credits go to \lstthanks{Andrew~Zabolotny}{zap@cobra.ru}{2002/07/05}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%%
-%% x86masm definition (c) 2002 Andrew Zabolotny
-%%
-\lst@definelanguage[x86masm]{Assembler}%
-  {morekeywords={al,ah,ax,eax,bl,bh,bx,ebx,cl,ch,cx,ecx,dl,dh,dx,edx,%
-      si,esi,di,edi,bp,ebp,sp,esp,cs,ds,es,ss,fs,gs,cr0,cr1,cr2,cr3,%
-      db0,db1,db2,db3,db4,db5,db6,db7,tr0,tr1,tr2,tr3,tr4,tr5,tr6,tr7,%
-      st,aaa,aad,aam,aas,adc,add,and,arpl,bound,bsf,bsr,bswap,bt,btc,%
-      btr,bts,call,cbw,cdq,clc,cld,cli,clts,cmc,cmp,cmps,cmpsb,cmpsw,%
-      cmpsd,cmpxchg,cwd,cwde,daa,das,dec,div,enter,hlt,idiv,imul,in,%
-      inc,ins,int,into,invd,invlpg,iret,ja,jae,jb,jbe,jc,jcxz,jecxz,%
-      je,jg,jge,jl,jle,jna,jnae,jnb,jnbe,jnc,jne,jng,jnge,jnl,jnle,%
-      jno,jnp,jns,jnz,jo,jp,jpe,jpo,js,jz,jmp,lahf,lar,lea,leave,lgdt,%
-      lidt,lldt,lmsw,lock,lods,lodsb,lodsw,lodsd,loop,loopz,loopnz,%
-      loope,loopne,lds,les,lfs,lgs,lss,lsl,ltr,mov,movs,movsb,movsw,%
-      movsd,movsx,movzx,mul,neg,nop,not,or,out,outs,pop,popa,popad,%
-      popf,popfd,push,pusha,pushad,pushf,pushfd,rcl,rcr,rep,repe,%
-      repne,repz,repnz,ret,retf,rol,ror,sahf,sal,sar,sbb,scas,seta,%
-      setae,setb,setbe,setc,sete,setg,setge,setl,setle,setna,setnae,%
-      setnb,setnbe,setnc,setne,setng,setnge,setnl,setnle,setno,setnp,%
-      setns,setnz,seto,setp,setpe,setpo,sets,setz,sgdt,shl,shld,shr,%
-      shrd,sidt,sldt,smsw,stc,std,sti,stos,stosb,stosw,stosd,str,sub,%
-      test,verr,verw,wait,wbinvd,xadd,xchg,xlatb,xor,fabs,fadd,fbld,%
-      fbstp,fchs,fclex,fcom,fcos,fdecstp,fdiv,fdivr,ffree,fiadd,ficom,%
-      fidiv,fidivr,fild,fimul,fincstp,finit,fist,fisub,fisubr,fld,fld1,%
-      fldl2e,fldl2t,fldlg2,fldln2,fldpi,fldz,fldcw,fldenv,fmul,fnop,%
-      fpatan,fprem,fprem1,fptan,frndint,frstor,fsave,fscale,fsetpm,%
-      fsin,fsincos,fsqrt,fst,fstcw,fstenv,fstsw,fsub,fsubr,ftst,fucom,%
-      fwait,fxam,fxch,fxtract,fyl2x,fyl2xp1,f2xm1},%
-   morekeywords=[2]{.align,.alpha,assume,byte,code,comm,comment,.const,%
-      .cref,.data,.data?,db,dd,df,dosseg,dq,dt,dw,dword,else,end,endif,%
-      endm,endp,ends,eq,equ,.err,.err1,.err2,.errb,.errdef,.errdif,%
-      .erre,.erridn,.errnb,.errndef,.errnz,event,exitm,extrn,far,%
-      .fardata,.fardata?,fword,ge,group,gt,high,if,if1,if2,ifb,ifdef,%
-      ifdif,ife,ifidn,ifnb,ifndef,include,includelib,irp,irpc,label,%
-      .lall,le,length,.lfcond,.list,local,low,lt,macro,mask,mod,.model,%
-      name,ne,near,offset,org,out,page,proc,ptr,public,purge,qword,.%
-      radix,record,rept,.sall,seg,segment,.seq,.sfcond,short,size,%
-      .stack,struc,subttl,tbyte,.tfcond,this,title,type,.type,width,%
-      word,.xall,.xcref,.xlist},%
-   alsoletter=.,alsodigit=?,%
-   sensitive=f,%
-   morestring=[b]",%
-   morestring=[b]',%
-   morecomment=[l];%
-   }[keywords,comments,strings]
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Awk}
-%
-% Thanks to \lstthanks{Dr.~Christoph~Giess}{Ch.Giess@gmx.de}{2003/07/15} for
-% providing these definitions.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%%
-%% awk definitions (c) Christoph Giess
-%%
-\lst@definelanguage[gnu]{Awk}[POSIX]{Awk}%
-  {morekeywords={and,asort,bindtextdomain,compl,dcgettext,gensub,%
-      lshift,mktime,or,rshift,strftime,strtonum,systime,xor,extension}%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[POSIX]{Awk}%
-  {keywords={BEGIN,END,close,getline,next,nextfile,print,printf,%
-      system,fflush,atan2,cos,exp,int,log,rand,sin,sqrt,srand,gsub,%
-      index,length,match,split,sprintf,strtonum,sub,substr,tolower,%
-      toupper,if,while,do,for,break,continue,delete,exit,function,%
-      return},%
-   sensitive,%
-   morecomment=[l]\#,%
-   morecomment=[l]//,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Basic}
-%
-% Credits go to \lstthanks{Robert Frank}{rf7@ukc.ac.uk}{2002/07/05}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%%
-%% Visual Basic definition (c) 2002 Robert Frank
-%%
-\lst@definelanguage[Visual]{Basic}
-  {morekeywords={Abs,Array,Asc,AscB,AscW,Atn,Avg,CBool,CByte,CCur,%
-      CDate,CDbl,Cdec,Choose,Chr,ChrB,ChrW,CInt,CLng,Command,Cos,%
-      Count,CreateObject,CSng,CStr,CurDir,CVar,CVDate,CVErr,Date,%
-      DateAdd,DateDiff,DatePart,DateSerial,DateValue,Day,DDB,Dir,%
-      DoEvents,Environ,EOF,Error,Exp,FileAttr,FileDateTime,FileLen,%
-      Fix,Format,FreeFile,FV,GetAllStrings,GetAttr,%
-      GetAutoServerSettings,GetObject,GetSetting,Hex,Hour,IIf,%
-      IMEStatus,Input,InputB,InputBox,InStr,InstB,Int,Integer,IPmt,%
-      IsArray,IsDate,IsEmpty,IsError,IsMissing,IsNull,IsNumeric,%
-      IsObject,LBound,LCase,Left,LeftB,Len,LenB,LoadPicture,Loc,LOF,%
-      Log,Ltrim,Max,Mid,MidB,Min,Minute,MIRR,Month,MsgBox,Now,NPer,%
-      NPV,Oct,Partition,Pmt,PPmt,PV,QBColor,Rate,RGB,Right,RightB,Rnd,%
-      Rtrim,Second,Seek,Sgn,Shell,Sin,SLN,Space,Spc,Sqr,StDev,StDevP,%
-      Str,StrComp,StrConv,String,Switch,Sum,SYD,Tab,Tan,Time,Timer,%
-      TimeSerial,TimeValue,Trim,TypeName,UBound,Ucase,Val,Var,VarP,%
-      VarType,Weekday,Year},% functions
-   morekeywords=[2]{Accept,Activate,Add,AddCustom,AddFile,AddFromFile,%
-      AddFromTemplate,AddItem,AddNew,AddToAddInToolbar,%
-      AddToolboxProgID,Append,AppendChunk,Arrange,Assert,AsyncRead,%
-      BatchUpdate,BeginTrans,Bind,Cancel,CancelAsyncRead,CancelBatch,%
-      CancelUpdate,CanPropertyChange,CaptureImage,CellText,CellValue,%
-      Circle,Clear,ClearFields,ClearSel,ClearSelCols,Clone,Close,Cls,%
-      ColContaining,ColumnSize,CommitTrans,CompactDatabase,Compose,%
-      Connect,Copy,CopyQueryDef,CreateDatabase,CreateDragImage,%
-      CreateEmbed,CreateField,CreateGroup,CreateIndex,CreateLink,%
-      CreatePreparedStatement,CreatePropery,CreateQuery,%
-      CreateQueryDef,CreateRelation,CreateTableDef,CreateUser,%
-      CreateWorkspace,Customize,Delete,DeleteColumnLabels,%
-      DeleteColumns,DeleteRowLabels,DeleteRows,DoVerb,Drag,Draw,Edit,%
-      EditCopy,EditPaste,EndDoc,EnsureVisible,EstablishConnection,%
-      Execute,ExtractIcon,Fetch,FetchVerbs,Files,FillCache,Find,%
-      FindFirst,FindItem,FindLast,FindNext,FindPrevious,Forward,%
-      GetBookmark,GetChunk,GetClipString,GetData,GetFirstVisible,%
-      GetFormat,GetHeader,GetLineFromChar,GetNumTicks,GetRows,%
-      GetSelectedPart,GetText,GetVisibleCount,GoBack,GoForward,Hide,%
-      HitTest,HoldFields,Idle,InitializeLabels,InsertColumnLabels,%
-      InsertColumns,InsertObjDlg,InsertRowLabels,InsertRows,Item,%
-      KillDoc,Layout,Line,LinkExecute,LinkPoke,LinkRequest,LinkSend,%
-      Listen,LoadFile,LoadResData,LoadResPicture,LoadResString,%
-      LogEvent,MakeCompileFile,MakeReplica,MoreResults,Move,MoveData,%
-      MoveFirst,MoveLast,MoveNext,MovePrevious,NavigateTo,NewPage,%
-      NewPassword,NextRecordset,OLEDrag,OnAddinsUpdate,OnConnection,%
-      OnDisconnection,OnStartupComplete,Open,OpenConnection,%
-      OpenDatabase,OpenQueryDef,OpenRecordset,OpenResultset,OpenURL,%
-      Overlay,PaintPicture,Paste,PastSpecialDlg,PeekData,Play,Point,%
-      PopulatePartial,PopupMenu,Print,PrintForm,PropertyChanged,Pset,%
-      Quit,Raise,RandomDataFill,RandomFillColumns,RandomFillRows,%
-      rdoCreateEnvironment,rdoRegisterDataSource,ReadFromFile,%
-      ReadProperty,Rebind,ReFill,Refresh,RefreshLink,RegisterDatabase,%
-      Reload,Remove,RemoveAddInFromToolbar,RemoveItem,Render,%
-      RepairDatabase,Reply,ReplyAll,Requery,ResetCustom,%
-      ResetCustomLabel,ResolveName,RestoreToolbar,Resync,Rollback,%
-      RollbackTrans,RowBookmark,RowContaining,RowTop,Save,SaveAs,%
-      SaveFile,SaveToFile,SaveToolbar,SaveToOle1File,Scale,ScaleX,%
-      ScaleY,Scroll,Select,SelectAll,SelectPart,SelPrint,Send,%
-      SendData,Set,SetAutoServerSettings,SetData,SetFocus,SetOption,%
-      SetSize,SetText,SetViewport,Show,ShowColor,ShowFont,ShowHelp,%
-      ShowOpen,ShowPrinter,ShowSave,ShowWhatsThis,SignOff,SignOn,Size,%
-      Span,SplitContaining,StartLabelEdit,StartLogging,Stop,%
-      Synchronize,TextHeight,TextWidth,ToDefaults,TwipsToChartPart,%
-      TypeByChartType,Update,UpdateControls,UpdateRecord,UpdateRow,%
-      Upto,WhatsThisMode,WriteProperty,ZOrder},% methods
-   morekeywords=[3]{AccessKeyPress,AfterAddFile,AfterChangeFileName,%
-      AfterCloseFile,AfterColEdit,AfterColUpdate,AfterDelete,%
-      AfterInsert,AfterLabelEdit,AfterRemoveFile,AfterUpdate,%
-      AfterWriteFile,AmbienChanged,ApplyChanges,Associate,%
-      AsyncReadComplete,AxisActivated,AxisLabelActivated,%
-      AxisLabelSelected,AxisLabelUpdated,AxisSelected,%
-      AxisTitleActivated,AxisTitleSelected,AxisTitleUpdated,%
-      AxisUpdated,BeforeClick,BeforeColEdit,BeforeColUpdate,%
-      BeforeConnect,BeforeDelete,BeforeInsert,BeforeLabelEdit,%
-      BeforeLoadFile,BeforeUpdate,ButtonClick,ButtonCompleted,%
-      ButtonGotFocus,ButtonLostFocus,Change,ChartActivated,%
-      ChartSelected,ChartUpdated,Click,ColEdit,Collapse,ColResize,%
-      ColumnClick,Compare,ConfigChageCancelled,ConfigChanged,%
-      ConnectionRequest,DataArrival,DataChanged,DataUpdated,DblClick,%
-      Deactivate,DeviceArrival,DeviceOtherEvent,DeviceQueryRemove,%
-      DeviceQueryRemoveFailed,DeviceRemoveComplete,DeviceRemovePending,%
-      DevModeChange,Disconnect,DisplayChanged,Dissociate,%
-      DoGetNewFileName,Done,DonePainting,DownClick,DragDrop,DragOver,%
-      DropDown,EditProperty,EnterCell,EnterFocus,Event,ExitFocus,%
-      Expand,FootnoteActivated,FootnoteSelected,FootnoteUpdated,%
-      GotFocus,HeadClick,InfoMessage,Initialize,IniProperties,%
-      ItemActivated,ItemAdded,ItemCheck,ItemClick,ItemReloaded,%
-      ItemRemoved,ItemRenamed,ItemSeletected,KeyDown,KeyPress,KeyUp,%
-      LeaveCell,LegendActivated,LegendSelected,LegendUpdated,%
-      LinkClose,LinkError,LinkNotify,LinkOpen,Load,LostFocus,%
-      MouseDown,MouseMove,MouseUp,NodeClick,ObjectMove,%
-      OLECompleteDrag,OLEDragDrop,OLEDragOver,OLEGiveFeedback,%
-      OLESetData,OLEStartDrag,OnAddNew,OnComm,Paint,PanelClick,%
-      PanelDblClick,PathChange,PatternChange,PlotActivated,%
-      PlotSelected,PlotUpdated,PointActivated,PointLabelActivated,%
-      PointLabelSelected,PointLabelUpdated,PointSelected,%
-      PointUpdated,PowerQuerySuspend,PowerResume,PowerStatusChanged,%
-      PowerSuspend,QueryChangeConfig,QueryComplete,QueryCompleted,%
-      QueryTimeout,QueryUnload,ReadProperties,Reposition,%
-      RequestChangeFileName,RequestWriteFile,Resize,ResultsChanged,%
-      RowColChange,RowCurrencyChange,RowResize,RowStatusChanged,%
-      SelChange,SelectionChanged,SendComplete,SendProgress,%
-      SeriesActivated,SeriesSelected,SeriesUpdated,SettingChanged,%
-      SplitChange,StateChanged,StatusUpdate,SysColorsChanged,%
-      Terminate,TimeChanged,TitleActivated,TitleSelected,%
-      TitleActivated,UnboundAddData,UnboundDeleteRow,%
-      UnboundGetRelativeBookmark,UnboundReadData,UnboundWriteData,%
-      Unload,UpClick,Updated,Validate,ValidationError,WillAssociate,%
-      WillChangeData,WillDissociate,WillExecute,WillUpdateRows,%
-      WithEvents,WriteProperties},% VB-events
-   morekeywords=[4]{AppActivate,Base,Beep,Call,Case,ChDir,ChDrive,%
-      Const,Declare,DefBool,DefByte,DefCur,DefDate,DefDbl,DefDec,%
-      DefInt,DefLng,DefObj,DefSng,DefStr,Deftype,DefVar,DeleteSetting,%
-      Dim,Do,Else,ElseIf,End,Enum,Erase,Event,Exit,Explicit,FileCopy,%
-      For,ForEach,Friend,Function,Get,GoSub,GoTo,If,Implements,Kill,%
-      Let,LineInput,Lock,Lset,MkDir,Name,Next,OnError,On,Option,%
-      Private,Property,Public,Put,RaiseEvent,Randomize,ReDim,Rem,%
-      Reset,Resume,Return,RmDir,Rset,SavePicture,SaveSetting,%
-      SendKeys,SetAttr,Static,Sub,Then,Type,Unlock,Wend,While,Width,%
-      With,Write},% statements
-   sensitive=false,%
-   keywordcomment=rem,%
-   MoreSelectCharTable=\def\lst@BeginKC@{% chmod
-      \lst@ResetToken
-      \lst@BeginComment\lst@GPmode{{\lst@commentstyle}%
-                       \lst@Lmodetrue\lst@modetrue}\@empty},%
-   morecomment=[l]{'},%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]",%
-   }[keywords,comments,strings,keywordcomments]
-%</lang1>
-%    \end{macrocode}
-% Thanks to \lsthelper{Jonathan~de~Halleux}{dehalleux@pelikhan.com}
-% {2002/12/27}{missing comma} for reporting a missing comma after
-% \texttt{MoreSelectCharTable}, which was the cause of a problem
-% reported by \lsthelper{Robert~Frank}{rf7@ukc.ac.uk}{2002/10/27}
-% {indention with language={[Visual]Basic} in optional argument}.
-% \lsthelper{Martina~Hansel}{Martina.Hansel@fhtw-berlin.de}{2003/05/29}
-% {missing comma} also found the bug and the fix.
-% \endgroup
-%
-%
-% \subsection{Clean}
-%
-% Thanks to \lstthanks{Jos\'e~Romildo~Malaquias}{romildo@iceb.ufop.br}{2000/08/08}.
-% \lsthelper{Markus~Pahlow}{pahlowm@mar.dfo-mpo.gc.ca}{2001/10/12}{missing comma}
-% found a missing comma
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%%
-%% Clean definition (c) 1999 Jos\'e Romildo Malaquias
-%%
-%% Clean 1.3 :  some standard functional language: pure, lazy,
-%%              polymorphic type system, modules, type classes,
-%%              garbage collection, functions as first class citizens
-%%
-\lst@definelanguage{Clean}%
-  {otherkeywords={:,::,=,:==,=:,=>,->,<-,<-:,\{,\},\{|,|\},\#,\#!,|,\&,%
-      [,],!,.,\\\\,;,_},%
-   morekeywords={from,definition,implementation,import,module,system,%
-      case,code,if,in,let,let!,of,where,with,infix,infixl,infixr},%
-   morendkeywords={True,False,Start,Int,Real,Char,Bool,String,World,%
-      File,ProcId},%
-   sensitive,%
-   morecomment=[l]//,% missing comma: Markus Pahlow
-   morecomment=[n]{/*}{*/},%
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Corba IDL}
-%
-% This language definition is due to \lstthanks{Jens~T.~Berger~Thielemann}
-% {jensthi@ifi.uio.no}{1999/11/28}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%%
-%% Corba IDL definition (c) 1999 Jens T. Berger Thielemann
-%%
-\lst@definelanguage[CORBA]{IDL}%
-  {morekeywords={any,attribute,boolean,case,char,const,context,default,%
-      double,enum,exception,fixed,float,in,inout,interface,long,module,%
-      native,Object,octet,oneway,out,raises,readonly,sequence,short,%
-      string,struct,switch,typedef,union,unsigned,void,wchar,wstring,%
-      FALSE,TRUE},%
-   sensitive,%
-   moredirectives={define,elif,else,endif,error,if,ifdef,ifndef,line,%
-      include,pragma,undef,warning},%
-   moredelim=*[directive]\#,%
-   morecomment=[l]//,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]"%
-  }[keywords,comments,strings,directives]%
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{C, C++, et al}
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-% \lstthanks{Michael Fiedler}{post@michael-fiedler.net}{2014/09/04}
-% provided the following list of new introduced keywords for C++11.
-%    \begin{macrocode}
-\lst@definelanguage[11]{C++}[ISO]{C++}%
-  {morekeywords={alignas,alignof,char16_t,char32_t,constexpr,%
-      decltype,noexcept,nullptr,static_assert,thread_local},%
-  }%
-%    \end{macrocode}
-% \lstthanks{Michael Piefel}{piefel@informatik.hu-berlin.de}{2001/11/21}
-% suggested some more changes and added GNU C++.
-% For compatibility the `ANSI' language is defined in terms of ISO.
-%    \begin{macrocode}
-\lst@definelanguage[ANSI]{C++}[ISO]{C++}{}%
-%    \end{macrocode}
-% \lstthanks{Michael Piefel}{piefel@informatik.hu-berlin.de}{2001/11/21}
-% suggested some more changes and added GNU C++.
-%    \begin{macrocode}
-\lst@definelanguage[GNU]{C++}[ISO]{C++}%
-  {morekeywords={__attribute__,__extension__,__restrict,__restrict__,%
-      typeof,__typeof__},%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[Visual]{C++}[ISO]{C++}%
-  {morekeywords={__asm,__based,__cdecl,__declspec,dllexport,%
-      dllimport,__except,__fastcall,__finally,__inline,__int8,__int16,%
-      __int32,__int64,naked,__stdcall,thread,__try,__leave},%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[ISO]{C++}[ANSI]{C}%
-  {morekeywords={and,and_eq,asm,bad_cast,bad_typeid,bitand,bitor,bool,%
-      catch,class,compl,const_cast,delete,dynamic_cast,explicit,export,%
-      false,friend,inline,mutable,namespace,new,not,not_eq,operator,or,%
-      or_eq,private,protected,public,reinterpret_cast,static_cast,%
-      template,this,throw,true,try,typeid,type_info,typename,using,%
-      virtual,wchar_t,xor,xor_eq},%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-% Objective-C is due to \lstthanks{Detlev~Dr\"oge}
-%{droege@informatik.uni-koblenz.de}{1997/11/04}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Objective-C definition (c) 1997 Detlev Droege
-%%
-\lst@definelanguage[Objective]{C}[ANSI]{C}
-  {morekeywords={bycopy,id,in,inout,oneway,out,self,super,%
-      @class,@defs,@encode,@end,@implementation,@interface,@private,%
-      @protected,@protocol,@public,@selector},%
-   moredirectives={import}%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \lstthanks{J\"org~Viermann}{}{2004/07/17} provided the keywords for Handel-C.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Handel-C definition, refer http://www.celoxica.com
-%%
-\lst@definelanguage[Handel]{C}[ANSI]{C}
-  {morekeywords={assert,chan,chanin,chanout,clock,delay,expr,external,%
-      external_divide,family,ifselect,in,inline,interface,internal,%
-      internal_divid,intwidth,let,macro,mpram,par,part,prialt,proc,ram,%
-      releasesema,reset,rom,select,sema,set,seq,shared,signal,try,%
-      reset,trysema,typeof,undefined,width,with,wom},%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[ANSI]{C}%
-  {morekeywords={auto,break,case,char,const,continue,default,do,double,%
-      else,enum,extern,float,for,goto,if,int,long,register,return,%
-      short,signed,sizeof,static,struct,switch,typedef,union,unsigned,%
-      void,volatile,while},%
-   sensitive,%
-   morecomment=[s]{/*}{*/},%
-   morecomment=[l]//,% nonstandard
-   morestring=[b]",%
-   morestring=[b]',%
-   moredelim=*[directive]\#,%
-   moredirectives={define,elif,else,endif,error,if,ifdef,ifndef,line,%
-      include,pragma,undef,warning}%
-  }[keywords,comments,strings,directives]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-% Thanks go to \lstthanks{Martin~Brodbeck}{Martin.Brodbeck@gmx.de}{2002/03/17}.
-%    \begin{macrocode}
-%%
-%% C-Sharp definition (c) 2002 Martin Brodbeck
-%%
-\lst@definelanguage[Sharp]{C}%
-  {morekeywords={abstract,base,bool,break,byte,case,catch,char,checked,%
-      class,const,continue,decimal,default,delegate,do,double,else,%
-      enum,event,explicit,extern,false,finally,fixed,float,for,foreach,%
-      goto,if,implicit,in,int,interface,internal,is,lock,long,%
-      namespace,new,null,object,operator,out,override,params,private,%
-      protected,public,readonly,ref,return,sbyte,sealed,short,sizeof,%
-      static,string,struct,switch,this,throw,true,try,typeof,uint,%
-      ulong,unchecked,unsafe,ushort,using,virtual,void,while,%
-      as,volatile,stackalloc},% Kai K\"ohne
-   sensitive,%
-   morecomment=[s]{/*}{*/},%
-   morecomment=[l]//,%
-   morestring=[b]"
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Caml and Objective Caml}
-%
-% \lstthanks{Patrick~Cousot}{Patrick.Cousot@wanadoo.fr}{1999/01/09} mailed me
-% the definition. \lsthelper{Tom~Hirschowitz}{tom.hirschowitz@inria.fr}
-% {2003/05/27}{missing keywords: object, ref} added two keywords.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% (Objective) Caml definition (c) 1999 Patrick Cousot
-%%
-%% Objective CAML and Caml light are freely available, together with a
-%% reference manual, at URL ftp.inria.fr/lang/caml-light for the Unix,
-%% Windows and Macintosh OS operating systems.
-%%
-\lst@definelanguage[Objective]{Caml}[light]{Caml}
-  {deletekeywords={not,prefix,value,where},%
-   morekeywords={assert,asr,class,closed,constraint,external,false,%
-      functor,include,inherit,land,lazy,lor,lsl,lsr,lxor,method,mod,%
-      module,new,open,parser,private,sig,struct,true,val,virtual,when,%
-      object,ref},% TH
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[light]{Caml}
-  {morekeywords={and,as,begin,do,done,downto,else,end,exception,for,%
-      fun,function,if,in,let,match,mutable,not,of,or,prefix,rec,then,%
-      to,try,type,value,where,while,with},%
-   sensitive,%
-   morecomment=[n]{(*}{*)},%
-   morestring=[b]",%
-   moredelim=*[directive]\#,%
-   moredirectives={open,close,include}%
-  }[keywords,comments,strings,directives]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Common Intermediate Language}
-%
-% This language definition for CIL (Common Intermediate Language, part of
-% Microsoft's .NET interface) was provided by
-% \lsthelper{Olaf~Conradi}{-}{2006/08/23}. \lsthelper{Akim
-% Demaille}{akim@lrde.epita.fr}{2014/07/09}{Algol broken} pointed out that
-% the support for Algol was broken, but that came from a long missing `@'
-% in the following |lst@definelanguage|.
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{CIL}%
-  {morekeywords=[1]{assembly,beforefieldinit,class,default,cdecl,cil,corflags,%
-                    culture,custom,data,entrypoint,fastcall,field,file,%
-                    hidebysig,hash,il,imagebase,locals,managed,marshall,%
-                    maxstack,mresource,method,module,namespace,publickey,%
-                    stdcall,subsystem,thiscall,unmanaged,vararg,ver,vtfixup,%
-                   % types
-                    bool,char,float32,float64,int,int8,int16,int32,%
-                    int64,method,native,object,string,modopt,modreq,pinned,%
-                    typedref,valuetype,unsigned,void,%
-                   % defining types
-                    abstract,ansi,auto,autochar,beforefieldinit,boxed,class,%
-                    explicit,extends,implements,interface,famandassem,family,%
-                    famorassem,inherits,nested,override,pack,private,property,%
-                    public,rtspecialname,sealed,sequential,serializable,size,%
-                    specialname,static,unicode,%
-                   % postfix
-                    algorithm,alignment,extern,init,from,nometadata,with},%
-  morekeywords=[2]{add,and,arglist,beq,bge,bgt,ble,blt,bne,br,break,brfalse,%
-                    brtrue,call,calli,ceq,cgt,ckfinite,clt,conv,cpblk,div,%
-                    dup,endfilter,endfinally,initblk,jmp,ldarg,ldarga,ldc,%
-                    ldftn,ldind,ldloc,ldloca,ldnull,leave,localloc,mul,neg,%
-                    nop,not,or,pop,rem,ret,shl,shr,starg,stind,stloc,sub,%
-                    switch,xor,%
-                   % prefix
-                    tail,unaligned,volatile,%
-                   % postfix
-                    un,s,ovf,%
-                   % object
-                    box,callvirt,castclass,cpobj,cctor,ctor,initobj,isinst,%
-                    ldelem,ldelema,ldfld,ldflda,ldlen,ldobj,ldsfld,ldsflda,%
-                    ldstr,ldtoken,ldvirtftn,mkrefany,newarr,newobj,refanytype,%
-                    refanyval,rethrow,sizeof,stelem,stfld,stobj,stsfld,throw,%
-                    unbox},%
-  sensitive=true,%
-  morecomment=[l]{//},%
-  morestring=[b]"%
-}[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Cobol}
-%
-% Keywords are not marked if their names are broken by EOL, for example DEBUG-
-% CONTENTS. Sometimes portions of a string are not printed as a string.
-% This happens if the double quote is not doubled to insert a quote,
-% e.g.~|""bad" cobol"| won't be printed correctly.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[ibm]{Cobol}[1985]{Cobol}%
-  {morekeywords={ADDRESS,BEGINNING,COMP-3,COMP-4,COMPUTATIONAL,%
-      COMPUTATIONAL-3,COMPUTATIONAL-4,DISPLAY-1,EGCS,EJECT,ENDING,%
-      ENTRY,GOBACK,ID,MORE-LABELS,NULL,NULLS,PASSWORD,RECORDING,%
-      RETURN-CODE,SERVICE,SKIP1,SKIP2,SKIP3,SORT-CONTROL,SORT-RETURN,%
-      SUPPRESS,TITLE,WHEN-COMPILED},%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[1985]{Cobol}[1974]{Cobol}%
-  {morekeywords={ALPHABET,ALPHABETIC-LOWER,ALPHABETIC-UPPER,%
-      ALPHANUMERIC,ALPHANUMERIC-EDITED,ANY,CLASS,COMMON,CONTENT,%
-      CONTINUE,DAY-OF-WEEK,END-ADD,END-CALL,END-COMPUTE,END-DELETE,%
-      END-DIVIDE,END-EVALUATE,END-IF,END-MULTIPLY,END-PERFORM,END-READ,%
-      END-RECEIVE,END-RETURN,END-REWRITE,END-SEARCH,END-START,%
-      END-STRING,END-SUBTRACT,END-UNSTRING,END-WRITE,EVALUATE,EXTERNAL,%
-      FALSE,GLOBAL,INITIALIZE,NUMERIC-EDITED,ORDER,OTHER,%
-      PACKED-DECIMAL,PADDING,PURGE,REFERENCE,RELOAD,REPLACE,STANDARD-1,%
-      STANDARD-2,TEST,THEN,TRUE},%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[1974]{Cobol}%
-  {morekeywords={ACCEPT,ACCESS,ADD,ADVANCING,AFTER,ALL,ALPHABETIC,ALSO,%
-      ALTER,ALTERNATE,AND,ARE,AREA,AREAS,ASCENDING,ASSIGN,AT,AUTHOR,%
-      BEFORE,BINARY,BLANK,BLOCK,BOTTOM,BY,CALL,CANCEL,CD,CF,CH,%
-      CHARACTER,CHARACTERS,CLOCK-UNITS,CLOSE,COBOL,CODE,CODE-SET,%
-      COLLATING,COLUMN,COMMA,COMMUNICATION,COMP,COMPUTE,CONFIGURATION,%
-      CONTAINS,CONTROL,CONTROLS,CONVERTING,COPY,CORR,CORRESPONDING,%
-      COUNT,CURRENCY,DATA,DATE,DATE-COMPILED,DATE-WRITTEN,DAY,DE,%
-      DEBUG-CONTENTS,DEGUB-ITEM,DEBUG-LINE,DEBUG-NAME,DEBUG-SUB1,%
-      DEBUG-SUB2,DEBUG-SUB3,DEBUGGING,DECIMAL-POINT,DECLARATIVES,%
-      DELETE,DELIMITED,DELIMITER,DEPENDING,DESCENDING,DESTINATION,%
-      DETAIL,DISABLE,DISPLAY,DIVIDE,DIVISION,DOWN,DUPLICATES,DYNAMIC,%
-      EGI,ELSE,EMI,ENABLE,END,END-OF-PAGE,ENTER,ENVIRONMENT,EOP,EQUAL,%
-      ERROR,ESI,EVERY,EXCEPTION,EXIT,EXTEND,FD,FILE,FILE-CONTROL,%
-      FILLER,FINAL,FIRST,FOOTING,FOR,FROM,GENERATE,GIVING,GO,GREATER,%
-      GROUP,HEADING,HIGH-VALUE,HIGH-VALUES,I-O,I-O-CONTROL,%
-      IDENTIFICATION,IF,IN,INDEX,INDEXED,INDICATE,INITIAL,INITIATE,%
-      INPUT,INPUT-OUTPUT,INSPECT,INSTALLATION,INTO,INVALID,IS,JUST,%
-      JUSTIFIED,KEY,LABEL,LAST,LEADING,LEFT,LENGTH,LESS,LIMIT,LIMITS,%
-      LINAGE,LINAGE-COUNTER,LINE,LINE-COUNTER,LINES,LINKAGE,LOCK,%
-      LOW-VALUE,LOW-VALUES,MEMORY,MERGE,MESSAGE,MODE,MODULES,MOVE,%
-      MULTIPLE,MULTIPLY,NATIVE,NEGATIVE,NEXT,NO,NOT,NUMBER,NUMERIC,%
-      OBJECT-COMPUTER,OCCURS,OF,OFF,OMITTED,ON,OPEN,OPTIONAL,OR,%
-      ORGANIZATION,OUTPUT,OVERFLOW,PAGE,PAGE-COUNTER,PERFORM,PF,PH,PIC,%
-      PICTURE,PLUS,POINTER,POSITION,PRINTING,POSITIVE,PRINTING,%
-      PROCEDURE,PROCEDURES,PROCEED,PROGRAM,PROGRAM-ID,QUEUE,QUOTE,%
-      QUOTES,RANDOM,RD,READ,RECEIVE,RECORD,RECORDING,RECORDS,REDEFINES,%
-      REEL,REFERENCES,RELATIVE,RELEASE,REMAINDER,REMOVAL,RENAMES,%
-      REPLACING,REPORT,REPORTING,REPORTS,RERUN,RESERVE,RESET,RETURN,%
-      REVERSED,REWIND,REWRITE,RF,RH,RIGHT,ROUNDED,RUN,SAME,SD,SEARCH,%
-      SECTION,SECURITY,SEGMENT,SEGMENT-LIMIT,SELECT,SEND,SENTENCE,%
-      SEPARATE,SEQUENCE,SEQUENTIAL,SET,SIGN,SIZE,SORT,SORT-MERGE,%
-      SOURCE,SOURCE-COMPUTER,SPACE,SPACES,SPECIAL-NAMES,STANDARD,START,%
-      STATUS,STOP,STRING,SUB-QUEUE-1,SUB-QUEUE-2,SUB-QUEUE-3,SUBTRACT,%
-      SUM,SYMBOLIC,SYNC,SYNCHRONIZED,TABLE,TALLYING,TAPE,TERMINAL,%
-      TERMINATE,TEXT,THAN,THROUGH,THRU,TIME,TIMES,TO,TOP,TRAILING,TYPE,%
-      UNIT,UNSTRING,UNTIL,UP,UPON,USAGE,USE,USING,VALUE,VALUES,VARYING,%
-      WHEN,WITH,WORDS,WORKING-STORAGE,WRITE,ZERO,ZEROES,ZEROS},%
-   alsodigit=-,%
-   sensitive=f,% ???
-   morecomment=[f][commentstyle][6]*,%
-   morestring=[d]"% ??? doubled
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-% \texttt{commentstyle} (not the surrounding brackets) have been added after
-% a bug report by \lsthelper{Stephen Reindl}{Stephen.Reindl@vodafone.de}
-% {2002/05/28}{no commentstyle in Cobol}.
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Comal 80}
-%
-% The data is from
-% \begin{itemize}
-% \item
-%		\textsc{Borge R. Christensen}:
-%		\textbf{Strukturierte Programmierung mit COMAL 80} [aus dem
-%		D\"anischen \"ubertragen und bearbeitet von Margarete Kragh];
-%		2., verb.\ Auflage -- M\"unchen; Wien: Oldenburg, 1985;
-%		ISBN 3-486-26902-X.
-% \end{itemize}
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Comal 80}%
-  {morekeywords={AND,AUTO,CASE,DATA,DEL,DIM,DIV,DO,ELSE,ENDCASE,ENDIF,%
-      ENDPROC,ENDWHILE,EOD,EXEC,FALSE,FOR,GOTO,IF,INPUT,INT,LIST,LOAD,%
-      MOD,NEW,NEXT,NOT,OF,OR,PRINT,PROC,RANDOM,RENUM,REPEAT,RND,RUN,%
-      SAVE,SELECT,STOP,TAB,THEN,TRUE,UNTIL,WHILE,ZONE},%
-   sensitive=f,% ???
-   morecomment=[l]//,%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{COMMAND.COM Batch Files}
-%
-% This definition for DOS and Windows batch files is from
-% \lstthanks{Stephan Hennig}{-}{2006/10/11}.
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[WinXP]{command.com}%
-  {morekeywords={assoc,at,attrib,bootcfg,break,cacls,call,cd,chcp,chdir,%
-      chkdsk,chkntfs,cls,cmd,cmdextversion,color,comp,compact,convert,copy,%
-      date,defined,del,dir,diskcomp,diskcopy,do,doskey,echo,else,endlocal,%
-      erase,errorlevel,exist,exit,fc,find,findstr,for,format,ftype,goto,%
-      graftabl,help,if,in,label,md,mkdir,mode,more,move,not,off,path,%
-      pause,popd,print,prompt,pushd,rd,recover,ren,rename,replace,rmdir,%
-      set,setlocal,shift,sort,start,subst,time,title,tree,type,ver,%
-      verify,vol,xcopy},%
-   sensitive=false,%
-   alsoother={@},%
-   alsoletter={\%~:-/},%
-   morecomment=[l]{rem},%
-   morecomment=[l]{reM},%
-   morecomment=[l]{rEm},%
-   morecomment=[l]{rEM},%
-   morecomment=[l]{Rem},%
-   morecomment=[l]{ReM},%
-   morecomment=[l]{REm},%
-   morecomment=[l]{REM},%
-   morestring=[d]"%
-}[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Comsol Multiphysics}
-%
-% Comsol Multiphysics (Prior to version 3.2 known as Femlab) can be used
-% standalone or as an extension to MatLab.  This definition is due to
-% \lstthanks{Martin~Heller}{-}{2006/05/10}.
-%
-% Unfortunately, there is a conflict in that Comsol is case-insensitive,
-% whereas Matlab is case-sensitive; \textsf{listings} does not
-% currently support different case-sensitivities in the same listing.
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Comsol}%
-  {morekeywords={%
-      adaption,arc1,arc2,arrayr,assemble,asseminit,beziercurve2,block2,%
-      block3,bsplinecurve2,bsplinecurve3,bsplinesurf3,bypassplot,cardg,%
-      ccoeffgroup,chamfer,checkgeom,circ1,circ2,coeff2cell,comsol,%
-      cone2,cone3,Contents,createhexes,createprisms,createquads,csgbl2,%
-      csgbl3,csgcmpbz,csgimplbz,csginitaux,csginitnr,csgproputil,%
-      csgrbconv,csgunique3,csguniquep,csgversion,csgvvovl,curve2,%
-      curve3,cylinder2,cylinder3,dat2str,defastget,display,drawgetobj,%
-      drawreobj,drawsetobj,dst,duplicate,dxflayers,dxfread,dxfwrite,%
-      econe2,econe3,eigloop,elcconstr,elcplbnd,elcplextr,elcplproj,%
-      elcplscalar,elempty,elemreobj,eleqc,eleqw,elevate,elgeom,ellip1,%
-      ellip2,ellipsoid2,ellipsoid3,ellipsoidgen_fl23,elmat,elovar,%
-      elpconstr,elshape,elvar,elvarm,embed,extrude,face3,faceprim3,%
-      fastsetop,fem2jxfem,femblocksu,femdiff,femeig,femexport,femgui,%
-      femimport,femiter,femlab,femlin,femmesh,femmeshexp,femnlin,%
-      femplot,femsfun,femsim,femsimlowlevel,femsimserver,femsol,%
-      femsolver,femstate,femstruct,femtime,femwave,festyle,fieldnames,%
-      fillet,fl1d,fl2d,fl3d,flaction,flafun,flappconvert,flappobj,%
-      flaxisequal,flbase,flbinary,flc1hs,flc2hs,flcanpnt,flcell2draw,%
-      flclear,flcolorbar,flcompact,flconeplot,flcontour2mesh,%
-      flcontour2meshaux,flconvreact,flconvreact1d,flconvreact2d,%
-      flconvreact3d,flcyl,fldc1hs,fldc2hs,fldegree,fldegreer3,%
-      fldegreet3,fldimvarsget,fldisp,fldraw2cell,fldrawnow,fldsmhs,%
-      fldsmsign,flevalmat,flexch,flexchprop,flfastgeom,flform,flgc,%
-      flgcbo,flgdconv,flgeom2cellstr,flgeomadj,flgeomarcize,flgeomec,%
-      flgeomed,flgeomepol,flgeomes,flgeomfc,flgeomfd,flgeomfdp,%
-      flgeomff1,flgeomff2,flgeomfn,flgeomfs,flgeomgetlocalsys,%
-      flgeominit,flgeominitprop,flgeomitransform,flgeomloft,flgeommesh,%
-      flgeomnbs,flgeomnes,flgeomnmr,flgeomnv,flgeompsinv,flgeomrmsing,%
-      flgeomrotp,flgeomsd,flgeomsdim,flgeomse,flgeomsf2,flgeomspm,%
-      flgeomtransform,flgeomud,flgeomvtx,flgetdraw,flheat,flheat1d,%
-      flheat2d,flheat3d,flhelmholtz,flhelmholtz1d,flhelmholtz2d,%
-      flhelmholtz3d,flim2curve,flinterp1,fliscont,flismember,%
-      flisnumeric,fljaction,fllaplace,fllaplace1d,fllaplace2d,%
-      fllaplace3d,flload,flloadfl,flloadmatfile,flloadmfile,%
-      fllobj2cellstr,flmakeevalstr,flmapsoljac,flmat2str,flmatch,%
-      flmesh2spline,flmesh2splineaux,flml65setup,flngdof,flnull,%
-      flnullorth,flpde,flpdeac,flpdec,flpdec1d,flpdec2d,flpdec3d,%
-      flpdedc,flpdedc2d,flpdedc3d,flpdedf,flpdedf1d,flpdedf2d,%
-      flpdedf3d,flpdees,flpdees2d,flpdees3d,flpdeg,flpdeg1d,flpdeg2d,%
-      flpdeg3d,flpdeht,flpdeht1d,flpdeht2d,flpdeht3d,flpdems,flpdems2d,%
-      flpdems3d,flpdens,flpdens2d,flpdens3d,flpdepn,flpdeps,flpdesm3d,%
-      flpdew,flpdew1d,flpdew2d,flpdew3d,flpdewb,flpdewb1d,flpdewb2d,%
-      flpdewb3d,flpdewc,flpdewc1d,flpdewc2d,flpdewc3d,flpdewe,%
-      flpdewe3d,flpdewp,flpdewp2d,flpdewp3d,flplot,flpoisson,%
-      flpoisson1d,flpoisson2d,flpoisson3d,flpric2,flpric3,flreobj,%
-      flreport,flresolvepath,flsave,flschrodinger,flschrodinger1d,%
-      flschrodinger2d,flschrodinger3d,flsde,flsdp,flsdt,flsetalpha,%
-      flsetdraw,flsmhs,flsmsign,flspnull,fltherm_cond1,fltrg,flversion,%
-      flversions,flverver,flwave,flwave1d,flwave2d,flwave3d,%
-      flwriteghist,formstr,gdsread,gencyl2,gencyl3,genextrude,%
-      genextrudeaux,geom,geom0,geom0get,geom1,geom1get,geom2,geom2get,%
-      geom3,geom3get,geom3j2m,geom3m2j,geomaddlblmargin,geomanalyze,%
-      geomarrayr,geomassign,geomcoerce,geomcomp,geomconnect,geomcopy,%
-      geomcsg,geomdel,geomedit,geomexport,geomfile,geomget,%
-      geomgetlabels,geomgetwrkpln,geomimport,geominfo,geominfoaux,%
-      geomlblplot,geomload,geomnumparse,geomobject,geomparse,geomplot,%
-      geomplot1,geomplot2,geomplot3,geomposition,geomproputil,%
-      geomreconstruct,geomreobj,geomserver,geomspline,geomsurf,%
-      geomupdate,get,getfemgeom,getisocurve,getjptr,getmesh,getsdim,%
-      getvmatrixexch,handlesolnumstr,helix1,helix2,helix3,hexahedron2,%
-      hexahedron3,histfrommat,idst,igesread,importplotdata,isempty,%
-      isfield,isfunc,isscript,javaclass,jproputil,jptr2geom,jptrgeom1,%
-      jptrgeom1_fl23,jptrgeom2,jptrgeom2_fl23,jptrgeom3,jptrgeom3_fl23,%
-      keiter,line1,line2,loadobj,loft,matlabinterpdata,mesh2geom,%
-      meshassign,meshcaseadd,meshcasedel,meshcaseutil,meshcheck,%
-      meshembed,meshenrich,meshenrich1,meshenrich2,meshenrich3,%
-      meshexport,meshextend,meshextrude,meshget,meshimport,meshinit,%
-      meshintegrate,meshmap,meshoptim,meshparse,meshplot,meshplot1,%
-      meshplot2,meshplot3,meshplotproputil,meshpoi,meshproputil,%
-      meshptplot,meshqual,meshrefine,meshrevolve,meshsmooth,%
-      meshsmooth2,meshsweep,meshvolume,minus,mirror,mkreflparams,%
-      mmsolve,modetype,move,moveglobalfields,mphproputil,mtimes,%
-      multiphysics,mypostinterp,notscript,onlyelsconstr,outassign,%
-      paramgeom,pde2draw,pde2equ,pde2fem,pde2geom,pdeblxpd,plus,point1,%
-      point2,point3,poisson,poly1,poly2,postanim,postapplysettings,%
-      postarrow,postarrowbnd,postcolorbar,postcont,postcontdomind,%
-      postcoord,postcopyprop,postcrossplot,postdistrprops,posteval,%
-      postflow,postfnd,postgeomplot,postgetfem,postgetstylecolor,%
-      postglobaleval,postglobalplot,postgp,postinit,postint,postinterp,%
-      postiso,postlin,postmakecontcol,postmax,postmaxmin,postmin,%
-      postmkcontbar,postmknormexpr,postmovie,postnewplot,%
-      postoldmaxminprops,postpd2pm,postplot,postplotconstants,%
-      postpm2pd,postprinc,postprincbnd,postprocgui,postproputil,%
-      postslice,postsurf,posttet,posttitle,print2file,pyramid2,%
-      pyramid3,rect1,rect2,restorefields,revolve,rmfield,rotate,%
-      rotmatrix,scale,serialize,set,setmesh,sh2str,sharg_2_5,shbub,%
-      shdisc,shdiv,shherm,shlag,shvec,simplecoerce,simreobj,slblocks,%
-      solassign,solid0,solid1,solid2,solid3,solidprim3,solproputil,%
-      solsize,solveraddcases,sphere2,sphere3,spiceimport,splineaux,%
-      split,splittoprim,square1,square2,stlread,submode,submodes,%
-      subsasgn,subsref,tangent,taucs,tetrahedron2,tetrahedron3,%
-      tobsplines,torus2,torus3,transform,update,updateassoc,%
-      updateassocinfo,updatefem,updateguistruct,updateobj,vrmlread,%
-      xmeshinfo,xmeshinit},%
-   sensitive=false,%
-   morecomment=[l]\%,%
-   morestring=[m]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{bash, csh, and sh}
-%
-% csh is from \lstthanks{Kai~Below}{below@tu-harburg.de}{1998/09/21},
-% but he pointed out that some keywords are probably missing.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% csh definition (c) 1998 Kai Below
-%%
-\lst@definelanguage{csh}
-  {morekeywords={alias,awk,cat,echo,else,end,endif,endsw,exec,exit,%
-      foreach,glob,goto,history,if,logout,nice,nohup,onintr,repeat,sed,%
-      set,setenv,shift,source,switch,then,time,while,umask,unalias,%
-      unset,wait,while,@,env,argv,child,home,ignoreeof,noclobber,%
-      noglob,nomatch,path,prompt,shell,status,verbose,print,printf,%
-      sqrt,BEGIN,END},%
-   morecomment=[l]\#,%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-% Thanks to \lstthanks{Riccardo~Murri}{riccardo.murri@gmx.it}{2003/09/24}
-% for the following two
-% definitions. \lstthanks{Scott~Pakin}{scott@pakin.org}{2014/08/08} pointed
-% out some missing keywords (|elif|, |in| for |sh|, |caller|, |compopt|,
-% |coproc|, |dirs|, |help|, |mapfile|, |readarray| for |bash|) to the
-% current maintainer. The |sh| list of keywords was checkead against the
-% ``Manual of the Bourne Shell on Version 7'', found at
-% \url{http://www.in-ulm.de/~mascheck/bourne/v7/}, last visited on
-% 2014/09/06.
-%    \begin{macrocode}
-%%
-%% bash,sh definition (c) 2003 Riccardo Murri <riccardo.murri@gmx.it>
-%%
-\lst@definelanguage{bash}[]{sh}%
-  {morekeywords={alias,bg,bind,builtin,caller,command,compgen,compopt,%
-      complete,coproc,declare,disown,dirs,enable,fc,fg,help,history,%
-      jobs,let,local,logout,mapfile,printf,pushd,popd,readarray,select,%
-      set,suspend,shopt,source,times,type,typeset,ulimit,unalias,wait},%
-  }%
-\lst@definelanguage{sh}%
-  {morekeywords={awk,break,case,cat,cd,continue,do,done,echo,elif,else,%
-      env,esac,eval,exec,exit,export,expr,false,fi,for,function,getopts,%
-      hash,history,if,in,kill,login,newgrp,nice,nohup,ps,pwd,read,%
-      readonly,return,set,sed,shift,test,then,times,trap,true,type,%
-      ulimit,umask,unset,until,wait,while},%
-   morecomment=[l]\#,%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-% \begingroup
-% Jobst Hoffmann copied the definition of a style for printing Fortran code
-% to a style for printing shell programs:
-%    \begin{macrocode}
-%<*bash-prf>
-%    \end{macrocode}
-%    \begin{macrocode}
-\usepackage[rgb, x11names]{xcolor}
-
-% common settings
-\lstset{%
-  frame=tlb,%      the frame is open on the right side
-  resetmargins=false,%
-  rulesepcolor=\color{black},%
-  numbers=left,%                % left
-  numberstyle=\tiny,%
-  numbersep=5pt,%
-  firstnumber=1,%
-  stepnumber=5,%
-  columns=fixed,%               % to prevent inserting spaces
-  fontadjust=true,%
-  keepspaces=true,%
-  basewidth=0.5em,%
-  captionpos=t,%
-  abovecaptionskip=\smallskipamount,% same amount as default
-  belowcaptionskip=\smallskipamount,% in caption package
-}
-% settings for colored printing
-\lstdefinestyle{bash}{%
-  backgroundcolor=\color{yellow!10},%
-  basicstyle=\small\ttfamily,%
-  identifierstyle=\color{black},%
-  keywordstyle=\color{blue},%
-  keywordstyle={[2]\color{cyan}},%
-  keywordstyle={[3]\color{olive}},%
-  stringstyle=\color{teal},%
-  commentstyle=\itshape\color{orange},%
-}%
-% settings for back and white printing
-\lstdefinestyle{bashbw}{%
-  backgroundcolor={},%
-  basicstyle=\small\ttfamily,%
-  identifierstyle={},%
-  keywordstyle=\bfseries,%
-  stringstyle=\itshape,%
-  commentstyle=\slshape,%
-  rulesepcolor=\color{black},%
-}%
-%    \end{macrocode}
-% This code is provided in the file |listings-bash.prf|, see section
-% 2.4.1 (Preferences) of the \packagename{listings} documentation.
-%    \begin{macrocode}
-%</bash-prf>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Delphi}
-%
-% I took the data from Delphi 1.0 (?) online help.
-% \lstthanks{Christian~Gudrian}{chrigu@kawo1.rwth-aachen.de}{2001/08/16}
-% provided the `double slash' comment.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Delphi}%
-  {morekeywords={and,as,asm,array,begin,case,class,const,constructor,%
-      destructor,div,do,downto,else,end,except,exports,file,finally,%
-      for,function,goto,if,implementation,in,inherited,inline,%
-      initialization,interface,is,label,library,mod,nil,not,object,of,%
-      or,packed,procedure,program,property,raise,record,repeat,set,%
-      shl,shr,string,then,to,try,type,unit,until,uses,var,while,with,%
-      xor,%
-      absolute,abstract,assembler,at,cdecl,default,dynamic,export,%
-      external,far,forward,index,name,near,nodefault,on,override,%
-      private,protected,public,published,read,resident,storedDir,%
-      virtual,write},%
-   morendkeywords={Abs,AddExitProc,Addr,AllocMem,AnsiCompareStr,%
-      AnsiCompareText,AnsiLowerCase,AnsiUpperCase,Append,AppendStr,%
-      ArcTan,AssignCrt,Assigned,AssignFile,BlockRead,BlockWrite,Break,%
-      ChangeFileExt,ChDir,Chr,CloseFile,ClrEol,ClrScr,Concat,Continue,%
-      Copy,Cos,CSeg,CursorTo,Date,DateTimeToFileDate,DateTimeToStr,%
-      DateTimeToString,DateToStr,DayOfWeek,Dec,DecodeDate,DecodeTime,%
-      Delete,DeleteFile,DiskFree,DiskSize,Dispose,DisposeStr,%
-      DoneWinCrt,DSeg,EncodeDate,EncodeTime,Eof,Eoln,Erase,Exclude,%
-      Exit,Exp,ExpandFileName,ExtractFileExt,ExtractFileName,%
-      ExtractFilePath,FileAge,FileClose,FileDateToDateTime,FileExists,%
-      FileGetAttr,FileGetDate,FileOpen,FilePos,FileRead,FileSearch,%
-      FileSeek,FileSetAttr,FileSetDate,FileSize,FillChar,FindClose,%
-      FindFirst,FindNext,FloatToDecimal,FloatToStrF,FloatToStr,%
-      FloatToText,FloatToTextFmt,Flush,FmtLoadStr,FmtStr,Format,%
-      FormatBuf,FormatDateTime,FormatFloat,Frac,Free,FreeMem,GetDir,%
-      GetMem,GotoXY,Halt,Hi,High,Inc,Include,InitWinCrt,Insert,Int,%
-      IntToHex,IntToStr,IOResult,IsValidIdent,KeyPressed,Length,Ln,Lo,%
-      LoadStr,Low,LowerCase,MaxAvail,MemAvail,MkDir,Move,New,NewStr,%
-      Now,Odd,Ofs,Ord,ParamCount,ParamStr,Pi,Pos,Pred,Ptr,Random,%
-      Randomize,Read,ReadBuf,ReadKey,Readln,ReAllocMem,Rename,%
-      RenameFile,Reset,Rewrite,RmDir,Round,RunError,ScrollTo,Seek,%
-      SeekEof,SeekEoln,Seg,SetTextBuf,Sin,SizeOf,SPtr,Sqr,Sqrt,SSeg,%
-      Str,StrCat,StrComp,StrCopy,StrDispose,StrECopy,StrEnd,StrFmt,%
-      StrLCat,StrIComp,StrLComp,StrLCopy,StrLen,StrLFmt,StrLIComp,%
-      StrLower,StrMove,StrNew,StrPas,StrPCopy,StrPos,StrScan,StrRScan,%
-      StrToDate,StrToDateTime,StrToFloat,StrToInt,StrToIntDef,%
-      StrToTime,StrUpper,Succ,Swap,TextToFloat,Time,TimeToStr,%
-      TrackCursor,Trunc,Truncate,TypeOf,UpCase,UpperCase,Val,WhereX,%
-      WhereY,Write,WriteBuf,WriteChar,Writeln},%
-   sensitive=f,%
-   morecomment=[s]{(*}{*)},%
-   morecomment=[s]{\{}{\}},%
-   morecomment=[l]{//},% 2001 Christian Gudrian
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Eiffel}
-%
-% Data is from
-% \begin{itemize}
-% \item
-%       \textsc{Bertrand Meyer}: \textbf{Eiffel: the language};
-%       Prentice Hall International (UK) Ldt, 1992;
-%       ISBN 0-13-247925-7.
-% \end{itemize}
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Eiffel}%
-  {morekeywords={alias,all,and,as,BIT,BOOLEAN,CHARACTER,check,class,%
-      creation,Current,debug,deferred,do,DOUBLE,else,elseif,end,%
-      ensure,expanded,export,external,false,feature,from,frozen,if,%
-      implies,indexing,infix,inherit,inspect,INTEGER,invariant,is,%
-      like,local,loop,NONE,not,obsolete,old,once,or,POINTER,prefix,%
-      REAL,redefine,rename,require,rescue,Result,retry,select,%
-      separate,STRING,strip,then,true,undefine,unique,until,variant,%
-      when,xor},%
-   sensitive,%
-   morecomment=[l]--,%
-   morestring=[d]",%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-% The key=value \texttt{stringtest=false} has been removed after a bug
-% report from \lsthelper{Xavier~Cr\'egut}{cregut@enseeiht.fr}{2002/09/09}
-% {stringtest no more part of package}.
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Elan}
-%
-% The data come from
-% \begin{itemize}
-% \item
-%		\textsc{Leo~H.~Klingen, Jochen Liedtke}:
-%		\textbf{Programmieren mit ELAN};
-%		B.G.\ Teubner, Stuttgart 1983; ISBN 3-519-02507-8.
-% \end{itemize}
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Elan}%
-  {morekeywords={ABS,AND,BOOL,CAND,CASE,CAT,COLUMNS,CONCR,CONJ,CONST,%
-      COR,DECR,DEFINES,DET,DIV,DOWNTO,ELIF,ELSE,END,ENDIF,ENDOP,%
-      ENDPACKET,ENDPROC,ENDREP,ENDSELECT,FALSE,FI,FILE,FOR,FROM,IF,%
-      INCR,INT,INV,LEAVE,LENGTH,LET,MOD,NOT,OF,OP,OR,OTHERWISE,PACKET,%
-      PROC,REAL,REP,REPEAT,ROW,ROWS,SELECT,SIGN,STRUCT,SUB,TEXT,THEN,%
-      TRANSP,TRUE,TYPE,UNTIL,UPTO,VAR,WHILE,WITH,XOR,%
-      maxint,sign,abs,min,max,random,initializerandom,subtext,code,%
-      replace,text,laenge,pos,compress,change,maxreal,smallreal,floor,%
-      pi,e,ln,log2,log10,sqrt,exp,tan,tand,sin,sind,cos,cosd,arctan,%
-      arctand,int,real,lastconversionok,put,putline,line,page,get,%
-      getline,input,output,sequentialfile,maxlinelaenge,reset,eof,%
-      close,complexzero,complexone,complexi,complex,realpart,imagpart,%
-      dphi,phi,vector,norm,replace,matrix,idn,row,column,sub,%
-      replacerow,replacecolumn,replaceelement,transp,errorsstop,stop},%
-   sensitive,%
-   morestring=[d]"%
-  }[keywords,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Erlang}
-%
-% Thanks to \lstthanks{Daniel~Gazard}{gazard_d@epita.fr}{2003/05/31}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Erlang definition (c) 2003 Daniel Gazard
-%%
-\lst@definelanguage{erlang}%
-  {morekeywords={abs,after,and,apply,atom,atom_to_list,band,binary,%
-      binary_to_list,binary_to_term,bor,bsl,bsr,bxor,case,catch,%
-      date,div,element,erase,end,exit,export,float,float_to_list,%
-      get,halt,hash,hd,if,info,import,integer,integer_to_list,%
-      length,link,list,list_to_atom,list_to_float,list_to_integer,%
-      list_to_tuple,module,node,nodes,now,of,or,pid,port,ports,%
-      processes,put,receive,reference,register,registered,rem,%
-      round,self,setelement,size,spawn,throw,time,tl,trace,trunc,%
-      tuple,tuple_to_list,unlink,unregister,whereis,error,false,%
-      infinity,nil,ok,true,undefined,when},%
-   otherkeywords={->,!,[,],\{,\}},%
-   morecomment=[l]\%,%
-   morestring=[b]",%
-   morestring=[b]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Euphoria}
-%
-% \lstthanks{Detlef~Reimers}{dreimers@aol.com}{1998/08/30} sent me the language
-% definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Euphoria definition (c) 1998 Detlef Reimers
-%%
-\lst@definelanguage{Euphoria}%
-% for Euphoria 2.0, Rapid Deployment Software, Kanada
-  {morekeywords={abort,and,and_bits,append,arctan,atom,by,call,%
-      call_proc,call_func,c_proc,c_func,clear_screen,close,%
-      command_line,compare,constant,cos,do,date,else,elsif,end,exit,%
-      find,floor,for,function,getc,getenv,get_key,gets,global,%
-      get_pixel,if,include,integer,length,log,match,machine_func,%
-      machine_proc,mem_copy,mem_set,not,not_bits,or,object,open,%
-      or_bits,procedure,puts,position,prepend,print,printf,power,peek,%
-      poke,pixel,poke4,peek4s,peek4u,return,rand,repeat,remainder,%
-      routine_id,sequence,sqrt,sin,system,sprintf,then,type,to,time,%
-      trace,tan,while,with,without,xor,xor_bits},%
-   sensitive,%
-   morecomment=[l]--,%
-   morestring=[d]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Fortran}
-% \label{sec:fortran}
-%
-% Took things from
-% \begin{itemize}
-% \item
-%		\textsc{Karl Hans M\"uller}:
-%		\textbf{Fortran 77: Programmierungsanleitung};
-%		3., v\"ollig neu bearb.\ Aufl.\ -- Mannheim; Wien; Z\"urich:
-%		Bibliographisches Institut, 1984;
-%		ISBN 3-411-05804-8
-% \item
-%       \textsc{Thomas Michel}: \textbf{Fortran 90: Lehr-- und Handbuch};
-%       Mannheim; Leipzig; Wien; Z\"urich: BI-Wiss.-Verlag, 1994;
-%       ISBN 3-411-16861-7.
-% \end{itemize}
-% Another source for Fortran keywords is
-% \url{http://fortranwiki.org/fortran/show/Keywords} where the keywords for
-% Fortran 2003 and 2008 are taken from.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-% The current version of Fortran (Fortran 2008) is defined by ISO/IEC
-% 1539-1:2010.  It contains nine new keywords, four of them consisting of
-% two words: ^^A
-% |ERROR STOP|, |SYNC ALL|, |SYNC IMAGES|, |SYNC MEMORY|, so
-% the list of keywords contains the single parts |ALL|, |ERROR|, |IMAGES|,
-% |MEMORY|, and |SYNC|.
-%    \begin{macrocode}
-\lst@definelanguage[08]{Fortran}[03]{Fortran}{%
-  morekeywords={ALL, BLOCK, CODIMENSION, CONCURRENT, CONTIGUOUS, CRITICAL,%
-    ERROR, LOCK, SUBMODULE, SYNC, UNLOCK},%
-%    \end{macrocode}
-% New procedures in Fortran 2008:
-%    \begin{macrocode}
-    morekeywords=[3]{ACOSH,ASINH,ATANH,ATOMIC_DEFINE,ATOMIC_REF,BESSEL_J0,%
-      BESSEL_J1,BESSEL_JN,BESSEL_Y0,BESSEL_Y1,BESSEL_YN,BGE,BGT,BLE,BLT,%
-      C_SIZEOF,COMPILER_OPTIONS,COMPILER_VERSION,DSHIFTL,DSHIFTR,ERF,ERFC,%
-      ERFC_SCALED,EXECUTE_COMMAND_LINE,GAMMA,HYPOT,IALL,IANY,IMAGE_INDEX,%
-      IPARITY,LCOBOUND,LEADZ,LOG_GAMMA,MASKL,MASKR,MERGE_BITS,NORM2,%
-      NUM_IMAGES,PARITY,POPCNT,POPPAR,SHIFTA,SHIFTL,SHIFTR,STORAGE_SIZE,%
-      THIS_IMAGE,TRAILZ,UCOBOUND}%
-}%
-%    \end{macrocode}
-% Fortran 2003 introduces the following keywords:
-%    \begin{macrocode}
-\lst@definelanguage[03]{Fortran}[95]{Fortran}{%
-  morekeywords={ABSTRACT, ASSOCIATE, ASYNCHRONOUS, BIND, CLASS, DEFERRED,%
-    ENUM, ENUMERATOR, EXTENDS, FINAL, FLUSH, GENERIC, IMPORT,%
-    NON_OVERRIDABLE, NOPASS, PASS, PROTECTED, VALUE, VOLATILE, WAIT},%
-%    \end{macrocode}
-% These are new options/specifiers:
-%    \begin{macrocode}
-    morekeywords=[2]{DECIMAL,ENCODING,IOMSG,ROUND},% corrected NML from NMT
-%    \end{macrocode}
-% And also some new procedures:
-%    \begin{macrocode}
-    morekeywords=[3]{C_ASSOCIATED,C_F_POINTER,C_F_PROCPOINTER,C_FUNLOC,%
-    C_LOC,COMMAND_ARGUMENT_COUNT,EXTENDS_TYPE_OF,GET_COMMAND,GET_COMMAND_ARGUMENT,%
-    GET_ENVIRONMENT_VARIABLE,IS_IOSTAT_END,MOVE_ALLOC,NEW_LINE,SAME_TYPE_AS,%
-    SELECTED_CHAR_KIND}%
-}%
-%    \end{macrocode}
-% \lsthelper{Denis Girou}{Denis.Girou@idris.fr}{1998/07/26}{Fortran 95=90}
-% proposed to have Fortran 95 and Fortran 90 to be equivalent.
-%    \begin{macrocode}
-\lst@definelanguage[90]{Fortran}[95]{Fortran}{}
-%    \end{macrocode}
-% There is no |morecomment=[f]| in Fortran 90 since otherwise CONTAINS could
-% start a comment. This problem was reported by \lsthelper{Magne Rudshaug}
-% {magne@ife.no}{1998/01/09}{no morecomment=[f] in Fortran 90}.
-% Moreover the keyword INCLUDE is due to him.
-%    \begin{macrocode}
-\lst@definelanguage[95]{Fortran}[77]{Fortran}%
-  {deletekeywords=SAVE,%
-   morekeywords={ALLOCATABLE,ALLOCATE,ASSIGNMENT,CASE,%
-      CONTAINS,CYCLE,DEALLOCATE,DEFAULT,EXIT,INCLUDE,IN,NONE,%
-      OUT,INTENT,INTERFACE,MODULE,NAMELIST,%
-      NULLIFY,ONLY,OPERATOR,OPTIONAL,OUT,POINTER,PRIVATE,%
-      PUBLIC,RECURSIVE,RESULT,SELECT,SEQUENCE,%
-      TARGET,USE,WHERE,WHILE,BLOCKDATA,DOUBLEPRECISION,%
-      ENDBLOCKDATA,ENDFILE,ENDFUNCTION,ENDINTERFACE,%
-      ENDMODULE,ENDPROGRAM,ENDSELECT,ENDSUBROUTINE,ENDTYPE,ENDWHERE,%
-      INOUT,SELECTCASE,%
-%    \end{macrocode}
-% Theses keys were missing from the 1.4 version of listings:
-%    \begin{macrocode}
-      ELEMENTAL, ELSEWHERE, FORALL, PURE},%
-%    \end{macrocode}
-% The list of option keywords/specifiers new in Fortran 90 and 95:
-%    \begin{macrocode}
-    morekeywords=[2]{ACTION,ADVANCE,DELIM,IOLENGTH,LEN,NAME,%
-      NML,PAD,POSITION,READWRITE,SIZE,STAT},% corrected NML from NMT
-%    \end{macrocode}
-% and the list of intrinsic procedures new in Fortran 90 and 95:
-%    \begin{macrocode}
-    morekeywords=[3]{ADJUSTL,ADJUSTR,ALL,ALLOCATED,ANY,ASSOCIATED,BIT_SIZE,%
-    BTEST,CEILING,COUNT,CPU_TIME,CSHIFT,DATE_AND_TIME,DIGITS,DOT_PRODUCT,%
-    EOSHIFT,EPSILON,EXPONENT,FLOOR,FRACTION,HUGE,IACHAR,IAND,IBCLR,
-    IBITS,IBSET,ICHAR,IEOR,IOR,ISHFT,ISHFTC,KIND,LBOUND,LEN_TRIM,% left out LOGICAL
-    MATMUL,MAXEXPONENT,MAXLOC,MAXVAL,MERGE,MINEXPONENT,MINLOC,MINVAL,%
-    MODULO,MVBITS,NEAREST,NOT,NULL,PACK,PRECISION,PRESENT,PRODUCT,%
-    RADIX,RANDOM_NUMBER,RANDOM_SEED,RANGE,RANK,REPEAT,RESHAPE,RRSPACING,%
-    SCALE,SCAN,SELECTED_INT_KIND,SELECTED_REAL_KIND,SET_EXPONENT,SHAPE,%
-    SINH,SIZE,SPACING,SPREAD,SUM,SYSTEM_CLOCK,TINY,TRANSFER,TRANSPOSE,%
-    TRIM,UBOUND,UNPACK,VERIFY},%
-   deletecomment=[f],% no fixed comment line: 1998 Magne Rudshaug
-   morecomment=[l]!%
-  }%
-%    \end{macrocode}
-% As proposed by \lsthelper{J\"orn Wilms}{wilms@rocinante.colorado.edu}
-% {1997/07/07}{Fortran with \lstsensitivefalse} keywords are \emph{not} case
-% sensitive.  Also, note that Fortran 77 (and fixed-format source in later
-% versions) allows space in keywords; thus, this list contains some of the
-% more common variants (e.g., `GO TO' and `GOTO').
-%    \begin{macrocode}
-\lst@definelanguage[77]{Fortran}%
-%    \end{macrocode}
-% Jobst Hoffmann divided the list of keywords into two lists. The first
-% list contains the statement keywords, the second list contains the option
-% keywords/specifiers and values. This makes the different meanings of the
-% keywords distinguishable.
-%    \begin{macrocode}
-  {morekeywords={ASSIGN,BACKSPACE,CALL,CHARACTER,%
-      CLOSE,COMMON,COMPLEX,CONTINUE,DATA,DIMENSION,DO,DOUBLE,%
-      ELSE,ELSEIF,END,ENDIF,ENDDO,ENTRY,EQUIVALENCE,EXTERNAL,%
-      FILE,FORMAT,FUNCTION,GO,TO,GOTO,IF,IMPLICIT,%
-      INQUIRE,INTEGER,INTRINSIC,LOGICAL,%
-      OPEN,PARAMETER,PAUSE,PRECISION,PRINT,PROGRAM,READ,REAL,%
-      RETURN,REWIND,STOP,SUBROUTINE,THEN,%
-      WRITE,SAVE},%
-    morekeywords=[2]{ACCESS,BLANK,BLOCK,DIRECT,EOF,ERR,EXIST,%
-      FMT,FORM,FORMATTED,IOSTAT,NAMED,NEXTREC,NUMBER,OPENED,%
-      REC,RECL,SEQUENTIAL,STATUS,TYPE,UNFORMATTED,UNIT},%
-%    \end{macrocode}
-% And here is another list: the list of intrinsic procedures (remember: all
-% functions belong to the Fortran language specification!)
-%    \begin{macrocode}
-    morekeywords=[3]{INT,DBLE,CMPLX,ICHAR,CHAR,AINT,ANINT,% left out real
-      NINT,ABS,MOD,SIGN,DIM,DPROD,MAX,MIN,AIMAG,CONJG,SQRT,EXP,LOG,%
-      LOG10,SIN,COS,TAN,ASIN,ACOS,ATAN,ATAN2,SINH,COSH,TANH,LGE,LLE,LLT,%
-      LEN,INDEX},%
-%    \end{macrocode}
-% And here is the last list: fortran operators:
-%    \begin{macrocode}
-    morekeywords=[4]{AND,EQ,EQV,FALSE,GE,GT,OR,LE,LT,NE,NEQV,NOT,TRUE},%
-   sensitive=f,%% not Fortran-77 standard, but allowed in Fortran-95 %%
-   morecomment=[f]*,%
-   morecomment=[f]C,%
-   morecomment=[f]c,%
-   morestring=[d]",%% not Fortran-77 standard, but allowed in Fortran-95 %%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-% \begingroup
-% Jobst Hoffmann supplied a definition of a style for printing Fortran code:
-%    \begin{macrocode}
-%<*fortran-prf>
-%    \end{macrocode}
-%    \begin{macrocode}
-\usepackage[rgb, x11names]{xcolor}
-
-% common settings
-\lstset{%
-  frame=tlb,%      the frame is open on the right side
-  resetmargins=false,%
-  rulesepcolor=\color{black},%
-  numbers=left,%                % left
-  numberstyle=\tiny,%
-  numbersep=5pt,%
-  firstnumber=1,%
-  stepnumber=5,%
-  columns=fixed,%               % to prevent inserting spaces
-  fontadjust=true,%
-  keepspaces=true,%
-  basewidth=0.5em,%
-  captionpos=t,%
-  abovecaptionskip=\smallskipamount,% same amount as default
-  belowcaptionskip=\smallskipamount,% in caption package
-}
-% settings for colored printing
-\lstdefinestyle{fortran}{%
-  backgroundcolor=\color{yellow!10},%
-  basicstyle=\small\ttfamily,%
-  identifierstyle=\color{black},%
-  keywordstyle=\color{blue},%
-  keywordstyle={[2]\color{cyan}},%
-  keywordstyle={[3]\color{olive}},%
-  stringstyle=\color{teal},%
-  commentstyle=\itshape\color{orange},%
-}%
-% settings for back and white printing
-\lstdefinestyle{fortranbw}{%
-  backgroundcolor={},%
-  basicstyle=\small\ttfamily,%
-  identifierstyle={},%
-  keywordstyle=\bfseries,%
-  stringstyle=\itshape,%
-  commentstyle=\slshape,%
-  rulesepcolor=\color{black},%
-}%
-%    \end{macrocode}
-% This code is provided in the file |listings-fortran.prf|, see section
-% 2.4.1 (Preferences) of the \packagename{listings} documentation.
-%    \begin{macrocode}
-%</fortran-prf>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{GAP---Groups, Algorithms, Programming}
-%\label{sec:gap}
-%
-% GAP is a System for Computational Discrete Algebra, a description can be
-% found at \url{http://www.gap-system.org/}. \lstthanks{Heiko
-% Oberdiek}{heiko.oberdiek@googlemail.com}{2013/07/18} provided a
-% language definition without knowing this language, so any error should be
-% announced to the current maintainer of the \packagename{listings} package.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% GAP definition
-%% (c) 2013 Heiko Oberdiek
-%%
-\lst@definelanguage{GAP}{%
-  morekeywords={%
-    Assert,Info,IsBound,QUIT,%
-    TryNextMethod,Unbind,and,break,%
-    continue,do,elif,%
-    else,end,false,fi,for,%
-    function,if,in,local,%
-    mod,not,od,or,%
-    quit,rec,repeat,return,%
-    then,true,until,while%
-  },%
-  sensitive,%
-  morecomment=[l]\#,%
-  morestring=[b]",%
-  morestring=[b]',%
-}[keywords,comments,strings]
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Guarded Command Language (GCL)}
-%
-% As you can read below, \lstthanks{Mark~van~Eijk}{mark@luon.net}{2002/10/30}
-% provided this language definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Guarded Command Language (GCL)  definition
-%% (c) 2002 Mark van Eijk
-%%
-\lst@definelanguage{GCL}%
-  {morekeywords={const,con,var,array,of,skip,if,fi,do,od,div,mod},%
-   literate={|[}{\ensuremath{|\hskip -0.1em[}}2%
-            {]|}{\ensuremath{]\hskip -0.1em|}}2%
-	    {[]}{\ensuremath{[\hskip -0.1em]}}2%
-	    {->}{\ensuremath{\rightarrow}~}2%
-	    {==}{\ensuremath{\equiv}~}2%
-	    {>=}{\ensuremath{\geq}~}2%
-	    {<=}{\ensuremath{\leq}~}2%
-	    {/\\}{\ensuremath{\land}~}2%
-	    {\\/}{\ensuremath{\lor}~}2%
-	    {!}{\ensuremath{\lnot}}1%
-	    {!=}{\ensuremath{\neq}~}2%
-	    {max}{\ensuremath{\uparrow}}1%
-	    {min}{\ensuremath{\downarrow}}1,%
-   sensitive=f,%
-   morecomment=[s]{\{}{\}},%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Gnuplot}
-%
-% Thanks to \lsthelper{Dr.~Christoph~Giess}{Ch.Giess@gmx.de}{2003/07/15}{} for
-% providing this definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%%
-%% gnuplot definition (c) Christoph Giess
-%%
-\lst@definelanguage{Gnuplot}%
-  {keywords={abs,acos,acosh,arg,asin,asinh,atan,atan2,atanh,besj0,%
-       besj1,besy0,besy1,ceil,cos,cosh,erf,erfc,exp,floor,gamma,ibeta,%
-       inverf,igamma,imag,invnorm,int,lgamma,log,log10,norm,rand,real,%
-       sgn,sin,sinh,sqrt,tan,tanh,column,tm_hour,tm_mday,tm_min,tm_mon,%
-       tm_sec,tm_wday,tm_yday,tm_year,valid,cd,call,clear,exit,fit,%
-       help,if,load,pause,plot,print,pwd,quit,replot,reread,reset,save,%
-       set,show,shell,splot,test,update,angles,arrow,autoscale,border,%
-       boxwidth,clabel,clip,cntrparam,contour,data,dgrid3d,dummy,%
-       format,function,functions,grid,hidden3d,isosamples,key,keytitle,%
-       label,logscale,mapping,offsets,output,parametric,pointsize,%
-       polar,rrange,samples,size,style,surface,terminal,tics,time,%
-       timefmt,title,trange,urange,variables,view,vrange,xdata,xlabel,%
-       xmargin,xrange,xtics,mxtics,mytics,xdtics,xmtics,xzeroaxis,%
-       ydata,ylabel,yrange,ytics,ydtics,ymtics,yzeroaxis,zdata,zero,%
-       zeroaxis,zlabel,zrange,ztics,zdtics,zmtics,timefm,using,title,%
-       with,index,every,thru,smooth},%
-   sensitive,%
-   comment=[l]\#,%
-   morestring=[b]",%
-   morestring=[b]',%
-  }[keywords,comments,strings]%
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Hansl/Gretl}
-%
-% Thanks to \lstthanks{Ignacio
-% D\'{i}az-Emparanza}{ignacio.diaz-emparanza@ehu.es}{2013/10/24} for providing
-% the definition of hansl.  Hansl is the gretl scripting language (see
-% \url{http://gretl.sourceforge.net}).
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% http://gretl.sourceforge.net/gretl-help/cmdref.html
-%% (c) 2013 Ignacio D\'iaz-Emparanza
-%%
-\lst@definelanguage{hansl}{%
-  % $-variables are internal functions in hansl
-  keywordsprefix ={\$},
-  morekeywords={ % hansl commands:
-    add,adf,anova,append,ar,ar1,%
-    arbond,arch,arima,biprobit,boxplot,break,%
-    catch,chow,clear,coeffsum,coint,coint2,%
-    corr,corrgm,cusum,data,dataset,debug,%
-    delete,diff,difftest,discrete,dpanel,dummify,%
-    duration,elif,else,end,endif,endloop,%
-    eqnprint,equation,estimate,fcast,foreign,fractint,%
-    freq,function,garch,genr,gmm,gnuplot,%
-    graphpg,hausman,heckit,help,hsk,hurst,%
-    if,include,info,intreg,join,kalman,%
-    kpss,labels,lad,lags,ldiff,leverage,%
-    levinlin,logistic,logit,logs,loop,mahal,%
-    makepkg,markers,meantest,mle,modeltab,modprint,%
-    modtest,mpols,negbin,nls,normtest,nulldata,%
-    ols,omit,open,orthdev,outfile,panel,%
-    pca,pergm,poisson,print,printf,probit,%
-    pvalue,qlrtest,qqplot,quantreg,quit,rename,%
-    reset,restrict,rmplot,run,runs,scatters,%
-    sdiff,set,setinfo,setobs,setmiss,shell,%
-    smpl,spearman,sprintf,square,sscanf,store,%
-    summary,system,tabprint,textplot,tobit,tsls,%
-    var,varlist,vartest,vecm,vif,wls,%
-    xcorrgm,xtab,scalar,series,matrix,string},%
-  morekeywords=[2]{ %  Functions
-    abs,acos,acosh,aggregate,argname,%
-    asin,asinh,atan,atanh,atof,%
-    bessel,BFGSmax,bkfilt,boxcox,bwfilt,%
-    cdemean,cdf,cdiv,ceil,cholesky,%
-    chowlin,cmult,cnorm,colname,colnames,%
-    cols,corr,corrgm,cos,cosh,%
-    cov,critical,cum,deseas,det,%
-    diag,diagcat,diff,digamma,dnorm,%
-    dsort,dummify,eigengen,eigensym,eigsolve,%
-    epochday,errmsg,exp,fcstats,fdjac,%
-    fft,ffti,filter,firstobs,fixname,%
-    floor,fracdiff,gammafun,getenv,getline,%
-    ghk,gini,ginv,halton,hdprod,%
-    hpfilt,I,imaxc,imaxr,imhof,%
-    iminc,iminr,inbundle,infnorm,inlist,%
-    int,inv,invcdf,invmills,invpd,%
-    irf,irr,isconst,isnan,isnull,%
-    isodate,iwishart,kdensity,kfilter,ksimul,%
-    ksmooth,kurtosis,lags,lastobs,ldet,%
-    ldiff,lincomb,ljungbox,lngamma,log,%
-    log10,log2,loess,logistic,lower,%
-    lrvar,max,maxc,maxr,mcorr,%
-    mcov,mcovg,mean,meanc,meanr,%
-    median,mexp,min,minc,minr,%
-    missing,misszero,mlag,mnormal,mols,%
-    monthlen,movavg,mpols,mrandgen,mread,%
-    mreverse,mrls,mshape,msortby,muniform,%
-    mwrite,mxtab,nadarwat,nelem,ngetenv,%
-    nobs,normal,npv,NRmax,nullspace,%
-    obs,obslabel,obsnum,ok,onenorm,%
-    ones,orthdev,pdf,pergm,pmax,%
-    pmean,pmin,pnobs,polroots,polyfit,%
-    princomp,prodc,prodr,psd,psdroot,%
-    pshrink,psum,pvalue,pxsum,qform,%
-    qnorm,qrdecomp,quadtable,quantile,randgen,%
-    randgen1,randint,rank,ranking,rcond,%
-    readfile,regsub,remove,replace,resample,%
-    round,rownames,rows,sd,sdc,%
-    sdiff,selifc,selifr,seq,setnote,%
-    simann,sin,sinh,skewness,sort,%
-    sortby,sqrt,sscanf,sst,strlen,%
-    strncmp,strsplit,strstr,strstrip,strsub,%
-    sum,sumall,sumc,sumr,svd,%
-    tan,tanh,toepsolv,tolower,toupper,%
-    tr,transp,trimr,typestr,uniform,%
-    uniq,unvech,upper,urcpval,values,%
-    var,varname,varnum,varsimul,vec,%
-    vech,weekday,wmean,wsd,wvar,%
-    xmax,xmin,xpx,zeromiss,zeros,%
-  },%
-  sensitive=t,%
-  morecomment=[l]{\#},%
-  morecomment=[s]{/*}{*/},%
-  morestring=[b]{"}}%
-\lstalias{gretl}{hansl}
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Haskell}
-%
-% Thanks to \lstthanks{Peter~Bartke}{bartke@inf.fu-berlin.de}{1999/11/18} for
-% providing the new definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Haskell98 as implemented in Hugs98. See http://www.haskell.org
-%% All keywords from Prelude and Standard Libraries
-%% (c) 1999 Peter Bartke
-%%
-\lst@definelanguage{Haskell}%
-  {otherkeywords={=>},%
-   morekeywords={abstype,if,then,else,case,class,data,default,deriving,%
-      hiding,if,in,infix,infixl,infixr,import,instance,let,module,%
-      newtype,of,qualified,type,where,do,AbsoluteSeek,AppendMode,%
-      Array,BlockBuffering,Bool,BufferMode,Char,Complex,Double,Either,%
-      FilePath,Float,Int,Integer,IO,IOError,Ix,LineBuffering,Maybe,%
-      Ordering,NoBuffering,ReadMode,ReadWriteMode,ReadS,RelativeSeek,%
-      SeekFromEnd,SeekMode,ShowS,StdGen,String,Void,Bounded,Enum,Eq,%
-      Eval,ExitCode,exitFailure,exitSuccess,Floating,Fractional,%
-      Functor,Handle,HandlePosn,IOMode,Integral,List,Monad,MonadPlus,%
-      MonadZero,Num,Numeric,Ord,Random,RandomGen,Ratio,Rational,Read,%
-      Real,RealFloat,RealFrac,Show,System,Prelude,EQ,False,GT,Just,%
-      Left,LT,Nothing,Right,WriteMode,True,abs,accum,accumArray,%
-      accumulate,acos,acosh,all,and,any,ap,appendFile,applyM,%
-      approxRational,array,asTypeOf,asin,asinh,assocs,atan,atan2,atanh,%
-      bounds,bracket,bracket_,break,catch,catMaybes,ceiling,chr,cis,%
-      compare,concat,concatMap,conjugate,const,cos,cosh,curry,cycle,%
-      decodeFloat,delete,deleteBy,deleteFirstsBy,denominator,%
-      digitToInt,div,divMod,drop,dropWhile,either,elem,elems,elemIndex,%
-      elemIndices,encodeFloat,enumFrom,enumFromThen,enumFromThenTo,%
-      enumFromTo,error,even,exitFailure,exitWith,exp,exponent,fail,%
-      filter,filterM,find,findIndex,findIndices,flip,floatDigits,%
-      floatRadix,floatRange,floatToDigits,floor,foldl,foldM,foldl1,%
-      foldr,foldr1,fromDouble,fromEnum,fromInt,fromInteger,%
-      fromIntegral,fromJust,fromMaybe,fromRat,fromRational,%
-      fromRealFrac,fst,gcd,genericLength,genericTake,genericDrop,%
-      genericSplitAt,genericIndex,genericReplicate,getArgs,getChar,%
-      getContents,getEnv,getLine,getProgName,getStdGen,getStdRandom,%
-      group,groupBy,guard,hClose,hFileSize,hFlush,hGetBuffering,%
-      hGetChar,hGetContents,hGetLine,hGetPosn,hIsClosed,hIsEOF,hIsOpen,%
-      hIsReadable,hIsSeekable,hIsWritable,hLookAhead,hPutChar,hPutStr,%
-      hPutStrLn,hPrint,hReady,hSeek,hSetBuffering,hSetPosn,head,%
-      hugsIsEOF,hugsHIsEOF,hugsIsSearchErr,hugsIsNameErr,%
-      hugsIsWriteErr,id,ioError,imagPart,index,indices,init,inits,%
-      inRange,insert,insertBy,interact,intersect,intersectBy,%
-      intersperse,intToDigit,ioeGetErrorString,ioeGetFileName,%
-      ioeGetHandle,isAlreadyExistsError,isAlreadyInUseError,isAlpha,%
-      isAlphaNum,isAscii,isControl,isDenormalized,isDoesNotExistError,%
-      isDigit,isEOF,isEOFError,isFullError,isHexDigit,isIEEE,%
-      isIllegalOperation,isInfinite,isJust,isLower,isNaN,%
-      isNegativeZero,isNothing,isOctDigit,isPermissionError,isPrefixOf,%
-      isPrint,isSpace,isSuffixOf,isUpper,isUserError,iterate,ixmap,%
-      join,last,lcm,length,lex,lexDigits,lexLitChar,liftM,liftM2,%
-      liftM3,liftM4,liftM5,lines,listArray,listToMaybe,log,logBase,%
-      lookup,magnitude,makePolar,map,mapAccumL,mapAccumR,mapAndUnzipM,%
-      mapM,mapM_,mapMaybe,max,maxBound,maximum,maximumBy,maybe,%
-      maybeToList,min,minBound,minimum,minimumBy,mkPolar,mkStdGen,%
-      mplus,mod,msum,mzero,negate,next,newStdGen,not,notElem,nub,nubBy,%
-      null,numerator,odd,openFile,or,ord,otherwise,partition,phase,pi,%
-      polar,pred,print,product,properFraction,putChar,putStr,putStrLn,%
-      quot,quotRem,random,randomIO,randomR,randomRIO,randomRs,randoms,%
-      rangeSize,read,readDec,readFile,readFloat,readHex,readInt,readIO,%
-      readList,readLitChar,readLn,readParen,readOct,readSigned,reads,%
-      readsPrec,realPart,realToFrac,recip,rem,repeat,replicate,return,%
-      reverse,round,scaleFloat,scanl,scanl1,scanr,scanr1,seq,sequence,%
-      sequence_,setStdGen,show,showChar,showEFloat,showFFloat,%
-      showFloat,showGFloat,showInt,showList,showLitChar,showParen,%
-      showSigned,showString,shows,showsPrec,significand,signum,sin,%
-      sinh,snd,sort,sortBy,span,split,splitAt,sqrt,stderr,stdin,stdout,%
-      strict,subtract,succ,sum,system,tail,tails,take,takeWhile,tan,%
-      tanh,toEnum,toInt,toInteger,toLower,toRational,toUpper,transpose,%
-      truncate,try,uncurry,undefined,unfoldr,union,unionBy,unless,%
-      unlines,until,unwords,unzip,unzip3,unzip4,unzip5,unzip6,unzip7,%
-      userError,when,words,writeFile,zero,zip,zip3,zip4,zip5,zip6,zip7,%
-      zipWith,zipWithM,zipWithM_,zipWith3,zipWith4,zipWith5,zipWith6,%
-      zipWith7},%
-   sensitive,%
-   morecomment=[l]--,%
-   morecomment=[n]{\{-}{-\}},%
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{HTML}
-%
-% I'm quite the opposite of a HTML wizard. In particular this is true for the
-% defined keywords. \lstthanks{Matthias~Bethke}{-}{2003/09/01} helped me out
-% and extended the list.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{HTML}%
-  {morekeywords={A,ABBR,ACRONYM,ADDRESS,APPLET,AREA,B,BASE,BASEFONT,%
-      BDO,BIG,BLOCKQUOTE,BODY,BR,BUTTON,CAPTION,CENTER,CITE,CODE,COL,%
-      COLGROUP,DD,DEL,DFN,DIR,DIV,DL,DOCTYPE,DT,EM,FIELDSET,FONT,FORM,%
-      FRAME,FRAMESET,HEAD,HR,H1,H2,H3,H4,H5,H6,HTML,I,IFRAME,IMG,INPUT,%
-      INS,ISINDEX,KBD,LABEL,LEGEND,LH,LI,LINK,LISTING,MAP,META,MENU,%
-      NOFRAMES,NOSCRIPT,OBJECT,OPTGROUP,OPTION,P,PARAM,PLAINTEXT,PRE,%
-      OL,Q,S,SAMP,SCRIPT,SELECT,SMALL,SPAN,STRIKE,STRING,STRONG,STYLE,%
-      SUB,SUP,TABLE,TBODY,TD,TEXTAREA,TFOOT,TH,THEAD,TITLE,TR,TT,U,UL,%
-      VAR,XMP,%
-      accesskey,action,align,alink,alt,archive,axis,background,bgcolor,%
-      border,cellpadding,cellspacing,charset,checked,cite,class,classid,%
-      code,codebase,codetype,color,cols,colspan,content,coords,data,%
-      datetime,defer,disabled,dir,event,error,for,frameborder,headers,%
-      height,href,hreflang,hspace,http-equiv,id,ismap,label,lang,link,%
-      longdesc,marginwidth,marginheight,maxlength,media,method,multiple,%
-      name,nohref,noresize,noshade,nowrap,onblur,onchange,onclick,%
-      ondblclick,onfocus,onkeydown,onkeypress,onkeyup,onload,onmousedown,%
-      profile,readonly,onmousemove,onmouseout,onmouseover,onmouseup,%
-      onselect,onunload,rel,rev,rows,rowspan,scheme,scope,scrolling,%
-      selected,shape,size,src,standby,style,tabindex,text,title,type,%
-      units,usemap,valign,value,valuetype,vlink,vspace,width,xmlns},%
-   tag=**[s]<>,%
-   sensitive=f,%
-   morestring=[d]",% ??? doubled
-%    \end{macrocode}
-% Now we take care of comments.
-% We don't enter comment mode if we aren't inside |<>|.
-%    \begin{macrocode}
-   MoreSelectCharTable=%
-      \lst@CArgX--\relax\lst@DefDelimB{}{}%
-          {\ifnum\lst@mode=\lst@tagmode\else
-               \expandafter\@gobblethree
-           \fi}%
-          \lst@BeginComment\lst@commentmode{{\lst@commentstyle}}%
-      \lst@CArgX--\relax\lst@DefDelimE{}{}{}%
-          \lst@EndComment\lst@commentmode
-  }[keywords,comments,strings,html]%
-%    \end{macrocode}
-% \lsthelper{Peter~Biechele}{peter.biechele@physik.uni-freiburg.de}
-% {1999/07/01}{! Missing $\}$ inserted} reported a problem which was due to
-% missing |\@empty| in value of |SelectCharTable|. And after receiving a bug
-% report from \lsthelper{Jochen Schneider}{jschneider@ds3.etech.haw-hamburg.de}
-% {2002/04/05}{use of \lst@thestyle doesn't match its definition} I converted
-% the version 0.21 contents of |MoreSelectCharTable| to version 1.0.
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{IDL}
-%
-% The definition is from \lstthanks{J\"urgen~Heim}
-% {heim@astro.uni-tuebingen.de}{1998/07/27}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% IDL definition (c) 1998 Juergen Heim
-%%
-\lst@definelanguage{IDL}%
-  {morekeywords={and,begin,case,common,do,else,end,endcase,endelse,%
-      endfor,endif,endrep,endwhile,eq,for,function,ge,goto,gt,if,le,lt,%
-      mod,ne,not,of,on_ioerror,or,pro,repeat,return,then,until,while,%
-      xor,on_error,openw,openr,openu,print,printf,printu,plot,read,%
-      readf,readu,writeu,stop},%
-   sensitive=f,%
-   morecomment=[l];,%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Inform}
-%
-% Thanks to \lstthanks{Jonathan~Sauer}{jonathan.sauer@gmx.de}{2003/11/10}
-% for this language definition. \lsthelper{Ulrike Fischer}{-}{2004/04/21}
-% {Bug in listings.sty} pointed out that |\lstdefinelanguage| should be
-% |\lst@definelanguage|.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Inform definition (c) 2003 Jonathan Sauer
-%%
-\lst@definelanguage{inform}{%
-    % Language keywords
-    morekeywords={breakdo,else,false,for,has,hasnt,if,%
-                in,indirect,jump,notin,nothing,NULL,objectloop,ofclass,%
-                private,property,provides,return,rfalse,rtrue,self,string,%
-                switch,to,true,until,while,with,%
-                creature,held,multiexcept,multiheld,multiinside,noun,number,%
-                scope,topic},%
-    %
-    % Inform functions
-    morekeywords=[2]{box,child,children,font,give,inversion,metaclass,move,%
-                new_line,parent,print,print_ret,read,remove,restore,sibling,%
-                save,spaces,quit,style,bold,underline,reverse,roman remaining,%
-                create,destroy,recreate,copy},%
-    %
-    % Inform definitions
-    morekeywords=[3]{Attribute,Array,Class,Constant,Default,End,Endif,Extend,%
-                Global,Ifdef,Iffalse,Ifndef,Ifnot,Iftrue,Include,Object,%
-                Property,Verb,Release,Serial,Statusline},%
-    %
-    % Library attributes
-    morekeywords=[4]{absent,animate,clothing,concealed,container,door,edible,%
-                enterable,female,general,light,lockable locked,male,moved,%
-                neuter,on,open,openable,pluralname,proper,scenery,scored,%
-                static,supporter,switchable,talkable,transparent,visited,%
-                workflag,worn},%
-    %
-    % Library properties
-    morekeywords=[5]{n_to,s_to,e_to,w_to,ne_to,nw_to,se_to,sw_to,in_to,%
-                out_to,u_to,d_to,add_to_scope,after,article,articles,before,%
-                cant_go,capacity,daemon,describe,description,door_dir,door_to,%
-                each_turn,found_in,grammar,initial,inside_description,invent,%
-                life,list_together,name number,orders,parse_name,plural,%
-                react_after,react_before,short_name,short_name_indef,time_left,%
-                time_out,when_closed,when_open,when_on,when_off,%
-                with_key},%
-    %
-    % Library routines
-    morekeywords=[6]{Achieved,AfterRoutines,AllowPushDir,Banner,ChangePlayer,%
-                CommonAncestor,DictionaryLookup,GetGNAOfObject,HasLightSource,%
-                IndirectlyContains,IsSeeThrough,Locale,LoopOverScope,LTI_Insert,%
-                MoveFloatingObjects,NextWord,NextWordStopped,NounDomain,%
-                ObjectIsUntouchable OffersLight,ParseToken,PlaceInScope,PlayerTo,%
-                PronounNotice,PronounValue,ScopeWithin,SetPronoun,SetTime,%
-                StartDaemon,StartTimer,StopDaemon,StopTimer,TestScope,TryNumber,%
-                UnsignedCompare,WordAddress,WordInProperty,WordLength,%
-                WriteListFrom,YesOrNo},%
-    %
-    % Library,entry points
-    morekeywords=[7]{AfterLife,AfterPrompt,Amusing,BeforeParsing,ChooseObjects,%
-                DarkToDark,DeathMessage,GamePostRoutine GamePreRoutine,%
-                Initialise,InScope,LookRoutine,NewRoom,ParseNoun,ParseNumber,%
-                ParserError,PrintRank,PrintTaskName,PrintVerb,TimePasses,%
-                UnknownVerb},%
-    %
-    % Library constants
-    morekeywords=[8]{NEWLINE_BIT,INDENT_BIT,FULLINV_BIT,ENGLISH_BIT,RECURSE_BIT,%
-                ALWAYS_BIT,TERSE_BIT,PARTINV_BIT,DEFART_BIT,WORKFLAG_BIT,%
-                ISARE_BIT,CONCEAL_BIT},%
-    %
-    % Library,meta actions
-    morekeywords=[9]{Pronouns,Quit,Restart,Restore,Save,Verify,ScriptOn,ScriptOff,%
-                NotifyOn,NotifyOff,Places,Objects,Score,FullScore,Version,LMode1,%
-                LMode2,Lmode3},%
-    %
-    % Library,main actions
-    morekeywords=[10]{Close,Disrobe,Drop,Eat,Empty,EmptyT,Enter,Examine,Exit,GetOff,%
-                Give,Go,GoIn,Insert,Inv,InvTall,InvWide,Lock,Look,Open,PutOn,Remove,%
-                Search,Show,SwitchOff,SwitchOn,Take,Transfer,Unlock VagueGo,%
-                Wear},%
-    %
-    % Library,stub actions
-    morekeywords=[11]{Answer,Ask,AskFor,Attack,Blow,Burn,Buy,Climb,Consult,Cut,Dig,%
-                Drink,Fill,Jump,JumpOver,Kiss,Listen,LookUnder,Mild,No,Pray,Pull,%
-                Push,PushDir,Rub,Set,SetTo,Sing,Sleep,Smell,,Sleep,Smell,Sorry,%
-                Squeeze,Strong,Swim,Swing,Taste,Tell,Think,ThrowAt,Tie,Touch,Turn,%
-                Wait,Wake,WakeOther,Wave,WaveHands,Yes},%
-    %
-    otherkeywords={->,-->},%
-    sensitive=false,%
-    morestring=[d]{"},%
-    morecomment=[l]{!}%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Java and other JVM based languages}
-%
-% \lstthanks{Robert~Wenner}{robert.wenner@gmx.de}{2003/03/27} sent in the
-% first of the following two definitions.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% AspectJ definition (c) Robert Wenner
-%%
-\lst@definelanguage[AspectJ]{Java}[]{Java}%
-  {morekeywords={%
-      adviceexecution,after,args,around,aspect,aspectOf,before,%
-      call,cflow,cflowbelow,%
-% declare error,declare parents,declare precedence,
-% declare soft,declare warning,
-      execution,get,handler,if,initialization,issingleton,pointcut,%
-      percflow,percflowbelow,perthis,pertarget,preinitialization,%
-      privileged,proceed,returning,set,staticinitialization,strictfp,%
-      target,this,thisEnclosingJoinPoint,thisJoinPoint,throwing,%
-      within,withincode},%
-   MoreSelectCharTable=%
-     \lst@DefSaveDef{`.}\lst@umdot{\lst@umdot\global\let\lst@derefop\@empty}%
-     \ifx\lst@derefinstalled\@empty\else
-        \global\let\lst@derefinstalled\@empty
-\lst@AddToHook{Output}%
-{\lst@ifkeywords
-    \ifx\lst@derefop\@empty
-       \global\let\lst@derefop\relax
-       \ifx\lst@thestyle\lst@gkeywords@sty
-          \ifx\lst@currstyle\relax
-             \let\lst@thestyle\lst@identifierstyle
-          \else
-             \let\lst@thestyle\lst@currstyle
-          \fi
-       \fi
-    \fi
- \fi}
-\lst@AddToHook{BOL}{\global\let\lst@derefop\relax}%
-\lst@AddTo\lst@ProcessSpace{\global\let\lst@derefop\relax}%
-     \fi
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-% Got data from \texttt{http://java.sun.com}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Java}%
-  {morekeywords={abstract,boolean,break,byte,case,catch,char,class,%
-      const,continue,default,do,double,else,extends,false,final,%
-      finally,float,for,goto,if,implements,import,instanceof,int,%
-      interface,label,long,native,new,null,package,private,protected,%
-      public,return,short,static,super,switch,synchronized,this,throw,%
-      throws,transient,true,try,void,volatile,while},%
-   sensitive,%
-   morecomment=[l]//,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]",%
-   morestring=[b]',%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-% \lsthelper{Herbert Voss}{Herbert.Voss@alumni.TU-Berlin.de}{2002/07/30}
-% {missing keyword label} added the keyword \texttt{label}.
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-% \lstthanks{Martine~Gautier}{Martine.Gautier@loria.fr}{2004/03/30} made the
-% following contribution.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% ByteCodeJava definition (c) 2004 Martine Gautier
-%%
-\lst@definelanguage{JVMIS}%
-  {morekeywords={aaload,astore,aconst_null,aload,aload_0,aload_1,%
-      aload_2,aload_3,anewarray,areturn,arraylength,astore,astore_0,%
-      astore_1,astore_2,astore_3,athrow,baload,bastore,bipush,caload,%
-      castore,checkcast,d2f,d2i,d2l,dadd,daload,dastore,dcmpg,dcmpl,%
-      dconst_0,dconst_1,ddiv,dload,dload_0,dload_1,dload_2,dload_3,%
-      dmul,dneg,drem,dreturn,dstore,dstore_0,dstore_1,dstore_2,%
-      dstore_3,dsub,dup,dup_x1,dup_x2,dup2,dup2_x1,dup2_x2,f2d,%
-      f2i,f2l,fadd,faload,fastore,fcmpg,fcmpl,fconst_0,fconst_1,%
-      fconst_2,fdiv,fload,fload_0,fload_1,fload_2,fload_3,fmul,%
-      fneg,frem,freturn,fstore,fstore_0,fstore_1,fstore_2,fstore_3,%
-      fsub,getfield,getstatic,goto,goto_w,i2b,i2c,i2d,i2f,i2l,i2s,%
-      iadd,iaload,iand,iastore,iconst_0,iconst_1,iconst_2,iconst_3,%
-      iconst_4,iconst_5,idiv,if_acmpeq,if_acmpne,if_icmpeq,if_icmpne,%
-      if_icmplt,if_cmpge,if_cmpgt,if_cmple,ifeq,ifne,iflt,ifge,ifgt,%
-      ifle,ifnonnull,ifnull,iinc,iload,iload_0,iload_1,iload_2,%
-      iload_3,imul,ineg,instanceof,invokeinterface,invokespecial,%
-      invokestatic,invokevirtual,ior,irem,ireturn,ishl,ishr,istore,%
-      istore_0,istore_1,istore_2,istore_3,isub,iushr,ixor,jsr,jsr_w,%
-      l2d,l2f,l2i,ladd,laload,land,lastore,lcmp,lconst_0,lconst_1,%
-      ldc,ldc_w,ldc2_w,ldiv,lload,lload_0,lload_1,lload_2,lload_3,%
-      lmul,lneg,lookupswitch,lor,lrem,lreturn,lshl,lshr,lstore,%
-      lstore_0,lstore_1,lstore_2,lstore_3,lsub,lushr,lxor,%
-      monitorenter,monitorexit,multianewarray,new,newarray,nop,pop,%
-      pop2,putfield,putstatic,ret,return,saload,sastore,sipush,swap,%
-      tableswitch,wide,limit,locals,stack},%
-  }[keywords]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsubsection{Scala}
-%
-% \lstthanks{Bastian Germann}{bastian.germann@nordakademie.de}{2013/10/19}
-% asked to include the Scala definition provided by Frank Teubler
-% (2009). Here it is:
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Scala}%
-  {morekeywords={abstract,case,catch,class,def,%
-    do,else,extends,false,final,finally,%
-    for,if,implicit,import,lazy,match,mixin,%
-    new,null,object,override,package,%
-    private,protected,requires,return,sealed,%
-    super,this,trait,true,try,%
-    type,val,var,while,with,yield},%+
-%	otherkeywords={_,:,=,=>,<<:,<\%,>:,\#,@},%
-	otherkeywords={=,=>,<-,<\%,<:,>:,\#,@},%
-   sensitive,%
-   morecomment=[l]//,%
-   morecomment=[n]{/*}{*/},%
-   morestring=[b]",%
-   morestring=[b]',%
-   morestring=[b]""",%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{ksh}
-%
-% Thanks to \lstthanks{Jeffrey Ratcliffe}{Jeffrey.Ratcliffe@m.eads.net}
-% {2002/02/21} for this language definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{ksh}
-  {morekeywords={alias,awk,cat,echo,else,elif,fi,exec,exit,%
-      for,in,do,done,select,case,esac,while,until,function,%
-      time,export,cd,eval,fc,fg,kill,let,pwd,read,return,rm,%
-      glob,goto,history,if,logout,nice,nohup,onintr,repeat,sed,%
-      set,setenv,shift,source,switch,then,umask,unalias,%
-      unset,wait,@,env,argv,child,home,ignoreeof,noclobber,%
-      noglob,nomatch,path,prompt,shell,status,verbose,print,printf,%
-      sqrt,BEGIN,END},%
-   morecomment=[l]\#,%
-   morestring=[d]",%
-   morestring=[d]',%
-   morestring=[d]`%
-  }[keywords,comments,strings]%
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \lsthelper{Herbert Voss}{Herbert.Voss@alumni.TU-Berlin.de}{2002/10/28}
-% {[Fwd: Re: Probleme mit Paket listings bei ksh]} suggested to add the
-% string delimiter |`|.
-% \endgroup
-%
-%
-% \subsection{Lingo}
-%
-% Thanks to \lstthanks{Mark Schade}{-}{2006/07/26} for this language definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Lingo}
-  {morekeywords={abort,after,and,before,do,down,halt,me,new,not,of,%
-      on,or,otherwise,pass,put,result,return,set,tell,the,then,to,with,%
-      repeat,while,case,if,else,true,false,global,property,\_global,\_key,%
-      \_mouse,\_movie,\_player,\_sound,\_system,abbr,abbrev,abbreviated,abs,%
-      actionsenabled,activateapplication,activatewindow,active3drenderer,%
-      activecastlib,activewindow,actorlist,add,addat,addbackdrop,addcamera,%
-      addchild,addmodifier,addoverlay,addprop,addtoworld,addvertex,alert,%
-      alerthook,alignment,allowcustomcaching,allowgraphicmenu,allowsavelocal,%
-      allowtransportcontrol,allowvolumecontrol,allowzooming,alphathreshold,%
-      ambient,ambientcolor,ancestor,angle,anglebetween,animationenabled,%
-      antialias,antialiasthreshold,append,applicationname,applicationpath,%
-      appminimize,atan,attenuation,attributevalue,auto,autoblend,automask,%
-      autotab,axisangle,back,backcolor,backdrop,backgroundcolor,backspace,%
-      beep,beepon,beginrecording,beginsprite,beveldepth,beveltype,bgcolor,%
-      bias,bitand,bitmap,bitmapsizes,bitnot,bitor,bitrate,bitspersample,%
-      bitxor,blend,blendconstant,blendconstantlist,blendfactor,blendfunction,%
-      blendfunctionlist,blendlevel,blendrange,blendsource,blendsourcelist,%
-      blendtime,bone,bonesplayer,border,both,bottom,bottomcap,bottomradius,%
-      bottomspacing,boundary,boundingsphere,box,boxdropshadow,boxtype,%
-      breakconnection,breakloop,brightness,broadcastprops,browsername,%
-      buffersize,build,buttonsenabled,buttonstyle,buttontype,bytesstreamed,%
-      boolean,cachedocverify,cachesize,call,callancestor,camera,cameracount,%
-      cameraposition,camerarotation,cancelidleload,castlib,castlibnum,%
-      castmemberlist,center,centerregpoint,centerstage,changearea,channelcount,%
-      char,characterset,charpostoloc,chars,charspacing,chartonum,%
-      checkboxaccess,checkboxtype,checkmark,checknetmessages,child,chunksize,%
-      clearatrender,clearcache,clearerror,clearframe,clearglobals,clearvalue,%
-      clickloc,clickmode,clickon,clone,clonedeep,clonemodelfromcastmember,%
-      clonemotionfromcastmember,close,closed,closewindow,closexlib,collision,%
-      collisiondata,collisionnormal,color,world,colorbuffer,colorbufferdepth,%
-      colordepth,colorlist,colorrange,colors,colorsteps,commanddown,comments,%
-      compressed,connecttonetserver,constrainh,constraint,constrainv,,%
-      continue,controldown,controller,copypixels,copyrightinfo,copyto,%
-      copytoclipboard,cos,count,cpuhogticks,creaseangle,creases,[contains],%
-      createfolder,createmask,creatematte,creationdate,creator,crop,cross,%
-      crossproduct,cuepassed,cuepointnames,cuepointtimes,currentloopstate,%
-      currentspritenum,currenttime,cursor,cursorsize,curve,cylinder,ate,day,%
-      deactivateapplication,deactivatewindow,debug,debugplaybackenabled,%
-      decaymode,defaultrect,defaultrectmode,delay,delete,deleteall,deleteat,%
-      deletecamera,deletefolder,deleteframe,deletegroup,deletelight,%
-      deletemodel,deletemodelresource,deletemotion,deleteone,deleteprop,%
-      deleteshader,deletetexture,deletevertex,density,depth,depthbufferdepth,%
-      desktoprectlist,diffuse,diffusecolor,diffuselightmap,%
-      digitalvideotimescale,digitalvideotype,direction,directionalcolor,%
-      directionalpreset,directtostage,disableimagingtransformation,displayface,%
-      displaymode,distanceto,distribution,dither,done,doneparsing,dot,%
-      dotproduct,doubleclick,downloadnetthing,drag,draw,drawrect,dropshadow,%
-      duplicate,duplicateframe,duration,editable,editshortcutsenabled,%
-      elapsedtime,emissive,emitter,empty,emulatemultibuttonmouse,enabled,%
-      enablehotspot,end,endangle,endcolor,endframe,endrecording,endsprite,%
-      endtime,enter,enterframe,environment,erase,error,eventpassmode,%
-      exchange,exists,exit,exitframe,exitlock,exp,externalevent,%
-      externalparamcount,externalparamname,externalparamvalue,extractalpha,%
-      extrude3d,face,fadein,fadeout,fadeto,far,field,fieldofview,filename,%
-      fill,fillcolor,fillcycles,filldirection,filled,fillmode,filloffset,%
-      fillscale,findempty,findlabel,findpos,findposnear,finishidleload,%
-      firstindent,fixedlinespace,fixedrate,fixstagesize,flashrect,flashtostage,%
-      flat,fliph,flipv,float,floatp,floatprecision,flush,flushinputevents,%
-      fog,folderchar,font,fontsize,fontstyle,forecolor,forget,frame,%
-      framecount,framelabel,framepalette,framerate,frameready,framescript,%
-      framesound1,framesound2,framestohms,frametempo,frametransition,freeblock,%
-      freebytes,fromcastmember,fromimageobject,front,frontwindow,%
-      generatenormals,getaprop,getat,getbehaviordescription,getbehaviortooltip,%
-      getboneid,geterror,geterrorstring,gethardwareinfo,gethotspotrect,getlast,%
-      getlatestnetid,getnetaddresscookie,getneterrorstring,getnetmessage,%
-      getnetoutgoingbytes,getnettext,getnormalized,getnthfilenameinfolder,%
-      getnumberwaitingnetmessages,getone,getpeerconnectionlist,getpixel,%
-      getplaylist,getpos,getpref,getprop,getpropat,getpropertydescriptionlist,%
-      getrendererservices,getstreamstatus,gettemppath,getworldtransform,globals,%
-      glossmap,go,gotoframe,gotonetmovie,gotonetpage,gradienttype,gravity,%
-      group,handler,handlers,height,heightvertices,high,highlightpercentage,%
-      highlightstrength,hilite,hither,hittest,hmstoframes,hold,hotspot,html,%
-      hyperlink,hyperlinkclicked,hyperlinkrange,hyperlinks,hyperlinkstate,%
-      id3tags,identity,idle,idlehandlerperiod,idleloaddone,idleloadmode,%
-      idleloadperiod,idleloadtag,idlereadchunksize,ilk,image,imagecompression,%
-      imageenabled,imagequality,immovable,importfileinto,inflate,ink,inker,%
-      inlineimeenabled,insertbackdrop,insertframe,insertoverlay,inside,%
-      installmenu,instance,integer,integerp,interface,interpolate,%
-      interpolateto,intersect,index,interval,inverse,invert,invertmask,%
-      isbusy,isinworld,isoktoattach,ispastcuepoint,item,itemdelimiter,kerning,%
-      kerningthreshold,key,keyboardfocussprite,keycode,keydown,keydownscript,%
-      keyframeplayer,keypressed,keyup,keyupscript,label,labellist,last,%
-      lastchannel,lastclick,lastevent,lastframe,lastkey,lastroll,left,%
-      leftindent,length,lengthvertices,level,lifetime,light,line,linearlist,%
-      linecolor,linecount,linedirection,lineheight,lineoffset,linepostolocv,%
-      linesize,linkas,linked,list,listp,loaded,loadfile,loc,loch,locked,%
-      locktranslation,loctocharpos,locv,locvtolinepos,locz,lod,log,long,%
-      loop,loopcount,loopendtime,loopsremaining,loopstarttime,machinetype,%
-      magnitude,map,mapImageToStage,mapmembertostage,mapstagetomember,margin,%
-      marker,markerlist,mask,max,maxinteger,maxspeed,mci,media,mediaready,%
-      member,membernum,members,memorysize,menu,mesh,meshdeform,milliseconds,%
-      min,minspeed,modal,mode,model,modela,modelb,modelresource,%
-      modelsunderloc,modelsunderray,modelunderloc,modified,modifiedby,%
-      modifieddate,modifier,modifiers,month,mostrecentcuepoint,motion,%
-      mousechar,mousedown,mousedownscript,mouseenter,mouseh,mouseitem,%
-      mouseleave,mouselevel,mouseline,mouseloc,mousemember,mouseoverbutton,%
-      mouseup,mouseupoutside,mouseupscript,mousev,mousewithin,mouseword,move,%
-      moveablesprite,movetoback,movetofront,movevertex,movevertexhandle,%
-      movewindow,movie,movieaboutinfo,moviecopyrightinfo,moviefilefreesize,%
-      moviefilesize,moviefileversion,movieimagecompression,movieimagequality,%
-      moviename,moviepath,movierate,movietime,moviextralist,mpeglayer,%
-      multiply,multisound,name,near,nearfiltering,neighbor,netabort,netdone,%
-      neterror,netlastmoddate,netmime,netpresent,netstatus,nettextresult,%
-      netthrottleticks,newcamera,newcurve,newgroup,newlight,newmesh,newmodel,%
-      newmodelresource,newmotion,newshader,newtexture,next,none,normalize,%
-      normallist,normals,nothing,notify,nudge,number,numchannels,%
-      numparticles,numsegments,numtochar,objectp,offset,open,openresfile,%
-      openwindow,openxlib,optiondown,organizationname,originalfont,originh,%
-      originmode,originpoint,originv,orthoheight,overlay,pageheight,palette,%
-      palettemapping,paletteref,paletteindex,pan,paragraph,param,paramcount,%
-      parent,parsestring,particle,pasteclipboardinto,path,pathname,%
-      pathstrength,pattern,pause,pausedatstart,pausestate,percentplayed,%
-      percentstreamed,period,perpendicularto,persistent,pi,picture,picturep,%
-      plane,platform,play,playbackmode,playfile,playing,playlist,playnext,%
-      playrate,point,pointat,pointatorientation,pointinhyperlink,%
-      pointofcontact,pointtochar,pointtoitem,pointtoline,pointtoparagraph,%
-      pointtoword,position,positionreset,posterframe,postnettext,power,%
-      preferred3drenderer,preload,preloadbuffer,preloadeventabort,preloadmember,%
-      preloadmode,preloadmovie,preloadnetthing,preloadram,preloadtime,%
-      premultiply,prepareframe,preparemovie,prerotate,prescale,pretranslate,%
-      previous,primitives,printfrom,productversion,projection,projectionangle,%
-      propList,proxyserver,pttohotspotid,puppet,puppetpalette,puppetsound,%
-      puppetsprite,puppettempo,puppettransition,purgepriority,%
-      qtregisteraccesskey,qtunregisteraccesskey,quad,quality,queue,quit,quote,%
-      radius,ramneeded,random,randomseed,randomvector,rateshift,rawnew,read,%
-      readvalue,recordfont,rect,ref,reflectionmap,reflectivity,region,%
-      registerforevent,registerscript,regpoint,regpointvertex,removebackdrop,%
-      removefromworld,removelast,removemodifier,removeoverlay,rename,renderer,%
-      rendererdevicelist,renderformat,renderstyle,resetworld,resizewindow,%
-      resolution,resolve,resolvea,resolveb,resource,restart,resume,%
-      reverttoworlddefaults,rewind,rgb,rgba4444,rgba5550,rgba5551,rgba5650,%
-      rgba8880,rgba8888,right,rightindent,rightmousedown,rightmouseup,%
-      rollover,romanlingo,rootlock,rootnode,rotate,rotation,rotationreset,%
-      rtf,runmode,runpropertydialog,safeplayer,samplecount,samplerate,%
-      samplesize,save,savedlocal,savemovie,scale,scalemode,score,scorecolor,%
-      scoreselection,script,scriptexecutionstyle,scriptinstancelist,scriptlist,%
-      scriptnum,scriptsenabled,scripttext,scripttype,scrollbyline,scrollbypage,%
-      scrolltop,sds,searchcurrentfolder,searchpath,searchpaths,seconds,%
-      selectedtext,selection,selend,selstart,sendallsprites,sendevent,%
-      sendnetmessage,sendsprite,serialnumber,setalpha,setaprop,setat,%
-      setcollisioncallback,setflashproperty,setnetbufferlimits,%
-      setnetmessagehandler,setpixel,setplaylist,setpref,setprop,setscriptlist,%
-      settrackenabled,setvariable,shader,shaderlist,shadowpercentage,%
-      shadowstrength,shapetype,shiftdown,shininess,shockwave3d,short,%
-      showglobals,showlocals,showprops,showresfile,showxlib,shutdown,%
-      silhouettes,sin,size,sizerange,skew,sleep,smoothness,sort,sound,%
-      soundbusy,soundchannel,sounddevice,sounddevicelist,soundenabled,%
-      soundkeepdevice,soundlevel,soundmixmedia,source,sourcerect,space,%
-      specular,specularcolor,specularlightmap,sphere,spotangle,spotdecay,%
-      sprite,spritenum,spritespacetoworldspace,sqrt,stage,stagebottom,%
-      stagecolor,stageleft,stageright,stagetoflash,stagetop,standard,%
-      startangle,startframe,startmovie,starttime,starttimer,state,static,%
-      status,stepframe,stilldown,stop,stopevent,stopmovie,stoptime,stream,%
-      streammode,streamname,streamsize,streamstatus,string,stringp,%
-      strokecolor,strokewidth,style,subdivision,sweep,swing,switchcolordepth,%
-      symbol,symbolp,systemdate,tab,tabcount,tabs,tan,target,%
-      tellstreamstatus,tension,text,texture,texturecoordinatelist,%
-      texturecoordinates,texturelayer,texturelist,texturemember,texturemode,%
-      texturemodelist,texturerenderformat,texturerepeat,texturerepeatlist,%
-      texturetransform,texturetransformlist,texturetype,thumbnail,ticks,tilt,%
-      time,timeout,timeouthandler,timeoutkeydown,timeoutlapsed,timeoutlength,%
-      timeoutlist,timeoutmouse,timeoutplay,timeoutscript,timer,timescale,%
-      title,titlevisible,toon,top,topcap,topradius,topspacing,trace,%
-      traceload,tracelogfile,trackcount,trackenabled,tracknextkeytime,%
-      tracknextsampletime,trackpreviouskeytime,trackprevioussampletime,%
-      trackstarttime,trackstoptime,tracktext,tracktype,trails,transform,%
-      transitiontype,translate,triggercallback,trimwhitespace,tunneldepth,%
-      tweened,tweenmode,type,[transparent],union,unload,unloadmember,%
-      unloadmovie,unregisterallevents,update,updateframe,updatelock,%
-      updatemovieenabled,updatestage,url,usealpha,usediffusewithtexture,%
-      usefastquads,usehypertextstyles,uselineoffset,userdata,username,value,%
-      vector,version,vertex,vertexlist,vertices,video,videoforwindowspresent,%
-      viewh,viewpoint,viewscale,viewv,visibility,visible,void,voidp,volume,%
-      volumeinfo,wait,waitfornetconnection,warpmode,width,widthvertices,wind,%
-      window,windowlist,windowpresent,windowtype,word,wordwrap,world,%
-      worldposition,worldspacetospritespace,worldtransform,wraptransform,%
-      wraptransformlist,write,writevalue,,xaxis,xtra,xtralist,xtras,,yaxis,%
-      year,yon,zaxis,zoombox,zoomwindow,repeat,Conditional,Boolean,TypeDef,%
-      Statement,Operator,String,Comment,Identifier,Special,x,y,z}
-   sensitive=false,
-   morecomment=[l]{--},
-   morestring=[b]",
-  }[keywords,comments,strings]%
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Lisp, AutoLisp}
-%
-% Most data are from
-% \begin{itemize}
-% \item
-%		\textsc{Guy Steele}:
-%		\textbf{Common Lisp};
-%		Copyright 1990 by Digital Equipment Corporation;
-%		ISBN 1-55558-042-4.
-% \end{itemize}
-% Thanks to \lsthelper{Aslak Raanes}{araanes@ifi.ntnu.no}{1997/11/24}{single
-% comment in Lisp} for the `single comment' delimiters. The keywords are the
-% `one-word' functions and macros of Common Lisp, i.e.~words not containing a
-% minus. But I left out the \texttt{caaaar}, \ldots{} functions.
-% If anyone types them in, I'd like to get them.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Lisp}%
-  {morekeywords={abort,abs,acons,acos,acosh,adjoin,alphanumericp,alter,%
-      append,apply,apropos,aref,arrayp,ash,asin,asinh,assoc,atan,atanh,%
-      atom,bit,boole,boundp,break,butlast,byte,catenate,ceiling,cerror,%
-      char,character,characterp,choose,chunk,cis,close,clrhash,coerce,%
-      collect,commonp,compile,complement,complex,complexp,concatenate,%
-      conjugate,cons,consp,constantp,continue,cos,cosh,cotruncate,%
-      count,delete,denominator,describe,directory,disassemble,%
-      documentation,dpb,dribble,ed,eighth,elt,enclose,endp,eq,eql,%
-      equal,equalp,error,eval,evalhook,evenp,every,exp,expand,export,%
-      expt,fboundp,fceiling,fdefinition,ffloor,fifth,fill,find,first,%
-      float,floatp,floor,fmakunbound,format,fourth,fround,ftruncate,%
-      funcall,functionp,gatherer,gcd,generator,gensym,gentemp,get,getf,%
-      gethash,identity,imagpart,import,inspect,integerp,intern,%
-      intersection,tively,isqrt,keywordp,last,latch,lcm,ldb,ldiff,%
-      length,list,listen,listp,load,log,logand,logbitp,logcount,logeqv,%
-      logior,lognand,lognor,lognot,logtest,logxor,macroexpand,%
-      makunbound,map,mapc,mapcan,mapcar,mapcon,maphash,mapl,maplist,%
-      mask,max,member,merge,min,mingle,minusp,mismatch,mod,namestring,%
-      nbutlast,nconc,nintersection,ninth,not,notany,notevery,nreconc,%
-      nreverse,nsublis,nsubst,nth,nthcdr,null,numberp,numerator,nunion,%
-      oddp,open,packagep,pairlis,pathname,pathnamep,phase,plusp,%
-      position,positions,pprint,previous,princ,print,proclaim,provide,%
-      random,rassoc,rational,rationalize,rationalp,read,readtablep,%
-      realp,realpart,reduce,rem,remhash,remove,remprop,replace,require,%
-      rest,revappend,reverse,room,round,rplaca,rplacd,sbit,scan,schar,%
-      search,second,series,set,seventh,shadow,signal,signum,sin,sinh,%
-      sixth,sleep,some,sort,split,sqrt,streamp,string,stringp,sublis,%
-      subseq,subseries,subsetp,subst,substitute,subtypep,svref,sxhash,%
-      symbolp,tailp,tan,tanh,tenth,terpri,third,truename,truncate,%
-      typep,unexport,unintern,union,until,values,vector,vectorp,warn,%
-      write,zerop,and,assert,case,ccase,cond,ctypecase,decf,declaim,%
-      defclass,defconstant,defgeneric,defmacro,defmethod,defpackage,%
-      defparameter,defsetf,defstruct,deftype,defun,defvar,do,dolist,%
-      dotimes,ecase,encapsulated,etypecase,flet,formatter,gathering,%
-      incf,iterate,labels,let,locally,loop,macrolet,mapping,or,pop,%
-      producing,prog,psetf,psetq,push,pushnew,remf,return,rotatef,%
-      setf,shiftf,step,time,trace,typecase,unless,untrace,when},%
-   sensitive,% ???
-   alsodigit=-,%
-   morecomment=[l];,%
-   morecomment=[s]{\#|}{|\#},% 1997 Aslak Raanes
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-% \lstthanks{Stefan Lagotzki}{info@lagotzki.de}{2001/10/28} warned me to
-% define this as a lisp dialect \ldots
-%    \begin{macrocode}
-%%
-%% AutoLISP/VisualLISP - Stefan Lagotzki, info@lagotzki.de
-%%
-\lst@definelanguage[Auto]{Lisp}%
-  {morekeywords={abs,acad_colordlg,acad_helpdlg,acad_strlsort,%
-      action_tile,add_list,alert,alloc,and,angle,angtof,angtos,append,%
-      apply,arx,arxload,arxunload,ascii,assoc,atan,atof,atoi,atom,%
-      atoms-family,autoarxload,autoload,Boole,boundp,caddr,cadr,car,%
-      cdr,chr,client_data_tile,close,command,cond,cons,cos,cvunit,%
-      defun,defun-q,defun-q-list-ref,defun-q-list-set,dictadd,dictnext,%
-      dictremove,dictrename,dictsearch,dimx_tile,dimy_tile,distance,%
-      distof,done_dialog,end_image,end_list,entdel,entget,entlast,%
-      entmake,entmakex,entmod,entnext,entsel,entupd,eq,equal,*error*,%
-      eval,exit,exp,expand,expt,fill_image,findfile,fix,float,foreach,%
-      function,gc,gcd,get_attr,get_tile,getangle,getcfg,getcname,%
-      getcorner,getdist,getenv,getfiled,getint,getkword,getorient,%
-      getpoint,getreal,getstring,getvar,graphscr,grclear,grdraw,grread,%
-      grtext,grvecs,handent,help,if,initdia,initget,inters,itoa,lambda,%
-      last,layoutlist,length,list,listp,load,load_dialog,log,logand,%
-      logior,lsh,mapcar,max,mem,member,menucmd,menugroup,min,minusp,%
-      mode_tile,namedobjdict,nentsel,nentselp,new_dialog,not,nth,%
-      null,numberp,open,or,osnap,polar,prin1,princ,print,progn,prompt,%
-      quit,quote,read,read-char,read-line,redraw,regapp,rem,repeat,%
-      reverse,rtos,set,set_tile,setcfg,setenv,setfunhelp,setq,%
-      setvar,setview,sin,slide_image,snvalid,sqrt,ssadd,ssdel,ssget,%
-      ssgetfirst,sslength,ssmemb,ssname,ssnamex,sssetfirst,startapp,%
-      start_dialog,start_image,start_list,strcase,strcat,strlen,subst,%
-      substr,tablet,tblnext,tblobjname,tblsearch,term_dialog,terpri,%
-      textbox,textpage,textscr,trace,trans,type,unload_dialog,untrace,%
-      vector_image,ver,vl-acad-defun,vl-acad-undefun,vl-arx-import,%
-      vl-bb-ref,vl-bb-set,vl-catch-all-apply,%
-      vl-catch-all-error-message,vl-catch-all-error-p,vl-cmdf,vl-consp,%
-      vl-directory-files,vl-doc-export,vl-doc-import,vl-doc-ref,%
-      vl-doc-set,vl-every,vl-exit-with-error,vl-exit-with-value,%
-      vl-file-copy,vl-file-delete,vl-file-directory-p,vl-file-rename,%
-      vl-file-size,vl-file-systime,vl-filename-base,%
-      vl-filename-directory,vl-filename-extension,vl-filename-mktemp,%
-      vl-get-resource,vl-list*,vl-list->string,%
-      vl-list-exported-functions,vl-list-length,vl-list-loaded-vlx,%
-      vl-load-all,vl-load-com,vl-load-reactors,vl-member-if,%
-      vl-member-if-not,vl-position,vl-prin1-to-string,%
-      vl-princ-to-string,vl-propagate,vl-registry-delete,%
-      vl-registry-descendents,vl-registry-read,vl-registry-write,%
-      vl-remove,vl-remove-if,vl-remove-if-not,vl-some,vl-sort,%
-      vl-sort-i,vl-string->list,vl-string-elt,vl-string-left-trim,%
-      vl-string-mismatch,vl-string-position,vl-string-right-trim,%
-      vl-string-search,vl-string-subst,vl-string-translate,%
-      vl-string-trim,vl-symbol-name,vl-symbol-value,vl-symbolp,%
-      vl-unload-vlx,vl-vbaload,vl-vbarun,vl-vlx-loaded-p,vlax-3D-point,%
-      vlax-add-cmd,vlax-create-object,vlax-curve-getArea,%
-      vlax-curve-getDistAtParam,vlax-curve-getDistAtPoint,%
-      vlax-curve-getEndParam,vlax-curve-getEndPoint,%
-      vlax-curve-getParamAtDist,vlax-curve-getParamAtPoint,%
-      vlax-curve-getPointAtDist,vlax-curve-getPointAtParam,%
-      vlax-curve-getStartParam,vlax-curve-getStartPoint,%
-      vlax-curve-isClosed,vlax-curve-isPeriodic,vlax-curve-isPlanar,%
-      vlax-curve-getClosestPointTo,%
-      vlax-curve-getClosestPointToProjection,vlax-curve-getFirstDeriv,%
-      vlax-curve-getSecondDeriv,vlax-dump-object,%
-      vlax-ename->vla-object,vlax-erased-p,vlax-for,%
-      vlax-get-acad-object,vlax-get-object,vlax-get-or-create-object,%
-      vlax-get-property,vlax-import-type-library,vlax-invoke-method,%
-      vlax-ldata-delete,vlax-ldata-get,vlax-ldata-list,vlax-ldata-put,%
-      vlax-ldata-test,vlax-make-safearray,vlax-make-variant,%
-      vlax-map-collection,vlax-method-applicable-p,%
-      vlax-object-released-p,vlax-product-key,%
-      vlax-property-available-p,vlax-put-property,vlax-read-enabled-p,%
-      vlax-release-object,vlax-remove-cmd,vlax-safearray-fill,%
-      vlax-safearray-get-dim,vlax-safearray-get-element,%
-      vlax-safearray-get-l-bound,vlax-safearray-get-u-bound,%
-      vlax-safearray-put-element,vlax-safearray-type,%
-      vlax-safearray->list,vlax-tmatrix,vlax-typeinfo-available-p,%
-      vlax-variant-change-type,vlax-variant-type,vlax-variant-value,%
-      vlax-vla-object->ename,vlax-write-enabled-p,vlisp-compile,%
-      vlr-acdb-reactor,vlr-add,vlr-added-p,vlr-beep-reaction,%
-      vlr-command-reactor,vlr-current-reaction-name,vlr-data,%
-      vlr-data-set,vlr-deepclone-reactor,vlr-docmanager-reactor,%
-      vlr-dwg-reactor,vlr-dxf-reactor,vlr-editor-reactor,%
-      vlr-insert-reactor,vlr-linker-reactor,vlr-lisp-reactor,%
-      vlr-miscellaneous-reactor,vlr-mouse-reactor,vlr-notification,%
-      vlr-object-reactor,vlr-owner-add,vlr-owner-remove,vlr-owners,%
-      vlr-pers,vlr-pers-list,vlr-pers-p,vlr-pers-release,%
-      vlr-reaction-names,vlr-reaction-set,vlr-reactions,vlr-reactors,%
-      vlr-remove,vlr-remove-all,vlr-set-notification,%
-      vlr-sysvar-reactor,vlr-toolbar-reactor,vlr-trace-reaction,%
-      vlr-type,vlr-types,vlr-undo-reactor,vlr-wblock-reactor,%
-      vlr-window-reactor,vlr-xref-reactor,vports,wcmatch,while,%
-      write-char,write-line,xdroom,xdsize,zerop},%
-   alsodigit=->,%
-   otherkeywords={1+,1-},%
-   sensitive=false,%
-   morecomment=[l];,%
-   morecomment=[l];;,%
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{LLVM}
-%\label{sec:llvm}
-%
-% LLVM provides a collection of modular and reusable compiler and toolchain
-% technologies, all further information can be found at its home page
-% \url{http://llvm.org/}. \lstthanks{Scott Pakin}{scott@pakin.org}{2013/07/31} provided a
-% language definition for the LLVM intermediate presentation according to
-% \url{http://llvm.org/docs/}.\footnote{In this section `I' is Scott
-% Pakin.} The language provides
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{LLVM}{%
-  morekeywords={%
-%    \end{macrocode}
-% \begin{itemize}
-% \item Instructions
-%    \begin{macrocode}
-    ret,br,switch,indirectbr,invoke,resume,unreachable,%
-    add,fadd,sub,fsub,mul,fmul,udiv,sdiv,fdiv,urem,srem,frem,%
-    shl,lshr,ashr,and,or,xor,%
-    extractelement,insertelement,shufflevector,%
-    extractvalue,insertvalue,%
-    alloca,load,store,fence,cmpxchg,atomicrmw,getelementptr,%
-    trunc,zext,sext,fptrunc,fpext,fptoui,fptosi,uitofp,sitofp,ptrtoint,%
-    inttoptr,bitcast,to,%
-    icmp,fcmp,phi,select,call,va_arg,landingpad,%
-%    \end{macrocode}
-% \item Atomic operations -- some duplication with the above
-%    \begin{macrocode}
-    xchg,add,sub,and,nand,or,xor,max,min,umax,umin,%
-%    \end{macrocode}
-% \item Comparisons
-%    \begin{macrocode}
-    eq,ne,ugt,uge,ult,ule,sgt,sge,slt,sle,%
-    false,oeq,ogt,oge,olt,ole,one,ord,ueq,ugt,uge,ult,ule,une,uno,true,%
-%    \end{macrocode}
-% \item Linkage types
-%    \begin{macrocode}
-    private,linker_private,linker_private_weak,linker_private_weak_def_auto,%
-    internal,available_externally,linkonce,common,weak,appending,extern_weak,%
-    linkonce_odr,weak_odr,external,dllimport,dllexport,%
-%    \end{macrocode}
-% \item Function headers
-%    \begin{macrocode}
-    define,declare,%
-%    \end{macrocode}
-% \item Parameter attributes
-%    \begin{macrocode}
-    zeroext,signext,inreg,byval,sret,noalias,nocapture,next,%
-%    \end{macrocode}
-% \item Garbage collector names
-%    \begin{macrocode}
-    gc,%
-%    \end{macrocode}
-% \item Function attributes
-%    \begin{macrocode}
-    address_safety,alignstack,alwaysinline,nonlazybind,inlinehint,naked,%
-    noimplicitfloat,noinline,noredzone,noreturn,nounwind,optsize,readnone,%
-    readonly,returns_twice,ssp,sspreq,uwtable,%
-%    \end{macrocode}
-% \item Module-level inline assembly
-%    \begin{macrocode}
-    module,asm,%
-%    \end{macrocode}
-% \item Data layout
-%    \begin{macrocode}
-    target,datalayout,%
-%    \end{macrocode}
-% \item Inline assembler expressions
-%    \begin{macrocode}
-    sideeffect,alignstack,%
-%    \end{macrocode}
-% \item Other keywords -- I'm probably missing some here.
-%    \begin{macrocode}
-    nuw,nsw,exact,inbounds,unnamed_addr},%
-  morekeywords=[2]{%
-%    \end{macrocode}
-% \item Types
-%    \begin{macrocode}
-    i1,i2,i4,i8,i16,i32,i64,i128,i256,i512,i1024,% <-- Most common integers
-    half,float,double,x86_fp80,fp128,ppc_fp128,x86mmx,%
-    void,label,metadata},%
-  alsoletter=.,%
-  sensitive=false,%
-  morecomment=[l];,%
-  morestring=[b]"%
-}
-%    \end{macrocode}
-% \end{itemize}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Logo}
-%
-% I don't know where the keywords are from and what kind of Logo it is.
-% Help me!
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Logo}%
-% ??? {end,unix} also keywords
-  {morekeywords={and,atan,arctan,both,break,bf,bl,butfirst,butlast,%
-      cbreak, close,co,continue,cos,count,clearscreen,cs,debquit,%
-      describe,diff,difference,ed,edit,either,emptyp,equalp,er,erase,%
-      errpause,errquit,fifp,filefprint,fifty,fileftype,fip,fileprint,%
-      fird,fileread,fity,filetype,fiwd,fileword,f,first,or,fp,fprint,%
-      fput,fty,ftype,full,fullscreen,go,bye,goodbye,gprop,greaterp,%
-      help,if,iff,iffalse,ift,iftrue,nth,item,keyp,llast,lessp,list,%
-      local,lput,make,max,maximum,memberp,memtrace,min,minimum,namep,%
-      not,numberp,oflush,openr,openread,openw,openwrite,op,output,%
-      pause,plist,pots,pow,pprop,pps,pr,print,product,quotient,random,%
-      rc,readchar,rl,readlist,remprop,repcount,repeat,request,rnd,run,%
-      se,sentence,sentencep,setc,setcolor,setipause,setqpause,po,show,%
-      sin,split,splitscreen,sqrt,stop,sum,test,text,textscreen,thing,%
-      to,tone,top,toplevel,type,untrace,wait,word,wordp,yaccdebug,is,%
-      mod,remainder,trace,zerop,back,bk,bto,btouch,fd,forward,fto,%
-      ftouch,getpen,heading,hit,hitoot,ht,hideturtle,loff,lampoff,lon,%
-      lampon,lt,left,lot,lotoot,lto,ltouch,penc,pencolor,pd,pendown,pe,%
-      penerase,penmode,pu,penup,px,penreverse,rt,right,rto,rtouch,%
-      scrunch,seth,setheading,setscrun,setscrunch,setxy,shownp,st,%
-      showturtle,towardsxy,clean,wipeclean,xcor,ycor,tur,turtle,%
-      display,dpy},%
-   sensitive=f% ???
-  }[keywords]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Lua}
-%
-% \lstthanks{Stephan Hennig}{sh2d@arcor.de}{2013/06/14} contributed the Lua
-% keywords.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-% We begin with the keywords for Lua 5.0:
-%    \begin{macrocode}
-%%
-%% Lua definitions (c) 2013 Stephan Hennig
-%%
-\lst@definelanguage[5.0]{Lua}{%
-%    \end{macrocode}
-% To enable highlighting of library keywords, the dot needs to be a
-% letter.
-%    \begin{macrocode}
-  alsoletter={.},%
-%    \end{macrocode}
-% The language definition knows
-% \begin{itemize}
-%   \item language keywords
-%    \begin{macrocode}
-  morekeywords=[1]{%
-    and, break, do, else, elseif, end, false, for, function, if, in,%
-    local, nil, not, or, repeat, return, then, true, until, while,%
-  },%
-%    \end{macrocode}
-%   \item the standard library identifiers
-%    \begin{macrocode}
-  morekeywords=[2]{%
-%    \end{macrocode}
-%   \begin{itemize}
-%     \item coming from the base library
-%    \begin{macrocode}
-    _G, _LOADED, _REQUIREDNAME, _VERSION, LUA_PATH,%
-    assert, collectgarbage, dofile, error, gcinfo, getfenv,%
-    getmetatable, ipairs, loadfile, loadlib, loadstring, newproxy,%
-    next, pairs, pcall, print, rawequal, rawget, rawset, require,%
-    setfenv, setmetatable, tonumber, tostring, type, unpack, xpcall,%
-%    \end{macrocode}
-%     \item coming from the coroutine library
-%    \begin{macrocode}
-    coroutine, coroutine.create, coroutine.resume,%
-    coroutine.status, coroutine.wrap, coroutine.yield,%
-%    \end{macrocode}
-%     \item the debug library
-%    \begin{macrocode}
-    _TRACEBACK, debug, debug.debug, debug.gethook, debug.getinfo,%
-    debug.getlocal, debug.getupvalue, debug.sethook, debug.setlocal,%
-    debug.setupvalue,debug.traceback,%
-%    \end{macrocode}
-%     \item the io library
-%    \begin{macrocode}
-    io, io.close, io.flush, io.input, io.lines, io.open, io.output,%
-    io.popen, io.read, io.stderr, io.stdin, io.stdout, io.tmpfile,%
-    io.type, io.write,%
-%    \end{macrocode}
-%     \item the mathematical library
-%    \begin{macrocode}
-    __pow, math, math.abs, math.acos, math.asin, math.atan, math.atan2,%
-    math.ceil, math.cos, math.deg, math.exp, math.floor, math.frexp,%
-    math.ldexp, math.log, math.log10, math.max, math.min, math.mod,%
-    math.pi, math.pow, math.rad, math.random, math.randomseed, math.sin,%
-    math.sqrt, math.tan,%
-%    \end{macrocode}
-%     \item the os library
-%    \begin{macrocode}
-    os, os.clock, os.date, os.difftime, os.execute, os.exit, os.getenv,%
-    os.remove, os.rename, os.setlocale, os.time, os.tmpname,%
-%    \end{macrocode}
-%     \item the string library
-%    \begin{macrocode}
-    string, string.byte, string.char, string.dump, string.find,%
-    string.format, string.gfind, string.gsub, string.len, string.lower,%
-    string.rep, string.sub, string.upper,%
-%    \end{macrocode}
-%     \item the table library
-%    \begin{macrocode}
-    table, table.concat, table.foreach, table.foreachi, table.getn,%
-    table.insert, table.remove, table.setn, table.sort,%
-  },%
-%    \end{macrocode}
-%   \end{itemize}
-% \end{itemize}
-% and some additional identifiers
-%    \begin{macrocode}
-  morekeywords=[2]{%
-    _PROMPT, _PROMPT2, arg,%
-  },%
-%    \end{macrocode}
-% These are the common language settings
-%    \begin{macrocode}
-  sensitive=true,%
-  % single line comments
-  morecomment=[l]{--},%
-  % multi line comments
-  morecomment=[s]{--[[}{]]},%
-  % backslash escaped strings
-  morestring=[b]",%
-  morestring=[b]',%
-  % multi line strings
-  morestring=[s]{[[}{]]},%
-}[keywords,comments,strings]%
-%    \end{macrocode}
-% \endgroup
-% And here are the new definitions for Lua 5.1:
-% \begingroup
-%    \begin{macrocode}
-\lst@definelanguage[5.1]{Lua}[5.0]{Lua}{%
-%    \end{macrocode}
-%  There are some deletions
-%    \begin{macrocode}
-  deletekeywords=[2]{%
-%    \end{macrocode}
-% concerning
-% \begin{itemize}
-% \item the base library
-%    \begin{macrocode}
-    _LOADED, _REQUIREDNAME, LUA_PATH, gcinfo, loadlib,%
-%    \end{macrocode}
-% \item the debug library
-%    \begin{macrocode}
-    _TRACEBACK,%
-%    \end{macrocode}
-% \item the mathematical library
-%    \begin{macrocode}
-    __pow, math.mod,%
-%    \end{macrocode}
-% \item the string library
-%    \begin{macrocode}
-    string.gfind,%
-%    \end{macrocode}
-% \item the table library
-%    \begin{macrocode}
-    table.foreach, table.foreachi, table.getn, table.setn,%
-  },%
-%    \end{macrocode}
-% \end{itemize}
-%  and some new identifiers in standard libraries like
-%    \begin{macrocode}
-  morekeywords=[2]{%
-%    \end{macrocode}
-% \begin{itemize}
-% \item the base library
-%    \begin{macrocode}
-    load, select,%
-%    \end{macrocode}
-%   \item coroutine library
-%    \begin{macrocode}
-    coroutine.running,%
-%    \end{macrocode}
-%   \item debug library
-%    \begin{macrocode}
-    debug.getfenv, debug.getmetatable, debug.getregistry, debug.setfenv,%
-    debug.setmetatable,%
-%    \end{macrocode}
-%   \item the mathematical library
-%    \begin{macrocode}
-    math.cosh, math.fmod, math.huge, math.modf, math.sinh, math.tanh,%
-%    \end{macrocode}
-%   \item the package library which itself is new in Lua 5.1
-%    \begin{macrocode}
-    module, package, package.config, package.cpath, package.loaded,%
-    package.loaders, package.loadlib, package.path, package.preload,%
-    package.seeall,%
-%    \end{macrocode}
-%   \item the string library and
-%    \begin{macrocode}
-    string.gmatch, string.match, string.reverse,%
-%    \end{macrocode}
-%   \item the table library
-%    \begin{macrocode}
-    table.maxn,%
-  },%
-%    \end{macrocode}
-% \end{itemize}
-% In Lua 5.1 long bracket comments were introduced also
-%    \begin{macrocode}
-  morecomment=[s]{--[=[}{]=]},%
-  morecomment=[s]{--[==[}{]==]},%
-  morecomment=[s]{--[===[}{]===]},%
-  morecomment=[s]{--[====[}{]====]},%
-  morecomment=[s]{--[=====[}{]=====]},%
-  morecomment=[s]{--[======[}{]======]},%
-  morecomment=[s]{--[=======[}{]=======]},%
-  morecomment=[s]{--[========[}{]========]},%
-  morecomment=[s]{--[=========[}{]=========]},%
-  morecomment=[s]{--[==========[}{]==========]},%
-%    \end{macrocode}
-% as well as long bracket strings
-%    \begin{macrocode}
-  morestring=[s]{[=[}{]=]},%
-  morestring=[s]{[==[}{]==]},%
-  morestring=[s]{[===[}{]===]},%
-  morestring=[s]{[====[}{]====]},%
-  morestring=[s]{[=====[}{]=====]},%
-  morestring=[s]{[======[}{]======]},%
-  morestring=[s]{[=======[}{]=======]},%
-  morestring=[s]{[========[}{]========]},%
-  morestring=[s]{[=========[}{]=========]},%
-  morestring=[s]{[==========[}{]==========]},%
-}[keywords,comments,strings]%
-%    \end{macrocode}
-% \endgroup
-%
-% Lua 5.2 again has some changed features. These are
-% \begingroup
-%    \begin{macrocode}
-\lst@definelanguage[5.2]{Lua}[5.1]{Lua}{%
-%    \end{macrocode}
-% \begin{itemize}
-%   \item new language keywords
-%    \begin{macrocode}
-  morekeywords=[1]{%
-    goto,%
-  },%
-%    \end{macrocode}
-%   \item deleted identifiers from the standard libraries like
-%    \begin{macrocode}
-  deletekeywords=[2]{%
-%    \end{macrocode}
-%   \begin{itemize}
-%     \item the base library
-%    \begin{macrocode}
-    getfenv, loadstring, module, newproxy, setfenv, unpack,%
-%    \end{macrocode}
-%     \item the debug library
-%    \begin{macrocode}
-    debug.getfenv, debug.setfenv,%
-%    \end{macrocode}
-%     \item the mathematical library
-%    \begin{macrocode}
-    math.log10,%
-%    \end{macrocode}
-%     \item the package library and
-%    \begin{macrocode}
-    package.loaders, package.seeall,%
-%    \end{macrocode}
-%     \item the table library
-%    \begin{macrocode}
-    table.maxn,%
-  },%
-%    \end{macrocode}
-%   \end{itemize}
-% \end{itemize}
-% Again there are some new identifiers in the standard libraries
-%    \begin{macrocode}
-  morekeywords=[2]{%
-%    \end{macrocode}
-% like
-% \begin{itemize}
-% \item the base library
-%    \begin{macrocode}
-    rawlen,%
-%    \end{macrocode}
-% \item the bit library
-%    \begin{macrocode}
-    bit32, bit32.arshift, bit32.band, bit32.bnot, bit32.bor,%
-    bit32.btest, bit32.bxor, bit32.extract, bit32.lrotate,%
-    bit32.lshift, bit32.replace, bit32.rrotate, bit32.rshift,%
-%    \end{macrocode}
-%   \item the debug library
-%    \begin{macrocode}
-    debug.getuservalue, debug.setuservalue, debug.upvalueid,%
-    debug.upvaluejoin,%
-%    \end{macrocode}
-%   \item the package library
-%    \begin{macrocode}
-    package.searchers, package.searchpath,%
-%    \end{macrocode}
-%   \item the table library
-%    \begin{macrocode}
-    table.pack, table.unpack,%
-  },%
-%    \end{macrocode}
-%   \end{itemize}
-% There is a new additional identifier
-%    \begin{macrocode}
-  morekeywords=[2]{%
-    _ENV,%
-  },%
-%    \end{macrocode}
-% and labels are also new in Lua 5.2
-%    \begin{macrocode}
-  moredelim=[s][keywordstyle3]{::}{::},%
-}[keywords,comments,strings]%
-%    \end{macrocode}
-% \endgroup
-%
-% In January 2015 Lua 5.3 was released, \lstthanks{Stephan
-% Hennig}{sh2d@posteo.net}{2015/03/28} again contributed the Lua
-% keywords.
-% \begingroup
-%    \begin{macrocode}
-\lst@definelanguage[5.3]{Lua}[5.2]{Lua}{%
-%    \end{macrocode}
-% \begin{itemize}
-%   \item some libraries are deprecated, so the following identifiers
-%   are deleted
-%    \begin{macrocode}
-  deletekeywords=[2]{%
-%    \end{macrocode}
-%   \begin{itemize}
-%     \item the |bit32| library
-%    \begin{macrocode}
-    bit32, bit32.arshift, bit32.band, bit32.bnot, bit32.bor,%
-    bit32.btest, bit32.bxor, bit32.extract, bit32.lrotate,%
-    bit32.lshift, bit32.replace, bit32.rrotate, bit32.rshift,%
-%    \end{macrocode}
-%     \item the mathematical library
-%    \begin{macrocode}
-    math.atan2, math.cosh, math.frexp, math.ldexp, math.pow,%
-    math.sinh, math.tanh,%
-  },%
-%    \end{macrocode}
-%   \end{itemize}
-% \end{itemize}
-% Again there are some new identifiers in the standard libraries
-%    \begin{macrocode}
-  morekeywords=[2]{%
-%    \end{macrocode}
-% like
-% \begin{itemize}
-% \item the coroutine library
-%    \begin{macrocode}
-    coroutine.isyieldable,%
-%    \end{macrocode}
-%   \item the mathematical library
-%    \begin{macrocode}
-    math.maxinteger, math.mininteger, math.tointeger, math.type,%
-    math.ult,%
-%    \end{macrocode}
-%   \item the string library
-%    \begin{macrocode}
-    string.pack, string.packsize, string.unpack,%
-%    \end{macrocode}
-%   \item the table library
-%    \begin{macrocode}
-    table.move,%
-%    \end{macrocode}
-%   \item the utf-8 library
-%    \begin{macrocode}
-    utf8, utf8.char, utf8.charpattern, utf8.codepoint, utf8.codes,%
-    utf8.len, utf8.offset,%
-  },%
-}[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-% \begingroup
-% Stephan Hennig also supplied a definition of a style for printing Lua code:
-%    \begin{macrocode}
-%<*lua-prf>
-%    \end{macrocode}
-%    \begin{macrocode}
-\usepackage[rgb, x11names]{xcolor}
-\lstdefinestyle{Lua}{%
-  language=[5.2]Lua,
-  basicstyle=\ttfamily,
-  columns=spaceflexible,
-  keywordstyle=\bfseries\color{Blue4},% language keywords
-  keywordstyle=[2]\bfseries\color{RoyalBlue3},% std. library identifiers
-  keywordstyle=[3]\bfseries\color{Purple3},% labels
-  stringstyle=\bfseries\color{Coral4},% strings
-  commentstyle=\itshape\color{Green4},% comments
-}
-%    \end{macrocode}
-% This code is provided in the file |listings-lua.prf|, see section
-% 2.4.1 (Preferences) of the \packagename{listings} documentation.
-%    \begin{macrocode}
-%</lua-prf>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Make}
-%
-% \lstthanks{Rolf~Niepraschk}{niepraschk@ptb.de}{2000/01/10} sent me the new
-% definitions. \lstthanks{Markus~Pahlow}{pahlowm@mar.dfo-mpo.gc.ca}{2001/10/12}
-% found a missing comma and added some keywords, which improve the highlighting
-% with |makemacrouse=true| (but I haven't tested this).
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Make definitions (c) 2000 Rolf Niepraschk
-%%
-\lst@definelanguage[gnu]{make}%
-  {morekeywords={SHELL,MAKE,MAKEFLAGS,$@,$\%,$<,$?,$^,$+,$*,%
-      @,^,<,\%,+,?,*,% Markus Pahlow
-      export,unexport,include,override,define,ifdef,ifneq,ifeq,else,%
-      endif,vpath,subst,patsubst,strip,findstring,filter,filter-out,%
-      sort,dir,notdir,suffix,basename,addsuffix,addprefix,join,word,%
-      words,firstword,wildcard,shell,origin,foreach,%
-      @D,@F,*D,*F,\%D,\%F,<D,<F,^D,^F,+D,+F,?D,?F,%
-      AR,AS,CC,CXX,CO,CPP,FC,GET,LEX,PC,YACC,YACCR,MAKEINFO,TEXI2DVI,%
-      WEAVE,CWEAVE,TANGLE,CTANGLE,RM,M2C,LINT,COMPILE,LINK,PREPROCESS,%
-      CHECKOUT,%
-      ARFLAGS,ASFLAGS,CFLAGS,CXXFLAGS,COFLAGS,CPPFLAGS,FFLAGS,GFLAGS,%
-      LDFLAGS,LOADLIBES,LFLAGS,PFLAGS,RFLAGS,YFLAGS,M2FLAGS,MODFLAGS,%
-      LINTFLAGS,MAKEINFO_FLAGS,TEXI2DVI_FLAGS,COFLAGS,GFLAGS,%
-      OUTPUT_OPTION,SCCS_OUTPUT_OPTION,% missing comma: Markus Pahlow
-      .PHONY,.SUFFIXES,.DEFAULT,.PRECIOUS,.INTERMEDIATE,.SECONDARY,%
-      .IGNORE,.SILENT,.EXPORT_ALL_VARIABLES,MAKEFILES,VPATH,MAKESHELL,%
-      MAKELEVEL,MAKECMDGOALS,SUFFIXES},%
-   sensitive=true,
-   morecomment=[l]\#,%
-   morestring=[b]"%
-  }[keywords,comments,strings,make]%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{make}
-  {morekeywords={SHELL,MAKE,MAKEFLAGS,$@,$\%,$<,$?,$^,$+,$*},%
-   sensitive=true,%
-   morecomment=[l]\#,%
-   morestring=[b]"%
-  }[keywords,comments,strings,make]%
-%    \end{macrocode}
-% The two \texttt{[b]}-arguments have been added after a bug report by
-% \lsthelper{Dr.~Jobst~Hoffmann}{2002/06/24,2002/09/05}{language=make leads
-% to: Use of \lst@FindAlias doesn't match its definition}.
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Matlab}
-%
-% I took the keywords from \texttt{http://www.utexas.edu/math/Matlab/Manual},
-% but I removed the keywords |i|, |j| and |tmp|---the change was proposed by
-% \lsthelper{Kai Below}{below@tu-harburg.de}{1998/09/21}{Matlab: keywords
-% i,j,tmp removed}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Matlab}%
-  {morekeywords={gt,lt,gt,lt,amp,abs,acos,acosh,acot,acoth,acsc,acsch,%
-      all,angle,ans,any,asec,asech,asin,asinh,atan,atan2,atanh,auread,%
-      auwrite,axes,axis,balance,bar,bessel,besselk,bessely,beta,%
-      betainc,betaln,blanks,bone,break,brighten,capture,cart2pol,%
-      cart2sph,caxis,cd,cdf2rdf,cedit,ceil,chol,cla,clabel,clc,clear,%
-      clf,clock,close,colmmd,Colon,colorbar,colormap,ColorSpec,colperm,%
-      comet,comet3,compan,compass,computer,cond,condest,conj,contour,%
-      contour3,contourc,contrast,conv,conv2,cool,copper,corrcoef,cos,%
-      cosh,cot,coth,cov,cplxpair,cputime,cross,csc,csch,csvread,%
-      csvwrite,cumprod,cumsum,cylinder,date,dbclear,dbcont,dbdown,%
-      dbquit,dbstack,dbstatus,dbstep,dbstop,dbtype,dbup,ddeadv,ddeexec,%
-      ddeinit,ddepoke,ddereq,ddeterm,ddeunadv,deblank,dec2hex,deconv,%
-      del2,delete,demo,det,diag,diary,diff,diffuse,dir,disp,dlmread,%
-      dlmwrite,dmperm,dot,drawnow,echo,eig,ellipj,ellipke,else,elseif,%
-      end,engClose,engEvalString,engGetFull,engGetMatrix,engOpen,%
-      engOutputBuffer,engPutFull,engPutMatrix,engSetEvalCallback,%
-      engSetEvalTimeout,engWinInit,eps,erf,erfc,erfcx,erfinv,error,%
-      errorbar,etime,etree,eval,exist,exp,expint,expm,expo,eye,fclose,%
-      feather,feof,ferror,feval,fft,fft2,fftshift,fgetl,fgets,figure,%
-      fill,fill3,filter,filter2,find,findstr,finite,fix,flag,fliplr,%
-      flipud,floor,flops,fmin,fmins,fopen,for,format,fplot,fprintf,%
-      fread,frewind,fscanf,fseek,ftell,full,function,funm,fwrite,fzero,%
-      gallery,gamma,gammainc,gammaln,gca,gcd,gcf,gco,get,getenv,%
-      getframe,ginput,global,gplot,gradient,gray,graymon,grid,griddata,%
-      gtext,hadamard,hankel,help,hess,hex2dec,hex2num,hidden,hilb,hist,%
-      hold,home,hostid,hot,hsv,hsv2rgb,if,ifft,ifft2,imag,image,%
-      imagesc,Inf,info,input,int2str,interp1,interp2,interpft,inv,%
-      invhilb,isempty,isglobal,ishold,isieee,isinf,isletter,isnan,%
-      isreal,isspace,issparse,isstr,jet,keyboard,kron,lasterr,lcm,%
-      legend,legendre,length,lin2mu,line,linspace,load,log,log10,log2,%
-      loglog,logm,logspace,lookfor,lower,ls,lscov,lu,magic,matClose,%
-      matDeleteMatrix,matGetDir,matGetFp,matGetFull,matGetMatrix,%
-      matGetNextMatrix,matGetString,matlabrc,matlabroot,matOpen,%
-      matPutFull,matPutMatrix,matPutString,max,mean,median,menu,mesh,%
-      meshc,meshgrid,meshz,mexAtExit,mexCallMATLAB,mexdebug,%
-      mexErrMsgTxt,mexEvalString,mexFunction,mexGetFull,mexGetMatrix,%
-      mexGetMatrixPtr,mexPrintf,mexPutFull,mexPutMatrix,mexSetTrapFlag,%
-      min,more,movie,moviein,mu2lin,mxCalloc,mxCopyCharacterToPtr,%
-      mxCopyComplex16ToPtr,mxCopyInteger4ToPtr,mxCopyPtrToCharacter,%
-      mxCopyPtrToComplex16,mxCopyPtrToInteger4,mxCopyPtrToReal8,%
-      mxCopyReal8ToPtr,mxCreateFull,mxCreateSparse,mxCreateString,%
-      mxFree,mxFreeMatrix,mxGetIr,mxGetJc,mxGetM,mxGetN,mxGetName,%
-      mxGetNzmax,mxGetPi,mxGetPr,mxGetScalar,mxGetString,mxIsComplex,%
-      mxIsFull,mxIsNumeric,mxIsSparse,mxIsString,mxIsTypeDouble,%
-      mxSetIr,mxSetJc,mxSetM,mxSetN,mxSetName,mxSetNzmax,mxSetPi,%
-      mxSetPr,NaN,nargchk,nargin,nargout,newplot,nextpow2,nnls,nnz,%
-      nonzeros,norm,normest,null,num2str,nzmax,ode23,ode45,orient,orth,%
-      pack,pascal,patch,path,pause,pcolor,pi,pink,pinv,plot,plot3,%
-      pol2cart,polar,poly,polyder,polyeig,polyfit,polyval,polyvalm,%
-      pow2,print,printopt,prism,prod,pwd,qr,qrdelete,qrinsert,quad,%
-      quad8,quit,quiver,qz,rand,randn,randperm,rank,rat,rats,rbbox,%
-      rcond,real,realmax,realmin,refresh,rem,reset,reshape,residue,%
-      return,rgb2hsv,rgbplot,rootobject,roots,rose,rosser,rot90,rotate,%
-      round,rref,rrefmovie,rsf2csf,save,saxis,schur,sec,sech,semilogx,%
-      semilogy,set,setstr,shading,sign,sin,sinh,size,slice,sort,sound,%
-      spalloc,sparse,spaugment,spconvert,spdiags,specular,speye,spfun,%
-      sph2cart,sphere,spinmap,spline,spones,spparms,sprandn,sprandsym,%
-      sprank,sprintf,spy,sqrt,sqrtm,sscanf,stairs,startup,std,stem,%
-      str2mat,str2num,strcmp,strings,strrep,strtok,subplot,subscribe,%
-      subspace,sum,surf,surface,surfc,surfl,surfnorm,svd,symbfact,%
-      symmmd,symrcm,tan,tanh,tempdir,tempname,terminal,text,tic,title,%
-      toc,toeplitz,trace,trapz,tril,triu,type,uicontrol,uigetfile,%
-      uimenu,uiputfile,unix,unwrap,upper,vander,ver,version,view,%
-      viewmtx,waitforbuttonpress,waterfall,wavread,wavwrite,what,%
-      whatsnew,which,while,white,whitebg,who,whos,wilkinson,wk1read,%
-      wk1write,xlabel,xor,ylabel,zeros,zlabel,zoom},%
-   sensitive,%
-   morecomment=[l]\%,%
-   morestring=[m]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Mathematica}
-%
-% \lstthanks{Michael Wiese}{wiese@itwm.uni-kl.de}{1999/02/25} typed in all the
-% keywords for the 1.0 and 3.0 versions.
-% \lstthanks{Oliver~Ruebenkoenig}{-}{2006/07/17} wrote a script to generate
-% the lists for the 5.2 version.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[5.2]{Mathematica}[3.0]{Mathematica}%%
-  {morekeywords={Above,AbsoluteOptions,AbsoluteTiming,AccountingForm,%
-      AccuracyGoal,Active,ActiveItem,AddOnHelpPath,%
-      AdjustmentBox,AdjustmentBoxOptions,After,AiryAiPrime,%
-      AlgebraicRulesData,Algebraics,Alias,AlignmentMarker,%
-      AllowInlineCells,AllowScriptLevelChange,Analytic,AnimationCycleOffset,%
-      AnimationCycleRepetitions,AnimationDirection,AnimationDisplayTime,ApartSquareFree,%
-      AppellF1,ArgumentCountQ,ArrayDepth,ArrayPlot,%
-      ArrayQ,ArrayRules,AspectRatioFixed,Assuming,%
-      Assumptions,AutoDelete,AutoEvaluateEvents,AutoGeneratedPackage,%
-      AutoIndent,AutoIndentSpacings,AutoItalicWords,AutoloadPath,%
-      AutoOpenNotebooks,AutoOpenPalettes,AutoScroll,AutoSpacing,%
-      AutoStyleOptions,Axis,BackgroundTasksSettings,Backsubstitution,%
-      Backward,Baseline,Before,BeginDialogPacket,%
-      BeginFrontEndInteractionPacket,Below,BezoutMatrix,BinaryFormat,%
-      BinaryGet,BinaryRead,BinaryReadList,BinaryWrite,%
-      BitAnd,BitNot,BitOr,BitXor,%
-      Black,BlankForm,Blue,Boole,%
-      Booleans,Bottom,Bounds,Box,%
-      BoxBaselineShift,BoxData,BoxDimensions,BoxFormFormatTypes,%
-      BoxFrame,BoxMargins,BoxRegion,Brown,%
-      Buchberger,Button,ButtonBox,ButtonBoxOptions,%
-      ButtonCell,ButtonContents,ButtonData,ButtonEvaluator,%
-      ButtonExpandable,ButtonFrame,ButtonFunction,ButtonMargins,%
-      ButtonMinHeight,ButtonNote,ButtonNotebook,ButtonSource,%
-      ButtonStyle,ButtonStyleMenuListing,ByteOrdering,CallPacket,%
-      CarmichaelLambda,Cell,CellAutoOverwrite,CellBaseline,%
-      CellBoundingBox,CellBracketOptions,CellContents,CellDingbat,%
-      CellEditDuplicate,CellElementsBoundingBox,CellElementSpacings,CellEvaluationDuplicate,%
-      CellFrame,CellFrameColor,CellFrameLabelMargins,CellFrameLabels,%
-      CellFrameMargins,CellGroup,CellGroupData,CellGrouping,%
-      CellGroupingRules,CellHorizontalScrolling,CellLabel,CellLabelAutoDelete,%
-      CellLabelMargins,CellLabelPositioning,CellMargins,CellObject,%
-      CellOpen,CellPasswords,CellPrint,CellSize,%
-      CellStyle,CellTags,CellularAutomaton,Center,%
-      CharacterEncoding,CharacterEncodingsPath,CharacteristicPolynomial,CharacterRange,%
-      CheckAll,CholeskyDecomposition,Clip,ClipboardNotebook,%
-      Closed,ClosingAutoSave,CoefficientArrays,CoefficientDomain,%
-      CofactorExpansion,ColonForm,ColorFunctionScaling,ColorRules,%
-      ColorSelectorSettings,Column,ColumnAlignments,ColumnLines,%
-      ColumnsEqual,ColumnSpacings,ColumnWidths,CommonDefaultFormatTypes,%
-      CompileOptimizations,CompletionsListPacket,Complexes,ComplexityFunction,%
-      Compose,ComposeSeries,ConfigurationPath,ConjugateTranspose,%
-      Connect,ConsoleMessage,ConsoleMessagePacket,ConsolePrint,%
-      ContentsBoundingBox,ContextToFileName,ContinuedFraction,ConversionOptions,%
-      ConversionRules,ConvertToBitmapPacket,ConvertToPostScript,ConvertToPostScriptPacket,%
-      Copyable,CoshIntegral,CounterAssignments,CounterBox,%
-      CounterBoxOptions,CounterEvaluator,CounterFunction,CounterIncrements,%
-      CounterStyle,CounterStyleMenuListing,CreatePalettePacket,Cross,%
-      CurrentlySpeakingPacket,Cyan,CylindricalDecomposition,DampingFactor,%
-      DataRange,Debug,DebugTag,Decimal,%
-      DedekindEta,DefaultDuplicateCellStyle,DefaultFontProperties,DefaultFormatType,%
-      DefaultFormatTypeForStyle,DefaultInlineFormatType,DefaultInputFormatType,
-      DefaultNaturalLanguage,%
-      DefaultNewCellStyle,DefaultNewInlineCellStyle,DefaultNotebook,DefaultOutputFormatType,%
-      DefaultStyleDefinitions,DefaultTextFormatType,DefaultTextInlineFormatType,DefaultValues,%
-      DefineExternal,DegreeLexicographic,DegreeReverseLexicographic,Deletable,%
-      DeleteContents,DeletionWarning,DelimiterFlashTime,DelimiterMatching,%
-      Delimiters,DependentVariables,DiacriticalPositioning,DialogLevel,%
-      DifferenceOrder,DigitCharacter,DigitCount,DiracDelta,%
-      Direction,DirectoryName,DisableConsolePrintPacket,DiscreteDelta,%
-      DisplayAnimation,DisplayEndPacket,DisplayFlushImagePacket,DisplayForm,%
-      DisplayPacket,DisplayRules,DisplaySetSizePacket,DisplayString,%
-      DivisionFreeRowReduction,DOSTextFormat,DoubleExponential,DoublyInfinite,%
-      Down,DragAndDrop,DrawHighlighted,DualLinearProgramming,%
-      DumpGet,DumpSave,Edit,Editable,%
-      EditButtonSettings,EditCellTagsSettings,EditDefinition,EditIn,%
-      Element,EliminationOrder,EllipticExpPrime,EllipticNomeQ,%
-      EllipticReducedHalfPeriods,EllipticThetaPrime,Empty,EnableConsolePrintPacket,%
-      Encoding,EndAdd,EndDialogPacket,EndFrontEndInteractionPacket,%
-      EndOfLine,EndOfString,Enter,EnterExpressionPacket,%
-      EnterTextPacket,EqualColumns,EqualRows,EquatedTo,%
-      Erfi,ErrorBox,ErrorBoxOptions,ErrorNorm,%
-      ErrorPacket,ErrorsDialogSettings,Evaluatable,EvaluatePacket,%
-      EvaluationCell,EvaluationCompletionAction,EvaluationMonitor,EvaluationNotebook,%
-      Evaluator,EvaluatorNames,EventEvaluator,ExactNumberQ,%
-      ExactRootIsolation,Except,ExcludedForms,Exists,%
-      ExitDialog,ExponentPosition,ExponentStep,Export,%
-      ExportAutoReplacements,ExportPacket,ExportString,ExpressionPacket,%
-      ExpToTrig,Extension,ExternalCall,ExternalDataCharacterEncoding,%
-      Extract,Fail,FEDisableConsolePrintPacket,FEEnableConsolePrintPacket,%
-      Fibonacci,File,FileFormat,FileInformation,%
-      FileName,FileNameDialogSettings,FindFit,FindInstance,%
-      FindMaximum,FindSettings,FitAll,FlushPrintOutputPacket,%
-      Font,FontColor,FontFamily,FontName,%
-      FontPostScriptName,FontProperties,FontReencoding,FontSize,%
-      FontSlant,FontSubstitutions,FontTracking,FontVariations,%
-      FontWeight,ForAll,FormatRules,FormatTypeAutoConvert,%
-      FormatValues,FormBox,FormBoxOptions,Forward,%
-      ForwardBackward,FourierCosTransform,FourierParameters,FourierSinTransform,%
-      FourierTransform,FractionalPart,FractionBox,FractionBoxOptions,%
-      FractionLine,FrameBox,FrameBoxOptions,FresnelC,%
-      FresnelS,FromContinuedFraction,FromDigits,FrontEndExecute,%
-      FrontEndObject,FrontEndStackSize,FrontEndToken,FrontEndTokenExecute,%
-      FrontEndVersion,Full,FullAxes,FullSimplify,%
-      FunctionExpand,FunctionInterpolation,GaussKronrod,GaussPoints,%
-      GenerateBitmapCaches,GenerateConditions,GeneratedCell,GeneratedParameters,%
-      Generic,GetBoundingBoxSizePacket,GetContext,GetFileName,%
-      GetFrontEndOptionsDataPacket,GetLinebreakInformationPacket,%
-      GetMenusPacket,GetPageBreakInformationPacket,%
-      Glaisher,GlobalPreferences,GlobalSession,Gradient,%
-      GraphicsData,GraphicsGrouping,Gray,Green,%
-      Grid,GridBaseline,GridBox,GridBoxOptions,%
-      GridCreationSettings,GridDefaultElement,GridFrame,GridFrameMargins,%
-      GroupPageBreakWithin,HarmonicNumber,Hash,HashTable,%
-      HeadCompose,HelpBrowserLookup,HelpBrowserNotebook,HelpBrowserSettings,%
-      HessenbergDecomposition,Hessian,HoldAllComplete,HoldComplete,%
-      HoldPattern,Horizontal,HorizontalForm,HorizontalScrollPosition,%
-      HTMLSave,Hypergeometric0F1Regularized,Hypergeometric1F1Regularized,%
-      Hypergeometric2F1Regularized,%
-      HypergeometricPFQ,HypergeometricPFQRegularized,HyperlinkCreationSettings,Hyphenation,%
-      HyphenationOptions,IgnoreCase,ImageCache,ImageCacheValid,%
-      ImageMargins,ImageOffset,ImageRangeCache,ImageRegion,%
-      ImageResolution,ImageRotated,ImageSize,Import,%
-      ImportAutoReplacements,ImportString,IncludeFileExtension,IncludeSingularTerm,%
-      IndentingNewlineSpacings,IndentMaxFraction,IndexCreationOptions,Inequality,%
-      InexactNumberQ,InexactNumbers,Inherited,InitializationCell,%
-      InitializationCellEvaluation,InitializationCellWarning,%
-      InlineCounterAssignments,InlineCounterIncrements,%
-      InlineRules,InputAliases,InputAutoFormat,InputAutoReplacements,%
-      InputGrouping,InputNamePacket,InputNotebook,InputPacket,%
-      InputSettings,InputStringPacket,InputToBoxFormPacket,InputToInputForm,%
-      InputToStandardForm,InsertionPointObject,IntegerExponent,IntegerPart,%
-      Integers,Interactive,Interlaced,InterpolationOrder,%
-      InterpolationPoints,InterpolationPrecision,InterpretationBox,%
-      InterpretationBoxOptions,%
-      InterpretTemplate,InterruptSettings,Interval,IntervalIntersection,%
-      IntervalMemberQ,IntervalUnion,InverseBetaRegularized,InverseEllipticNomeQ,%
-      InverseErf,InverseErfc,InverseFourierCosTransform,
-      InverseFourierSinTransform,%
-      InverseFourierTransform,InverseGammaRegularized,InverseJacobiCD,%
-      InverseJacobiCN,%
-      InverseJacobiCS,InverseJacobiDC,InverseJacobiDN,InverseJacobiDS,%
-      InverseJacobiNC,InverseJacobiND,InverseJacobiNS,InverseJacobiSC,%
-      InverseJacobiSD,InverseLaplaceTransform,InverseWeierstrassP,InverseZTransform,%
-      Jacobian,JacobiCD,JacobiCN,JacobiCS,%
-      JacobiDC,JacobiDN,JacobiDS,JacobiNC,%
-      JacobiND,JacobiNS,JacobiSC,JacobiSD,%
-      JordanDecomposition,K,Khinchin,KleinInvariantJ,%
-      KroneckerDelta,Language,LanguageCategory,LaplaceTransform,%
-      Larger,Launch,LayoutInformation,Left,%
-      LetterCharacter,Lexicographic,LicenseID,LimitsPositioning,%
-      LimitsPositioningTokens,LinearSolveFunction,LinebreakAdjustments,LineBreakWithin,%
-      LineForm,LineIndent,LineSpacing,LineWrapParts,%
-      LinkActivate,LinkClose,LinkConnect,LinkConnectedQ,%
-      LinkCreate,LinkError,LinkFlush,LinkHost,%
-      LinkInterrupt,LinkLaunch,LinkMode,LinkObject,%
-      LinkOpen,LinkOptions,LinkPatterns,LinkProtocol,%
-      LinkRead,LinkReadHeld,LinkReadyQ,Links,%
-      LinkWrite,LinkWriteHeld,ListConvolve,ListCorrelate,%
-      Listen,ListInterpolation,ListQ,LiteralSearch,%
-      LongestMatch,LongForm,Loopback,LUBackSubstitution,%
-      LUDecomposition,MachineID,MachineName,MachinePrecision,%
-      MacintoshSystemPageSetup,Magenta,Magnification,MakeBoxes,%
-      MakeExpression,MakeRules,Manual,MatchLocalNameQ,%
-      MathematicaNotation,MathieuC,MathieuCharacteristicA,MathieuCharacteristicB,%
-      MathieuCharacteristicExponent,MathieuCPrime,MathieuS,MathieuSPrime,%
-      MathMLForm,MathMLText,MatrixRank,Maximize,%
-      MaxIterations,MaxPlotPoints,MaxPoints,MaxRecursion,%
-      MaxStepFraction,MaxSteps,MaxStepSize,Mean,%
-      Median,MeijerG,MenuPacket,MessageOptions,%
-      MessagePacket,MessagesNotebook,MetaCharacters,Method,%
-      MethodOptions,Minimize,MinRecursion,MinSize,%
-      Mode,ModularLambda,MonomialOrder,MonteCarlo,%
-      Most,MousePointerNote,MultiDimensional,MultilaunchWarning,%
-      MultilineFunction,MultiplicativeOrder,Multiplicity,Nand,%
-      NeedCurrentFrontEndPackagePacket,NeedCurrentFrontEndSymbolsPacket,%
-      NestedScriptRules,NestWhile,%
-      NestWhileList,NevilleThetaC,NevilleThetaD,NevilleThetaN,%
-      NevilleThetaS,Newton,Next,NHoldAll,%
-      NHoldFirst,NHoldRest,NMaximize,NMinimize,%
-      NonAssociative,NonPositive,Nor,Norm,%
-      NormalGrouping,NormalSelection,NormFunction,Notebook,%
-      NotebookApply,NotebookAutoSave,NotebookClose,NotebookConvert,%
-      NotebookConvertSettings,NotebookCreate,NotebookCreateReturnObject,NotebookDefault,%
-      NotebookDelete,NotebookDirectory,NotebookFind,NotebookFindReturnObject,%
-      NotebookGet,NotebookGetLayoutInformationPacket,NotebookGetMisspellingsPacket,%
-      NotebookInformation,%
-      NotebookLocate,NotebookObject,NotebookOpen,NotebookOpenReturnObject,%
-      NotebookPath,NotebookPrint,NotebookPut,NotebookPutReturnObject,%
-      NotebookRead,NotebookResetGeneratedCells,Notebooks,NotebookSave,%
-      NotebookSaveAs,NotebookSelection,NotebookSetupLayoutInformationPacket,%
-      NotebooksMenu,%
-      NotebookWrite,NotElement,NProductExtraFactors,NProductFactors,%
-      NRoots,NSumExtraTerms,NSumTerms,NumberMarks,%
-      NumberMultiplier,NumberString,NumericFunction,NumericQ,%
-      NValues,Offset,OLEData,OneStepRowReduction,%
-      Open,OpenFunctionInspectorPacket,OpenSpecialOptions,OptimizationLevel,%
-      OptionInspectorSettings,OptionQ,OptionsPacket,OptionValueBox,%
-      OptionValueBoxOptions,Orange,Ordering,Oscillatory,%
-      OutputAutoOverwrite,OutputFormData,OutputGrouping,OutputMathEditExpression,%
-      OutputNamePacket,OutputToOutputForm,OutputToStandardForm,Over,%
-      Overflow,Overlaps,Overscript,OverscriptBox,%
-      OverscriptBoxOptions,OwnValues,PadLeft,PadRight,%
-      PageBreakAbove,PageBreakBelow,PageBreakWithin,PageFooterLines,%
-      PageFooters,PageHeaderLines,PageHeaders,PalettePath,%
-      PaperWidth,ParagraphIndent,ParagraphSpacing,ParameterVariables,%
-      ParentConnect,ParentForm,Parenthesize,PasteBoxFormInlineCells,%
-      Path,PatternTest,PeriodicInterpolation,Pick,%
-      Piecewise,PiecewiseExpand,Pink,Pivoting,%
-      PixelConstrained,Placeholder,Plain,Plot3Matrix,%
-      PointForm,PolynomialForm,PolynomialReduce,Polynomials,%
-      PowerModList,Precedence,PreferencesPath,PreserveStyleSheet,%
-      Previous,PrimaryPlaceholder,Primes,PrincipalValue,%
-      PrintAction,PrintingCopies,PrintingOptions,PrintingPageRange,%
-      PrintingStartingPageNumber,PrintingStyleEnvironment,PrintPrecision,%
-      PrivateCellOptions,%
-      PrivateEvaluationOptions,PrivateFontOptions,PrivateNotebookOptions,PrivatePaths,%
-      ProductLog,PromptForm,Purple,Quantile,%
-      QuasiMonteCarlo,QuasiNewton,RadicalBox,RadicalBoxOptions,%
-      RandomSeed,RationalFunctions,Rationals,RawData,%
-      RawMedium,RealBlockForm,Reals,Reap,%
-      Red,Refine,Refresh,RegularExpression,%
-      Reinstall,Release,Removed,RenderingOptions,%
-      RepeatedString,ReplaceList,Rescale,ResetMenusPacket,%
-      Resolve,ResumePacket,ReturnExpressionPacket,ReturnInputFormPacket,%
-      ReturnPacket,ReturnTextPacket,Right,Root,%
-      RootReduce,RootSum,Row,RowAlignments,%
-      RowBox,RowLines,RowMinHeight,RowsEqual,%
-      RowSpacings,RSolve,RuleCondition,RuleForm,%
-      RulerUnits,Saveable,SaveAutoDelete,ScreenRectangle,%
-      ScreenStyleEnvironment,ScriptBaselineShifts,ScriptLevel,ScriptMinSize,%
-      ScriptRules,ScriptSizeMultipliers,ScrollingOptions,ScrollPosition,%
-      Second,SectionGrouping,Selectable,SelectedNotebook,%
-      Selection,SelectionAnimate,SelectionCell,SelectionCellCreateCell,%
-      SelectionCellDefaultStyle,SelectionCellParentStyle,SelectionCreateCell,%
-      SelectionDuplicateCell,%
-      SelectionEvaluate,SelectionEvaluateCreateCell,SelectionMove,SelectionSetStyle,%
-      SelectionStrategy,SendFontInformationToKernel,SequenceHold,SequenceLimit,%
-      SeriesCoefficient,SetBoxFormNamesPacket,SetEvaluationNotebook,%
-      SetFileLoadingContext,%
-      SetNotebookStatusLine,SetOptionsPacket,SetSelectedNotebook,%
-      SetSpeechParametersPacket,%
-      SetValue,ShortestMatch,ShowAutoStyles,ShowCellBracket,%
-      ShowCellLabel,ShowCellTags,ShowClosedCellArea,ShowContents,%
-      ShowCursorTracker,ShowGroupOpenCloseIcon,ShowPageBreaks,ShowSelection,%
-      ShowShortBoxForm,ShowSpecialCharacters,ShowStringCharacters,%
-      ShrinkWrapBoundingBox,%
-      SingleLetterItalics,SingularityDepth,SingularValueDecomposition,%
-      SingularValueList,%
-      SinhIntegral,Smaller,Socket,SolveDelayed,%
-      SoundAndGraphics,Sow,Space,SpaceForm,%
-      SpanAdjustments,SpanCharacterRounding,SpanLineThickness,SpanMaxSize,%
-      SpanMinSize,SpanningCharacters,SpanSymmetric,Sparse,%
-      SparseArray,SpeakTextPacket,SpellingDictionaries,SpellingDictionariesPath,%
-      SpellingOptions,SpellingSuggestionsPacket,Spherical,Split,%
-      SqrtBox,SqrtBoxOptions,StandardDeviation,StandardForm,%
-      StartingStepSize,StartOfLine,StartOfString,StartupSound,%
-      StepMonitor,StieltjesGamma,StoppingTest,StringCases,%
-      StringCount,StringExpression,StringFreeQ,StringQ,%
-      StringReplaceList,StringReplacePart,StringSplit,StripBoxes,%
-      StripWrapperBoxes,StructuredSelection,StruveH,StruveL,%
-      StyleBox,StyleBoxAutoDelete,StyleBoxOptions,StyleData,%
-      StyleDefinitions,StyleForm,StyleMenuListing,StyleNameDialogSettings,%
-      StylePrint,StyleSheetPath,Subresultants,SubscriptBox,%
-      SubscriptBoxOptions,Subsets,Subsuperscript,SubsuperscriptBox,%
-      SubsuperscriptBoxOptions,SubtractFrom,SubValues,SugarCube,%
-      SuperscriptBox,SuperscriptBoxOptions,SuspendPacket,SylvesterMatrix,%
-      SymbolName,Syntax,SyntaxForm,SyntaxPacket,%
-      SystemException,SystemHelpPath,SystemStub,Tab,%
-      TabFilling,TabSpacings,TagBox,TagBoxOptions,%
-      TaggingRules,TagStyle,TargetFunctions,TemporaryVariable,%
-      TensorQ,TeXSave,TextAlignment,TextBoundingBox,%
-      TextData,TextJustification,TextLine,TextPacket,%
-      TextParagraph,TextRendering,TextStyle,ThisLink,%
-      TimeConstraint,TimeVariable,TitleGrouping,ToBoxes,%
-      ToColor,ToFileName,Toggle,ToggleFalse,%
-      Tolerance,TooBig,Top,ToRadicals,%
-      Total,Tr,TraceAction,TraceInternal,%
-      TraceLevel,TraditionalForm,TraditionalFunctionNotation,TraditionalNotation,%
-      TraditionalOrder,TransformationFunctions,TransparentColor,Trapezoidal,%
-      TrigExpand,TrigFactor,TrigFactorList,TrigReduce,%
-      TrigToExp,Tuples,UnAlias,Underflow,%
-      Underoverscript,UnderoverscriptBox,UnderoverscriptBoxOptions,Underscript,%
-      UnderscriptBox,UnderscriptBoxOptions,UndocumentedTestFEParserPacket,%
-      UndocumentedTestGetSelectionPacket,%
-      UnitStep,Up,URL,Using,%
-      V2Get,Value,ValueBox,ValueBoxOptions,%
-      ValueForm,Variance,Verbatim,Verbose,%
-      VerboseConvertToPostScriptPacket,VerifyConvergence,VerifySolutions,Version,%
-      VersionNumber,Vertical,VerticalForm,ViewPointSelectorSettings,%
-      Visible,VisibleCell,WeierstrassHalfPeriods,WeierstrassInvariants,%
-      WeierstrassSigma,WeierstrassZeta,White,Whitespace,%
-      WhitespaceCharacter,WindowClickSelect,WindowElements,WindowFloating,%
-      WindowFrame,WindowFrameElements,WindowMargins,WindowMovable,%
-      WindowSize,WindowTitle,WindowToolbars,WindowWidth,%
-      WordBoundary,WordCharacter,WynnDegree,XMLElement},%
-   morendkeywords={$,$AddOnsDirectory,$AnimationDisplayFunction,%
-      $AnimationFunction,%
-      $Assumptions,$BaseDirectory,$BoxForms,$ByteOrdering,%
-      $CharacterEncoding,$ConditionHold,$CurrentLink,$DefaultPath,%
-      $ExportEncodings,$ExportFormats,$FormatType,$FrontEnd,%
-      $HistoryLength,$HomeDirectory,$ImportEncodings,$ImportFormats,%
-      $InitialDirectory,$InstallationDate,$InstallationDirectory,%
-      $InterfaceEnvironment,%
-      $LaunchDirectory,$LicenseExpirationDate,$LicenseID,$LicenseProcesses,%
-      $LicenseServer,$MachineDomain,$MaxExtraPrecision,$MaxLicenseProcesses,%
-      $MaxNumber,$MaxPiecewiseCases,$MaxPrecision,$MaxRootDegree,%
-      $MinNumber,$MinPrecision,$NetworkLicense,$NumberMarks,%
-      $Off,$OutputForms,$ParentLink,$ParentProcessID,%
-      $PasswordFile,$PathnameSeparator,$PreferencesDirectory,$PrintForms,%
-      $PrintLiteral,$ProcessID,$ProcessorType,$ProductInformation,%
-      $ProgramName,$PSDirectDisplay,$RandomState,$RasterFunction,%
-      $RootDirectory,$SetParentLink,$SoundDisplay,$SuppressInputFormHeads,%
-      $SystemCharacterEncoding,$SystemID,$TemporaryPrefix,$TextStyle,%
-      $TopDirectory,$TraceOff,$TraceOn,$TracePattern,%
-      $TracePostAction,$TracePreAction,$UserAddOnsDirectory,$UserBaseDirectory,%
-      $UserName,Constant,Flat,HoldAll,%
-      HoldAllComplete,HoldFirst,HoldRest,Listable,%
-      Locked,NHoldAll,NHoldFirst,NHoldRest,%
-      NumericFunction,OneIdentity,Orderless,Protected,%
-      ReadProtected,SequenceHold},%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Mathematica definitions (c) 1999 Michael Wiese
-%%
-\lst@definelanguage[3.0]{Mathematica}[1.0]{Mathematica}%
-  {morekeywords={Abort,AbortProtect,AbsoluteDashing,AbsolutePointSize,%
-      AbsoluteThickness,AbsoluteTime,AccountingFormAiry,AiPrime,AiryBi,%
-      AiryBiPrime,Alternatives,AnchoredSearch,AxesEdge,AxesOrigin,%
-      AxesStyle,Background,BetaRegularized,BoxStyle,C,CheckAbort,%
-      Circle,ClebschGordan,CMYKColor,ColorFunction,ColorOutput,Compile,%
-      Compiled,CompiledFunction,ComplexExpand,ComposeList,Composition,%
-      ConstrainedMax,ConstrainedMin,Contexts,ContextToFilename,%
-      ContourLines,Contours,ContourShading,ContourSmoothing,%
-      ContourStyle,CopyDirectory,CopyFile,CosIntegral,CreateDirectory,%
-      Cuboid,Date,DeclarePackage,DefaultColor,DefaultFont,Delete,%
-      DeleteCases,DeleteDirectory,DeleteFile,Dialog,DialogIndent,%
-      DialogProlog,DialogSymbols,DigitQ,Directory,DirectoryStack,Disk,%
-      Dispatch,DownValues,DSolve,Encode,Epilog,Erfc,Evaluate,%
-      ExponentFunction,FaceGrids,FileByteCount,FileDate,FileNames,%
-      FileType,Find,FindList,FixedPointList,FlattenAt,Fold,FoldList,%
-      Frame,FrameLabel,FrameStyle,FrameTicks,FromCharacterCode,%
-      FromDate,FullGraphics,FullOptions,GammaRegularized,%
-      GaussianIntegers,GraphicsArray,GraphicsSpacing,GridLines,%
-      GroebnerBasis,Heads,HeldPart,HomeDirectory,Hue,IgnoreCases,%
-      InputStream,Install,InString,IntegerDigits,InterpolatingFunction,%
-      InterpolatingPolynomial,Interpolation,Interrupt,InverseFunction,%
-      InverseFunctions,JacobiZeta,LetterQ,LinearProgramming,ListPlay,%
-      LogGamma,LowerCaseQ,MachineNumberQ,MantissaExponent,MapIndexed,%
-      MapThread,MatchLocalNames,MatrixExp,MatrixPower,MeshRange,%
-      MeshStyle,MessageList,Module,NDSolve,NSolve,NullRecords,%
-      NullWords,NumberFormat,NumberPadding,NumberSigns,OutputStream,%
-      PaddedForm,ParentDirectory,Pause,Play,PlayRange,PlotRegion,%
-      PolygonIntersections,PolynomialGCD,PolynomialLCM,PolynomialMod,%
-      PostScript,PowerExpand,PrecisionGoal,PrimePi,Prolog,%
-      QRDecomposition,Raster,RasterArray,RealDigits,Record,RecordLists,%
-      RecordSeparators,ReleaseHold,RenameDirectory,RenameFile,%
-      ReplaceHeldPart,ReplacePart,ResetDirectory,Residue,%
-      RiemannSiegelTheta,RiemannSiegelZ,RotateLabel,SameTest,%
-      SampleDepth,SampledSoundFunction,SampledSoundList,SampleRate,%
-      SchurDecomposition,SessionTime,SetAccuracy,SetDirectory,%
-      SetFileDate,SetPrecision,SetStreamPosition,Shallow,SignPadding,%
-      SinIntegral,SixJSymbol,Skip,Sound,SpellingCorrection,%
-      SphericalRegion,Stack,StackBegin,StackComplete,StackInhibit,%
-      StreamPosition,Streams,StringByteCount,StringConversion,%
-      StringDrop,StringInsert,StringPosition,StringReplace,%
-      StringReverse,StringTake,StringToStream,SurfaceColor,%
-      SyntaxLength,SyntaxQ,TableAlignments,TableDepth,%
-      TableDirections,TableHeadings,TableSpacing,ThreeJSymbol,TimeUsed,%
-      TimeZone,ToCharacterCode,ToDate,ToHeldExpression,TokenWords,%
-      ToLowerCase,ToUpperCase,Trace,TraceAbove,TraceBackward,%
-      TraceDepth,TraceDialog,TraceForward,TraceOff,TraceOn,%
-      TraceOriginal,TracePrint,TraceScan,Trig,Unevaluated,Uninstall,%
-      UnsameQ,UpperCaseQ,UpValues,ViewCenter,ViewVertical,With,Word,%
-      WordSearch,WordSeparators},%
-   morendkeywords={Stub,Temporary,$Aborted,$BatchInput,$BatchOutput,%
-      $CreationDate,$DefaultFont,$DumpDates,$DumpSupported,$Failed,%
-      $Input,$Inspector,$IterationLimit,$Language,$Letters,$Linked,%
-      $LinkSupported,$MachineEpsilon,$MachineID,$MachineName,%
-      $MachinePrecision,$MachineType,$MaxMachineNumber,$MessageList,%
-      $MessagePrePrint,$MinMachineNumber,$ModuleNumber,$NewMessage,%
-      $NewSymbol,$Notebooks,$OperatingSystem,$Packages,$PipeSupported,%
-      $PreRead,$ReleaseNumber,$SessionID,$SoundDisplayFunction,%
-      $StringConversion,$StringOrder,$SyntaxHandler,$TimeUnit,%
-      $VersionNumber}%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[1.0]{Mathematica}%
-  {morekeywords={Abs,Accuracy,AccurayGoal,AddTo,AiryAi,AlgebraicRules,%
-      AmbientLight,And,Apart,Append,AppendTo,Apply,ArcCos,ArcCosh,%
-      ArcCot,ArcCoth,ArcCsc,ArcCsch,ArcSec,ArcSech,ArcSin,ArcSinh,%
-      ArcTan,ArcTanh,Arg,ArithmeticGeometricMean,Array,AspectRatio,%
-      AtomQ,Attributes,Axes,AxesLabel,BaseForm,Begin,BeginPackage,%
-      BernoulliB,BesselI,BesselJ,BesselK,BesselY,Beta,Binomial,Blank,%
-      BlankNullSequence,BlankSequence,Block,Boxed,BoxRatios,Break,Byte,%
-      ByteCount,Cancel,Cases,Catch,Ceiling,CForm,Character,Characters,%
-      ChebyshevT,ChebyshevU,Check,Chop,Clear,ClearAll,ClearAttributes,%
-      ClipFill,Close,Coefficient,CoefficientList,Collect,ColumnForm,%
-      Complement,Complex,CompoundExpression,Condition,Conjugate,%
-      Constants,Context,Continuation,Continue,ContourGraphics,%
-      ContourPlot,Cos,Cosh,Cot,Coth,Count,Csc,Csch,Cubics,Cyclotomic,%
-      D,Dashing,Decompose,Decrement,Default,Definition,Denominator,%
-      DensityGraphics,DensityPlot,Depth,Derivative,Det,DiagonalMatrix,%
-      DigitBlock,Dimensions,DirectedInfinity,Display,DisplayFunction,%
-      Distribute,Divide,DivideBy,Divisors,DivisorSigma,Do,Dot,Drop,Dt,%
-      Dump,EdgeForm,Eigensystem,Eigenvalues,Eigenvectors,Eliminate,%
-      EllipticE,EllipticExp,EllipticF,EllipticK,EllipticLog,EllipticPi,%
-      EllipticTheta,End,EndPackage,EngineeringForm,Environment,Equal,%
-      Erf,EulerE,EulerPhi,EvenQ,Exit,Exp,Expand,ExpandAll,%
-      ExpandDenominator,ExpandNumerator,ExpIntegralE,ExpIntegralEi,%
-      Exponent,Expression,ExtendedGCD,FaceForm,Factor,FactorComplete,%
-      Factorial,Factorial2,FactorInteger,FactorList,FactorSquareFree,%
-      FactorSquareFreeList,FactorTerms,FactorTermsList,FindMinimum,%
-      FindRoot,First,Fit,FixedPoint,Flatten,Floor,FontForm,For,Format,%
-      FormatType,FortranForm,Fourier,FreeQ,FullDefinition,FullForm,%
-      Function,Gamma,GCD,GegenbauerC,General,Get,Goto,Graphics,%
-      Graphics3D,GrayLevel,Greater,GreaterEqual,Head,HermiteH,%
-      HiddenSurface,Hold,HoldForm,Hypergeometric0F1,Hypergeometric1F1,%
-      Hypergeometric2F1,HypergeometricU,Identity,IdentityMatrix,If,Im,%
-      Implies,In,Increment,Indent,Infix,Information,Inner,Input,%
-      InputForm,InputString,Insert,Integer,IntegerQ,Integrate,%
-      Intersection,Inverse,InverseFourier,InverseJacobiSN,%
-      InverseSeries,JacobiAmplitude,JacobiP,JacobiSN,JacobiSymbol,Join,%
-      Label,LaguerreL,Last,LatticeReduce,LCM,LeafCount,LegendreP,%
-      LegendreQ,LegendreType,Length,LerchPhi,Less,LessEqual,Level,%
-      Lighting,LightSources,Limit,Line,LinearSolve,LineBreak,List,%
-      ListContourPlot,ListDensityPlot,ListPlot,ListPlot3D,Literal,Log,%
-      LogicalExpand,LogIntegral,MainSolve,Map,MapAll,MapAt,MatchQ,%
-      MatrixForm,MatrixQ,Max,MaxBend,MaxMemoryUsed,MemberQ,%
-      MemoryConstrained,MemoryInUse,Mesh,Message,MessageName,Messages,%
-      Min,Minors,Minus,Mod,Modulus,MoebiusMu,Multinomial,N,NameQ,Names,%
-      NBernoulliB,Needs,Negative,Nest,NestList,NIntegrate,%
-      NonCommutativeMultiply,NonConstants,NonNegative,Normal,Not,%
-      NProduct,NSum,NullSpace,Number,NumberForm,NumberPoint,NumberQ,%
-      NumberSeparator,Numerator,O,OddQ,Off,On,OpenAppend,OpenRead,%
-      OpenTemporary,OpenWrite,Operate,Optional,Options,Or,Order,%
-      OrderedQ,Out,Outer,OutputForm,PageHeight,PageWidth,%
-      ParametricPlot,ParametricPlot3D,Part,Partition,PartitionsP,%
-      PartitionsQ,Pattern,Permutations,Plot,Plot3D,PlotDivision,%
-      PlotJoined,PlotLabel,PlotPoints,PlotRange,PlotStyle,Pochhammer,%
-      Plus,Point,PointSize,PolyGamma,Polygon,PolyLog,PolynomialQ,%
-      PolynomialQuotient,PolynomialRemainder,Position,Positive,Postfix,%
-      Power,PowerMod,PrecedenceForm,Precision,PreDecrement,Prefix,%
-      PreIncrement,Prepend,PrependTo,Prime,PrimeQ,Print,PrintForm,%
-      Product,Protect,PseudoInverse,Put,PutAppend,Quartics,Quit,%
-      Quotient,Random,Range,Rational,Rationalize,Raw,Re,Read,ReadList,%
-      Real,Rectangle,Reduce,Remove,RenderAll,Repeated,RepeatedNull,%
-      Replace,ReplaceAll,ReplaceRepeated,Rest,Resultant,Return,Reverse,%
-      RGBColor,Roots,RotateLeft,RotateRight,Round,RowReduce,Rule,%
-      RuleDelayed,Run,RunThrough,SameQ,Save,Scaled,Scan,ScientificForm,%
-      Sec,Sech,SeedRandom,Select,Sequence,SequenceForm,Series,%
-      SeriesData,Set,SetAttributes,SetDelayed,SetOptions,Shading,Share,%
-      Short,Show,Sign,Signature,Simplify,Sin,SingularValues,Sinh,%
-      Skeleton,Slot,SlotSequence,Solve,SolveAlways,Sort,%
-      SphericalHarmonicY,Splice,Sqrt,StirlingS1,StirlingS2,String,%
-      StringBreak,StringForm,StringJoin,StringLength,StringMatchQ,%
-      StringSkeleton,Subscript,Subscripted,Subtract,SubtractForm,Sum,%
-      Superscript,SurfaceGraphics,Switch,Symbol,Table,TableForm,TagSet,%
-      TagSetDelayed,TagUnset,Take,Tan,Tanh,ToString,TensorRank,TeXForm,%
-      Text,TextForm,Thickness,Thread,Through,Throw,Ticks,%
-      TimeConstrained,Times,TimesBy,Timing,ToExpression,Together,%
-      ToRules,ToString,TotalHeight,TotalWidth,Transpose,TreeForm,TrueQ,%
-      Unequal,Union,Unique,Unprotect,Unset,Update,UpSet,UpSetDelayed,%
-      ValueQ,Variables,VectorQ,ViewPoint,WeierstrassP,%
-      WeierstrassPPrime,Which,While,WorkingPrecision,Write,WriteString,%
-      Xor,ZeroTest,Zeta},%
-   morendkeywords={All,Automatic,Catalan,ComplexInfinity,Constant,%
-      Degree,E,EndOfFile,EulerGamma,False,Flat,GoldenRatio,HoldAll,%
-      HoldFirst,HoldRest,I,Indeterminate,Infinity,Listable,Locked,%
-      Modular,None,Null,OneIdentity,Orderless,Pi,Protected,%
-      ReadProtected,True,$CommandLine,$Context,$ContextPath,$Display,%
-      $DisplayFunction,$Echo,$Epilog,$IgnoreEOF,$Line,$Messages,%
-      $Output,$Path,$Post,$Pre,$PrePrint,$RecursionLimit,$System,%
-      $Urgent,$Version},%
-   sensitive,%
-   morecomment=[s]{(*}{*)},%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Mercury}
-%
-% \lstthanks{Dominique~de~Waleffe}{ddw@miscrit.be}{1997/11/24} mailed me the
-% data and \lstthanks{Ralph~Becket}{rbeck@microsoft.com}{2001/05/01} extended
-% the definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Mercury definition (c) 1997 Dominique de Waleffe
-%% Extended (c) 2001 Ralph Becket
-%%
-\lst@definelanguage{Mercury}%
-  {otherkeywords={::,->,-->,--->,:-,==,=>,<=,<=>},%
-   morekeywords={module,include_module,import_module,interface,%
-      end_module,implementation,mode,is,failure,semidet,nondet,det,%
-      multi,erroneous,inst,in,out,di,uo,ui,type,typeclass,instance,%
-      where,with_type,pred,func,lambda,impure,semipure,if,then,else,%
-      some,all,not,true,fail,pragma,memo,no_inline,inline,loop_check,%
-      minimal_model,fact_table,type_spec,terminates,does_not_terminate,%
-      check_termination,promise_only_solution,unsafe_promise_unique,%
-      source_file,obsolete,import,export,c_header_code,c_code,%
-      foreign_code,foreign_proc,may_call_mercury,will_not_call_mercury,%
-      thread_safe,not_thread_safe},%
-   sensitive=t,%
-   morecomment=[l]\%,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[bd]",%
-   morestring=[bd]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{MetaPost}
-%
-% \lstthanks{Uwe~Siart}{uwe.siart@ei.tum.de}{2003/03/28} provided the
-% keywords for a previous version. The current language definition comes
-% from \lstthanks{Brooks~Moses}{}{2004/08/07}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% MetaPost definition (c) 2004 Brooks Moses
-%%   This definition is based on the language specifications
-%%   contained in the _User's Manual for Metapost_, with the core
-%%   language enhancements that are described in the _Drawing
-%%   Graphs with MetaPost_ documentation.
-%%
-\lst@definelanguage{MetaPost}%
-  {% keywords[1] = MetaPost primitives (not found in following tables)
-   morekeywords={end,begingroup,endgroup,beginfig,endfig,def,vardef,%
-      primary,secondary,tertiary,primarydef,secondarydef,tertiarydef,%
-      expr,suffix,text,enddef,if,fi,else,elseif,for,forsuffixes,%
-      forever,endfor,upto,downto,stop,until,tension,controls,on,off,%
-      btex,etex,within,input},
-   % keywords[2] = Operators (Tables 6-9 in MetaPost User's manual)
-   morekeywords=[2]{abs,and,angle,arclength,arctime,ASCII,bbox,bluepart,%
-      boolean,bot,ceiling,center,char,color,cosd,cutafter,cutbefore,%
-      cycle,decimal,dir,direction,directionpoint,directiontime,div,%
-      dotprod,floor,fontsize,greenpart,hex,infont,intersectionpoint,%
-      intersectiontimes,inverse,known,length,lft,llcorner,lrcorner,%
-      makepath,makepen,mexp,mlog,mod,normaldeviate,not,numeric,oct,%
-      odd,or,pair,path,pen,penoffset,picture,point,postcontrol,%
-      precontrol,redpart,reverse,rotated,round,rt,scaled,shifted,%
-      sind,slanted,sqrt,str,string,subpath,substring,top,transform,%
-      transformed,ulcorner,uniformdeviate,unitvector,unknown,%
-      urcorner,whatever,xpart,xscaled,xxpart,xypart,ypart,yscaled,%
-      yxpart,yypart,zscaled,of,reflectedabout,rotatedaround,ulft,urt,%
-      llft,lrt,readfrom,write,stroked,filled,textual,clipped,bounded,%
-      pathpart,penpart,dashpart,textpart,fontpart},%
-   % keywords[3] = Commands (Table 10)
-   morekeywords=[3]{addto,clip,cutdraw,draw,drawarrow,drawdblarrow,%
-      fill,filldraw,interim,let,loggingall,newinternal,pickup,%
-      save,setbounds,shipout,show,showdependencies,showtoken,%
-      showvariable,special,tracingall,tracingnone,undraw,unfill,%
-      unfilldraw,to,also,contour,doublepath,withcolor,withpen,%
-      dashed,randomseed},%
-   % keywords[4] = Function-Like Macros (Table 11)
-   morekeywords=[4]{boxit,boxjoin,bpath,buildcycle,circleit,dashpattern,%
-      decr,dotlabel,dotlabels,drawboxed,drawboxes,drawoptions,%
-      drawunboxed,fixpos,fixsize,incr,interpath,label,labels,max,min,pic,%
-      thelabel,z,image},%
-   % keywords[5] = Internal and Predefined Variables (Tables 3, 4)
-   morekeywords=[5]{ahangle,ahlength,bboxmargin,charcode,circmargin,%
-      day,defaultdx,defaultdy,defaultpen,defaultscale,labeloffset,%
-      linecap,linejoin,miterlimit,month,pausing,prologues,showstopping,%
-      time,tracingcapsules,tracingchoices,tracingcommands,%
-      tracingequations,tracinglostchars,tracingmacros,tracingonline,%
-      tracingoutput,tracingrestores,tracingspecs,tracingstats,%
-      tracingtitles,truecorners,warningcheck,year},
-   morekeywords=[5]{background,currentpen,currentpicture,cuttings,%
-      defaultfont},%
-   % keywords[6] = Predefined Constants (Table 5)
-   morekeywords=[6]{beveled,black,blue,bp,butt,cc,cm,dd,ditto,down,%
-      epsilon,evenly,false,fullcircle,green,halfcircle,identity,%
-      in,infinity,left,mitered,mm,nullpicture,origin,pc,pencircle,%
-      pt,quartercircle,red,right,rounded,squared,true,unitsquare,%
-      up,white,withdots},
-   sensitive=false,%
-   alsoother={0123456789$},%
-   morecomment=[l]\%,%
-   morestring=[mf]{input\ },%
-   morestring=[b]"%
-  }[keywords,comments,strings,mf]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Miranda}
-%
-% Thanks to \lstthanks{Peter~Bartke}{bartke@inf.fu-berlin.de}{1999/01/30}
-% for providing the definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Miranda definition (c) 1998 Peter Bartke
-%%
-%% Miranda: pure lazy functional language with polymorphic type system,
-%%          garbage collection and functions as first class citizens
-%%
-\lst@definelanguage{Miranda}%
-  {morekeywords={abstype,div,if,mod,otherwise,readvals,show,type,where,%
-     with,bool,char,num,sys_message,False,True,Appendfile,Closefile,%
-     Exit,Stderr,Stdout,System,Tofile,\%include,\%export,\%free,%
-     \%insert,abs,and,arctan,cjustify,code,concat,const,converse,cos,%
-     decode,digit,drop,dropwhile,entier,error,exp,filemode,filter,%
-     foldl,foldl1,foldr,foldr1,force,fst,getenv,hd,hugenum,id,index,%
-     init,integer,iterate,last,lay,layn,letter,limit,lines,ljustify,%
-     log,log10,map,map2,max,max2,member,merge,min,min2,mkset,neg,%
-     numval,or,pi,postfix,product,read,rep,repeat,reverse,rjustify,%
-     scan,seq,showfloat,shownum,showscaled,sin,snd,sort,spaces,sqrt,%
-     subtract,sum,system,take,takewhile,tinynum,tl,transpose,undef,%
-     until,zip2,zip3,zip4,zip5,zip6,zip},%
-   sensitive,%
-   morecomment=[l]||,%
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-%
-% \subsection{Mizar}
-%
-% As you can read below, \lstthanks{Adam~Grabowski}{adam@mizar.org}
-% {2003/03/29} provided this language definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Mizar definition (c) 2003 Adam Grabowski
-%%
-%% Mizar is freely available at URL www.mizar.org for the Linux x86,
-%% Solaris x86, and Windows operating systems.
-%%
-\lst@definelanguage{Mizar}%
-  {otherkeywords={->,(\#,\#),.=),\&},%
-   morekeywords={vocabulary,constructors,$1,$1,$2,$3,$4,$5,$6,$7,$8,%
-      @proof,according,aggregate,and,antonym,as,associativity,assume,%
-      asymmetry,attr,be,begin,being,by,canceled,case,cases,cluster,%
-      clusters,coherence,commutativity,compatibility,connectedness,%
-      consider,consistency,constructors,contradiction,correctness,def,%
-      deffunc,define,definition,definitions,defpred,end,environ,equals,%
-      ex,exactly,existence,for,from,func,given,hence,hereby,holds,%
-      idempotence,if,iff,implies,involutiveness,irreflexivity,is,it,%
-      let,means,mode,non,not,notation,now,of,or,otherwise,over,per,%
-      pred,prefix,projectivity,proof,provided,qua,reconsider,redefine,%
-      reflexivity,requirements,reserve,scheme,schemes,section,selector,%
-      set,st,struct,such,suppose,symmetry,synonym,take,that,the,then,%
-      theorem,theorems,thesis,thus,to,transitivity,uniqueness,%
-      vocabulary,where},%
-   sensitive=t,%
-   morecomment=[l]::%
-  }[keywords,comments]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{ML}
-%
-% Thanks to \lstthanks{Torben~Hoffmann}{toho@it.dtu.dk}{1999/02/18} for
-% providing the definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% ML definition (c) 1999 Torben Hoffmann
-%%
-\lst@definelanguage{ML}%
-  {morekeywords={abstype,and,andalso,as,case,do,datatype,else,end,%
-       eqtype,exception,fn,fun,functor,handle,if,in,include,infix,%
-       infixr,let,local,nonfix,of,op,open,orelse,raise,rec,sharing,sig,%
-       signature,struct,structure,then,type,val,with,withtype,while},%
-   sensitive,%
-   morecomment=[n]{(*}{*)},%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Modula-2}
-%
-% Took data from
-% \begin{itemize}
-% \item
-%       \textsc{Niklaus Wirth}: \textbf{Programmieren in Modula-2},
-%       \"Ubers.\ Guido Pfeiffer;
-%       2.\ Auflage -- Berlin; Heidelberg; New York; London; Paris; Tokyo;
-%               Hong Kong: Springer, 1991;
-%       ISBN 3-540-51689-1.
-% \end{itemize}
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Modula-2}%
-  {morekeywords={AND,ARRAY,BEGIN,BY,CASE,CONST,DIV,DO,ELSE,ELSIF,END,%
-      EXIT,EXPORT,FOR,FROM,IF,IMPLEMENTATION,IMPORT,IN,MOD,MODULE,NOT,%
-      OF,OR,POINTER,PROCEDURE,QUALIFIED,RECORD,REPEAT,RETURN,SET,THEN,%
-      TYPE,UNTIL,VAR,WHILE,WITH,ABS,BITSET,BOOLEAN,CAP,CARDINAL,CHAR,%
-      CHR,DEC,EXCL,FALSE,FLOAT,HALT,HIGH,INC,INCL,INTEGER,LONGCARD,%
-      LONGINT,LONGREAL,MAX,MIN,NIL,ODD,ORD,PROC,REAL,SIZE,TRUE,TRUNC,%
-      VAL,DEFINITION,LOOP},% added keywords due to Peter Bartke 99/07/22
-   sensitive,%
-   morecomment=[n]{(*}{*)},%
-   morestring=[d]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{MuPAD}
-%
-% This definition was provided by \lstthanks{Christopher~Creutzig}
-% {ccr@mupad.de}{2002/10/15}. Again thanks to \lsthelper{Ulrike Fischer}
-% {-}{2004/04/23}{Re: Bug in listings.sty} for pointing to a missing |@|
-% in |\lstdefinelanguage|.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{MuPAD}{%
-   morekeywords={end,next,break,if,then,elif,else,end_if,case,end_case,%
-      otherwise,for,from,to,step,downto,in,end_for,while,end_while,%
-      repeat,until,end_repeat,or,and,not,xor,div,mod,union,minus,%
-      intersect,subset,proc,begin,end_proc,domain,end_domain,category,%
-      end_category,axiom,end_axiom,quit,delete,frame},%
-   morekeywords=[2]{NIL,FAIL,TRUE,FALSE,UNKNOWN,I,RD_INF,RD_NINF,%
-      RD_NAN,name,local,option,save,inherits,of,do},%
-   otherkeywords={\%if,?,!,:=,<,>,=,<=,<>,>=,==>,<=>,::,..,...,->,%
-      @,@@,\$},%
-   sensitive=true,%
-   morecomment=[l]{//},%
-   morecomment=[n]{/*}{*/},%
-   morestring=[b]",%
-   morestring=[d]{`}%
-  }[keywords,comments,strings]
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{NASTRAN}
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-% The definition is from \lsthelper{Jeffrey Ratcliffe}
-% {Jeffrey.Ratcliffe@m.eads.net}{2002/02/21}{}---except the
-% \texttt{MoreSelectCharTable} part which simulates the keyword
-% \texttt{BEGIN BULK}.
-%    \begin{macrocode}
-\lst@definelanguage{NASTRAN}
-  {morekeywords={ENDDATA},%
-   morecomment=[l]$,%
-   MoreSelectCharTable=%
-        \lst@CArgX BEGIN\ BULK\relax\lst@CDef{}%
-        {\lst@ifmode\else \ifnum\lst@length=\z@
-             \lst@EnterMode{\lst@GPmode}{\lst@modetrue
-                  \let\lst@currstyle\lst@gkeywords@sty}%
-         \fi \fi}%
-        {\ifnum\lst@mode=\lst@GPmode
-             \lst@XPrintToken \lst@LeaveMode
-         \fi}%
-  }[keywords,comments]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Oberon-2}
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Oberon-2}%
-  {morekeywords={ARRAY,BEGIN,BOOLEAN,BY,CASE,CHAR,CONST,DIV,DO,ELSE,%
-      ELSIF,END,EXIT,FALSE,FOR,IF,IMPORT,IN,INTEGER,IS,LONGINT,%
-      LONGREAL,LOOP,MOD,MODULE,NIL,OF,OR,POINTER,PROCEDURE,REAL,RECORD,%
-      REPEAT,RETURN,SET,SHORTINT,THEN,TO,TRUE,TYPE,UNTIL,VAR,WHILE,%
-      WITH,ABS,ASH,CAP,CHR,COPY,DEC,ENTIER,EXCL,HALT,INC,INCL,LEN,LONG,%
-      MAX,MIN,NEW,ODD,ORD,SHORT,SIZE},%
-   sensitive,%
-   morecomment=[n]{(*}{*)},%
-   morestring=[d]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{OCL}
-%
-% This definition is based on chapter 7 of the OMG UML standard version 1.3:
-% \begin{itemize}
-% \item
-%               \textsc{OMG}:
-%               \textbf{OMG Unified Modeling Language Specification};
-%               {\copyright} 1999 OMG;
-%               Available at \texttt{ftp://ftp.omg.org/pub/docs/ad/99-06-08.pdf}.
-% \end{itemize}%
-% This language is due to \lstthanks{Achim~D.~Brucker}
-% {brucker@informatik.uni-freiburg.de}{2000/08/14}.
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% OCL definition (c) 2000 Achim D. Brucker
-%%
-%% You are allowed to use, modify and distribute this code either under
-%% the terms of the LPPL (version 1.0 or later) or the GPL (version 2.0
-%% or later).
-%%
-%    \end{macrocode}
-% First we define are very decorative style. In the OMG standard only the
-% boolean (infix (?)) operations are highlighted, but I think all OCL-defined
-% operations should be highlighted, because they are \emph{guaranteed} to be
-% side-effect-free (in OCL only side effect free evaluations or path
-% expressions are allowed).
-%    \begin{macrocode}
-\lst@definelanguage[decorative]{OCL}[OMG]{OCL}
-  {otherkeywords={@pre},%
-   morendkeywords={name,attributes,associatoinEnds,operations,%
-      supertypes,allSupertypes,allInstances,oclIsKindOf,oclIsTypeOf,%
-      oclAsType,oclInState,oclIsNew,evaluationType,abs,floor,round,max,%
-      min,div,mod,size,concat,toUpper,toLower,substring,includes,%
-      excludes,count,includesAll,exludesAll,isEmpty,notEmpty,sum,%
-      exists,forAll,isUnique,sortedBy,iterate,union,intersection,%
-      including,excluding,symmetricDifference,select,reject,collect,%
-      asSequence,asBag,asSequence,asSet,append,prepend,subSequence,at,%
-      first,last,true,false,isQuery}%
-  }%
-%    \end{macrocode}
-% Remark: "isQuery" is not real OCL, but a important attribute of the
-% underlying UML model.
-%
-% The dialect called \texttt{OMG} is a very spare version. If you use
-% this variant with bold style for first and second order keywords you
-% get the look and feel of the OMG standard. First order keywords are the
-% OCL context declarations (see section 7.3 of the OMG standard):
-%    \begin{macrocode}
-\lst@definelanguage[OMG]{OCL}%
-    {morekeywords={context,pre,inv,post},%
-%    \end{macrocode}
-% Second order keywords are the operation which are defined for type
-% Boolean (see pages 7-34/35 of the OMG standard) and the let-operation
-% (in principle these are the infix operations):
-%    \begin{macrocode}
-    ndkeywords={or,xor,and,not,implies,if,then,else,endif},%
-%    \end{macrocode}
-% Third order keywords are the basic data types as declared in section 7.4 of
-% the OMG standard:
-%    \begin{macrocode}
-    morekeywords=[3]{Boolean,Integer,Real,String,Set,Sequence,Bag,%
-       OclType,OclAny,OclExpression,Enumeration,Collection,},%
-    sensitive=t,%
-    morecomment=[l]--,%
-    morestring=[d]'%
-   }[keywords,comments,strings]%
-%    \end{macrocode}
-% After a bug report by \lsthelper{Martin~S\"u\ss kraut}{Edon.Myder@web.de}
-% {2003/01/30}{morerdkeywords doesn't exist any more} \texttt{morerdkeywords}
-% has been changed to the correct optional argument \texttt{[3]}.
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Octave}
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-% As you can read below the definition is due to \lstthanks{Ulrich~G.~Wortmann}
-% {uliw@erdw.ethz.ch}{2002/02/18}{}.  Additions due to \lstthanks{Sebastian~%
-% Schubert}{-}{2006/05/11}.
-%    \begin{macrocode}
-%%
-%% Octave definition (c) 2001,2002 Ulrich G. Wortmann
-%%
-\lst@definelanguage{Octave}%
-  {morekeywords={gt,lt,amp,abs,acos,acosh,acot,acoth,acsc,acsch,%
-      all,angle,ans,any,asec,asech,asin,asinh,atan,atan2,atanh,auread,%
-      auwrite,axes,axis,balance,bar,bessel,besselk,bessely,beta,%
-      betainc,betaln,blanks,bone,break,brighten,capture,cart2pol,%
-      cart2sph,caxis,cd,cdf2rdf,cedit,ceil,chol,cla,clabel,clc,clear,%
-      clf,clock,close,colmmd,Colon,colorbar,colormap,ColorSpec,colperm,%
-      comet,comet3,compan,compass,computer,cond,condest,conj,contour,%
-      contour3,contourc,contrast,conv,conv2,cool,copper,corrcoef,cos,%
-      cosh,cot,coth,cov,cplxpair,cputime,cross,csc,csch,csvread,%
-      csvwrite,cumprod,cumsum,cylinder,date,dbclear,dbcont,dbdown,%
-      dbquit,dbstack,dbstatus,dbstep,dbstop,dbtype,dbup,ddeadv,ddeexec,%
-      ddeinit,ddepoke,ddereq,ddeterm,ddeunadv,deblank,dec2hex,deconv,%
-      del2,delete,demo,det,diag,diary,diff,diffuse,dir,disp,dlmread,%
-      dlmwrite,dmperm,dot,drawnow,echo,eig,ellipj,ellipke,else,elseif,%
-      end,engClose,engEvalString,engGetFull,engGetMatrix,engOpen,%
-      engOutputBuffer,engPutFull,engPutMatrix,engSetEvalCallback,%
-      engSetEvalTimeout,engWinInit,eps,erf,erfc,erfcx,erfinv,%
-      errorbar,etime,etree,eval,exist,exp,expint,expm,expo,eye,fclose,%
-      feather,feof,ferror,feval,fft,fft2,fftshift,fgetl,fgets,figure,%
-      fill,fill3,filter,filter2,find,findstr,finite,fix,flag,fliplr,%
-      flipud,floor,flops,fmin,fmins,fopen,for,format,fplot,fprintf,%
-      fread,frewind,fscanf,fseek,ftell,full,function,funm,fwrite,fzero,%
-      gallery,gamma,gammainc,gammaln,gca,gcd,gcf,gco,get,getenv,%
-      getframe,ginput,global,gplot,gradient,gray,graymon,grid,griddata,%
-      gtext,hadamard,hankel,help,hess,hex2dec,hex2num,hidden,hilb,hist,%
-      hold,home,hostid,hot,hsv,hsv2rgb,if,ifft,ifft2,imag,image,%
-      imagesc,Inf,info,input,int2str,interp1,interp2,interpft,inv,%
-      invhilb,isempty,isglobal,ishold,isieee,isinf,isletter,isnan,%
-      isreal,isspace,issparse,isstr,jet,keyboard,kron,lasterr,lcm,%
-      legend,legendre,length,lin2mu,line,linspace,load,log,log10,log2,%
-      loglog,logm,logspace,lookfor,lower,ls,lscov,lu,magic,matClose,%
-      matDeleteMatrix,matGetDir,matGetFp,matGetFull,matGetMatrix,%
-      matGetNextMatrix,matGetString,matlabrc,matlabroot,matOpen,%
-      matPutFull,matPutMatrix,matPutString,max,mean,median,menu,mesh,%
-      meshc,meshgrid,meshz,mexAtExit,mexCallMATLAB,mexdebug,%
-      mexErrMsgTxt,mexEvalString,mexFunction,mexGetFull,mexGetMatrix,%
-      mexGetMatrixPtr,mexPrintf,mexPutFull,mexPutMatrix,mexSetTrapFlag,%
-      min,more,movie,moviein,mu2lin,mxCalloc,mxCopyCharacterToPtr,%
-      mxCopyComplex16ToPtr,mxCopyInteger4ToPtr,mxCopyPtrToCharacter,%
-      mxCopyPtrToComplex16,mxCopyPtrToInteger4,mxCopyPtrToReal8,%
-      mxCopyReal8ToPtr,mxCreateFull,mxCreateSparse,mxCreateString,%
-      mxFree,mxFreeMatrix,mxGetIr,mxGetJc,mxGetM,mxGetN,mxGetName,%
-      mxGetNzmax,mxGetPi,mxGetPr,mxGetScalar,mxGetString,mxIsComplex,%
-      mxIsFull,mxIsNumeric,mxIsSparse,mxIsString,mxIsTypeDouble,%
-      mxSetIr,mxSetJc,mxSetM,mxSetN,mxSetName,mxSetNzmax,mxSetPi,%
-      mxSetPr,NaN,nargchk,nargin,nargout,newplot,nextpow2,nnls,nnz,%
-      nonzeros,norm,normest,null,num2str,nzmax,ode23,ode45,orient,orth,%
-      pack,pascal,patch,path,pause,pcolor,pi,pink,pinv,plot,plot3,%
-      pol2cart,polar,poly,polyder,polyeig,polyfit,polyval,polyvalm,%
-      pow2,print,printopt,prism,prod,pwd,qr,qrdelete,qrinsert,quad,%
-      quad8,quit,quiver,qz,rand,randn,randperm,rank,rat,rats,rbbox,%
-      rcond,real,realmax,realmin,refresh,rem,reset,reshape,residue,%
-      return,rgb2hsv,rgbplot,rootobject,roots,rose,rosser,rot90,rotate,%
-      round,rref,rrefmovie,rsf2csf,save,saxis,schur,sec,sech,semilogx,%
-      semilogy,set,setstr,shading,sign,sin,sinh,size,slice,sort,sound,%
-      spalloc,sparse,spaugment,spconvert,spdiags,specular,speye,spfun,%
-      sph2cart,sphere,spinmap,spline,spones,spparms,sprandn,sprandsym,%
-      sprank,sprintf,spy,sqrt,sqrtm,sscanf,stairs,startup,std,stem,%
-      str2mat,str2num,strcmp,strings,strrep,strtok,subplot,subscribe,%
-      subspace,sum,surf,surface,surfc,surfl,surfnorm,svd,symbfact,%
-      symmmd,symrcm,tan,tanh,tempdir,tempname,terminal,text,tic,title,%
-      toc,toeplitz,trace,trapz,tril,triu,type,uicontrol,uigetfile,%
-      uimenu,uiputfile,unix,unwrap,upper,vander,ver,version,view,%
-      viewmtx,waitforbuttonpress,waterfall,wavread,wavwrite,what,%
-      whatsnew,which,while,white,whitebg,who,whos,wilkinson,wk1read,%
-      stderr,stdout,plot,set,endif,wk1write,xlabel,xor,ylabel,zeros,%
-      zlabel,zoom,endwhile,endfunction,printf,case,switch,otherwise,%
-      system,lsode,endfor,error,ones,oneplot,__gnuplot_set__,do,until},%
-   sensitive=t,%
-   morecomment=[l]\#,%
-   morecomment=[l]\#\#,%
-   morecomment=[l]\%,%
-   morestring=[m]',%
-   morestring=[m]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Oz}
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-% Thanks to \lstthanks{Andres~Becerra~Sandoval}{abecerra@univalle.edu.co}
-% {2003/10/02} for providing this language definition.
-%    \begin{macrocode}
-%%
-%% Oz definition (c) Andres Becerra Sandoval
-%%
-\lst@definelanguage{Oz}%
-  {morekeywords={andthen,at,attr,case,catch,choice,class,%
-      cond,declare,define,dis,div,else,elsecase,%
-      elseif,end,export,fail,false,feat,finally,%
-      from,fun,functor,if,import,in,local,%
-      lock,meth,mod,not,of,or,orelse,%
-      prepare,proc,prop,raise,require,self,skip,%
-      then,thread,true,try,unit},%
-   sensitive=true,%
-   morecomment=[l]{\%},%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]",%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Pascal}
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-% Thanks to \lsthelper{Andreas Stephan}{Andreas.Stephan@victoria.de}{1998/04/07}
-% {alpha, byte, pack, unpack} for reporting non-keywords alpha, byte, pack and
-% unpack.
-%    \begin{macrocode}
-\lst@definelanguage[XSC]{Pascal}[Standard]{Pascal}
-  {deletekeywords={alfa,byte,pack,unpack},% 1998 Andreas Stephan
-   morekeywords={dynamic,external,forward,global,module,nil,operator,%
-      priority,sum,type,use,dispose,mark,page,release,cimatrix,%
-      cinterval,civector,cmatrix,complex,cvector,dotprecision,imatrix,%
-      interval,ivector,rmatrix,rvector,string,im,inf,re,sup,chr,comp,%
-      eof,eoln,expo,image,ival,lb,lbound,length,loc,mant,maxlength,odd,%
-      ord,pos,pred,round,rval,sign,substring,succ,trunc,ub,ubound}%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[Borland6]{Pascal}[Standard]{Pascal}
-  {morekeywords={asm,constructor,destructor,implementation,inline,%
-      interface,nil,object,shl,shr,string,unit,uses,xor},%
-   morendkeywords={Abs,Addr,ArcTan,Chr,Concat,Copy,Cos,CSeg,DiskFree,%
-      DiskSize,DosExitCode,DosVersion,DSeg,EnvCount,EnvStr,Eof,Eoln,%
-      Exp,FExpand,FilePos,FileSize,Frac,FSearch,GetBkColor,GetColor,%
-      GetDefaultPalette,GetDriverName,GetEnv,GetGraphMode,GetMaxMode,%
-      GetMaxX,GetMaxY,GetModeName,GetPaletteSize,GetPixel,GetX,GetY,%
-      GraphErrorMsg,GraphResult,Hi,ImageSize,InstallUserDriver,%
-      InstallUserFont,Int,IOResult,KeyPressed,Length,Lo,MaxAvail,%
-      MemAvail,MsDos,Odd,Ofs,Ord,OvrGetBuf,OvrGetRetry,ParamCount,%
-      ParamStr,Pi,Pos,Pred,Ptr,Random,ReadKey,Round,SeekEof,SeekEoln,%
-      Seg,SetAspectRatio,Sin,SizeOf,Sound,SPtr,Sqr,Sqrt,SSeg,Succ,%
-      Swap,TextHeight,TextWidth,Trunc,TypeOf,UpCase,WhereX,WhereY,%
-      Append,Arc,Assign,AssignCrt,Bar,Bar3D,BlockRead,BlockWrite,ChDir,%
-      Circle,ClearDevice,ClearViewPort,Close,CloseGraph,ClrEol,ClrScr,%
-      Dec,Delay,Delete,DelLine,DetectGraph,Dispose,DrawPoly,Ellipse,%
-      Erase,Exec,Exit,FillChar,FillEllipse,FillPoly,FindFirst,FindNext,%
-      FloodFill,Flush,FreeMem,FSplit,GetArcCoords,GetAspectRatio,%
-      GetDate,GetDefaultPalette,GetDir,GetCBreak,GetFAttr,%
-      GetFillSettings,GetFTime,GetImage,GetIntVec,GetLineSettings,%
-      GetMem,GetPalette,GetTextSettings,GetTime,GetVerify,%
-      GetViewSettings,GoToXY,Halt,HighVideo,Inc,InitGraph,Insert,%
-      InsLine,Intr,Keep,Line,LineRel,LineTo,LowVideo,Mark,MkDir,Move,%
-      MoveRel,MoveTo,MsDos,New,NormVideo,NoSound,OutText,OutTextXY,%
-      OvrClearBuf,OvrInit,OvrInitEMS,OvrSetBuf,PackTime,PieSlice,%
-      PutImage,PutPixel,Randomize,Rectangle,Release,Rename,%
-      RestoreCrtMode,RmDir,RunError,Sector,Seek,SetActivePage,%
-      SetAllPalette,SetBkColor,SetCBreak,SetColor,SetDate,SetFAttr,%
-      SetFillPattern,SetFillStyle,SetFTime,SetGraphBufSize,%
-      SetGraphMode,SetIntVec,SetLineStyle,SetPalette,SetRGBPalette,%
-      SetTextBuf,SetTextJustify,SetTextStyle,SetTime,SetUserCharSize,%
-      SetVerify,SetViewPort,SetVisualPage,SetWriteMode,Sound,Str,%
-      SwapVectors,TextBackground,TextColor,TextMode,Truncate,%
-      UnpackTime,Val,Window}%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[Standard]{Pascal}%
-  {morekeywords={alfa,and,array,begin,boolean,byte,case,char,const,div,%
-      do,downto,else,end,false,file,for,function,get,goto,if,in,%
-      integer,label,maxint,mod,new,not,of,or,pack,packed,page,program,%
-      put,procedure,read,readln,real,record,repeat,reset,rewrite,set,%
-      text,then,to,true,type,unpack,until,var,while,with,write,%
-      writeln},%
-   sensitive=f,%
-   morecomment=[s]{(*}{*)},%
-   morecomment=[s]{\{}{\}},%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Perl}
-%
-% I got the data from \texttt{http://www.perl.com}. But I wish to thank
-% \lsthelper{Herbert~Weinhandl}{weinhand@grz08u.unileoben.ac.at}{}{} for the
-% book `Learning Perl'.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Perl}%
-  {morekeywords={abs,accept,alarm,atan2,bind,binmode,bless,caller,%
-      chdir,chmod,chomp,chop,chown,chr,chroot,close,closedir,connect,%
-      continue,cos,crypt,dbmclose,dbmopen,defined,delete,die,do,dump,%
-      each,else,elsif,endgrent,endhostent,endnetent,endprotoent,%
-      endpwent,endservent,eof,eval,exec,exists,exit,exp,fcntl,fileno,%
-      flock,for,foreach,fork,format,formline,getc,getgrent,getgrgid,%
-      getgrnam,gethostbyaddr,gethostbyname,gethostent,getlogin,%
-      getnetbyaddr,getnetbyname,getnetent,getpeername,getpgrp,%
-      getppid,getpriority,getprotobyname,getprotobynumber,getprotoent,%
-      getpwent,getpwnam,getpwuid,getservbyname,getservbyport,%
-      getservent,getsockname,getsockopt,glob,gmtime,goto,grep,hex,if,%
-      import,index,int,ioctl,join,keys,kill,last,lc,lcfirst,length,%
-      link,listen,local,localtime,log,lstat,m,map,mkdir,msgctl,msgget,%
-      msgrcv,msgsnd,my,next,no,oct,open,opendir,ord,pack,package,pipe,%
-      pop,pos,print,printf,prototype,push,q,qq,quotemeta,qw,qx,rand,%
-      read,readdir,readlink,recv,redo,ref,rename,require,reset,return,%
-      reverse,rewinddir,rindex,rmdir,s,scalar,seek,seekdir,select,%
-      semctl,semget,semop,send,setgrent,sethostent,setnetent,setpgrp,%
-      setpriority,setprotoent,setpwent,setservent,setsockopt,shift,%
-      shmctl,shmget,shmread,shmwrite,shutdown,sin,sleep,socket,%
-      socketpair,sort,splice,split,sprintf,sqrt,srand,stat,study,sub,%
-      substr,symlink,syscall,sysopen,sysread,system,syswrite,tell,%
-      telldir,tie,tied,time,times,tr,truncate,uc,ucfirst,umask,undef,%
-      unless,unlink,unpack,unshift,untie,until,use,utime,values,vec,%
-      wait,waitpid,wantarray,warn,while,write,y},%
-   sensitive,%
-   morecomment=[l]\#,%
-   morestring=[b]",%
-   morestring=[b]',%
-   MoreSelectCharTable=%
-      \lst@ReplaceInput{\$\#}{\lst@ProcessOther\$\lst@ProcessOther\#}%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{PHP}
-%
-% \lstthanks{Luca Balzerani}{lou@latoserver.it}{2002/04/06,2002/04/16} sent me
-% this language definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% PHP definition by Luca Balzerani
-%%
-\lst@definelanguage{PHP}%
-  {morekeywords={%
-  %--- core language
-    <?,?>,::,break,case,continue,default,do,else,%
-    elseif,for,foreach,if,include,require,phpinfo,%
-    switch,while,false,FALSE,true,TRUE,%
-  %--- apache functions
-    apache_lookup_uri,apache_note,ascii2ebcdic,ebcdic2ascii,%
-    virtual,apache_child_terminate,apache_setenv,%
-  %--- array functions
-    array,array_change_key_case,array_chunk,array_count_values,%
-    array_filter,array_flip,array_fill,array_intersect,%
-    array_keys,array_map,array_merge,array_merge_recursive,%
-    array_pad,array_pop,array_push,array_rand,array_reverse,%
-    array_shift,array_slice,array_splice,array_sum,array_unique,%
-    array_values,array_walk,arsort,asort,compact,count,current,each,%
-    extract,in_array,array_search,key,krsort,ksort,list,natsort,%
-    next,pos,prev,range,reset,rsort,shuffle,sizeof,sort,uasort,%
-    usort,%
-  %--- aspell functions
-    aspell_new,aspell_check,aspell_check_raw,aspell_suggest,%
-  %--- bc functions
-    bcadd,bccomp,bcdiv,bcmod,bcmul,bcpow,bcscale,bcsqrt,bcsub,%
-  %--- bzip2 functions
-    bzclose,bzcompress,bzdecompress,bzerrno,bzerror,bzerrstr,%
-    bzopen,bzread,bzwrite,%
-  %--- calendar functions
-    JDToGregorian,GregorianToJD,JDToJulian,JulianToJD,JDToJewish,%
-    JDToFrench,FrenchToJD,JDMonthName,JDDayOfWeek,easter_date,%
-    unixtojd,jdtounix,cal_days_in_month,cal_to_jd,cal_from_jd,%
-  %--- ccvs functions
-    ccvs_init,ccvs_done,ccvs_new,ccvs_add,ccvs_delete,ccvs_auth,%
-    ccvs_reverse,ccvs_sale,ccvs_void,ccvs_status,ccvs_count,%
-    ccvs_report,ccvs_command,ccvs_textvalue,%
-  %--- classobj functions
-    call_user_method,call_user_method_array,class_exists,get_class,%
-    get_class_vars,get_declared_classes,get_object_vars,%
-    is_a,is_subclass_of,method_exists,%
-  %--- com functions
-    COM,VARIANT,com_load,com_invoke,com_propget,com_get,com_propput,%
-    com_set,com_addref,com_release,com_isenum,com_load_typelib,%
-  %--- cpdf functions
-    cpdf_add_annotation,cpdf_add_outline,cpdf_arc,cpdf_begin_text,%
-    cpdf_clip,cpdf_close,cpdf_closepath,cpdf_closepath_fill_stroke,%
-    cpdf_continue_text,cpdf_curveto,cpdf_end_text,cpdf_fill,%
-    cpdf_finalize,cpdf_finalize_page,%
-    cpdf_import_jpeg,cpdf_lineto,cpdf_moveto,cpdf_newpath,cpdf_open,%
-    cpdf_page_init,cpdf_place_inline_image,cpdf_rect,cpdf_restore,%
-    cpdf_rmoveto,cpdf_rotate,cpdf_rotate_text,cpdf_save,%
-    cpdf_scale,cpdf_set_char_spacing,cpdf_set_creator,%
-    cpdf_set_font,cpdf_set_horiz_scaling,cpdf_set_keywords,%
-    cpdf_set_page_animation,cpdf_set_subject,cpdf_set_text_matrix,%
-    cpdf_set_text_rendering,cpdf_set_text_rise,cpdf_set_title,%
-    cpdf_setdash,cpdf_setflat,cpdf_setgray,cpdf_setgray_fill,%
-    cpdf_setlinecap,cpdf_setlinejoin,cpdf_setlinewidth,%
-    cpdf_setrgbcolor,cpdf_setrgbcolor_fill,cpdf_setrgbcolor_stroke,%
-    cpdf_show_xy,cpdf_stringwidth,cpdf_set_font_directories,%
-    cpdf_set_viewer_preferences,cpdf_stroke,cpdf_text,%
-    cpdf_set_action_url,%
-  %--- crack functions
-    crack_opendict,crack_closedict,crack_check,crack_getlastmessage,%
-  %--- ctype functions
-    ctype_alnum,ctype_alpha,ctype_cntrl,ctype_digit,ctype_lower,%
-    ctype_print,ctype_punct,ctype_space,ctype_upper,ctype_xdigit,%
-  %--- curl functions
-    curl_init,curl_setopt,curl_exec,curl_close,curl_version,%
-    curl_error,curl_getinfo,%
-  %--- cybercash functions
-    cybercash_encr,cybercash_decr,cybercash_base64_encode,%
-  %--- cybermut functions
-    cybermut_creerformulairecm,cybermut_testmac,%
-  %--- cyrus functions
-    cyrus_connect,cyrus_authenticate,cyrus_bind,cyrus_unbind,%
-    cyrus_close,%
-  %--- datetime functions
-    checkdate,date,getdate,gettimeofday,gmdate,gmmktime,gmstrftime,%
-    microtime,mktime,strftime,time,strtotime,%
-  %--- dbase functions
-    dbase_create,dbase_open,dbase_close,dbase_pack,dbase_add_record,%
-    dbase_delete_record,dbase_get_record,%
-    dbase_numfields,dbase_numrecords,%
-  %--- dba functions
-    dba_close,dba_delete,dba_exists,dba_fetch,dba_firstkey,%
-    dba_nextkey,dba_popen,dba_open,dba_optimize,dba_replace,%
-  %--- dbm functions
-    dbmopen,dbmclose,dbmexists,dbmfetch,dbminsert,dbmreplace,%
-    dbmfirstkey,dbmnextkey,dblist,%
-  %--- dbx functions
-    dbx_close,dbx_connect,dbx_error,dbx_query,dbx_sort,dbx_compare,%
-  %--- dio functions
-    dio_open,dio_read,dio_write,dio_truncate,dio_stat,dio_seek,%
-    dio_close,%
-  %--- dir functions
-    chroot,chdir,dir,closedir,getcwd,opendir,readdir,rewinddir,%
-  %--- dotnet functions
-    dotnet_load,%
-  %--- errorfunc functions
-    error_log,error_reporting,restore_error_handler,%
-    trigger_error,user_error,%
-  %--- exec functions
-    escapeshellarg,escapeshellcmd,exec,passthru,system,shell_exec,%
-  %--- fbsql functions
-    fbsql_affected_rows,fbsql_autocommit,fbsql_change_user,%
-    fbsql_commit,fbsql_connect,fbsql_create_db,fbsql_create_blob,%
-    fbsql_database_password,fbsql_data_seek,fbsql_db_query,%
-    fbsql_drop_db,fbsql_errno,fbsql_error,fbsql_fetch_array,%
-    fbsql_fetch_field,fbsql_fetch_lengths,fbsql_fetch_object,%
-    fbsql_field_flags,fbsql_field_name,fbsql_field_len,%
-    fbsql_field_table,fbsql_field_type,fbsql_free_result,%
-    fbsql_list_dbs,fbsql_list_fields,fbsql_list_tables,%
-    fbsql_num_fields,fbsql_num_rows,fbsql_pconnect,fbsql_query,%
-    fbsql_read_clob,fbsql_result,fbsql_rollback,fbsql_set_lob_mode,%
-    fbsql_start_db,fbsql_stop_db,fbsql_tablename,fbsql_warnings,%
-    fbsql_get_autostart_info,fbsql_hostname,fbsql_password,%
-    fbsql_username,%
-  %--- fdf functions
-    fdf_open,fdf_close,fdf_create,fdf_save,fdf_get_value,%
-    fdf_next_field_name,fdf_set_ap,fdf_set_status,fdf_get_status,%
-    fdf_get_file,fdf_set_flags,fdf_set_opt,%
-    fdf_set_javascript_action,fdf_set_encoding,fdf_add_template,%
-  %--- filepro functions
-    filepro,filepro_fieldname,filepro_fieldtype,filepro_fieldwidth,%
-    filepro_fieldcount,filepro_rowcount,%
-  %--- filesystem functions
-    basename,chgrp,chmod,chown,clearstatcache,copy,delete,dirname,%
-    diskfreespace,disk_total_space,fclose,feof,fflush,fgetc,fgetcsv,%
-    fgetss,file_get_contents,file,file_exists,fileatime,filectime,%
-    fileinode,filemtime,fileowner,fileperms,filesize,filetype,flock,%
-    fopen,fpassthru,fputs,fread,fscanf,fseek,fstat,ftell,ftruncate,%
-    set_file_buffer,is_dir,is_executable,is_file,is_link,%
-    is_writable,is_writeable,is_uploaded_file,link,linkinfo,mkdir,%
-    parse_ini_file,pathinfo,pclose,popen,readfile,readlink,rename,%
-    rmdir,stat,lstat,realpath,symlink,tempnam,tmpfile,touch,umask,%
-  %--- fribidi functions
-    fribidi_log2vis,%
-  %--- ftp functions
-    ftp_connect,ftp_login,ftp_pwd,ftp_cdup,ftp_chdir,ftp_mkdir,%
-    ftp_nlist,ftp_rawlist,ftp_systype,ftp_pasv,ftp_get,ftp_fget,%
-    ftp_fput,ftp_size,ftp_mdtm,ftp_rename,ftp_delete,ftp_site,%
-    ftp_quit,ftp_exec,ftp_set_option,ftp_get_option,%
-  %--- funchand functions
-    call_user_func_array,call_user_func,create_function,%
-    func_get_args,func_num_args,function_exists,%
-    register_shutdown_function,register_tick_function,%
-  %--- gettext functions
-    bindtextdomain,bind_textdomain_codeset,dcgettext,dcngettext,%
-    dngettext,gettext,ngettext,textdomain,%
-  %--- gmp functions
-    gmp_init,gmp_intval,gmp_strval,gmp_add,gmp_sub,gmp_mul,%
-    gmp_div_r,gmp_div_qr,gmp_div,gmp_mod,gmp_divexact,gmp_cmp,%
-    gmp_com,gmp_abs,gmp_sign,gmp_fact,gmp_sqrt,gmp_sqrtrm,%
-    gmp_pow,gmp_powm,gmp_prob_prime,gmp_gcd,gmp_gcdext,gmp_invert,%
-    gmp_jacobi,gmp_random,gmp_and,gmp_or,gmp_xor,gmp_setbit,%
-    gmp_scan0,gmp_scan1,gmp_popcount,gmp_hamdist,%
-  %--- http functions
-    header,headers_sent,setcookie,%
-  %--- hw functions
-    hw_Array2Objrec,hw_Children,hw_ChildrenObj,hw_Close,hw_Connect,%
-    hw_Deleteobject,hw_DocByAnchor,hw_DocByAnchorObj,%
-    hw_Document_BodyTag,hw_Document_Content,hw_Document_SetContent,%
-    hw_ErrorMsg,hw_EditText,hw_Error,hw_Free_Document,hw_GetParents,%
-    hw_GetChildColl,hw_GetChildCollObj,hw_GetRemote,%
-    hw_GetSrcByDestObj,hw_GetObject,hw_GetAndLock,hw_GetText,%
-    hw_GetObjectByQueryObj,hw_GetObjectByQueryColl,%
-    hw_GetChildDocColl,hw_GetChildDocCollObj,hw_GetAnchors,%
-    hw_Mv,hw_Identify,hw_InCollections,hw_Info,hw_InsColl,hw_InsDoc,%
-    hw_InsertObject,hw_mapid,hw_Modifyobject,hw_New_Document,%
-    hw_Output_Document,hw_pConnect,hw_PipeDocument,hw_Root,%
-    hw_Who,hw_getusername,hw_stat,hw_setlinkroot,hw_connection_info,%
-    hw_insertanchors,hw_getrellink,hw_changeobject,%
-  %--- ibase functions
-    ibase_connect,ibase_pconnect,ibase_close,ibase_query,%
-    ibase_fetch_row,ibase_fetch_object,ibase_field_info,%
-    ibase_free_result,ibase_prepare,ibase_execute,ibase_trans,%
-    ibase_rollback,ibase_timefmt,ibase_num_fields,ibase_blob_add,%
-    ibase_blob_close,ibase_blob_create,ibase_blob_echo,%
-    ibase_blob_import,ibase_blob_info,ibase_blob_open,%
-  %--- icap functions
-    icap_open,icap_close,icap_fetch_event,icap_list_events,%
-    icap_delete_event,icap_snooze,icap_list_alarms,%
-    icap_rename_calendar,icap_delete_calendar,icap_reopen,%
-  %--- iconv functions
-    iconv,iconv_get_encoding,iconv_set_encoding,ob_iconv_handler,%
-  %--- ifx functions
-    ifx_connect,ifx_pconnect,ifx_close,ifx_query,ifx_prepare,ifx_do,%
-    ifx_errormsg,ifx_affected_rows,ifx_getsqlca,ifx_fetch_row,%
-    ifx_fieldtypes,ifx_fieldproperties,ifx_num_fields,ifx_num_rows,%
-    ifx_create_char,ifx_free_char,ifx_update_char,ifx_get_char,%
-    ifx_copy_blob,ifx_free_blob,ifx_get_blob,ifx_update_blob,%
-    ifx_textasvarchar,ifx_byteasvarchar,ifx_nullformat,%
-    ifxus_free_slob,ifxus_close_slob,ifxus_open_slob,%
-    ifxus_seek_slob,ifxus_read_slob,ifxus_write_slob,%
-  %--- iisfunc functions
-    iis_get_server_by_path,iis_get_server_by_comment,iis_add_server,%
-    iis_set_dir_security,iis_get_dir_security,iis_set_server_rights,%
-    iis_set_script_map,iis_get_script_map,iis_set_app_settings,%
-    iis_stop_server,iis_stop_service,iis_start_service,%
-  %--- image functions
-    exif_imagetype,exif_read_data,exif_thumbnail,getimagesize,%
-    imagealphablending,imagearc,imagefilledarc,imageellipse,%
-    imagechar,imagecharup,imagecolorallocate,imagecolordeallocate,%
-    imagecolorclosest,imagecolorclosestalpha,imagecolorclosestthwb,%
-    imagecolorexactalpha,imagecolorresolve,imagecolorresolvealpha,%
-    imagecolorset,imagecolorsforindex,imagecolorstotal,%
-    imagecopy,imagecopymerge,imagecopymergegray,imagecopyresized,%
-    imagecreate,imagecreatetruecolor,imagetruecolortopalette,%
-    imagecreatefromgd2,imagecreatefromgd2part,imagecreatefromgif,%
-    imagecreatefrompng,imagecreatefromwbmp,imagecreatefromstring,%
-    imagecreatefromxpm,imagedashedline,imagedestroy,imagefill,%
-    imagefilledrectangle,imagefilltoborder,imagefontheight,%
-    imagegd,imagegd2,imagegif,imagepng,imagejpeg,imagewbmp,%
-    imageline,imageloadfont,imagepalettecopy,imagepolygon,%
-    imagepsencodefont,imagepsfreefont,imagepsloadfont,%
-    imagepsslantfont,imagepstext,imagerectangle,imagesetpixel,%
-    imagesetstyle,imagesettile,imagesetthickness,imagestring,%
-    imagesx,imagesy,imagettfbbox,imageftbbox,imagettftext,%
-    imagetypes,jpeg2wbmp,png2wbmp,iptcembed,read_exif_data,%
-  %--- imap functions
-    imap_8bit,imap_alerts,imap_append,imap_base64,imap_binary,%
-    imap_bodystruct,imap_check,imap_clearflag_full,imap_close,%
-    imap_delete,imap_deletemailbox,imap_errors,imap_expunge,%
-    imap_fetchbody,imap_fetchheader,imap_fetchstructure,%
-    imap_getmailboxes,imap_getsubscribed,imap_header,%
-    imap_headers,imap_last_error,imap_listmailbox,%
-    imap_mail,imap_mail_compose,imap_mail_copy,imap_mail_move,%
-    imap_mime_header_decode,imap_msgno,imap_num_msg,imap_num_recent,%
-    imap_ping,imap_popen,imap_qprint,imap_renamemailbox,imap_reopen,%
-    imap_rfc822_parse_headers,imap_rfc822_write_address,%
-    imap_search,imap_setacl,imap_set_quota,imap_setflag_full,%
-    imap_status,imap_subscribe,imap_uid,imap_undelete,%
-    imap_utf7_decode,imap_utf7_encode,imap_utf8,imap_thread,%
-  %--- info functions
-    assert,assert_options,extension_loaded,dl,getenv,get_cfg_var,%
-    get_defined_constants,get_extension_funcs,getmygid,%
-    get_loaded_extensions,get_magic_quotes_gpc,%
-    getlastmod,getmyinode,getmypid,getmyuid,get_required_files,%
-    ini_alter,ini_get,ini_get_all,ini_restore,ini_set,phpcredits,%
-    phpversion,php_logo_guid,php_sapi_name,php_uname,putenv,%
-    set_time_limit,version_compare,zend_logo_guid,zend_version,%
-  %--- ircg functions
-    ircg_pconnect,ircg_fetch_error_msg,ircg_set_current,ircg_join,%
-    ircg_msg,ircg_notice,ircg_nick,ircg_topic,ircg_channel_mode,%
-    ircg_whois,ircg_kick,ircg_ignore_add,ircg_ignore_del,%
-    ircg_is_conn_alive,ircg_lookup_format_messages,%
-    ircg_set_on_die,ircg_set_file,ircg_get_username,%
-    ircg_nickname_unescape,%
-  %--- java functions
-    java_last_exception_clear,java_last_exception_get,%
-  %--- ldap functions
-    ldap_add,ldap_bind,ldap_close,ldap_compare,ldap_connect,%
-    ldap_delete,ldap_dn2ufn,ldap_err2str,ldap_errno,ldap_error,%
-    ldap_first_attribute,ldap_first_entry,ldap_free_result,%
-    ldap_get_dn,ldap_get_entries,ldap_get_option,ldap_get_values,%
-    ldap_list,ldap_modify,ldap_mod_add,ldap_mod_del,%
-    ldap_next_attribute,ldap_next_entry,ldap_read,ldap_rename,%
-    ldap_set_option,ldap_unbind,ldap_8859_to_t61,%
-    ldap_next_reference,ldap_parse_reference,ldap_parse_result,%
-    ldap_sort,ldap_start_tls,ldap_t61_to_8859,%
-  %--- mail functions
-    mail,ezmlm_hash,%
-  %--- math functions
-    abs,acos,acosh,asin,asinh,atan,atanh,atan2,base_convert,bindec,%
-    cos,cosh,decbin,dechex,decoct,deg2rad,exp,expm1,floor,%
-    hexdec,hypot,is_finite,is_infinite,is_nan,lcg_value,log,log10,%
-    max,min,mt_rand,mt_srand,mt_getrandmax,number_format,octdec,pi,%
-    rad2deg,rand,round,sin,sinh,sqrt,srand,tan,tanh,%
-  %--- mbstring functions
-    mb_language,mb_parse_str,mb_internal_encoding,mb_http_input,%
-    mb_detect_order,mb_substitute_character,mb_output_handler,%
-    mb_strlen,mb_strpos,mb_strrpos,mb_substr,mb_strcut,mb_strwidth,%
-    mb_convert_encoding,mb_detect_encoding,mb_convert_kana,%
-    mb_decode_mimeheader,mb_convert_variables,%
-    mb_decode_numericentity,mb_send_mail,mb_get_info,%
-    mb_ereg,mb_eregi,mb_ereg_replace,mb_eregi_replace,mb_split,%
-    mb_ereg_search,mb_ereg_search_pos,mb_ereg_search_regs,%
-    mb_ereg_search_getregs,mb_ereg_search_getpos,%
-  %--- mcal functions
-    mcal_open,mcal_popen,mcal_reopen,mcal_close,%
-    mcal_rename_calendar,mcal_delete_calendar,mcal_fetch_event,%
-    mcal_append_event,mcal_store_event,mcal_delete_event,%
-    mcal_list_alarms,mcal_event_init,mcal_event_set_category,%
-    mcal_event_set_description,mcal_event_set_start,%
-    mcal_event_set_alarm,mcal_event_set_class,mcal_is_leap_year,%
-    mcal_date_valid,mcal_time_valid,mcal_day_of_week,%
-    mcal_date_compare,mcal_next_recurrence,%
-    mcal_event_set_recur_daily,mcal_event_set_recur_weekly,%
-    mcal_event_set_recur_monthly_wday,mcal_event_set_recur_yearly,%
-    mcal_event_add_attribute,mcal_expunge,mcal_week_of_year,%
-  %--- mcrypt functions
-    mcrypt_get_cipher_name,mcrypt_get_block_size,%
-    mcrypt_create_iv,mcrypt_cbc,mcrypt_cfb,mcrypt_ecb,mcrypt_ofb,%
-    mcrypt_list_modes,mcrypt_get_iv_size,mcrypt_encrypt,%
-    mcrypt_module_open,mcrypt_module_close,mcrypt_generic_deinit,%
-    mcrypt_generic,mdecrypt_generic,mcrypt_generic_end,%
-    mcrypt_enc_is_block_algorithm_mode,%
-    mcrypt_enc_is_block_mode,mcrypt_enc_get_block_size,%
-    mcrypt_enc_get_supported_key_sizes,mcrypt_enc_get_iv_size,%
-    mcrypt_enc_get_modes_name,mcrypt_module_self_test,%
-    mcrypt_module_is_block_algorithm,mcrypt_module_is_block_mode,%
-    mcrypt_module_get_algo_key_size,%
-  %--- mhash functions
-    mhash_get_hash_name,mhash_get_block_size,mhash_count,mhash,%
-  %--- misc functions
-    connection_aborted,connection_status,connection_timeout,%
-    define,defined,die,eval,exit,get_browser,highlight_file,%
-    ignore_user_abort,iptcparse,leak,pack,show_source,sleep,uniqid,%
-    usleep,%
-  %--- mnogosearch functions
-    udm_add_search_limit,udm_alloc_agent,udm_api_version,%
-    udm_cat_list,udm_clear_search_limits,udm_errno,udm_error,%
-    udm_free_agent,udm_free_ispell_data,udm_free_res,%
-    udm_get_res_field,udm_get_res_param,udm_load_ispell_data,%
-    udm_check_charset,udm_check_stored,udm_close_stored,udm_crc32,%
-  %--- msession functions
-    msession_connect,msession_disconnect,msession_count,%
-    msession_destroy,msession_lock,msession_unlock,msession_set,%
-    msession_uniq,msession_randstr,msession_find,msession_list,%
-    msession_set_array,msession_listvar,msession_timeout,%
-    msession_getdata,msession_setdata,msession_plugin,%
-  %--- msql functions
-    msql,msql_affected_rows,msql_close,msql_connect,msql_create_db,%
-    msql_data_seek,msql_dbname,msql_drop_db,msql_dropdb,msql_error,%
-    msql_fetch_field,msql_fetch_object,msql_fetch_row,%
-    msql_field_seek,msql_fieldtable,msql_fieldtype,msql_fieldflags,%
-    msql_free_result,msql_freeresult,msql_list_fields,%
-    msql_list_dbs,msql_listdbs,msql_list_tables,msql_listtables,%
-    msql_num_rows,msql_numfields,msql_numrows,msql_pconnect,%
-    msql_regcase,msql_result,msql_select_db,msql_selectdb,%
-  %--- mssql functions
-    mssql_close,mssql_connect,mssql_data_seek,mssql_fetch_array,%
-    mssql_fetch_object,mssql_fetch_row,mssql_field_length,%
-    mssql_field_seek,mssql_field_type,mssql_free_result,%
-    mssql_min_error_severity,mssql_min_message_severity,%
-    mssql_num_fields,mssql_num_rows,mssql_pconnect,mssql_query,%
-    mssql_select_db,mssql_bind,mssql_execute,mssql_fetch_assoc,%
-    mssql_guid_string,mssql_init,mssql_rows_affected,%
-  %--- muscat functions
-    muscat_setup,muscat_setup_net,muscat_give,muscat_get,%
-  %--- mysql functions
-    mysql_affected_rows,mysql_change_user,mysql_character_set_name,%
-    mysql_connect,mysql_create_db,mysql_data_seek,mysql_db_name,%
-    mysql_drop_db,mysql_errno,mysql_error,mysql_escape_string,%
-    mysql_fetch_assoc,mysql_fetch_field,mysql_fetch_lengths,%
-    mysql_fetch_row,mysql_field_flags,mysql_field_name,%
-    mysql_field_seek,mysql_field_table,mysql_field_type,%
-    mysql_info,mysql_insert_id,mysql_list_dbs,mysql_list_fields,%
-    mysql_list_tables,mysql_num_fields,mysql_num_rows,%
-    mysql_ping,mysql_query,mysql_unbuffered_query,%
-    mysql_result,mysql_select_db,mysql_tablename,mysql_thread_id,%
-    mysql_get_host_info,mysql_get_proto_info,mysql_get_server_info,%
-  %--- network functions
-    checkdnsrr,closelog,debugger_off,debugger_on,%
-    fsockopen,gethostbyaddr,gethostbyname,gethostbynamel,getmxrr,%
-    getprotobynumber,getservbyname,getservbyport,ip2long,long2ip,%
-    pfsockopen,socket_get_status,socket_set_blocking,%
-    syslog,%
-  %--- nis functions
-    yp_get_default_domain,yp_order,yp_master,yp_match,yp_first,%
-    yp_errno,yp_err_string,yp_all,yp_cat,%
-  %--- oci8 functions
-    OCIDefineByName,OCIBindByName,OCILogon,OCIPLogon,OCINLogon,%
-    OCIExecute,OCICommit,OCIRollback,OCINewDescriptor,OCIRowCount,%
-    OCIResult,OCIFetch,OCIFetchInto,OCIFetchStatement,%
-    OCIColumnName,OCIColumnSize,OCIColumnType,OCIServerVersion,%
-    OCINewCursor,OCIFreeStatement,OCIFreeCursor,OCIFreeDesc,%
-    OCIError,OCIInternalDebug,OCICancel,OCISetPrefetch,%
-    OCISaveLobFile,OCISaveLob,OCILoadLob,OCIColumnScale,%
-    OCIColumnTypeRaw,OCINewCollection,OCIFreeCollection,%
-    OCICollAppend,OCICollAssignElem,OCICollGetElem,OCICollMax,%
-    OCICollTrim,%
-  %--- oracle functions
-    Ora_Bind,Ora_Close,Ora_ColumnName,Ora_ColumnSize,Ora_ColumnType,%
-    Ora_CommitOff,Ora_CommitOn,Ora_Do,Ora_Error,Ora_ErrorCode,%
-    Ora_Fetch,Ora_Fetch_Into,Ora_GetColumn,Ora_Logoff,Ora_Logon,%
-    Ora_Numcols,Ora_Numrows,Ora_Open,Ora_Parse,Ora_Rollback,%
-  %--- outcontrol functions
-    flush,ob_start,ob_get_contents,ob_get_length,ob_get_level,%
-    ob_flush,ob_clean,ob_end_flush,ob_end_clean,ob_implicit_flush,%
-  %--- ovrimos functions
-    ovrimos_connect,ovrimos_close,ovrimos_longreadlen,%
-    ovrimos_execute,ovrimos_cursor,ovrimos_exec,ovrimos_fetch_into,%
-    ovrimos_result,ovrimos_result_all,ovrimos_num_rows,%
-    ovrimos_field_name,ovrimos_field_type,ovrimos_field_len,%
-    ovrimos_free_result,ovrimos_commit,ovrimos_rollback,%
-  %--- pcntl functions
-    pcntl_fork,pcntl_signal,pcntl_waitpid,pcntl_wexitstatus,%
-    pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,%
-    pcntl_exec,%
-  %--- pcre functions
-    preg_match,preg_match_all,preg_replace,preg_replace_callback,%
-    preg_quote,preg_grep,Pattern Modifiers,Pattern Syntax,%
-  %--- pdf functions
-    pdf_add_annotation,pdf_add_bookmark,pdf_add_launchlink,%
-    pdf_add_note,pdf_add_outline,pdf_add_pdflink,pdf_add_thumbnail,%
-    pdf_arc,pdf_arcn,pdf_attach_file,pdf_begin_page,%
-    pdf_begin_template,pdf_circle,pdf_clip,pdf_close,pdf_closepath,%
-    pdf_closepath_stroke,pdf_close_image,pdf_close_pdi,%
-    pdf_concat,pdf_continue_text,pdf_curveto,pdf_delete,%
-    pdf_endpath,pdf_end_pattern,pdf_end_template,pdf_fill,%
-    pdf_findfont,pdf_get_buffer,pdf_get_font,pdf_get_fontname,%
-    pdf_get_image_height,pdf_get_image_width,pdf_get_parameter,%
-    pdf_get_pdi_value,pdf_get_majorversion,pdf_get_minorversion,%
-    pdf_initgraphics,pdf_lineto,pdf_makespotcolor,pdf_moveto,%
-    pdf_open,pdf_open_CCITT,pdf_open_file,pdf_open_gif,%
-    pdf_open_image_file,pdf_open_jpeg,pdf_open_memory_image,%
-    pdf_open_pdi_page,pdf_open_png,pdf_open_tiff,pdf_place_image,%
-    pdf_rect,pdf_restore,pdf_rotate,pdf_save,pdf_scale,pdf_setcolor,%
-    pdf_setflat,pdf_setfont,pdf_setgray,pdf_setgray_fill,%
-    pdf_setlinecap,pdf_setlinejoin,pdf_setlinewidth,pdf_setmatrix,%
-    pdf_setpolydash,pdf_setrgbcolor,pdf_setrgbcolor_fill,%
-    pdf_set_border_color,pdf_set_border_dash,pdf_set_border_style,%
-    pdf_set_duration,pdf_set_font,pdf_set_horiz_scaling,%
-    pdf_set_info_author,pdf_set_info_creator,pdf_set_info_keywords,%
-    pdf_set_info_title,pdf_set_leading,pdf_set_parameter,%
-    pdf_set_text_rendering,pdf_set_text_rise,pdf_set_text_matrix,%
-    pdf_set_word_spacing,pdf_show,pdf_show_boxed,pdf_show_xy,%
-    pdf_stringwidth,pdf_stroke,pdf_translate,%
-  %--- pfpro functions
-    pfpro_init,pfpro_cleanup,pfpro_process,pfpro_process_raw,%
-  %--- pgsql functions
-    pg_close,pg_affected_rows,pg_connect,pg_dbname,pg_end_copy,%
-    pg_query,pg_fetch_array,pg_fetch_object,pg_fetch_row,%
-    pg_field_name,pg_field_num,pg_field_prtlen,pg_field_size,%
-    pg_free_result,pg_last_oid,pg_host,pg_last_notice,pg_lo_close,%
-    pg_lo_export,pg_lo_import,pg_lo_open,pg_lo_read,pg_lo_seek,%
-    pg_lo_read_all,pg_lo_unlink,pg_lo_write,pg_num_fields,%
-    pg_options,pg_pconnect,pg_port,pg_put_line,pg_fetch_result,%
-    pg_client_encoding,pg_trace,pg_tty,pg_untrace,pg_get_result,%
-    pg_send_query,pg_cancel_query,pg_connection_busy,%
-    pg_connection_status,pg_copy_from,pg_copy_to,pg_escape_bytea,%
-    pg_result_error,%
-  %--- posix functions
-    posix_kill,posix_getpid,posix_getppid,posix_getuid,%
-    posix_getgid,posix_getegid,posix_setuid,posix_seteuid,%
-    posix_setegid,posix_getgroups,posix_getlogin,posix_getpgrp,%
-    posix_setpgid,posix_getpgid,posix_getsid,posix_uname,%
-    posix_ctermid,posix_ttyname,posix_isatty,posix_getcwd,%
-    posix_getgrnam,posix_getgrgid,posix_getpwnam,posix_getpwuid,%
-  %--- printer functions
-    printer_open,printer_abort,printer_close,printer_write,%
-    printer_set_option,printer_get_option,printer_create_dc,%
-    printer_start_doc,printer_end_doc,printer_start_page,%
-    printer_create_pen,printer_delete_pen,printer_select_pen,%
-    printer_delete_brush,printer_select_brush,printer_create_font,%
-    printer_select_font,printer_logical_fontheight,%
-    printer_draw_rectangle,printer_draw_elipse,printer_draw_text,%
-    printer_draw_chord,printer_draw_pie,printer_draw_bmp,%
-  %--- pspell functions
-    pspell_add_to_personal,pspell_add_to_session,pspell_check,%
-    pspell_config_create,pspell_config_ignore,pspell_config_mode,%
-    pspell_config_repl,pspell_config_runtogether,%
-    pspell_new,pspell_new_config,pspell_new_personal,%
-    pspell_store_replacement,pspell_suggest,%
-  %--- qtdom functions
-    qdom_tree,qdom_error,%
-  %--- readline functions
-    readline,readline_add_history,readline_clear_history,%
-    readline_info,readline_list_history,readline_read_history,%
-  %--- recode functions
-    recode_string,recode,recode_file,%
-  %--- regex functions
-    ereg,ereg_replace,eregi,eregi_replace,split,spliti,sql_regcase,%
-  %--- sem functions
-    sem_get,sem_acquire,sem_release,sem_remove,shm_attach,%
-    shm_remove,shm_put_var,shm_get_var,shm_remove_var,ftok,%
-  %--- sesam functions
-    sesam_connect,sesam_disconnect,sesam_settransaction,%
-    sesam_rollback,sesam_execimm,sesam_query,sesam_num_fields,%
-    sesam_diagnostic,sesam_fetch_result,sesam_affected_rows,%
-    sesam_field_array,sesam_fetch_row,sesam_fetch_array,%
-    sesam_free_result,%
-  %--- session functions
-    session_start,session_destroy,session_name,session_module_name,%
-    session_id,session_register,session_unregister,session_unset,%
-    session_get_cookie_params,session_set_cookie_params,%
-    session_encode,session_set_save_handler,session_cache_limiter,%
-    session_write_close,%
-  %--- shmop functions
-    shmop_open,shmop_read,shmop_write,shmop_size,shmop_delete,%
-  %--- snmp functions
-    snmpget,snmpset,snmpwalk,snmpwalkoid,snmp_get_quick_print,%
-    snmprealwalk,%
-  %--- strings functions
-    addcslashes,addslashes,bin2hex,chop,chr,chunk_split,%
-    count_chars,crc32,crypt,echo,explode,get_html_translation_table,%
-    hebrev,hebrevc,htmlentities,htmlspecialchars,implode,join,%
-    localeconv,ltrim,md5,md5_file,metaphone,nl_langinfo,nl2br,ord,%
-    print,printf,quoted_printable_decode,quotemeta,str_rot13,rtrim,%
-    setlocale,similar_text,soundex,sprintf,strncasecmp,strcasecmp,%
-    strcmp,strcoll,strcspn,strip_tags,stripcslashes,stripslashes,%
-    strlen,strnatcmp,strnatcasecmp,strncmp,str_pad,strpos,strrchr,%
-    strrev,strrpos,strspn,strstr,strtok,strtolower,strtoupper,%
-    strtr,substr,substr_count,substr_replace,trim,ucfirst,ucwords,%
-    vsprintf,wordwrap,%
-  %--- swf functions
-    swf_openfile,swf_closefile,swf_labelframe,swf_showframe,%
-    swf_getframe,swf_mulcolor,swf_addcolor,swf_placeobject,%
-    swf_removeobject,swf_nextid,swf_startdoaction,%
-    swf_actiongeturl,swf_actionnextframe,swf_actionprevframe,%
-    swf_actionstop,swf_actiontogglequality,swf_actionwaitforframe,%
-    swf_actiongotolabel,swf_enddoaction,swf_defineline,%
-    swf_definepoly,swf_startshape,swf_shapelinesolid,%
-    swf_shapefillsolid,swf_shapefillbitmapclip,%
-    swf_shapemoveto,swf_shapelineto,swf_shapecurveto,%
-    swf_shapearc,swf_endshape,swf_definefont,swf_setfont,%
-    swf_fontslant,swf_fonttracking,swf_getfontinfo,swf_definetext,%
-    swf_definebitmap,swf_getbitmapinfo,swf_startsymbol,%
-    swf_startbutton,swf_addbuttonrecord,swf_oncondition,%
-    swf_viewport,swf_ortho,swf_ortho2,swf_perspective,swf_polarview,%
-    swf_pushmatrix,swf_popmatrix,swf_scale,swf_translate,swf_rotate,%
-  %--- sybase functions
-    sybase_affected_rows,sybase_close,sybase_connect,%
-    sybase_fetch_array,sybase_fetch_field,sybase_fetch_object,%
-    sybase_field_seek,sybase_free_result,sybase_get_last_message,%
-    sybase_min_error_severity,sybase_min_message_severity,%
-    sybase_num_fields,sybase_num_rows,sybase_pconnect,sybase_query,%
-    sybase_select_db,%
-  %--- uodbc functions
-    odbc_autocommit,odbc_binmode,odbc_close,odbc_close_all,%
-    odbc_connect,odbc_cursor,odbc_do,odbc_error,odbc_errormsg,%
-    odbc_execute,odbc_fetch_into,odbc_fetch_row,odbc_fetch_array,%
-    odbc_fetch_object,odbc_field_name,odbc_field_num,%
-    odbc_field_len,odbc_field_precision,odbc_field_scale,%
-    odbc_longreadlen,odbc_num_fields,odbc_pconnect,odbc_prepare,%
-    odbc_result,odbc_result_all,odbc_rollback,odbc_setoption,%
-    odbc_tableprivileges,odbc_columns,odbc_columnprivileges,%
-    odbc_primarykeys,odbc_foreignkeys,odbc_procedures,%
-    odbc_specialcolumns,odbc_statistics,%
-  %--- url functions
-    base64_decode,base64_encode,parse_url,rawurldecode,rawurlencode,%
-    urlencode,%
-  %--- var functions
-    doubleval,empty,floatval,gettype,get_defined_vars,%
-    import_request_variables,intval,is_array,is_bool,is_double,%
-    is_int,is_integer,is_long,is_null,is_numeric,is_object,is_real,%
-    is_scalar,is_string,isset,print_r,serialize,settype,strval,%
-    unset,var_dump,var_export,is_callable,%
-  %--- vpopmail functions
-    vpopmail_add_domain,vpopmail_del_domain,%
-    vpopmail_add_domain_ex,vpopmail_del_domain_ex,%
-    vpopmail_add_user,vpopmail_del_user,vpopmail_passwd,%
-    vpopmail_auth_user,vpopmail_alias_add,vpopmail_alias_del,%
-    vpopmail_alias_get,vpopmail_alias_get_all,vpopmail_error,%
-  %--- w32api functions
-    w32api_set_call_method,w32api_register_function,%
-    w32api_deftype,w32api_init_dtype,%
-  %--- wddx functions
-    wddx_serialize_value,wddx_serialize_vars,wddx_packet_start,%
-    wddx_add_vars,wddx_deserialize,%
-  %--- xml functions
-    xml_parser_create,xml_set_object,xml_set_element_handler,%
-    xml_set_processing_instruction_handler,xml_set_default_handler,%
-    xml_set_notation_decl_handler,%
-    xml_parse,xml_get_error_code,xml_error_string,%
-    xml_get_current_column_number,xml_get_current_byte_index,%
-    xml_parser_free,xml_parser_set_option,xml_parser_get_option,%
-    utf8_encode,xml_parser_create_ns,%
-    xml_set_start_namespace_decl_handler,%
-  %--- xslt functions
-    xslt_set_log,xslt_create,xslt_errno,xslt_error,xslt_free,%
-    xslt_set_sax_handler,xslt_set_scheme_handler,%
-    xslt_set_base,xslt_set_encoding,xslt_set_sax_handlers,%
-  %--- yaz functions
-    yaz_addinfo,yaz_close,yaz_connect,yaz_errno,yaz_error,yaz_hits,%
-    yaz_database,yaz_range,yaz_record,yaz_search,yaz_present,%
-    yaz_scan,yaz_scan_result,yaz_ccl_conf,yaz_ccl_parse,%
-    yaz_wait,yaz_sort,%
-  %--- zip functions
-    zip_close,zip_entry_close,zip_entry_compressedsize,%
-    zip_entry_filesize,zip_entry_name,zip_entry_open,zip_entry_read,%
-    zip_read,%
-  %--- zlib functions
-    gzclose,gzeof,gzfile,gzgetc,gzgets,gzgetss,gzopen,gzpassthru,%
-    gzread,gzrewind,gzseek,gztell,gzwrite,readgzfile,gzcompress,%
-    gzdeflate,gzinflate,gzencode,},%
-   sensitive,%
-   morecomment=[l]\#,%
-   morecomment=[l]//,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]",%
-   morestring=[b]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Plasm}
-%
-% \lstthanks{Alessio~Pace}{}{2004/09/01} provided the following definition.
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Plasm}%
-  {sensitive=false,%
-   morekeywords={aa,abs,ac,acolor,acos,actor,al,alias,align,and,%
-      animation,animation,appearance,apply,ar,arc,as,asin,assoc,atan,%
-      axialcamera,axialcameras,basehermite,bbox,bbox,bernstein,%
-      bernsteinbasis,bezier,beziercurve,beziermanifold,bezierstripe,%
-      beziersurface,bigger,biggest,bilinearsurface,binormal,%
-      biquadraticsurface,black,blend,blue,bottom,box,brown,bspize,%
-      bspline,bsplinebasis,c,cabinet,camera,cart,case,cat,catch,ceil,%
-      centeredcameras,centralcavalier,char,charseq,choose,circle,%
-      circumference,class,cmap,color,comp,computecoords,cone,%
-      conicalsurface,cons,control,convexcoords,convexhull,coonspatch,%
-      copy,cos,cosh,crease,crosspolytope,cube,cubiccardinal,%
-      cubiccardinalbasis,cubichermite,cubicubspline,cubicubsplinebasis,%
-      cuboid,curl,curvature,curve2cspath,curve2mapvect,cyan,cylinder,%
-      cylindricalsurface,d,deboor,def,depol,depth_sort,depth_test,%
-      derbernstein,derbernsteinbase,derbezier,determinant,difference,%
-      differencepr,dim,dimetric,dirproject,displaygraph,displaynubspline,%
-      displaynurbspline,distl,distr,div,divergence,dodecahedron,dot,down,%
-      dp,drawedges,drawforks,drawtree,ds,dsphere,dump,dumprep,ellipse,%
-      embed,end,eq,ex,exp,explode,export,extract_bodies,extract_polygons,%
-      extract_wires,extrude,extrusion,fact,false,feature,ff,fillcolor,%
-      filter,finitecone,first,flash,flashani,floor,fontcolor,fontheight,%
-      fontspacing,fontwidth,fractalsimplex,frame,frame,frameflash,fromto,%
-      gausscurvature,ge,grad,gradient,gradmap,gray,green,gt,help,hermite,%
-      hermitebasis,hermitesurface,hexahedron,icosahedron,id,idnt,if,in,%
-      inarcs,innerprod,inset,insl,insr,intersection,intersectionpr,%
-      intervals,intmax,intmin,intsto,inv,isa,isanimpol,isbool,ischar,%
-      isclosedshape,iscloseto,isempty,iseven,isfun,isfunvect,isge,isgt,%
-      isint,isintneg,isinto,isintpos,isle,islt,ismat,ismatof,isnat,%
-      isnull,isnum,isnumneg,isnumpos,isodd,isometric,isorthoshape,ispair,%
-      ispoint,ispointseq,ispol,ispoldim,ispolytope,ispurepol,isreal,%
-      isrealneg,isrealpos,isrealvect,isseq,isseqof,isshape,issimplex,%
-      issqrmat,isstring,isvect,iszero,jacobian,join,joints,k,last,le,%
-      left,leftcavalier,len,less,lesseq,lex,lift,light,linecolor,%
-      linesize,list,ln,load,loadlib,loop,lt,lxmy,magenta,map,mapshapes,%
-      markersize,mat,matdotprod,material,mathom,max,mean,meanpoint,med,%
-      merge,mesh,min,minkowski,mirror,mixedprod,mk,mkframe,mkpol,%
-      mkvector,mkversork,mod,model,move,mul,multextrude,mxby,mxmy,mxty,%
-      myfont,n,nat2string,neq,ngon,norm2,normalmap,not,nu_grid,nubspline,%
-      nubsplineknots,nurbspline,nurbsplineknots,octahedron,offset,%
-      onepoint,open,optimize,or,orange,ord,ortho,orthoproject,orthox,%
-      orthoy,orthoz,outarcs,outerloop,outerwarp,pairdiff,parallel,%
-      pascaltriangle,pdiff,pdifference,permutahedron,permutations,%
-      perspective,perspective,pi,pivotop,plane,planemapping,pmap,%
-      points2shape,polar,polyline,polymarker,polypoint,power,powerset,%
-      presort,principalnormal,print,prism,profileprodsurface,%
-      progressivesum,project,projection,purple,pyramid,q,quadarray,%
-      quadmesh,quote,r,raise,range,rationalbezier,rationalblend,%
-      rationalbspline,rationalize,red,rev,reverse,rgbacolor,right,%
-      rightcavalier,ring,rn,rotatedtext,rotationalsurface,rotn,rtail,%
-      ruledsurface,rxmy,s,save,scalarmatprod,scalarvectprod,schlegel2d,%
-      schlegel3d,sdifference,sdifferencepr,segment,sel,setand,setdiff,%
-      setfontcolor,setor,setxor,sex,shape_0,shape_1,shape2points,%
-      shape2pol,shapeclosed,shapecomb,shapediff,shapedist,%
-      shapeinbetweening,shapeinf,shapejoin,shapelen,shapenorm,%
-      shapenormal,shapeprod,shaperot,shapesum,shapesup,shapezero,shift,%
-      showprop,sign,signal,simplex,simplexpile,sin,sinh,size,skeleton,%
-      skew,smaller,smallest,solidifier,solidify,sort,sphere,spline,%
-      splinesampling,splitcells,splitpols,sqr,sqrt,star,string,%
-      stringtokens,struct,sub,svg,sweep,t,tail,tan,tangent,tanh,%
-      tensorprodsurface,tetrahedron,text,texture,textwithattributes,%
-      thinsolid,threepoints,time,tmax,tmin,top,torus,torusmap,trace,%
-      trans,tree,trianglefan,trianglestripe,trimetric,true,truncone,tt,%
-      tube,twopoints,uk,ukpol,ukpolf,union,unionpr,unitvect,unprune,up,%
-      vect2dtoangle,vect2mat,vectdiff,vectnorm,vectprod,vectsum,view,%
-      viewmodel,viewmodel,vrml,warp,warp,where,white,with,xcavalier,xor,%
-      xquadarray,xx,ycavalier,yellow},%
-   moredirectives={loadlib},%
-   otherkeywords={-,+,*,**,/,~,|,..,^,\&,\&\&,\#,\#\#},%
-   morecomment=[s]{\%}{\%},%
-   morestring=[b]',%
-   literate={~}{{$\sim$}}{1} {^}{$\wedge$}{1},%
-  }[keywords,directives,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{PL/I}
-%
-% Found the data in
-% \begin{itemize}
-% \item
-%		\textsc{Bernhard Fischer, Herman Fischer}:
-%		\textbf{Structured Programming in PL/I and PL/C};
-%		Copyright {\copyright} 1976 by Marcel Dekker, Inc.;
-%		ISBN 0-8247-6394-7
-% \end{itemize}
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{PL/I}%
-  {morekeywords={ABS,ATAN,AUTOMATIC,AUTO,ATAND,BEGIN,BINARY,BIN,BIT,%
-      BUILTIN,BY,CALL,CHARACTER,CHAR,CHECK,COLUMN,COL,COMPLEX,CPLX,%
-      COPY,COS,COSD,COSH,DATA,DATE,DECIMAL,DEC,DECLARE,DCL,DO,EDIT,%
-      ELSE,END,ENDFILE,ENDPAGE,ENTRY,EXP,EXTERNAL,EXT,FINISH,FIXED,%
-      FIXEDOVERFLOW,FOFL,FLOAT,FORMAT,GET,GO,GOTO,IF,IMAG,INDEX,%
-      INITIAL,INIT,INTERNAL,INT,LABEL,LENGTH,LIKE,LINE,LIST,LOG,LOG2,%
-      LOG10,MAIN,MAX,MIN,MOD,NOCHECK,NOFIXEDOVERFLOW,NOFOFL,NOOVERFLOW,%
-      NOOFL,NOSIZE,NOUNDERFLOW,NOUFL,NOZERODIVIDE,NOZDIV,ON,OPTIONS,%
-      OVERFLOW,OFL,PAGE,PICTURE,PROCEDURE,PROC,PUT,READ,REPEAT,RETURN,%
-      RETURNS,ROUND,SIN,SIND,SINH,SIZE,SKIP,SQRT,STATIC,STOP,STRING,%
-      SUBSTR,SUM,SYSIN,SYSPRINT,TAN,TAND,TANH,THEN,TO,UNDERFLOW,UFL,%
-      VARYING,WHILE,WRITE,ZERODIVIDE,ZDIV},%
-   sensitive=f,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{PostScript}
-%
-% Herbert Voss provided the following definition, written by
-% \lstthanks{Christophe~Jorssen}{}{2004/09/17} provided the following definition.
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% PostScript language definition (c) 2005 Christophe Jorssen.
-%%
-\lst@definelanguage{PostScript}{%
-  morekeywords={abs,add,aload,anchorsearch,and,arc,arcn,arct,arcto,array,ashow,
-    astore,atan,awidthshow,begin,bind,bitshift,bytesavailable,cachestatus,
-    ceiling,charpath,clear,cleartomark,cleardictstack,clip,clippath,closefile,
-    closepath,colorimage,concat,concatmatrix,condition,copy,copypage,cos,count,
-    countdictstack,countexecstack,counttomark,cshow,currentblackgeneration,
-    currentcacheparams,currentcmykcolor,currentcolor,currentcolorrendering,
-    currentcolorscreen,currentcolorspace,currentcolortransfer,currentcontext,
-    currentdash,currentdevparams,currentdict,currentfile,currentflat,currentfont,
-    currentglobal,currentgray,currentgstate,currenthalftone,currenthalftonephase,
-    currenthsbcolor,currentlinecap,currentlinejoin,currentlinewidth,currentmatrix,
-    currentmiterlimit,currentobjectformat,currentpacking,currentpagedevice,
-    currentpoint,currentrgbcolor,currentscreen,currentshared,currentstrokeadjust,
-    currentsystemparams,currenttransfer,currentundercolorremoval,currentuserparams,
-    curveto,cvi,cvlit,cvn,cvr,cvrs,cvs,cvx,def,defaultmatrix,definefont,
-    defineresource,defineusername,defineuserobject,deletefile,detach,deviceinfo,
-    dict,dictstack,div,dtransform,dup,
-    echo,eexec,end,eoclip,eofill,eoviewclip,eq,erasepage,errordict,exch,exec,
-    execform,execstack,execuserobject,executeonly,executive,exit,
-    exp,false,file,filenameforall,fileposition,fill,filter,findencoding,findfont,
-    findresource,flattenpath,floor,flush,flushfile,FontDirectory,for,forall,fork,ge,
-    get,getinterval,globaldict,GlobalFontDirectory,glyphshow,grestore,grestoreall,
-    gsave,gstate,gt,identmatrix,idiv,idtransform,if,ifelse,image,
-    imagemask,index,ineofill,infill,initclip,initgraphics,initmatrix,initviewclip,
-    instroke,internaldict,inueofill,inufill,inustroke,
-    invertmatrix,ISOLatin1Encoding,itransform,join,kshow,
-    known,languagelevel,le,length,lineto,ln,load,lock,log,loop,lt,
-    makefont,makepattern,mark,matrix,maxlength,mod,monitor,moveto,mul,ne,neg,
-    newpath,noaccess,not,notify,null,nulldevice,or,packedarray,
-    pathbbox,pathforall,pop,print,printobject,product,prompt,pstack,put,putinterval,
-    quit,rand,rcurveto,read,readhexstring,readline,readonly,readstring,
-    realtime,rectclip,rectfill,rectstroke,rectviewclip,renamefile,repeat,resetfile,
-    resourceforall,resourcestatus,restore,reversepath,revision,rlineto,rmoveto,roll,
-    rootfont,rotate,round,rrand,run,save,scale,scalefont,scheck,search,selectfont,
-    serialnumber,setbbox,setblackgeneration,setcachedevice,setcachedevice2,
-    setcachelimit,setcacheparams,setcharwidth,setcmykcolor,setcolor,
-    setcolorrendering,setcolorscreen,setcolorspace,setcolortransfer,setdash,
-    setdevparams,setfileposition,setflat,setfont,setglobal,setgray,setgstate,
-    sethalftone,sethalftonephase,sethsbcolor,setlinecap,setlinejoin,setlinewidth,
-    setmatrix,setmiterlimit,setobjectformat,setoverprint,setpacking,setpagedevice,
-    setpattern,setrgbcolor,setscreen,setshared,setstrokeadjust,setsystemparams,
-    settransfer,setucacheparams,setundercolorremoval,setuserparams,setvmthreshold,
-    shareddict,show,showpage,sin,sqrt,srand,stack,
-    StandardEncoding,start,startjob,status,statusdict,stop,stopped,store,string,
-    stringwidth,stroke,strokepath,sub,systemdict,transform,
-    translate,true,truncate,type,token,uappend,ucache,ucachestatus,
-    ueofill,ufill,undef,
-    upath,userdict,UserObjects,
-    usertime,ustroke,ustrokepath,version,viewclip,viewclippath,vmreclaim,
-    vmstatus,wait,wcheck,where,widthshow,write,writehexstring,writeobject,
-    writestring,wtranslation,xcheck,xor,xshow,xyshow,yield,yshow},
-  sensitive,
-  morecomment=[l]\%}[keywords,comments]
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{POV-Ray}
-%
-% \lstthanks{Berthold~H\"ollmann}{bhoel@starship.python.net}{1999/04/15} sent
-% me the definition. But I removed |blankstring=false| and
-% |flexiblecolumns=true| from the driver since they have nothing to do with a
-% language definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% POV definition (c) 1999 Berthold H\"ollmann
-%%
-\lst@definelanguage{POV}%
-  {morekeywords={abs,absorption,acos,acosh,adaptive,adc_bailout,agate,%
-      agate_turb,all,alpha,ambient,ambient_light,angle,aperture,append,%
-      arc_angle,area_light,array,asc,asin,asinh,assumed_gamma,atan,%
-      atan2,atanh,average,background,bezier_spline,bicubic_patch,%
-      black_hole,blob,blue,blur_samples,bounded_by,box,boxed,bozo,%
-      break,brick,brick_size,brightness,brilliance,bumps,bump_map,%
-      bump_size,camera,case,caustics,ceil,checker,chr,clipped_by,clock,%
-      clock_delta,color,color_map,colour,colour_map,component,%
-      composite,concat,cone,confidence,conic_sweep,control0,control1,%
-      cos,cosh,count,crackle,crand,cube,cubic,cubic_spline,cubic_wave,%
-      cylinder,cylindrical,debug,declare,default,defined,degrees,%
-      density,density_file,density_map,dents,difference,diffuse,%
-      dimensions,dimension_size,direction,disc,distance,%
-      distance_maximum,div,eccentricity,else,emission,end,error,%
-      error_bound,exp,extinction,fade_distance,fade_power,falloff,%
-      falloff_angle,false,fclose,file_exists,filter,finish,fisheye,%
-      flatness,flip,floor,focal_point,fog,fog_alt,fog_offset,fog_type,%
-      fopen,frequency,gif,global_settings,gradient,granite,%
-      gray_threshold,green,height_field,hexagon,hf_gray_16,hierarchy,%
-      hollow,hypercomplex,if,ifdef,iff,ifndef,image_map,include,int,%
-      interior,interpolate,intersection,intervals,inverse,ior,irid,%
-      irid_wavelength,jitter,julia_fractal,lambda,lathe,leopard,%
-      light_source,linear_spline,linear_sweep,local,location,log,%
-      looks_like,look_at,low_error_factor,macro,mandel,map_type,marble,%
-      material,material_map,matrix,max,max_intersections,max_iteration,%
-      max_trace_level,media,media_attenuation,media_interaction,merge,%
-      mesh,metallic,min,minimum_reuse,mod,mortar,nearest_count,no,%
-      normal,normal_map,no_shadow,number_of_waves,object,octaves,off,%
-      offset,omega,omnimax,on,once,onion,open,orthographic,panoramic,%
-      perspective,pgm,phase,phong,phong_size,pi,pigment,pigment_map,%
-      planar,plane,png,point_at,poly,polygon,poly_wave,pot,pow,ppm,%
-      precision,prism,pwr,quadratic_spline,quadric,quartic,quaternion,%
-      quick_color,quick_colour,quilted,radial,radians,radiosity,radius,%
-      rainbow,ramp_wave,rand,range,ratio,read,reciprocal,%
-      recursion_limit,red,reflection,reflection_exponent,refraction,%
-      render,repeat,rgb,rgbf,rgbft,rgbt,right,ripples,rotate,roughness,%
-      samples,scale,scallop_wave,scattering,seed,shadowless,sin,%
-      sine_wave,sinh,sky,sky_sphere,slice,slope_map,smooth,%
-      smooth_triangle,sor,specular,sphere,spherical,spiral1,spiral2,%
-      spotlight,spotted,sqr,sqrt,statistics,str,strcmp,strength,strlen,%
-      strlwr,strupr,sturm,substr,superellipsoid,switch,sys,t,tan,tanh,%
-      text,texture,texture_map,tga,thickness,threshold,tightness,tile2,%
-      tiles,torus,track,transform,translate,transmit,triangle,%
-      triangle_wave,true,ttf,turbulence,turb_depth,type,u,%
-      ultra_wide_angle,undef,union,up,use_color,use_colour,use_index,%
-      u_steps,v,val,variance,vaxis_rotate,vcross,vdot,version,vlength,%
-      vnormalize,vrotate,v_steps,warning,warp,water_level,waves,while,%
-      width,wood,wrinkles,write,x,y,yes,z},%
-   moredirectives={break,case,debug,declare,default,else,end,fclose,%
-      fopen,local,macro,read,render,statistics,switch,undef,version,%
-      warning,write},%
-   moredelim=*[directive]\#,%
-   sensitive,%
-   morecomment=[l]//,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[d]",%
-  }[keywords,directives,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Prolog}
-%
-% \lsthelper{Dominique~de~Waleffe}{ddw@miscrit.be}{1997/11/24}{Prolog} mailed
-% me the data for Prolog. He took the keywords from the \textsf{LGrind}
-% language definition file.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Prolog definition (c) 1997 Dominique de Waleffe
-%%
-\lst@definelanguage{Prolog}%
-  {morekeywords={op,mod,abort,ancestors,arg,ascii,ask,assert,asserta,%
-      assertz,atom,atomic,char,clause,close,concat,consult,ed,ef,em,%
-      eof,fail,file,findall,write,functor,getc,integer,is,length,%
-      listing,load,name,nl,nonvar,not,numbervars,op,or,pp,prin,print,%
-      private,prompt,putc,ratom,read,read_from_this_file,rename,repeat,%
-      retract,retractall,save,see,seeing,seen,sh,skip,statistics,%
-      subgoal_of,system,tab,tell,telling,time,told,trace,true,unload,%
-      untrace,var,write},%
-   sensitive=f,%
-   morecomment=[l]\%,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[bd]",%
-   morestring=[bd]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Promela}
-%
-% Thanks to \lstthanks{William~Thimbleby}{-}{1997/11/24}{Promela} for this
-% language definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Promela definition (c) 2004 William Thimbleby
-%%
-\lst@definelanguage{Promela}
-  {morekeywords={active,assert,atomic,bit,bool,break,byte,chan,d_step,%
-      Dproctype,do,else,empty,enabled,fi,full,goto,hidden,if,init,int,%
-      len,mtype,nempty,never,nfull,od,of,pcvalue,printf,priority,%
-      proctype,provided,run,short,skip,timeout,typedef,unless,unsigned,%
-      xr,xs,true,false,inline,eval},%
-   moredirectives={define,ifdef,ifndef,if,if,else,endif,undef,include},%
-   moredelim=*[directive]\#,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]"%
-  }[keywords,comments,strings,directives]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{PSTricks}
-%
-% PSTricks is a \TeX\ macro package bundle.
-% \lstthanks{Herbert~Voss}{}{2004/09/17} provided the following definition.
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% PSTricks definition (c) 2006 Herbert Voss
-%%
-\lst@definelanguage{PSTricks}%
-  {morekeywords={%
-    begin,end,definecolor,multido,%
-    KillGlue,DontKillGlue,pslbrace,bsrbrace,psscalebox,psset,pstVerb,pstverb,%
-    pst@def,,psframebox,psclip,endclip,endpspicture,psframe,
-%%    pspicture,%
-    multirput,multips,Rput,rput,uput,cput,lput,%
-    newrgbcolor,newgray,newcmykcolor,
-%%
-%% pstricks-add
-    psStep,psgraph,psbrace,psPrintValue,
-%%
-%% pst-plot
-    psvlabel,pshlabel,psplot,psline,pscustom,pscurve,psccurve,%
-    readdata,savedata,fileplot,dataplot,listplot,%
-    psecurce,psgraph,parametricplot,%
-    psellipse,psaxes,ncline,nccurve,psbezier,parabola,%
-    qdisk,qline,clipbox,endpsclip,%
-    psgrid,pscircle,pscirclebox,psdiabox,pstribox,%
-    newpsfontdot,psdot,psdots,%
-    pspolygon,psdiamond,psoval,pstriangle,%
-    psarc,psarcn,psellipticarc,psellipticarcn,pswedge,psellipticwedge,
-    pcline,pcdiag,pcdiagg,pccurve,pccurve,pcecurve,%
-    scalebox,scaleboxto,psmathboxtrue,everypsbox,psverbboxtrue,overlaybox,%
-    psoverlay,putoverlaybox,%
-    newpsstyle,newpsobject,%
-    moveto,newpath,closepath,stroke,fill,gsave,grestore,msave,mrestore,translate,scale,%
-    swapaxes,rotate,openshadow,closedshadow,movepath,lineto,rlineto,curveto,rcurveto,%
-    code,dim,coor,rcoor,file,arrows,setcolor,%
-    rotateleft,rotateright,rotatedown,%
-%%
-%% pst-node
-    nput,naput,nbput,ncput,%
-    ncarc,ncbox,ncangle,ncangles,ncloop,ncdiag,ncdiagg,ncarcbox,ncbar,%
-    cnodeput,nccircle,%
-    pnode,rnode,Rnode,Cnode,cnode,fnode,%
-    circlenode,ovalnode,trinode,dianode,%
-    psmatrix,endpsmatrix,psspan,%
-%%
-%% pst-tree
-    pstree,Tcircle,TCircle,Ttri,Tn,TC,Tc,Tfan,TR,Tr,Tdia,Toval,Tdot,Tp,Tf,%
-    skiplevel,skiplevels,endskiplevels,tspace,tlput,%
-%%
-%% pst-text
-    pscharpath,pstextpath,
-%%
-%% pst-barcode
-    psbarcode,
-%%
-%% pst-coil
-    psboxfill,pscoil,psCoil,pszigzag,nccoil,
-    psshadow,pstilt,psTilt,ThreeDput,
-%%
-%% pst-gr3d
-    PstGridThreeDNodeProcessor,%
-%%
-%% pst-vue3d
-    PstGridThreeD,
-    AxesThreeD,LineThreeD,DieThreeD,FrameThreeD,SphereCircleThreeD,SphereMeridienThreeD,
-    QuadrillageThreeD,TetraedreThreeD,PyramideThreeD,ConeThreeD,CylindreThreeD,
-    DodecahedronThreeD,ConeThreeD,SphereThreeD,SphereInverseThreeD,DemiSphereThreeD,
-    SphereCreuseThreeD,SphereCircledThreeD,PortionSphereThreeD,pNodeThreeD,CubeThreeD,%
-%%
-%% pst-3dplot
-    pstThreeDCoor,pstThreeDDot,pstThreeDTriangle,pstThreeDCircle,pstPlanePut,%
-    pstThreeDBox,pstThreeDEllipse,pstThreeDLine,pstThreeDPut,%
-    pstThreeDNode,pstThreeDSquare,psplotThreeD,parametricplotThreeD,fileplotThreeD,%
-    dataplotThreeD,pstScalePoints,%
-%%
-%% pst-circ
-    resistor,battery,Ucc,Icc,capacitor,coil,diode,Zener,LED,lamp,switch,wire,tension,
-    circledipole,multidipole,OA,transistor,Tswitch,potentiometer,transformer,
-    optoCoupler,logic,
-%%
-%% pst-eucl
-    pstTriangle,pstMediatorAB,pstInterLL,pstMiddleAB,pstProjection,pstCircleOA,pstLineAB,%
-%%
-%% pst-func
-    psBessel,psPolynomial,psFourier,psGaussI,psGauss,psSi,pssi,psCi,psci,%
-%%
-%% pst-infixplot
-    psPlot,
-%%
-%% pst-ob3d
-    PstDie,PstCube,
-%%
-%% pst-poly
-    PstPolygon,pspolygonbox,
-%%
-%% pst-bar
-    psbarchart,readpsbardata,psbarscale,newpsbarstyle,%
-%%
-%% pst-lens
-    PstLens,%
-%%
-%% pst-geo
-    WorldMap,WorldMapII,WorldMapThreeD,WorldMapThreeDII,pnodeMap,MapPut,%
-%%
-%% pst-autoseg
-    asr,firstnode,merge,massoc,labelmerge,%
-%%
-%% gastex
-    node,imark,fmark,rmark,drawqbpedge,drawedge,drawloop,%
-%%
-%% pst-labo
-    Distillation,Ballon,
-%%
-%% pst-optic
-    lens,Transform,%
-%%
-%% pst-light3d
-    PstLightThreeDText,%
-%%
-%% calendrier
-    Calendrier,%
-%%
-%% pst-osci
-    Oscillo%
-  },%
-   sensitive,%
-   alsoother={0123456789$_},%
-   morecomment=[l]\% %
-  }[keywords,comments]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Python}
-%
-% \lstthanks{Michael~Weber}{mweber@informatik.hu-berlin.de}{1998/12/21} sent me
-% the definition. He got data from \textsc{Mark Lutz}: \textbf{Programming
-% Python}; O'Reilly 1996; ISBN 1-56592-197-6.
-% \lstthanks{Stephen Kelly}{-}{2007/01/14} reported some problems that indicated
-% that the comment definitions needed to be moved after the string definitions
-% to work correctly.
-%
-% In August 2013
-% \lstthanks{Alexis~Dimitriadis}{A.Dimitriadis@uu.nl}{2013/08/15} reworked
-% the definition by supplying the builtins.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Python definition (c) 1998 Michael Weber
-%% Additional definitions (2013) Alexis Dimitriadis
-%%
-\lst@definelanguage{Python}%
-  {morekeywords={access,and,break,class,continue,def,del,elif,else,%
-      except,exec,finally,for,from,global,if,import,in,is,lambda,not,%
-      or,pass,print,raise,return,try,while},%
-%    \end{macrocode}
-% Python has a long list of builtin-in functions
-% (\url{http://docs.python.org/2/library/functions.html}) and it is a good
-% idea to make them visible in printed code
-%    \begin{macrocode}
-  % Built-ins
-   morekeywords=[2]{abs,all,any,basestring,bin,bool,bytearray,callable,chr,
-     classmethod,cmp,compile,complex,delattr,dict,dir,divmod,enumerate,eval,
-     execfile,file,filter,float,format,frozenset,getattr,globals,hasattr,hash,
-     help,hex,id,input,int,isinstance,issubclass,iter,len,list,locals,long,map,
-     max,memoryview,min,next,object,oct,open,ord,pow,property,range,raw_input,
-     reduce,reload,repr,reversed,round,set,setattr,slice,sorted,staticmethod,str,
-     sum,super,tuple,type,unichr,unicode,vars,xrange,zip,apply,buffer,coerce,
-     intern},
-   sensitive=true,%
-   morecomment=[l]\#,%
-   morestring=[b]',%
-   morestring=[b]",%
-%    \end{macrocode}
-% According to PEP (Python Enhancement Proposals) comment should be
-% distinguished from documentation strings, so we define
-%    \begin{macrocode}
-   morecomment=[s]{'''}{'''},% used for documentation text (mulitiline strings)
-   morecomment=[s]{"""}{"""},% added by Philipp Matthias Hahn
-%    \end{macrocode}
-% \lsthelper{J\"urgen Dietel}{j.dietel@rz.rwth-aachen}{2015/05/05}{} provided
-% an example with a wrong representation of documentation strings, so the
-% two lines above got changed from |morestring| $\rightarrow$ |morecomment|.
-%
-% Python now supports so called \emph{raw strings} and also Unicode
-% strings. Here is the definition of these strings:
-%    \begin{macrocode}
-   morestring=[s]{r'}{'},% `raw' strings
-   morestring=[s]{r"}{"},%
-   morestring=[s]{r'''}{'''},%
-   morestring=[s]{r"""}{"""},%
-   morestring=[s]{u'}{'},% unicode strings
-   morestring=[s]{u"}{"},%
-   morestring=[s]{u'''}{'''},%
-   morestring=[s]{u"""}{"""}%
-  }%
-%    \end{macrocode}
-% \lsthelper{Philipp Matthias Hahn}{pmhahn@titan.lahn.de}{2002/04/18}{}
-% added the third comment. \lsthelper{eRreuR}{rogspr@newdeal.ch}{2002/05/28}
-% {probl\`eme avec "listings" et le langage Python} found a bug using Python
-% and \lsthelper{Nicolas Markey}{markey@lsv.ens-cachan.fr}{2002/05/29}
-% {listings and Python} informed me about the corresponding thread on
-% \texttt{fr.comp.text.tex} and provided the fix---adding \texttt{[b]} to
-% both \texttt{morestring} declarations.
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \begingroup
-% Alexis Dimitriadis also proposes the following configuration for printing
-% Python code which simulates colorizing the code as it's done by the IDLE
-% GUI:
-%    \begin{macrocode}
-%<*python-prf>
-%    \end{macrocode}
-%    \begin{macrocode}
-\usepackage{xcolor}
-\usepackage{textcomp}
-
-%% Actual colors from idlelib/config-highlight.def --> corrected to ``web-safe''
-%% strings  = #00aa00 / 0,170,0      (a darker green)
-%% builtins = #900090 / 144,0,144    (purple-ish)
-%% keywords = #FF7700 / 255,119,0    (quite close to plain `orange')
-%\definecolor{IDLEorange}{RGB}{255,119,0} % pretty close to real orange
-%\definecolor{IDLEpurple}{RGB}{144,0,144}
-%\definecolor{IDLEgreen}{RGB}{0,170,0}
-%\definecolor{IDLEred}{RGB}{221,0,0}
-%% Corrected to ``web-safe''
-%\definecolor{orange2}{RGB}{255,102,0}
-\definecolor{purple2}{RGB}{153,0,153} % there's actually no standard purple
-\definecolor{green2}{RGB}{0,153,0} % a darker green
-%\definecolor{red2}{RGB}{221,0,0}
-
-% Except for green and purple, the other colors are pretty good in standard
-% hue
-\lstdefinestyle{python-idle-code}{%
-  language=Python,                   % the language
-  basicstyle=\normalsize\ttfamily,   % size of the fonts for the code
-  % Color settings to match IDLE style
-  keywordstyle=\color{orange},       % core keywords
-  keywordstyle={[2]\color{purple2}}, % built-ins
-  stringstyle=\color{green2},
-  commentstyle=\color{red},
-  upquote=true,                      % requires textcomp
-}
-% Unimplemented IDLE syntax: function/class names being defined should be
-% blue
-%    \end{macrocode}
-% This code is provided in the file |listings-python.prf|, see section
-% 2.4.1 (Preferences) of the \packagename{listings} documentation.
-%    \begin{macrocode}
-%</python-prf>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Rexx}
-%
-% \lstthanks{Patrick~TJ~McPhee}{ptjm@interlog.com}{2003/10/24} provided this
-% definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% classic rexx listings definition
-%% by Patrick TJ McPhee <ptjm@interlog.com>
-%%
-\lst@definelanguage{Rexx}
-  {morekeywords={address,arg,call,do,drop,else,end,exit,if,iterate,%
-                 interpret,leave,nop,numeric,options,otherwise,parse,%
-                 procedure,pull,push,queue,return,say,signal,then,to,%
-                 trace,when},%
-   sensitive=false,%
-   morecomment=[n]{/*}{*/},%
-   morestring=[d]{'},%
-   morestring=[d]{"},%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Reduce}
-%
-% was provided by \lstthanks{Geraint~Paul~Bevan}{geraint@users.sf.net}
-% {2002/10/31}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Reduce definition (c) 2002 Geraint Paul Bevan
-%%
-\lst@definelanguage{Reduce}%
-  {morekeywords={%
-%% reserved identifiers
-	abs,acos,acosh,acot,acoth,acsc,acsch,%
-	adjprec,algebraic,algint,allbranch,allfac,and,%
-	antisymmetric,append,arglength,array,asec,asech,%
-	asin,asinh,atan,atan2,atanh,begin,bfspace,bye,%
-	card_no,ceiling,clear,clearrules,coeff,coeffn,%
-	cofactor,combineexpt,combinelogs,comment,comp,%
-	complex,conj,cons,cont,cos,cosh,cot,coth,cramer,%
-	cref,csc,csch,decompose,define,defn,deg,demo,den,%
-	depend,det,df,difference,dilog,display,div,do,e,%
-	echo,ed,editdef,ei,end,eps,eq,equal,erf,errcont,%
-	evallhseqp,eval_mode,even,evenp,exp,expandlogs,%
-	expr,expt,ezgcd,factor,factorial,factorize,fexpr,%
-	first,fix,fixp,floor,for,forall,foreach,fort,%
-	fort_width,freeof,fullroots,g,gcd,geq,go,goto,%
-	greaterp,high_pow,hypot,i,if,ifactor,impart,in,%
-	index,infinity,infix,input,int,integer,interpol,%
-	intstr,k,korder,lambda,lcm,lcof,length,leq,lessp,%
-	let,lhs,linear,linelength,lisp,list,listargp,%
-	listargs,ln,load,load_package,log,log10,logb,%
-	low_pow,lterm,macro,mainvar,mass,mat,match,%
-	mateigen,matrix,max,mcd,member,memq,min,minus,mkid,%
-	modular,msg,mshell,multiplicities,nat,neq,nero,%
-	nextprime,nil,nodepend,noncom,nonzero,nosplit,%
-	nospur,nullspace,num,numberp,odd,off,on,operator,%
-	or,order,ordp,out,output,part,pause,period,pf,pi,%
-	plus,precedence,precise,precision,pret,pri,primep,%
-	print_precision,procedure,product,quit,quotient,%
-	random,random_new_seed,rank,rat,ratarg,rational,%
-	rationalize,ratpri,real,rederr,reduct,remainder,%
-	remfac,remind,repart,repeat,rest,resultant,retry,%
-	return,reverse,revpri,rhs,rlisp88,%
-	root_multiplicity,round,roundall,roundbf,rounded,%
-	saveas,savestructr,scalar,sec,sech,second,set,%
-	setmod,setq,share,showrules,showtime,shut,sign,sin,%
-	sinh,smacro,solve,solvesingular,spur,sqrt,structr,%
-	sub,sum,symbolic,symmetric,t,tan,tanh,third,time,%
-	times,tp,tra,trace,trfac,trigform,trint,until,%
-	varname,vecdim,vector,weight,when,where,while,%
-	write,ws,wtlevel,%
-%% identifiers with spaces
-%%	for all,for each,go to,such that,%
-	},%
-  sensitive=false,%
-  morecomment=[l]\%,%
-  morecomment=[s]{COMMENT}{;},%
-  morecomment=[s]{COMMENT}{$},%
-  morestring="%
- }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{RSL}
-%
-% Thanks go to \lstthanks{Brian~Christensen}{}{2004/02/15}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% RSL definition (c) 2004 Brian Christensen
-%%
-\lst@definelanguage{RSL}%
-  {morekeywords={Bool,Char,devt_relation,Int,Nat,Real,Text,Unit,abs,any,%
-      as,axiom,card,case,channel,chaos,class,do,dom,elems,else,elsif,end,%
-      extend,false,for,hd,hide,if,in,inds,initialise,int,len,let,local,%
-      object,of,out,post,pre,read,real,rng,scheme,skip,stop,swap,%
-      test_case,theory,then,tl,true,type,until,use,value,variable,while,%
-      with,write},%
-literate=%
-{<}{$<$}{1}%
-{>}{$>$}{1}%
-{[}{$[$}{1}%%
-{]}{$]$}{1}%%
-{^}{{\mbox{$\widehat{\;}$}}}{1}%%
-{'}{{\raisebox{1ex}[1ex][0ex]{\protect\scriptsize$\prime$}}}{1}%%
-{||}{{\mbox{$\parallel$}}}{2}%%
-{|-}{$\vdash$}{1}%%
-{|=|}{{\mbox{$\lceil\!\rceil\!\!\!\!\!\!\;\lfloor\!\rfloor$}}}{1}%%
-{**}{$\uparrow$}{1}%
-{/\\}{$\wedge$}{1}%%
-{inter}{$\cap$}{1}%%
-{-\\}{$\lambda$}{1}%%
-{->}{$\rightarrow$}{1}%%
-{-m->}{{\mbox{$\rightarrow \hspace{-2.5\lst@width} _{m}\;$}}}{1}%
-{-~m->}{{\mbox{$\stackrel{\sim}{\mbox{$\rightarrow\hspace{-2.5\lst@width} _{m}\;$}}$}}}{1}%
-{-~->}{{\mbox{$\stackrel{\sim}{\rightarrow}$}}}{1}%%
-{-set}{\bf{-set}}{4}%%
-{-list}{{$^{\ast}$}}{1}%%
-{-inflist}{$^\omega$}{1}%
-{-infset}{{\mbox{{\bf -infset}}}}{7}%
-{\#}{$\circ$}{1}%
-{:-}{{\raisebox{.4ex}{\tiny $\bullet$}}}{1}%%
-{=}{$=$}{1}%%
-{==}{$==$}{2}%%
-{=>}{$\Rightarrow$}{1}%%
-{\ is\protect\^^M}{{$\;\equiv$}}{2}%
-{\ is\ }{{$\equiv$}}{3}%%
-{\ isin\protect\^^M}{$\;\in$}{2}%%
-{~}{$\sim$}{1}%%
-{~=}{$\neq$}{1}%%
-{~isin}{$\notin$}{1}%%
-{+>}{$\mapsto$}{1}%%
-{++}{}{1}%
-{|^|}{{\mbox{$\lceil\!\rceil$}}}{1}%%
-{\\/}{$\vee$}{1}%%
-{exists}{$\exists$}{1}%%
-{union}{$\cup$}{1}%%
-{>=}{$\geq$}{1}%%
-{><}{$\times$}{1}%%
-{>>}{$\supset$}{1}%
-{>>=}{$\supseteq$}{1}%%
-{<=}{$\leq$}{1}%%
-{<<}{$\subset$}{1}%
-{<.}{$\langle$}{1}%%
-{<<=}{$\subseteq$}{1}%%
-{<->}{$\leftrightarrow$}{1}%%
-{[=}{$\sqsubseteq$}{1}%%
-{\{=}{$\preceq$}{1}%%
-{\ all\protect\^^M}{$\forall$}{2}%%
-{\ all\ }{$\forall$}{3}%%
-{!!}{$\dagger$}{1}%%
-{always}{$\Box$}{1}%%
-{.>}{$\rangle$}{1}%%
-{`alpha}{$\alpha$}{1}%
-{`beta}{$\beta$}{1}%
-{`gamma}{$\gamma$}{1}%
-{`delta}{$\delta$}{1}%
-{`epsilon}{$\epsilon$}{1}%
-{`zeta}{$\zeta$}{1}%
-{`eta}{$\eta$}{1}%
-{`theta}{$\theta$}{1}%
-{`iota}{$\iota$}{1}%
-{`kappa}{$\kappa$}{1}%
-{`mu}{$\mu$}{1}%
-{`nu}{$\nu$}{1}%
-{`xi}{$\xi$}{1}%
-{`pi}{$\pi$}{1}%
-{`rho}{$\rho$}{1}%
-{`sigma}{$\sigma$}{1}%
-{`tau}{$\tau$}{1}%
-{`upsilon}{$\upsilon$}{1}%
-{`phi}{$\phi$}{1}%
-{`chi}{$\chi$}{1}%
-{`psi}{$\psi$}{1}%
-{`omega}{$\omega$}{1}%
-{`Gamma}{$\Gamma$}{1}%
-{`Delta}{$\Delta$}{1}%
-{`Theta}{$\Theta$}{1}%
-{`Lambda}{$\Lambda$}{1}%
-{`Xi}{$\Xi$}{1}%
-{`Pi}{$\Pi$}{1}%
-{`Sigma}{$\Sigma$}{1}%
-{`Upsilon}{$\Upsilon$}{1}%
-{`Phi}{$\Phi$}{1}%
-{`Psi}{$\Psi$}{1}%
-{`Omega}{$\Omega$}{1},%
-   sensitive=true,%
-   morecomment=[l]{--},%
-   morecomment=[s]{/*}{*/}%
-  }[keywords,comments]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Ruby}
-%
-% \lstthanks{Christian~Kaiser}{chk@combit.net}{2003/02/05} provided the initial
-% definition. \lstthanks{Xavier~Noria}{fxn@hashref.com}{2004/01/11} replaced
-% the keywords with the keywords from the at the time of writing current
-% stable Ruby version.  An erroneous string delimiter was removed following
-% a bug reported on comp.text.tex on 2006/09/01.
-%
-% Ruby supports string delimiters of the form \verb|%q!...!|, where \verb|!|
-% can be any character, or can be matched braces or parentheses or brackets.
-% The included string definitions include most of the common variants, but are
-% of course not comprehensive.
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Ruby}%
-  {morekeywords={__FILE__,__LINE__,BEGIN,END,alias,and,begin,break,%
-      case,class,def,defined?,do,else,elsif,end,ensure,false,for,%
-      if,in,module,next,nil,not,or,redo,rescue,retry,return,self,%
-      super,then,true,undef,unless,until,when,while,yield},%
-   sensitive=true,%
-   morecomment=[l]\#,%
-   morecomment=[l]\#\#,%
-   morecomment=[s]{=BEGIN}{=END},%
-   morestring=[b]',%
-   morestring=[b]",%
-   morestring=[s]{\%q/}{/},%
-   morestring=[s]{\%q!}{!},%
-   morestring=[s]{\%q\{}{\}},%
-   morestring=[s]{\%q(}{)},%
-   morestring=[s]{\%q[}{]},%
-   morestring=[s]{\%q-}{-},%
-   morestring=[s]{\%Q/}{/},%
-   morestring=[s]{\%Q!}{!},%
-   morestring=[s]{\%Q\{}{\}},%
-   morestring=[s]{\%Q(}{)},%
-   morestring=[s]{\%Q[}{]},%
-   morestring=[s]{\%Q-}{-}%
-  }[keywords,comments,strings]%
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Scilab}
-%
-% Thanks go to \lstthanks{Jean-Philippe~Grivet}{grivet@cnrs-orleans.fr}
-% {2003/06/02}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Scilab definition (c) 2002,2003 Jean-Philippe Grivet
-%%
-\lst@definelanguage{Scilab}%
-  {morekeywords={abcd,abinv,abort,abs,acoshm,acosh,acosm,acos,addcolor,%
-      addf,addinter,addmenu,add_edge,add_node,adj2sp,adj_lists,aff2ab,%
-      amell,analpf,analyze,ans,apropos,arc_graph,arc_number,argn,arhnk,%
-      arl2,arma2p,armac,armax1,armax,arma,arsimul,artest,articul,ascii,%
-      asinhm,asinh,asinm,asin,atanhm,atanh,atanm,atan,augment,auread,%
-      auwrite,balanc,balreal,bandwr,basename,bdiag,besseli,besselj,%
-      besselk,bessely,best_match,bezout,bifish,bilin,binomial,black,%
-      bloc2exp,bloc2ss,bode,bool2s,boolean,boucle,break,bstap,buttmag,%
-      bvode,cainv,calerf,calfrq,call,canon,casc,case,ccontrg,cdfbet,%
-      cdfbin,cdfchi,cdfchn,cdffnc,cdff,cdfgam,cdfnbn,cdfnor,cdfpoi,%
-      cdft,ceil,center,cepstrum,chaintest,chain_struct,champ1,champ,%
-      chart,chdir,cheb1mag,cheb2mag,check_graph,check_io,chepol,chfact,%
-      chol,chsolve,circuit,classmarkov,clean,clearfun,clearglobal,%
-      clear,close,cls2dls,cmb_lin,cmndred,cmoment,code2str,coeff,coffg,%
-      coff,colcompr,colcomp,colinout,colormap,colregul,companion,comp,%
-      cond,conj,connex,contour2di,contour2d,contourf,contour,%
-      contract_edge,contrss,contr,cont_frm,cont_mat,convex_hull,convol,%
-      convstr,con_nodes,copfac,copy,correl,corr,coshm,cosh,cosm,cos,%
-      cotg,cothm,coth,covar,csim,cspect,ctr_gram,cumprod,cumsum,%
-      curblock,cycle_basis,czt,c_link,dasrt,dassl,datafit,date,dbphi,%
-      dcf,ddp,debug,dec2hex,deff,definedfields,degree,delbpt,%
-      delete_arcs,delete_nodes,delete,delip,delmenu,demos,denom,%
-      derivative,derivat,des2ss,des2tf,determ,detr,det,dft,dhinf,%
-      dhnorm,diag,diary,diff,diophant,dirname,dispbpt,dispfiles,disp,%
-      dlgamma,double,dragrect,drawaxis,drawlater,drawnow,draw,driver,%
-      dscr,dsearch,dsimul,dtsi,dt_ility,duplicate,edge_number,%
-      edit_curv,edit_graph_menus,edit_graph,edit,eigenmarkov,ell1mag,%
-      elseif,else,emptystr,endfunction,end,eqfir,eqiir,equil1,equil,%
-      ereduc,erfcx,erfc,erf,errbar,errcatch,errclear,error,eval3dp,%
-      eval3d,eval,evans,evstr,excel2sci,execstr,exec,exists,exit,expm,%
-      exp,external,eye,fac3d,factors,faurre,fchamp,fcontour2d,fcontour,%
-      fec,feedback,feval,ffilt,fftshift,fft,fgrayplot,figure,fileinfo,%
-      file,filter,findm,findobj,findx0BD,find_freq,find_path,find,%
-      findABCD,findAC,findBD,findBDK,findR,fit_dat,fix,floor,flts,foo,%
-      formatman,format,fort,for,fourplan,fplot2d,fplot3d1,fplot3d,%
-      fprintf,fprintfMat,frep2tf,freq,freson,frexp,frfit,frmag,fscanf,%
-      fscanfMat,fsfirlin,fsolve,fspecg,fstabst,fstair,ftest,ftuneq,%
-      fullrfk,fullrf,full,fun2string,funcprot,functions,function,%
-      funptr,fusee,gainplot,gamitg,gammaln,gamma,gcare,gcd,gcf,%
-      genfac3d,genlib,genmarkov,gen_net,geom3d,geomean,getblocklabel,%
-      getcolor,getcurblock,getcwd,getdate,getd,getenv,getfield,getfont,%
-      getf,getio,getlinestyle,getmark,getpid,getscicosvars,getsymbol,%
-      getvalue,getversion,get_function_path,get,gfare,gfrancis,girth,%
-      givens,glever,glist,global,glue,gpeche,graduate,grand,%
-      graphics_entities,graph_2_mat,graph_center,graph_complement,%
-      graph_diameter,graph_power,graph_simp,graph_sum,graph_union,%
-      graph-list,graycolormap,grayplot,graypolarplot,grep,group,%
-      gr_menu,gschur,gsort,gspec,gstacksize,gtild,g_margin,h2norm,halt,%
-      hamilton,hankelsv,hank,harmean,havewindow,help,hermit,hess,%
-      hex2dec,hilb,hinf,hist3d,histplot,horner,host,hotcolormap,%
-      householder,hrmt,htrianr,hypermat,h_cl,h_inf_st,h_inf,h_norm,%
-      iconvert,icon_edit,ieee,if,iirgroup,iirlp,iir,ilib_build,%
-      ilib_compile,ilib_for_link,ilib_gen_gateway,ilib_gen_loader,%
-      ilib_gen_Make,imag,impl,imrep2ss,imult,im_inv,inistate,input,%
-      int16,int2d,int32,int3d,int8,intc,intdec,integrate,interpln,%
-      interp,intersci,intersect,intg,intl,intppty,intsplin,inttrap,%
-      inttype,int,invr,invsyslin,inv_coeff,inv,iqr,isdef,isdir,isequal,%
-      iserror,isglobal,isinf,isnan,isoview,isreal,is_connex,jmat,%
-      justify,kalm,karmarkar,kernel,keyboard,knapsack,kpure,krac2,%
-      kroneck,kron,lasterror,lattn,lattp,lcf,lcmdiag,lcm,ldivf,ldiv,%
-      leastsq,legends,length,leqr,levin,lev,lex_sort,lft,lgfft,library,%
-      lib,lin2mu,lincos,lindquist,lines,line_graph,linfn,linf,link,%
-      linmeq,linpro,linsolve,linspace,lin,listfiles,list,lmisolver,%
-      lmitool,loadmatfile,loadplots,loadwave,load_graph,load,locate,%
-      log10,log1p,log2,logm,logspace,log,lotest,lqe,lqg2stan,lqg_ltr,%
-      lqg,lqr,lsq,lsslist,lstcat,lstsize,ltitr,ludel,lufact,luget,%
-      lusolve,lu,lyap,macglov,macr2lst,macrovar,macro,mad,make_graph,%
-      make_index,manedit,man,mapsound,markp2ss,matfile2sci,matrix,%
-      mat_2_graph,maxi,max_cap_path,max_clique,max_flow,max,mclearerr,%
-      mclose,meanf,mean,median,meof,mese,mesh2d,mfft,mfile2sci,mgeti,%
-      mgetl,mgetstr,mget,milk_drop,mine,mini,minreal,minss,%
-      min_lcost_cflow,min_lcost_flow1,min_lcost_flow2,min_qcost_flow,%
-      min_weight_tree,min,mlist,mode,modulo,moment,mopen,move,%
-      mps2linpro,mputl,mputstr,mput,mrfit,msd,mseek,mtell,mtlb_load,%
-      mtlb_mode,mtlb_save,mtlb_sparse,mu2lin,mulf,mvvacov,m_circle,%
-      names,nand2mean,nanmax,nanmeanf,nanmean,nanmedian,nanmin,%
-      nanstdev,nansum,narsimul,ndims,nearfloat,nehari,neighbors,%
-      netclose,netwindows,netwindow,newest,newfun,nextpow2,nf3d,nfreq,%
-      nlev,nnz,nodes_2_path,nodes_degrees,node_number,noisegen,norm,%
-      null,numdiff,numer,nyquist,obscont1,obscont,observer,obsvss,%
-      obsv_mat,obs_gram,odedc,odedi,odeoptions,ode_discrete,ode_root,%
-      ode,oldload,oldsave,ones,optim,orth,param3d1,param3d,%
-      paramfplot2d,parrot,part,pathconvert,path_2_nodes,pause,pbig,%
-      pdiv,pen2ea,pencan,penlaur,perctl,perfect_match,pertrans,pfss,%
-      phasemag,phc,pinv,pipe_network,playsnd,plot2d1,plot2d2,plot2d3,%
-      plot2d4,plot2d,plot3d1,plot3d2,plot3d3,plot3d,plotframe,%
-      plotprofile,plot_graph,plot,plzr,pmodulo,pol2des,pol2str,pol2tex,%
-      polarplot,polar,polfact,poly,portr3d,portrait,power,ppol,prbs_a,%
-      predecessors,predef,printf,printing,print,prod,profile,projsl,%
-      projspec,proj,psmall,pspect,pvm_addhosts,pvm_barrier,pvm_bcast,%
-      pvm_bufinfo,pvm_config,pvm_delhosts,pvm_error,pvm_exit,%
-      pvm_f772sci,pvm_getinst,pvm_gettid,pvm_get_timer,pvm_gsize,%
-      pvm_halt,pvm_joingroup,pvm_kill,pvm_lvgroup,pvm_mytid,pvm_parent,%
-      pvm_probe,pvm_recv,pvm_reduce,pvm_sci2f77,pvm_send,pvm_set_timer,%
-      pvm_spawn_independent,pvm_spawn,pvm_start,pvm_tasks,%
-      pvm_tidtohost,pvm,pwd,p_margin,qassign,qr,quapro,quart,quaskro,%
-      quit,randpencil,rand,range,rankqr,rank,rat,rcond,rdivf,read4b,%
-      readb,readc_,readmps,read,real,recur,reglin,regress,remezb,remez,%
-      repfreq,replot,residu,resume,return,riccati,riccsl,ricc,ric_desc,%
-      rlist,roots,rotate,round,routh_t,rowcompr,rowcomp,rowinout,%
-      rowregul,rowshuff,rpem,rref,rtitr,rubberbox,salesman,savewave,%
-      save_graph,save,scaling,scanf,schur,sci2exp,sci2for,sci2map,%
-      sciargs,scicosim,scicos,scifunc_block,sd2sci,secto3d,select,%
-      semidef,sensi,setbpt,seteventhandler,setfield,setmenu,%
-      setscicosvars,set,sfact,sgrid,shortest_path,showprofile,%
-      show_arcs,show_graph,show_nodes,sident,signm,sign,simp_mode,simp,%
-      sincd,sinc,sinc,sinhm,sinh,sinm,sin,size,sm2des,sm2ss,smooth,%
-      solve,sorder,sort,sound,sp2adj,spaninter,spanplus,spantwo,sparse,%
-      spchol,spcompack,specfact,spec,speye,spget,splin,split_edge,%
-      spones,sprand,sprintf,spzeros,sqroot,sqrtm,sqrt,squarewave,%
-      square,srfaur,srkf,ss2des,ss2ss,ss2tf,sscanf,sskf,ssprint,ssrand,%
-      stabil,stacksize,standard_define,standard_draw,standard_input,%
-      standard_origin,standard_output,startup,stdevf,stdev,steadycos,%
-      str2code,strange,strcat,strindex,strings,string,stripblanks,%
-      strong_connex,strong_con_nodes,strsubst,st_deviation,st_ility,%
-      subf,subgraph,subplot,successors,sum,supernode,sva,svd,svplot,%
-      sylm,sylv,sysconv,sysdiag,sysfact,syslin,syssize,systems,system,%
-      systmat,tabul,tangent,tanhm,tanh,tanm,tan,tdinit,testmatrix,%
-      texprint,tf2des,tf2ss,then,thrownan,timer,time_id,titlepage,%
-      tk_getdir,tk_getfile,tlist,toeplitz,tokenpos,tokens,trace,%
-      translatepaths,trans_closure,trans,trfmod,trianfml,tril,trimmean,%
-      trisolve,triu,trzeros,typename,typeof,type,uicontrol,uimenu,%
-      uint16,uint32,uint8,ui_observer,ulink,unglue,union,unique,unix_g,%
-      unix_s,unix_w,unix_x,unix,unobs,unsetmenu,user,varargin,%
-      varargout,variancef,variance,varn,warning,wavread,wavwrite,%
-      wcenter,wfir,what,whereami,whereis,where,while,whos,who_user,who,%
-      wiener,wigner,window,winsid,with_gtk,with_pvm,with_texmacs,%
-      with_tk,writb,write4b,write,xarcs,xarc,xarrows,xaxis,xbasc,%
-      xbasimp,xbasr,xchange,xclear,xclea,xclick,xclip,xdel,xend,xfarcs,%
-      xfarc,xfpolys,xfpoly,xfrect,xgetech,xgetfile,xgetmouse,xget,%
-      xgraduate,xgrid,xinfo,xinit,xlfont,xload,xname,xnumb,xpause,%
-      xpolys,xpoly,xrects,xrect,xrpoly,xs2fig,xs2gif,xs2ppm,xs2ps,%
-      xsave,xsegs,select,xsetech,xsetm,xset,xstringb,xstringl,xstring,%
-      xtape,xtitle,x_choices,x_choose,x_dialog,x_matrix,x_mdialog,%
-      x_message_modeless,x_message,yulewalk,zeropen,zeros,zgrid,zpbutt,%
-      zpch1,zpch2,zpell,mfprintf,mfscanf,mprintf,mscanf,msprintf,%
-      msscanf,mucomp,%
-      ABSBLK_f,AFFICH_f,ANDLOG_f,ANIMXY_f,BIGSOM_f,CLINDUMMY_f,CLKIN_f,%
-      CLKINV_f,CLKOUT_f,CLKOUTV_f,CLKSOM_f,CLKSOMV_f,CLKSPLIT_f,%
-      CLOCK_f,CLR_f,CLSS_f,CONST_f,COSBLK_f,CURV_f,DELAY_f,DELAYV_f,%
-      DEMUX_f,DLR_f,DLRADAPT_f,DLSS_f,EVENTSCOPE_f,EVTDLY_f,EVTGEN_f,%
-      EXPBLK_f,G_make,GAIN_f,GAINBLK_f,GENERAL_f,GENERIC_f,GENSIN_f,%
-      GENSQR_f,HALT_f,IFTHEL_f,IN_f,INTEGRAL_f,INTRP2BLK_f,INTRPLBLK_f,%
-      INVBLK_f,LOGBLK_f,LOOKUP_f,Matplot1,Matplot,MAX_f,MCLOCK_f,%
-      MFCLCK_f,MIN_f,MUX_f,NDcost,NEGTOPOS_f,OUT_f,POSTONEG_f,POWBLK_f,%
-      PROD_f,QUANT_f,RAND_f,READC_f,REGISTER_f,RELAY_f,RFILE_f,%
-      ScilabEval,Sfgrayplot,Sgrayplot,SAMPLEHOLD_f,SAT_f,SAWTOOTH_f,%
-      SCOPE_f,SCOPXY_f,SELECT_f,SINBLK_f,SOM_f,SPLIT_f,STOP_f,SUPER_f,%
-      TANBLK_f,TCLSS_f,TEXT_f,TIME_f,TK_EvalFile,TK_EvalStr,TK_GetVar,%
-      TK_SetVar,TRASH_f,WFILE_f,WRITEC_f,ZCROSS_f,%
-      \%asn,\%helps,\%k,\%sn},%
-   alsoletter=\%,% chmod
-   sensitive,%
-   morecomment=[l]//,%
-   morestring=[b]",%
-   morestring=[m]'%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{SHELXL}
-%
-% Thanks to \lstthanks{Aidan~Philip~Heerdegen}{Aidan.Heerdegen@anu.edu.au}
-% {1999/07/09} for mailing this definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% SHELXL definition (c) 1999 Aidan Philip Heerdegen
-%%
-\lst@definelanguage{SHELXL}%
-  {morekeywords={TITL,CELL,ZERR,LATT,SYMM,SFAC,DISP,UNIT,LAUE,%
-      REM,MORE,TIME,END,HKLF,OMIT,SHEL,BASF,TWIN,EXTI,SWAT,%
-      MERG,SPEC,RESI,MOVE,ANIS,AFIX,HFIX,FRAG,FEND,EXYZ,EADP,%
-      EQIV,OMIT,CONN,PART,BIND,FREE,DFIX,BUMP,SAME,SADI,CHIV,%
-      FLAT,DELU,SIMU,DEFS,ISOR,SUMP,L.S.,CGLS,SLIM,BLOC,DAMP,%
-      WGHT,FVAR,BOND,CONF,MPLA,RTAB,LIST,ACTA,SIZE,TEMP,WPDB,%
-      FMAP,GRID,PLAN,MOLE},%
-   sensitive=false,%
-   alsoother=_,% Makes the syntax highlighting ignore the underscores
-   morecomment=[l]{! },%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Simula}
-%
-% Took data from
-% \begin{itemize}
-% \item
-%		\textsc{G\"unther Lamprecht}:
-%		\textbf{Introduction to SIMULA 67};
-%		Braunschweig; Wiesbaden: Vieweg, 1981
-% \end{itemize}
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[IBM]{Simula}[DEC]{Simula}{}%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[DEC]{Simula}[67]{Simula}%
-  {morekeywords={and,eq,eqv,ge,gt,hidden,imp,le,long,lt,ne,not,%
-      options,or,protected,short}%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[CII]{Simula}[67]{Simula}%
-  {morekeywords={and,equiv,exit,impl,not,or,stop}}%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[67]{Simula}%
-  {morekeywords={activate,after,array,at,before,begin,boolean,%
-      character,class,comment,delay,detach,do,else,end,external,false,%
-      for,go,goto,if,in,inner,inspect,integer,is,label,name,new,none,%
-      notext,otherwise,prior,procedure,qua,reactivate,real,ref,resume,%
-      simset,simulation,step,switch,text,then,this,to,true,until,value,%
-      virtual,when,while},%
-   sensitive=f,%
-   keywordcommentsemicolon={end}{else,end,otherwise,when}{comment},%
-   morestring=[d]",%
-   morestring=[d]'%
-  }[keywords,keywordcomments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{SPARQL}
-%
-% This definition for the SPARQL query language (SPARQL Protocol and RDF
-% Query Language, \url{http://www.w3.org/TR/rdf-sparql-query/}) was provided
-% by \lstthanks{Christoph~Kiefer}{-}{2006/10/24}.
-%
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% SPARQL definition (c) 2006 Christoph Kiefer
-%%
-\lst@definelanguage{SPARQL}%
-  {morekeywords={BASE,PREFIX,SELECT,DISTINCT,CONSTRUCT,DESCRIBE,ASK,%
-        FROM,NAMED,WHERE,ORDER,BY,ASC,DESC,LIMIT,OFFSET,OPTIONAL,%
-        GRAPH,UNION,FILTER,a,STR,LANG,LANGMATCHES,DATATYPE,BOUND,%
-        isIRI,isURI,isBLANK,isLITERAL,REGEX,true,false},%
-   sensitive=false,%
-   morecomment=[l]\#,%
-   morestring=[d]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{SQL}
-%
-% Data come from \lstthanks{Christian~Haul}
-% {haul@dvs1.informatik.tu-darmstadt.de}{1998/01/09}.
-% \lstthanks{Neil~Conway}{nconway@klamath.dyndns.org}{2002/07/06} added some
-% keywords, ditto \lsthelper{Torsten~Flatter}{Thorsten.Flatter@T-Systems.de}
-% {2002/10/15}{missing keywords}, \lsthelper{Robert~Frank}{rf7@ukc.ac.uk}
-% {2002/11/19}{missing keywords} and \lsthelper{Dirk~Jesko}
-% {jesko@iti.cs.uni-magdeburg.de}{2003/06/03}{extended SQL definition}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% SQL definition (c) 1998 Christian Haul
-%%                (c) 2002 Neil Conway
-%%                (c) 2002 Robert Frank
-%%                (c) 2003 Dirk Jesko
-%%
-\lst@definelanguage{SQL}%
-  {morekeywords={ABSOLUTE,ACTION,ADD,ALLOCATE,ALTER,ARE,AS,ASSERTION,%
-      AT,BETWEEN,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,%
-      CATALOG,CHAR_LENGTH,CHARACTER_LENGTH,CLUSTER,COALESCE,%
-      COLLATE,COLLATION,COLUMN,CONNECT,CONNECTION,CONSTRAINT,%
-      CONSTRAINTS,CONVERT,CORRESPONDING,CREATE,CROSS,CURRENT_DATE,%
-      CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,DAY,DEALLOCATE,%
-      DEC,DEFERRABLE,DEFERED,DESCRIBE,DESCRIPTOR,DIAGNOSTICS,%
-      DISCONNECT,DOMAIN,DROP,ELSE,END,EXEC,EXCEPT,EXCEPTION,EXECUTE,%
-      EXTERNAL,EXTRACT,FALSE,FIRST,FOREIGN,FROM,FULL,GET,GLOBAL,%
-      GRAPHIC,HAVING,HOUR,IDENTITY,IMMEDIATE,INDEX,INITIALLY,INNER,%
-      INPUT,INSENSITIVE,INSERT,INTO,INTERSECT,INTERVAL,%
-      ISOLATION,JOIN,KEY,LAST,LEADING,LEFT,LEVEL,LIMIT,LOCAL,LOWER,%
-      MATCH,MINUTE,MONTH,NAMES,NATIONAL,NATURAL,NCHAR,NEXT,NO,NOT,NULL,%
-      NULLIF,OCTET_LENGTH,ON,ONLY,ORDER,ORDERED,OUTER,OUTPUT,OVERLAPS,%
-      PAD,PARTIAL,POSITION,PREPARE,PRESERVE,PRIMARY,PRIOR,READ,%
-      RELATIVE,RESTRICT,REVOKE,RIGHT,ROWS,SCROLL,SECOND,SELECT,SESSION,%
-      SESSION_USER,SIZE,SPACE,SQLSTATE,SUBSTRING,SYSTEM_USER,%
-      TABLE,TEMPORARY,THEN,TIMEZONE_HOUR,%
-      TIMEZONE_MINUTE,TRAILING,TRANSACTION,TRANSLATE,TRANSLATION,TRIM,%
-      TRUE,UNIQUE,UNKNOWN,UPPER,USAGE,USING,VALUE,VALUES,%
-      VARGRAPHIC,VARYING,WHEN,WHERE,WRITE,YEAR,ZONE,%
-      AND,ASC,avg,CHECK,COMMIT,count,DECODE,DESC,DISTINCT,GROUP,IN,% FF
-      LIKE,NUMBER,ROLLBACK,SUBSTR,sum,VARCHAR2,% FF
-      MIN,MAX,UNION,UPDATE,% RF
-      ALL,ANY,CUBE,CUBE,DEFAULT,DELETE,EXISTS,GRANT,OR,RECURSIVE,% DJ
-      ROLE,ROLLUP,SET,SOME,TRIGGER,VIEW},% DJ
-   morendkeywords={BIT,BLOB,CHAR,CHARACTER,CLOB,DATE,DECIMAL,FLOAT,% DJ
-      INT,INTEGER,NUMERIC,SMALLINT,TIME,TIMESTAMP,VARCHAR},% moved here
-   sensitive=false,% DJ
-   morecomment=[l]--,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[d]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Tcl/Tk}
-%
-% Tcl/Tk is a very dynamic language. A statical analysis might not be
-% adequate. Nevertheless the following definitions produce the desired
-% result for my programs with a minimum of ``misses''.
-%
-% Data come from
-% \begin{itemize}
-% \item
-%		\textsc{Welch, Brent B.}:
-%		\textbf{Practical Programming in Tcl and Tk};
-%		{\copyright} 1997 Prentice Hall, Inc.;
-%		ISBN 0-13-616830-2.
-% \item
-%		\textsc{Ousterhout, John K.}:
-%		\textbf{Tcl and the Tk Toolkit};
-%		{\copyright} 1997 Addison-Wesley Publishing Company;
-%		ISBN 0-201-6337-X.
-% \end{itemize}
-% \lstthanks{Gerd~Neugebauer}{gerd.neugebauer@gmx.de}{2000/09/16} added support
-% for Tcl/Tk.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Tcl/Tk definition (c) Gerd Neugebauer
-%%
-\lst@definelanguage[tk]{tcl}[]{tcl}%
-  {morekeywords={activate,add,separator,radiobutton,checkbutton,%
-      command,cascade,all,bell,bind,bindtags,button,canvas,canvasx,%
-      canvasy,cascade,cget,checkbutton,config,configu,configur,%
-      configure,clipboard,create,arc,bitmap,image,line,oval,polygon,%
-      rectangle,text,textwindow,curselection,delete,destroy,end,entry,%
-      entrycget,event,focus,font,actual,families,measure,metrics,names,%
-      frame,get,grab,current,release,status,grid,columnconfigure,%
-      rowconfigure,image,image,create,bitmap,photo,delete,height,types,%
-      widt,names,index,insert,invoke,itemconfigure,label,listbox,lower,%
-      menu,menubutton,message,move,option,add,clear,get,readfile,pack,%
-      photo,place,radiobutton,raise,scale,scroll,scrollbar,search,see,%
-      selection,send,stdin,stdout,stderr,tag,bind,text,tk,tkerror,%
-      tkwait,window,variable,visibility,toplevel,unknown,update,winfo,%
-      class,exists,ismapped,parent,reqwidth,reqheight,rootx,rooty,%
-      width,height,wm,aspect,client,command,deiconify,focusmodel,frame,%
-      geometry,group,iconbitmap,iconify,iconmask,iconname,iconposition,%
-      iconwindow,maxsize,minsize,overrideredirect,positionfrom,%
-      protocol,sizefrom,state,title,transient,withdraw,xview,yview,%
-      yposition,%
-      -accelerator,-activebackground,-activeborderwidth,%
-      -activeforeground,-after,-anchor,-arrow,-arrowshape,-aspect,%
-      -async,-background,-before,-bg,-bigincrement,-bitmap,-bordermode,%
-      -borderwidth,-button,-capstyle,-channel,-class,-closeenough,%
-      -colormap,-column,-columnspan,-command,-confine,-container,%
-      -count,-cursor,-data,-default,-detail,-digits,-direction,%
-      -displayof,-disableforeground,-elementborderwidth,-expand,%
-      -exportselection,-extend,-family,-fg,-file,-fill,-focus,-font,%
-      -fontmap,-foreground,-format,-from,-gamma,-global,-height,%
-      -highlightbackground,-highlightcolor,-highlightthickness,-icon,%
-      -image,-in,-insertbackground,-insertborderwidth,-insertofftime,%
-      -insertontime,-imsertwidth,-ipadx,-ipady,-joinstyle,-jump,%
-      -justify,-keycode,-keysym,-label,-lastfor,-length,-maskdata,%
-      -maskfile,-menu,-message,-mode,-offvalue,-onvalue,-orient,%
-      -outlien,-outlinestipple,-overstrike,-override,-padx,-pady,%
-      -pageanchor,-pageheight,-pagewidth,-pagey,-pagey,-palette,%
-      -parent,-place,-postcommand,-relheight,-relief,-relwidth,-relx,%
-      -rely,-repeatdelay,-repeatinterval,-resolution,-root,-rootx,%
-      -rooty,-rotate,-row,-rowspan,-screen,-selectcolor,-selectimage,%
-      -sendevent,-serial,-setgrid,-showvalue,-shrink,-side,-size,%
-      -slant,-sliderlength,-sliderrelief,-smooth,-splinesteps,-state,%
-      -sticky,-stipple,-style,-subsample,-subwindow,-tags,-takefocus,%
-      -tearoff,-tearoffcommand,-text,-textvariable,-tickinterval,-time,%
-      -title,-to,-troughcolor,-type,-underline,-use,-value,-variable,%
-      -visual,-width,-wrap,-wraplength,-x,-xscrollcommand,-y,%
-      -bgstipple,-fgstipple,-lmargin1,-lmargin2,-rmargin,-spacing1,%
-      -spacing2,-spacing3,-tabs,-yscrollcommand,-zoom,%
-      activate,add,addtag,bbox,cget,clone,configure,coords,%
-      curselection,debug,delete,delta,deselect,dlineinfo,dtag,dump,%
-      entrycget,entryconfigure,find,flash,fraction,get,gettags,handle,%
-      icursor,identify,index,insert,invoke,itemcget,itemconfigure,mark,%
-      moveto,own,post,postcascade,postscript,put,redither,ranges,%
-      scale,select,show,tag,type,unpost,xscrollcommand,xview,%
-      yscrollcommand,yview,yposition}%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[]{tcl}%
-  {alsoletter={.:,*=&-},%
-   morekeywords={after,append,array,names,exists,anymore,donesearch,%
-      get,nextelement,set,size,startsearch,auto_mkindex,binary,break,%
-      case,catch,cd,clock,close,concat,console,continue,default,else,%
-      elseif,eof,error,eval,exec,-keepnewline,exit,expr,fblocked,%
-      fconfigure,fcopy,file,atime,dirname,executable,exists,extension,%
-      isdirectory,isfile,join,lstat,mtime,owned,readable,readlink,%
-      rootname,size,stat,tail,type,writable,-permissions,-group,-owner,%
-      -archive,-hidden,-readonly,-system,-creator,-type,-force,%
-      fileevent,flush,for,foreach,format,gets,glob,global,history,if,%
-      incr,info,argsbody,cmdcount,commands,complete,default,exists,%
-      globals,level,library,locals,patchlevel,procs,script,tclversion,%
-      vars,interp,join,lappend,lindex,linsert,list,llength,lrange,%
-      lreplace,lsearch,-exact,-regexp,-glob,lsort,-ascii,-integer,%
-      -real,-dictionary,-increasing,-decreasing,-index,-command,load,%
-      namespace,open,package,forget,ifneeded,provide,require,unknown,%
-      vcompare,versions,vsatisfies,pid,proc,puts,-nonewline,pwd,read,%
-      regexp,-indices,regsub,-all,-nocaserename,return,scan,seek,set,%
-      socket,source,split,string,compare,first,index,last,length,match,%
-      range,tolower,toupper,trim,trimleft,trimright,subst,switch,tell,%
-      time,trace,variable,vdelete,vinfo,unknown,unset,uplevel,upvar,%
-      vwait,while,acos,asin,atan,atan2,ceil,cos,cosh,exp,floor,fmod,%
-      hypot,log,log10,pow,sin,sinh,sqrt,tan,tanh,abs,double,int,round%
-      },%
-   morestring=[d]",%
-   morecomment=[f]\#,%
-   morecomment=[l]{;\#},%
-   morecomment=[l]{[\#},%
-   morecomment=[l]{\{\#}%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-% And after receiving a bug report from \lsthelper{Vitaly A. Repin}
-% {vitaly@radio.hop.stu.neva.ru}{2002/04/08}{undefined control sequence
-% \lst@CommentB} I converted the version 0.21 contents of |MoreSelectCharTable|
-% to version 1.0.
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Statistical languages}
-%
-% These languages have been added by \lstthanks{Winfried~Theis}
-% {theis@statistik.uni-dortmund.de}{2000/09/05}. \lstthanks{Robert~Denham}
-% {Robert.Denham@dnr.qld.gov.au}{2001/05/03} contributed the additional
-% string delimiter |'|.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{S}[]{R}{}
-\lst@definelanguage[PLUS]{S}[]{R}{}
-\lst@definelanguage{R}%
-  {keywords={abbreviate,abline,abs,acos,acosh,action,add1,add,%
-      aggregate,alias,Alias,alist,all,anova,any,aov,aperm,append,apply,%
-      approx,approxfun,apropos,Arg,args,array,arrows,as,asin,asinh,%
-      atan,atan2,atanh,attach,attr,attributes,autoload,autoloader,ave,%
-      axis,backsolve,barplot,basename,besselI,besselJ,besselK,besselY,%
-      beta,binomial,body,box,boxplot,break,browser,bug,builtins,bxp,by,%
-      c,C,call,Call,case,cat,category,cbind,ceiling,character,char,%
-      charmatch,check,chol,chol2inv,choose,chull,class,close,cm,codes,%
-      coef,coefficients,co,col,colnames,colors,colours,commandArgs,%
-      comment,complete,complex,conflicts,Conj,contents,contour,%
-      contrasts,contr,control,helmert,contrib,convolve,cooks,coords,%
-      distance,coplot,cor,cos,cosh,count,fields,cov,covratio,wt,CRAN,%
-      create,crossprod,cummax,cummin,cumprod,cumsum,curve,cut,cycle,D,%
-      data,dataentry,date,dbeta,dbinom,dcauchy,dchisq,de,debug,%
-      debugger,Defunct,default,delay,delete,deltat,demo,de,density,%
-      deparse,dependencies,Deprecated,deriv,description,detach,%
-      dev2bitmap,dev,cur,deviance,off,prev,,dexp,df,dfbetas,dffits,%
-      dgamma,dgeom,dget,dhyper,diag,diff,digamma,dim,dimnames,dir,%
-      dirname,dlnorm,dlogis,dnbinom,dnchisq,dnorm,do,dotplot,double,%
-      download,dpois,dput,drop,drop1,dsignrank,dt,dummy,dump,dunif,%
-      duplicated,dweibull,dwilcox,dyn,edit,eff,effects,eigen,else,%
-      emacs,end,environment,env,erase,eval,equal,evalq,example,exists,%
-      exit,exp,expand,expression,External,extract,extractAIC,factor,%
-      fail,family,fft,file,filled,find,fitted,fivenum,fix,floor,for,%
-      For,formals,format,formatC,formula,Fortran,forwardsolve,frame,%
-      frequency,ftable,ftable2table,function,gamma,Gamma,gammaCody,%
-      gaussian,gc,gcinfo,gctorture,get,getenv,geterrmessage,getOption,%
-      getwd,gl,glm,globalenv,gnome,GNOME,graphics,gray,grep,grey,grid,%
-      gsub,hasTsp,hat,heat,help,hist,home,hsv,httpclient,I,identify,if,%
-      ifelse,Im,image,\%in\%,index,influence,measures,inherits,install,%
-      installed,integer,interaction,interactive,Internal,intersect,%
-      inverse,invisible,IQR,is,jitter,kappa,kronecker,labels,lapply,%
-      layout,lbeta,lchoose,lcm,legend,length,levels,lgamma,library,%
-      licence,license,lines,list,lm,load,local,locator,log,log10,log1p,%
-      log2,logical,loglin,lower,lowess,ls,lsfit,lsf,ls,machine,Machine,%
-      mad,mahalanobis,make,link,margin,match,Math,matlines,mat,matplot,%
-      matpoints,matrix,max,mean,median,memory,menu,merge,methods,min,%
-      missing,Mod,mode,model,response,mosaicplot,mtext,mvfft,na,nan,%
-      names,omit,nargs,nchar,ncol,NCOL,new,next,NextMethod,nextn,%
-      nlevels,nlm,noquote,NotYetImplemented,NotYetUsed,nrow,NROW,null,%
-      numeric,\%o\%,objects,offset,old,on,Ops,optim,optimise,optimize,%
-      options,or,order,ordered,outer,package,packages,page,pairlist,%
-      pairs,palette,panel,par,parent,parse,paste,path,pbeta,pbinom,%
-      pcauchy,pchisq,pentagamma,persp,pexp,pf,pgamma,pgeom,phyper,pico,%
-      pictex,piechart,Platform,plnorm,plogis,plot,pmatch,pmax,pmin,%
-      pnbinom,pnchisq,pnorm,points,poisson,poly,polygon,polyroot,pos,%
-      postscript,power,ppoints,ppois,predict,preplot,pretty,Primitive,%
-      print,prmatrix,proc,prod,profile,proj,prompt,prop,provide,%
-      psignrank,ps,pt,ptukey,punif,pweibull,pwilcox,q,qbeta,qbinom,%
-      qcauchy,qchisq,qexp,qf,qgamma,qgeom,qhyper,qlnorm,qlogis,qnbinom,%
-      qnchisq,qnorm,qpois,qqline,qqnorm,qqplot,qr,Q,qty,qy,qsignrank,%
-      qt,qtukey,quantile,quasi,quit,qunif,quote,qweibull,qwilcox,%
-      rainbow,range,rank,rbeta,rbind,rbinom,rcauchy,rchisq,Re,read,csv,%
-      csv2,fwf,readline,socket,real,Recall,rect,reformulate,regexpr,%
-      relevel,remove,rep,repeat,replace,replications,report,require,%
-      resid,residuals,restart,return,rev,rexp,rf,rgamma,rgb,rgeom,R,%
-      rhyper,rle,rlnorm,rlogis,rm,rnbinom,RNGkind,rnorm,round,row,%
-      rownames,rowsum,rpois,rsignrank,rstandard,rstudent,rt,rug,runif,%
-      rweibull,rwilcox,sample,sapply,save,scale,scan,scan,screen,sd,se,%
-      search,searchpaths,segments,seq,sequence,setdiff,setequal,set,%
-      setwd,show,sign,signif,sin,single,sinh,sink,solve,sort,source,%
-      spline,splinefun,split,sqrt,stars,start,stat,stem,step,stop,%
-      storage,strstrheight,stripplot,strsplit,structure,strwidth,sub,%
-      subset,substitute,substr,substring,sum,summary,sunflowerplot,svd,%
-      sweep,switch,symbol,symbols,symnum,sys,status,system,t,table,%
-      tabulate,tan,tanh,tapply,tempfile,terms,terrain,tetragamma,text,%
-      time,title,topo,trace,traceback,transform,tri,trigamma,trunc,try,%
-      ts,tsp,typeof,unclass,undebug,undoc,union,unique,uniroot,unix,%
-      unlink,unlist,unname,untrace,update,upper,url,UseMethod,var,%
-      variable,vector,Version,vi,warning,warnings,weighted,weights,%
-      which,while,window,write,\%x\%,x11,X11,xedit,xemacs,xinch,xor,%
-      xpdrows,xy,xyinch,yinch,zapsmall,zip},%
-   otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/},%
-   alsoother={._$},%
-   sensitive,%
-   morecomment=[l]\#,%
-   morestring=[d]",%
-   morestring=[d]'% 2001 Robert Denham
-  }%
-%    \end{macrocode}
-% \lsthelper{Benjamin Janson}{benjamin.janson@gmx.de}{2002/07/09}
-% {prockeywords undefined} got a \texttt{prockeywords undefined} error,
-% which was removed by \lsthelper{Heiko Oberdiek}{oberdiek@uni-freiburg.de}
-% {2002/07/10}{prockeywords -> procnamekeys}.
-%    \begin{macrocode}
-\lst@definelanguage{SAS}%
-  {procnamekeys={proc},%
-   morekeywords={DATA,AND,OR,NOT,EQ,GT,LT,GE,LE,NE,INFILE,INPUT,DO,BY,%
-      TO,SIN,COS,OUTPUT,END,PLOT,RUN,LIBNAME,VAR,TITLE,FIRSTOBS,OBS,%
-      DELIMITER,DLM,EOF,ABS,DIM,HBOUND,LBOUND,MAX,MIN,MOD,SIGN,SQRT,%
-      CEIL,FLOOR,FUZZ,INT,ROUND,TRUNC,DIGAMMA,ERF,ERFC,EXP,GAMMA,%
-      LGAMMA,LOG,LOG2,LOG10,ARCOS,ARSIN,ATAN,COSH,SINH,TANH,TAN,%
-      POISSON,PROBBETA,PROBBNML,PROBCHI,PROBF,PROBGAM,PROBHYPR,%
-      PROBNEGB,PROBNORM,PROBT,BETAINV,CINV,FINV,GAMINV,PROBIT,TINV,CSS,%
-      CV,KURTOSIS,MEAN,NMISS,RANGE,SKEWNESS,STD,STDERR,SUM,USS,NORMAL,%
-      RANBIN,RANCAU,RANEXP,RANGAM,RANNOR,RANPOI,RANTBL,RANTRI,RANUNI,%
-      UNIFORM,IF,THEN,ELSE,WHILE,UNTIL,DROP,KEEP,LABEL,DEFAULT,ARRAY,%
-      MERGE,CARDS,CARDS4,PUT,SET,UPDATE,ABORT,DELETE,DISPLAY,LIST,%
-      LOSTCARD,MISSING,STOP,WHERE,ARRAY,DROP,KEEP,WINDOW,LENGTH,RENAME,%
-      RETAIN,MEANS,UNIVARIATE,SUMMARY,TABULATE,CORR,FREQ,FOOTNOTE,NOTE,%
-      SHOW},%
-   otherkeywords={!,!=,~,$,*,\&,_,/,<,>=,=<,>},%
-   morestring=[d]'%
-   }[keywords,comments,strings,procnames]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{\TeX}
-%
-% I extracted the data from |plain.tex|, |latex.ltx|, and |size10.clo|.
-% \lsthelper{Dr.~Peter~Leibner}{leibner@sta.siemens.de}{1999/11/08}{missing
-% keywords in definition of \LaTeX} reported that some keywords are missing
-% and also added a couple.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[AlLaTeX]{TeX}[LaTeX]{TeX}%
-  {moretexcs={AtBeginDocument,AtBeginDvi,AtEndDocument,AtEndOfClass,%
-      AtEndOfPackage,ClassError,ClassInfo,ClassWarning,%
-      ClassWarningNoLine,CurrentOption,DeclareErrorFont,%
-      DeclareFixedFont,DeclareFontEncoding,DeclareFontEncodingDefaults,%
-      DeclareFontFamily,DeclareFontShape,DeclareFontSubstitution,%
-      DeclareMathAccent,DeclareMathAlphabet,DeclareMathAlphabet,%
-      DeclareMathDelimiter,DeclareMathRadical,DeclareMathSizes,%
-      DeclareMathSymbol,DeclareMathVersion,DeclareOldFontCommand,%
-      DeclareOption,DeclarePreloadSizes,DeclareRobustCommand,%
-      DeclareSizeFunction,DeclareSymbolFont,DeclareSymbolFontAlphabet,%
-      DeclareTextAccent,DeclareTextAccentDefault,DeclareTextCommand,%
-      DeclareTextCommandDefault,DeclareTextComposite,%
-      DeclareTextCompositeCommand,DeclareTextFontCommand,%
-      DeclareTextSymbol,DeclareTextSymbolDefault,ExecuteOptions,%
-      GenericError,GenericInfo,GenericWarning,IfFileExists,%
-      InputIfFileExists,LoadClass,LoadClassWithOptions,MessageBreak,%
-      OptionNotUsed,PackageError,PackageInfo,PackageWarning,%
-      PackageWarningNoLine,PassOptionsToClass,PassOptionsToPackage,%
-      ProcessOptionsProvidesClass,ProvidesFile,ProvidesFile,%
-      ProvidesPackage,ProvideTextCommand,RequirePackage,%
-      RequirePackageWithOptions,SetMathAlphabet,SetSymbolFont,%
-      TextSymbolUnavailable,UseTextAccent,UseTextSymbol},%
-   morekeywords={array,center,displaymath,document,enumerate,eqnarray,%
-      equation,flushleft,flushright,itemize,list,lrbox,math,minipage,%
-      picture,sloppypar,tabbing,tabular,trivlist,verbatim}%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[LaTeX]{TeX}[common]{TeX}%
-  {moretexcs={a,AA,aa,addcontentsline,addpenalty,addtocontents,%
-      addtocounter,addtolength,addtoversion,addvspace,alph,Alph,and,%
-      arabic,array,arraycolsep,arrayrulewidth,arraystretch,author,%
-      baselinestretch,begin,bezier,bfseries,bibcite,bibdata,bibitem,%
-      bibliography,bibliographystyle,bibstyle,bigskip,boldmath,%
-      botfigrule,bottomfraction,Box,caption,center,CheckCommand,circle,%
-      citation,cite,cleardoublepage,clearpage,cline,columnsep,%
-      columnseprule,columnwidth,contentsline,dashbox,date,dblfigrule,%
-      dblfloatpagefraction,dblfloatsep,dbltextfloatsep,dbltopfraction,%
-      defaultscriptratio,defaultscriptscriptratio,depth,Diamond,%
-      displaymath,document,documentclass,documentstyle,doublerulesep,%
-      em,emph,endarray,endcenter,enddisplaymath,enddocument,%
-      endenumerate,endeqnarray,endequation,endflushleft,endflushright,%
-      enditemize,endlist,endlrbox,endmath,endminipage,endpicture,%
-      endsloppypar,endtabbing,endtabular,endtrivlist,endverbatim,%
-      enlargethispage,ensuremath,enumerate,eqnarray,equation,%
-      evensidemargin,extracolsep,fbox,fboxrule,fboxsep,filecontents,%
-      fill,floatpagefraction,floatsep,flushbottom,flushleft,flushright,%
-      fnsymbol,fontencoding,fontfamily,fontseries,fontshape,fontsize,%
-      fontsubfuzz,footnotemark,footnotesep,footnotetext,footskip,frac,%
-      frame,framebox,fussy,glossary,headheight,headsep,height,hline,%
-      hspace,I,include,includeonly,index,inputlineno,intextsep,%
-      itemindent,itemize,itemsep,iterate,itshape,Join,kill,label,%
-      labelsep,labelwidth,LaTeX,LaTeXe,leadsto,lefteqn,leftmargin,%
-      leftmargini,leftmarginii,leftmarginiii,leftmarginiv,leftmarginv,%
-      leftmarginvi,leftmark,lhd,lim,linebreak,linespread,linethickness,%
-      linewidth,list,listfiles,listfiles,listparindent,lrbox,%
-      makeatletter,makeatother,makebox,makeglossary,makeindex,%
-      makelabel,MakeLowercase,MakeUppercase,marginpar,marginparpush,%
-      marginparsep,marginparwidth,markboth,markright,math,mathbf,%
-      mathellipsis,mathgroup,mathit,mathrm,mathsf,mathsterling,mathtt,%
-      mathunderscore,mathversion,mbox,mdseries,mho,minipage,%
-      multicolumn,multiput,NeedsTeXFormat,newcommand,newcounter,%
-      newenvironment,newfont,newhelp,newlabel,newlength,newline,%
-      newmathalphabet,newpage,newsavebox,newtheorem,nobreakspace,%
-      nobreakspace,nocite,nocorr,nocorrlist,nofiles,nolinebreak,%
-      nonumber,nopagebreak,normalcolor,normalfont,normalmarginpar,%
-      numberline,obeycr,oddsidemargin,oldstylenums,onecolumn,oval,%
-      pagebreak,pagenumbering,pageref,pagestyle,paperheight,paperwidth,%
-      paragraphmark,parbox,parsep,partopsep,picture,poptabs,pounds,%
-      protect,pushtabs,put,qbezier,qbeziermax,r,raggedleft,raisebox,%
-      ref,refstepcounter,renewcommand,renewenvironment,restorecr,%
-      reversemarginpar,rhd,rightmargin,rightmark,rmfamily,roman,Roman,%
-      rootbox,rule,samepage,sbox,scshape,secdef,section,sectionmark,%
-      selectfont,setcounter,settodepth,settoheight,settowidth,sffamily,%
-      shortstack,showoutput,showoverfull,sloppy,sloppypar,slshape,%
-      smallskip,sqsubset,sqsupset,SS,stackrel,stepcounter,stop,stretch,%
-      subparagraphmark,subsectionmark,subsubsectionmark,sum,%
-      suppressfloats,symbol,tabbing,tabbingsep,tabcolsep,tabular,%
-      tabularnewline,textasciicircum,textasciitilde,textbackslash,%
-      textbar,textbf,textbraceleft,textbraceright,textbullet,%
-      textcircled,textcompwordmark,textdagger,textdaggerdbl,textdollar,%
-      textellipsis,textemdash,textendash,textexclamdown,textfloatsep,%
-      textfraction,textgreater,textheight,textit,textless,textmd,%
-      textnormal,textparagraph,textperiodcentered,textquestiondown,%
-      textquotedblleft,textquotedblright,textquoteleft,textquoteright,%
-      textregistered,textrm,textsc,textsection,textsf,textsl,%
-      textsterling,textsuperscript,texttrademark,texttt,textunderscore,%
-      textup,textvisiblespace,textwidth,thanks,thefootnote,thempfn,%
-      thempfn,thempfootnote,thepage,thepage,thicklines,thinlines,%
-      thispagestyle,title,today,topfigrule,topfraction,topmargin,%
-      topsep,totalheight,tracingfonts,trivlist,ttfamily,twocolumn,%
-      typein,typeout,unboldmath,unitlength,unlhd,unrhd,upshape,usebox,%
-      usecounter,usefont,usepackage,value,vector,verb,verbatim,vline,%
-      vspace,width,%
-      normalsize,small,footnotesize,scriptsize,tiny,large,Large,LARGE,%
-      huge,Huge}%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage[plain]{TeX}[common]{TeX}%
-  {moretexcs={advancepageno,beginsection,bf,bffam,bye,cal,cleartabs,%
-      columns,dosupereject,endinsert,eqalign,eqalignno,fiverm,fivebf,%
-      fivei,fivesy,folio,footline,hang,headline,it,itemitem,itfam,%
-      leqalignno,magnification,makefootline,makeheadline,midinsert,mit,%
-      mscount,nopagenumbers,normalbottom,of,oldstyle,pagebody,%
-      pagecontents,pageinsert,pageno,plainoutput,preloaded,proclaim,rm,%
-      settabs,sevenbf,seveni,sevensy,sevenrm,sl,slfam,supereject,%
-      tabalign,tabs,tabsdone,tabsyet,tenbf,tenex,teni,tenit,tenrm,%
-      tensl,tensy,tentt,textindent,topglue,topins,topinsert,tt,ttfam,%
-      ttraggedright,vfootnote}%
-  }%
-%    \end{macrocode}
-% The following language is only a helper.
-%    \begin{macrocode}
-\lst@definelanguage[common]{TeX}[primitive]{TeX}
-  {moretexcs={active,acute,ae,AE,aleph,allocationnumber,allowbreak,%
-      alpha,amalg,angle,approx,arccos,arcsin,arctan,arg,arrowvert,%
-      Arrowvert,ast,asymp,b,backslash,bar,beta,bgroup,big,Big,bigbreak,%
-      bigcap,bigcirc,bigcup,bigg,Bigg,biggl,Biggl,biggm,Biggm,biggr,%
-      Biggr,bigl,Bigl,bigm,Bigm,bigodot,bigoplus,bigotimes,bigr,Bigr,%
-      bigskip,bigskipamount,bigsqcup,bigtriangledown,bigtriangleup,%
-      biguplus,bigvee,bigwedge,bmod,bordermatrix,bot,bowtie,brace,%
-      braceld,bracelu,bracerd,braceru,bracevert,brack,break,breve,%
-      buildrel,bullet,c,cap,cases,cdot,cdotp,cdots,centering,%
-      centerline,check,chi,choose,circ,clubsuit,colon,cong,coprod,%
-      copyright,cos,cosh,cot,coth,csc,cup,d,dag,dagger,dashv,ddag,%
-      ddagger,ddot,ddots,deg,delta,Delta,det,diamond,diamondsuit,dim,%
-      displaylines,div,do,dospecials,dot,doteq,dotfill,dots,downarrow,%
-      Downarrow,downbracefill,egroup,eject,ell,empty,emptyset,endgraf,%
-      endline,enskip,enspace,epsilon,equiv,eta,exists,exp,filbreak,%
-      flat,fmtname,fmtversion,footins,footnote,footnoterule,forall,%
-      frenchspacing,frown,gamma,Gamma,gcd,ge,geq,gets,gg,goodbreak,%
-      grave,H,hat,hbar,heartsuit,hglue,hideskip,hidewidth,hom,%
-      hookleftarrow,hookrightarrow,hphantom,hrulefill,i,ialign,iff,Im,%
-      imath,in,inf,infty,int,interdisplaylinepenalty,%
-      interfootnotelinepenalty,intop,iota,item,j,jmath,joinrel,jot,%
-      kappa,ker,l,L,lambda,Lambda,land,langle,lbrace,lbrack,lceil,%
-      ldotp,ldots,le,leavevmode,leftarrow,Leftarrow,leftarrowfill,%
-      leftharpoondown,leftharpoonup,leftline,leftrightarrow,%
-      Leftrightarrow,leq,lfloor,lg,lgroup,lhook,lim,liminf,limsup,line,%
-      ll,llap,lmoustache,ln,lnot,log,longleftarrow,Longleftarrow,%
-      longleftrightarrow,Longleftrightarrow,longmapsto,longrightarrow,%
-      Longrightarrow,loop,lor,lq,magstep,magstep,magstephalf,mapsto,%
-      mapstochar,mathhexbox,mathpalette,mathstrut,matrix,max,maxdimen,%
-      medbreak,medskip,medskipamount,mid,min,models,mp,mu,multispan,%
-      nabla,narrower,natural,ne,nearrow,neg,negthinspace,neq,newbox,%
-      newcount,newdimen,newfam,newif,newinsert,newlanguage,newmuskip,%
-      newread,newskip,newtoks,newwrite,next,ni,nobreak,nointerlineskip,%
-      nonfrenchspacing,normalbaselines,normalbaselineskip,%
-      normallineskip,normallineskiplimit,not,notin,nu,null,nwarrow,o,O,%
-      oalign,obeylines,obeyspaces,odot,oe,OE,offinterlineskip,oint,%
-      ointop,omega,Omega,ominus,ooalign,openup,oplus,oslash,otimes,%
-      overbrace,overleftarrow,overrightarrow,owns,P,parallel,partial,%
-      perp,phantom,phi,Phi,pi,Pi,pm,pmatrix,pmod,Pr,prec,preceq,prime,%
-      prod,propto,psi,Psi,qquad,quad,raggedbottom,raggedright,rangle,%
-      rbrace,rbrack,rceil,Re,relbar,Relbar,removelastskip,repeat,%
-      rfloor,rgroup,rho,rhook,rightarrow,Rightarrow,rightarrowfill,%
-      rightharpoondown,rightharpoonup,rightleftharpoons,rightline,rlap,%
-      rmoustache,root,rq,S,sb,searrow,sec,setminus,sharp,showhyphens,%
-      sigma,Sigma,sim,simeq,sin,sinh,skew,slash,smallbreak,smallint,%
-      smallskip,smallskipamount,smash,smile,sp,space,spadesuit,sqcap,%
-      sqcup,sqrt,sqsubseteq,sqsupseteq,ss,star,strut,strutbox,subset,%
-      subseteq,succ,succeq,sum,sup,supset,supseteq,surd,swarrow,t,tan,%
-      tanh,tau,TeX,theta,Theta,thinspace,tilde,times,to,top,tracingall,%
-      triangle,triangleleft,triangleright,u,underbar,underbrace,%
-      uparrow,Uparrow,upbracefill,updownarrow,Updownarrow,uplus,%
-      upsilon,Upsilon,v,varepsilon,varphi,varpi,varrho,varsigma,%
-      vartheta,vdash,vdots,vec,vee,vert,Vert,vglue,vphantom,wedge,%
-      widehat,widetilde,wlog,wp,wr,xi,Xi,zeta}%
-  }%
-%    \end{macrocode}
-% \lsthelper{Herbert Voss}{Herbert.Voss@FU-Berlin.DE}{2013-12-12}{typo} pointed
-% to a typo: the \TeX{} primitive is |lineskiplimit| instead of
-% |lineskiplimits|.
-%    \begin{macrocode}
-\lst@definelanguage[primitive]{TeX}%
-  {moretexcs={above,abovedisplayshortskip,abovedisplayskip,aftergroup,%
-      abovewithdelims,accent,adjdemerits,advance,afterassignment,atop,%
-      atopwithdelims,badness,baselineskip,batchmode,begingroup,%
-      belowdisplayshortskip,belowdisplayskip,binoppenalty,botmark,box,%
-      boxmaxdepth,brokenpenalty,catcode,char,chardef,cleaders,closein,%
-      closeout,clubpenalty,copy,count,countdef,cr,crcr,csname,day,%
-      deadcycles,def,defaulthyphenchar,defaultskewchar,delcode,%
-      delimiter,delimiterfactor,delimitershortfall,dimen,dimendef,%
-      discretionary,displayindent,displaylimits,displaystyle,%
-      displaywidowpenalty,displaywidth,divide,doublehyphendemerits,dp,%
-      edef,else,emergencystretch,end,endcsname,endgroup,endinput,%
-      endlinechar,eqno,errhelp,errmessage,errorcontextlines,%
-      errorstopmode,escapechar,everycr,everydisplay,everyhbox,everyjob,%
-      everymath,everypar,everyvbox,exhyphenpenalty,expandafter,fam,fi,%
-      finalhypendemerits,firstmark,floatingpenalty,font,fontdimen,%
-      fontname,futurelet,gdef,global,globaldefs,halign,hangafter,%
-      hangindent,hbadness,hbox,hfil,hfill,hfilneg,hfuzz,hoffset,%
-      holdinginserts,hrule,hsize,hskip,hss,ht,hyphenation,hyphenchar,%
-      hyphenpenalty,if,ifcase,ifcat,ifdim,ifeof,iffalse,ifhbox,ifhmode,%
-      ifinner,ifmmode,ifnum,ifodd,iftrue,ifvbox,ifvmode,ifvoid,ifx,%
-      ignorespaces,immediate,indent,input,insert,insertpenalties,%
-      interlinepenalty,jobname,kern,language,lastbox,lastkern,%
-      lastpenalty,lastskip,lccode,leaders,left,lefthyphenmin,leftskip,%
-      leqno,let,limits,linepenalty,lineskip,lineskiplimit,long,%
-      looseness,lower,lowercase,mag,mark,mathaccent,mathbin,mathchar,%
-      mathchardef,mathchoice,mathclose,mathcode,mathinner,mathop,%
-      mathopen,mathord,mathpunct,mathrel,mathsurround,maxdeadcycles,%
-      maxdepth,meaning,medmuskip,message,mkern,month,moveleft,%
-      moveright,mskip,multiply,muskip,muskipdef,newlinechar,noalign,%
-      noboundary,noexpand,noindent,nolimits,nonscript,nonstopmode,%
-      nulldelimiterspace,nullfont,number,omit,openin,openout,or,outer,%
-      output,outputpenalty,over,overfullrule,overline,overwithdelims,%
-      pagedepth,pagefilllstretch,pagefillstretch,pagefilstretch,%
-      pagegoal,pageshrink,pagestretch,pagetotal,par,parfillskip,%
-      parindent,parshape,parskip,patterns,pausing,penalty,%
-      postdisplaypenalty,predisplaypenalty,predisplaysize,pretolerance,%
-      prevdepth,prevgraf,radical,raise,read,relax,relpenalty,right,%
-      righthyphenmin,rightskip,romannumeral,scriptfont,%
-      scriptscriptfont,scriptscriptstyle,scriptspace,scriptstyle,%
-      scrollmode,setbox,setlanguage,sfcode,shipout,show,showbox,%
-      showboxbreadth,showboxdepth,showlists,showthe,skewchar,skip,%
-      skipdef,spacefactor,spaceskip,span,special,splitbotmark,%
-      splitfirstmark,splitmaxdepth,splittopskip,string,tabskip,%
-      textfont,textstyle,the,thickmuskip,thinmuskip,time,toks,toksdef,%
-      tolerance,topmark,topskip,tracingcommands,tracinglostchars,%
-      tracingmacros,tracingonline,tracingoutput,tracingpages,%
-      tracingparagraphs,tracingrestores,tracingstats,uccode,uchyph,%
-      underline,unhbox,unhcopy,unkern,unpenalty,unskip,unvbox,unvcopy,%
-      uppercase,vadjust,valign,vbadness,vbox,vcenter,vfil,vfill,%
-      vfilneg,vfuzz,voffset,vrule,vsize,vskip,vsplit,vss,vtop,wd,%
-      widowpenalty,write,xdef,xleaders,xspaceskip,year},%
-   sensitive,%
-   alsoother={0123456789$_},%$ to make Emacs fontlocking happy
-   morecomment=[l]\%%
-  }[keywords,tex,comments]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{VBScript}
-%
-% \lstthanks{Sonja~Weidmann}{Sonja.Weidmann@sap.com}{2000/01/10}{VBScript}
-% sent me this language definition.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% VBScript definition (c) 2000 Sonja Weidmann
-%%
-\lst@definelanguage{VBScript}%
-  {morekeywords={Call,Case,Const,Dim,Do,Each,Else,End,Erase,Error,Exit,%
-      Explicit,For,Function,If,Loop,Next,On,Option,Private,Public,%
-      Randomize,ReDim,Rem,Select,Set,Sub,Then,Wend,While,Abs,Array,Asc,%
-      Atn,CBool,CByte,CCur,CDate,CDbl,Chr,CInt,CLng,Cos,CreateObject,%
-      CSng,CStr,Date,DateAdd,DateDiff,DatePart,DateSerial,DateValue,%
-      Day,Exp,Filter,Fix,FormatCurrency,FormatDateTime,FormatNumber,%
-      FormatPercent,GetObject,Hex,Hour,InputBox,InStr,InStrRev,Int,%
-      IsArray,IsDate,IsEmpty,IsNull,IsNumeric,IsObject,Join,LBound,%
-      LCase,Left,Len,LoadPicture,Log,LTrim,Mid,Minute,Month,MonthName,%
-      MsgBox,Now,Oct,Replace,RGB,Right,Rnd,Round,RTrim,ScriptEngine,%
-      ScriptEngineBuildVersion,ScriptEngineMajorVersion,%
-      ScriptEngineMinorVersion,Second,Sgn,Sin,Space,Split,Sqr,StrComp,%
-      StrReverse,String,Tan,Time,TimeSerial,TimeValue,Trim,TypeName,%
-      UBound,UCase,VarType,Weekday,WeekdayName,Year, And,Eqv,Imp,Is,%
-      Mod,Not,Or,Xor,Add,BuildPath,Clear,Close,Copy,CopyFile,%
-      CopyFolder,CreateFolder,CreateTextFile,Delete,DeleteFile,%
-      DeleteFolder,Dictionary,Drive,DriveExists,Drives,Err,Exists,File,%
-      FileExists,FileSystemObject,Files,Folder,FolderExists,Folders,%
-      GetAbsolutePathName,GetBaseName,GetDrive,GetDriveName,%
-      GetExtensionName,GetFile,GetFileName,GetFolder,%
-      GetParentFolderName,GetSpecialFolder,GetTempName,Items,Keys,Move,%
-      MoveFile,MoveFolder,OpenAsTextStream,OpenTextFile,Raise,Read,%
-      ReadAll,ReadLine,Remove,RemoveAll,Skip,SkipLine,TextStream,Write,%
-      WriteBlankLines,WriteLine,Alias,Archive,CDROM,Compressed,%
-      Directory,Fixed,ForAppending,ForReading,ForWriting,Hidden,Normal,%
-      RAMDisk,ReadOnly,Remote,Removable,System,SystemFolder,%
-      TemporaryFolder,TristateFalse,TristateTrue,TristateUseDefault,%
-      Unknown,Volume,WindowsFolder,vbAbortRetryIgnore,%
-      vbApplicationModal,vbArray,vbBinaryCompare,vbBlack,vbBlue,%
-      vbBoolean,vbByte,vbCr,vbCrLf,vbCritical,vbCurrency,vbCyan,%
-      vbDataObject,vbDate,vbDecimal,vbDefaultButton1,vbDefaultButton2,%
-      vbDefaultButton3,vbDefaultButton4,vbDouble,vbEmpty,vbError,%
-      vbExclamation,vbFirstFourDays,vbFirstFullWeek,vbFirstJan1,%
-      vbFormFeed,vbFriday,vbGeneralDate,vbGreen,vbInformation,%
-      vbInteger,vbLf,vbLong,vbLongDate,vbLongTime,vbMagenta,vbMonday,%
-      vbNewLine,vbNull,vbNullChar,vbNullString,vbOKC,ancel,vbOKOnly,%
-      vbObject,vbObjectError,vbQuestion,vbRed,vbRetryCancel,vbSaturday,%
-      vbShortDate,vbShortTime,vbSingle,vbString,vbSunday,vbSystemModal,%
-      vbTab,vbTextCompare,vbThursday,vbTuesday,vbUseSystem,%
-      vbUseSystemDayOfWeek,vbVariant,vbVerticalTab,vbWednesday,vbWhite,%
-      vbYellow,vbYesNo,vbYesNoCancel},%
-   sensitive=f,%
-   morecomment=[l]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{Verilog}
-%
-% Thanks to \lstthanks{Cameron H. G. Wright}{c.h.g.wright@ieee.org}{2003/04/30}
-% for providing the definition. After a bug report by \lsthelper{George
-% M.~Georgiou}{georgiou@csci.csusb.edu}{2004/02/05}{directives not detected} I
-% changed the declaration of directives to use normal keywords.
-% \begingroup
-%    \begin{macrocode}
-%<*lang3>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% Verilog definition (c) 2003 Cameron H. G. Wright <c.h.g.wright@ieee.org>
-%%   Based on the IEEE 1364-2001 Verilog HDL standard
-%%   Ref: S. Palnitkar, "Verilog HDL: A Guide to Digital Design and Synthesis,"
-%%        Prentice Hall, 2003. ISBN: 0-13-044911-3
-%%
-\lst@definelanguage{Verilog}%
-  {morekeywords={% reserved keywords
-      always,and,assign,automatic,begin,buf,bufif0,bufif1,case,casex,%
-      casez,cell,cmos,config,deassign,default,defparam,design,disable,%
-      edge,else,end,endcase,endconfig,endfunction,endgenerate,%
-      endmodule,endprimitive,endspecify,endtable,endtask,event,for,%
-      force,forever,fork,function,generate,genvar,highz0,highz1,if,%
-      ifnone,incdir,include,initial,inout,input,instance,integer,join,%
-      large,liblist,library,localparam,macromodule,medium,module,nand,%
-      negedge,nmos,nor,noshowcancelled,not,notif0,notif1,or,output,%
-      parameter,pmos,posedge,primitive,pull0,pull1,pulldown,pullup,%
-      pulsestyle_onevent,pulsestyle_ondetect,rcmos,real,realtime,reg,%
-      release,repeat,rnmos,rpmos,rtran,rtranif0,rtranif1,scalared,%
-      showcancelled,signed,small,specify,specparam,strong0,strong1,%
-      supply0,supply1,table,task,time,tran,tranif0,tranif1,tri,tri0,%
-      tri1,triand,trior,trireg,unsigned,use,vectored,wait,wand,weak0,%
-      weak1,while,wire,wor,xnor,xor},%
-   morekeywords=[2]{% system tasks and functions
-      $bitstoreal,$countdrivers,$display,$fclose,$fdisplay,$fmonitor,%
-      $fopen,$fstrobe,$fwrite,$finish,$getpattern,$history,$incsave,%
-      $input,$itor,$key,$list,$log,$monitor,$monitoroff,$monitoron,%
-      $nokey},%
-   morekeywords=[3]{% compiler directives
-      `accelerate,`autoexpand_vectornets,`celldefine,`default_nettype,%
-      `define,`else,`elsif,`endcelldefine,`endif,`endprotect,%
-      `endprotected,`expand_vectornets,`ifdef,`ifndef,`include,%
-      `no_accelerate,`noexpand_vectornets,`noremove_gatenames,%
-      `nounconnected_drive,`protect,`protected,`remove_gatenames,%
-      `remove_netnames,`resetall,`timescale,`unconnected_drive},%
-   alsoletter=\`,%
-   sensitive,%
-   morecomment=[s]{/*}{*/},%
-   morecomment=[l]//,% nonstandard
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang3>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{VHDL}
-%
-% This language is due to \lstthanks{Kai~Wollenweber}{kai@ece.wpi.edu}
-% {1997/11/04}{VHDL}. I've done conversion to version 0.19 only.
-% \lsthelper{Gaurav Aggarwal}{gaurav@ics.uci.edu}{1998/04/02}{sensitive=f}
-% reported that VHDL is case insensitive and \lsthelper{Arnaud~Tisserand}
-% {2003/02/17}{missing keywords: disconnect, elif, with} added three
-% keywords.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% VHDL definition (c) 1997 Kai Wollenweber
-%%
-\lst@definelanguage{VHDL}%
-  {morekeywords={ALL,ARCHITECTURE,ABS,AND,ASSERT,ARRAY,AFTER,ALIAS,%
-      ACCESS,ATTRIBUTE,BEGIN,BODY,BUS,BLOCK,BUFFER,CONSTANT,CASE,%
-      COMPONENT,CONFIGURATION,DOWNTO,ELSE,ELSIF,END,ENTITY,EXIT,%
-      FUNCTION,FOR,FILE,GENERIC,GENERATE,GUARDED,GROUP,IF,IN,INOUT,IS,%
-      INERTIAL,IMPURE,LIBRARY,LOOP,LABEL,LITERAL,LINKAGE,MAP,MOD,NOT,%
-      NOR,NAND,NULL,NEXT,NEW,OUT,OF,OR,OTHERS,ON,OPEN,PROCESS,PORT,%
-      PACKAGE,PURE,PROCEDURE,POSTPONED,RANGE,REM,ROL,ROR,REPORT,RECORD,%
-      RETURN,REGISTER,REJECT,SIGNAL,SUBTYPE,SLL,SRL,SLA,SRA,SEVERITY,%
-      SELECT,THEN,TYPE,TRANSPORT,TO,USE,UNITS,UNTIL,VARIABLE,WHEN,WAIT,%
-      WHILE,XOR,XNOR,%
-      DISCONNECT,ELIF,WITH},% Arnaud Tisserand
-   sensitive=f,% 1998 Gaurav Aggarwal
-   morecomment=[l]--,%
-   morestring=[d]{"}%
-  }[keywords,comments,strings]%
-%    \end{macrocode}
-% The VHDL-AMS dialect has been added by \lstthanks{Steffen~Klupsch}
-% {steffen@vlsi.informatik.tu-darmstadt.de}{2001/10/05}.
-%    \begin{macrocode}
-%%
-%% VHDL-AMS definition (c) Steffen Klupsch
-%%
-\lst@definelanguage[AMS]{VHDL}[]{VHDL}%
-  {morekeywords={ACROSS,ARRAY,BREAK,DISCONNECT,NATURE,NOISE,PORT,%
-      PROCEDURAL,QUANTITY,SHARED,SPECTRUM,SUBNATURE,TERMINAL,THROUGH,%
-      TOLERANCE,UNAFFACTED,UNITS}}
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{VRML}
-%
-% This language is due to \lstthanks{Oliver~Baum}{oli.baum@web.de}{2001/07/10}
-% {VRML}.
-% \begingroup
-%    \begin{macrocode}
-%<*lang2>
-%    \end{macrocode}
-%    \begin{macrocode}
-%%
-%% VRML definition (c) 2001 Oliver Baum
-%%
-\lst@definelanguage[97]{VRML}
-  {morekeywords={DEF,EXTERNPROTO,FALSE,IS,NULL,PROTO,ROUTE,TO,TRUE,USE,%
-      eventIn,eventOut,exposedField,field,Introduction,Anchor,%
-      Appearance,AudioClip,Background,Billboard,Box,Collision,Color,%
-      ColorInterpolator,Cone,Coordinate,CoordinateInterpolator,%
-      Cylinder,CylinderSensor,DirectionalLight,ElevationGrid,Extrusion,%
-      Fog,FontStyle,Group,ImageTexture,IndexedFaceSet,IndexedLineSet,%
-      Inline,LOD,Material,MovieTexture,NavigationInfo,Normal,%
-      NormalInterpolator,OrientationInterpolator,PixelTexture,%
-      PlaneSensor,PointLight,PointSet,PositionInterpolator,%
-      ProximitySensor,ScalarInterpolator,Script,Shape,Sound,Sphere,%
-      SphereSensor,SpotLight,Switch,Text,TextureCoordinate,%
-      TextureTransform,TimeSensor,TouchSensor,Transform,Viewpoint,%
-      VisibilitySensor,WorldInfo},%
-   morecomment=[l]\#,% bug: starts comment in the first column
-   morestring=[b]"%
-  }[keywords,comments,strings]
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang2>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \subsection{XML et al}
-%
-% \lstthanks{Bernhard~Walle}{bernhard@bwalle.de}{2003/11/22} provided the
-% following two definitions.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{XSLT}[]{XML}%
-  {morekeywords={%
-     % main elements
-     xsl:stylesheet,xsl:transform,%
-     % childs of the main element
-     xsl:apply-imports,xsl:attribute-set,xsl:decimal-format,xsl:import,%
-     xsl:include,xsl:key,xsl:namespace-alias,xsl:output,xsl:param,%
-     xsl:preserve-space,xsl:strip-space,xsl:template,xsl:variable,%
-     % 21 directives
-     xsl:apply-imports,xsl:apply-templates,xsl:attribute,%
-     xsl:call-template,xsl:choose,xsl:comment,xsl:copy,xsl:copy-of,%
-     xsl:element,xsl:fallback,xsl:for-each,xsl:if,xsl:message,%
-     xsl:number,xsl:otherwise,xsl:processing-instruction,xsl:text,%
-     xsl:value-of,xsl:variable,xsl:when,xsl:with-param},%
-   alsodigit={-},%
-  }%
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{Ant}[]{XML}%
-  {morekeywords={%
-     project,target,patternset,include,exclude,excludesfile,includesfile,filterset,%
-     filter,filtersfile,libfileset,custom,classpath,fileset,none,depend,mapper,%
-     filename,not,date,contains,selector,depth,or,and,present,majority,size,dirset,%
-     filelist,pathelement,path,param,filterreader,extension,filterchain,linecontainsregexp,%
-     regexp,classconstants,headfilter,tabstospaces,striplinebreaks,tailfilter,stripjavacomments,%
-     expandproperties,linecontains,replacetokens,token,striplinecomments,comment,prefixlines,%
-     classfileset,rootfileset,root,description,xmlcatalog,entity,dtd,substitution,%
-     extensionSet,propertyfile,entry,vsscheckin,sql,transaction,cvspass,csc,%
-     dirname,wlrun,wlclasspath,p4label,replaceregexp,get,jjtree,sleep,jarlib,%
-     dependset,targetfileset,srcfileset,srcfilelist,targetfilelist,zip,zipgroupfileset,zipfileset,%
-     patch,jspc,webapp,style,test,arg,jvmarg,sysproperty,testlet,env,tstamp,%
-     format,unwar,vsshistory,icontract,cvschangelog,user,p4submit,ccmcheckin,%
-     p4change,bzip2,vssadd,javadoc,bottom,source,doctitle,header,excludepackage,bootclasspath,%
-     doclet,taglet,packageset,sourcepath,link,footer,package,group,title,tag,%
-     translate,signjar,vajload,vajproject,jarlib,extensionset,WsdlToDotnet,buildnumber,%
-     jpcovmerge,tomcat,ejbjar,weblogictoplink,jboss,borland,weblogic,iplanet,jonas,%
-     support,websphere,wasclasspath,war,manifest,attribute,section,metainf,lib,%
-     classes,webinf,rename,sequential,serverdeploy,generic,property,move,%
-     copydir,cccheckin,wljspc,fixcrlf,sosget,pathconvert,map,record,p4sync,exec,%
-     p4edit,maudit,rulespath,searchpath,antlr,netrexxc,jpcovreport,reference,filters,%
-     coveragepath,execon,targetfile,srcfile,ccmcheckout,ant,xmlvalidate,xslt,%
-     iplanet,ccmcheckintask,gzip,native2ascii,starteam,ear,archives,input,%
-     rmic,extdirs,compilerarg,checksum,mail,bcc,message,cc,to,from,loadfile,vsscheckout,%
-     stylebook,soscheckin,mimemail,stlabel,gunzip,concat,cab,touch,parallel,splash,%
-     antcall,cccheckout,typedef,p4have,xmlproperty,copy,tomcat,antstructure,ccmcreatetask,%
-     rpm,delete,replace,replacefilter,replacetoken,replacevalue,mmetrics,waitfor,isfalse,%
-     equals,available,filepath,os,filesmatch,istrue,isset,socket,http,uptodate,srcfiles,%
-     untar,loadproperties,echoproperties,vajexport,stcheckout,bunzip2,copyfile,vsscreate,%
-     ejbc,unjar,tomcat,wsdltodotnet,mkdir,condition,cvs,commandline,marker,argument,%
-     tempfile,junitreport,report,taskdef,echo,ccupdate,java,renameext,vsslabel,basename,%
-     javadoc2,vsscp,tar,tarfileset,tomcat,vajimport,setproxy,wlstop,p4counter,ilasm,%
-     soscheckout,apply,ccuncheckout,jarlib,location,url,cvstagdiff,jlink,mergefiles,%
-     addfiles,javacc,pvcs,pvcsproject,jarlib,options,depends,chmod,jar,sound,fail,%
-     success,mparse,blgenclient,genkey,dname,javah,class,ccmreconfigure,unzip,javac,%
-     src,p4add,soslabel,jpcoverage,triggers,method,vssget,deltree,ddcreator},
-   deletekeywords={default},%
-  }
-%    \end{macrocode}
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-% This is my first attempt to support XML. It is from 2000/07/18.
-% \begingroup
-%    \begin{macrocode}
-%<*lang1>
-%    \end{macrocode}
-%    \begin{macrocode}
-\lst@definelanguage{XML}%
-  {keywords={,CDATA,DOCTYPE,ATTLIST,termdef,ELEMENT,EMPTY,ANY,ID,%
-      IDREF,IDREFS,ENTITY,ENTITIES,NMTOKEN,NMTOKENS,NOTATION,%
-      INCLUDE,IGNORE,SYSTEM,PUBLIC,NDATA,PUBLIC,%
-      PCDATA,REQUIRED,IMPLIED,FIXED,%%% preceded by #
-      xml,xml:space,xml:lang,version,standalone,default,preserve},%
-   alsoother=$,%
-   alsoletter=:,%
-   tag=**[s]<>,%
-   morestring=[d]",% ??? doubled
-   morestring=[d]',% ??? doubled
-   MoreSelectCharTable=%
-      \lst@CArgX--\relax\lst@DefDelimB{}{}%
-          {\ifnum\lst@mode=\lst@tagmode\else
-               \expandafter\@gobblethree
-           \fi}%
-          \lst@BeginComment\lst@commentmode{{\lst@commentstyle}}%
-      \lst@CArgX--\relax\lst@DefDelimE{}{}{}%
-          \lst@EndComment\lst@commentmode
-      \lst@CArgX[CDATA[\relax\lst@CDef{}%
-          {\ifnum\lst@mode=\lst@tagmode
-               \expandafter\lst@BeginCDATA
-           \else \expandafter\lst@CArgEmpty
-           \fi}%
-          \@empty
-      \lst@CArgX]]\relax\lst@CDef{}%
-          {\ifnum\lst@mode=\lst@GPmode
-               \expandafter\lst@EndComment
-           \else \expandafter\lst@CArgEmpty
-           \fi}%
-          \@empty
-  }[keywords,comments,strings,html]%
-%    \end{macrocode}
-% And after receiving a bug report from \lsthelper{Michael~Niedermair}
-% {m.g.n@gmx.de}{2002/04/07}{undefined control sequence \lst@commentmode} I
-% converted the version 0.21 contents of |MoreSelectCharTable| to version 1.0.
-%    \begin{macrocode}
-%</lang1>
-%    \end{macrocode}
-% \endgroup
-%
-%
-% \ifmulticols
-% \addtocontents{toc}{\protect\end{multicols}}
-% \fi
-%
-%^^A \setcounter{IndexColumns}{2}
-%^^A \PrintIndex
-%
-%
-% \Finale
-%
-\endinput
Index: doc/LaTeXmacros/listings/lstdrvrs.ins
===================================================================
--- doc/LaTeXmacros/listings/lstdrvrs.ins	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,61 +1,0 @@
-%%
-%% This is file `lstdrvrs.ins',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% lstdrvrs.dtx  (with options: `install')
-%% 
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\input docstrip
-\preamble
-\endpreamble
-
-\ifToplevel{
-\usedir{tex/latex/listings}
-\keepsilent
-\askonceonly
-}
-
-\generate{
-    \file{lstlang1.sty}{\from{lstdrvrs.dtx}{lang1}}
-    \file{lstlang2.sty}{\from{lstdrvrs.dtx}{lang2}}
-    \file{lstlang3.sty}{\from{lstdrvrs.dtx}{lang3}}
-}
-
-\generate{
-    \file{listings-acm.prf}{\from{lstdrvrs.dtx}{acm-prf}}
-    \file{listings-bash.prf}{\from{lstdrvrs.dtx}{bash-prf}}
-    \file{listings-fortran.prf}{\from{lstdrvrs.dtx}{fortran-prf}}
-    \file{listings-lua.prf}{\from{lstdrvrs.dtx}{lua-prf}}
-    \file{listings-python.prf}{\from{lstdrvrs.dtx}{python-prf}}
-}
-
-\ifToplevel{
-\Msg{*}
-\Msg{* You probably need to move all created `.sty' and `.cfg'}
-\Msg{* files into a directory searched by TeX.}
-\Msg{*}
-\Msg{* Run `lstdrvrs.dtx' through LaTeX2e to get the documentation.}
-\Msg{*}
-}
-
-\endbatchfile
-    [2015/06/04 1.6 listings language file]
-\endinput
-%%
-%% End of file `lstdrvrs.ins'.
Index: doc/LaTeXmacros/listings/lstlang1.sty
===================================================================
--- doc/LaTeXmacros/listings/lstlang1.sty	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,1615 +1,0 @@
-%%
-%% This is file `lstlang1.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% lstdrvrs.dtx  (with options: `lang1')
-%% 
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\ProvidesFile{lstlang1.sty}
-    [2015/06/04 1.6 listings language file]
-%%
-%% ACSL definition (c) 2000 by Andreas Matthias
-%%
-\lst@definelanguage{ACSL}[90]{Fortran}%
-   {morekeywords={algorithm,cinterval,constant,derivative,discrete,%
-         dynamic,errtag,initial,interval,maxterval,minterval,%
-         merror,xerror,nsteps,procedural,save,schedule,sort,%
-         table,terminal,termt,variable},%
-    sensitive=false,%
-    morecomment=[l]!%
-   }[keywords, comments]%
-%%
-%% Ada 95 definition (c) Torsten Neuer
-%%
-%% Ada 2005 definition (c) 2006 Santiago Urue\~{n}a Pascual
-%%                              <Santiago.Uruena@upm.es>
-%%
-\lst@definelanguage[2005]{Ada}[95]{Ada}%
-  {morekeywords={interface,overriding,synchronized}}%
-\lst@definelanguage[95]{Ada}[83]{Ada}%
-  {morekeywords={abstract,aliased,protected,requeue,tagged,until}}%
-\lst@definelanguage[83]{Ada}%
-  {morekeywords={abort,abs,accept,access,all,and,array,at,begin,body,%
-      case,constant,declare,delay,delta,digits,do,else,elsif,end,entry,%
-      exception,exit,for,function,generic,goto,if,in,is,limited,loop,%
-      mod,new,not,null,of,or,others,out,package,pragma,private,%
-      procedure,raise,range,record,rem,renames,return,reverse,select,%
-      separate,subtype,task,terminate,then,type,use,when,while,with,%
-      xor},%
-   sensitive=f,%
-   morecomment=[l]--,%
-   morestring=[m]",% percent not defined as stringizer so far
-   morestring=[m]'%
-  }[keywords,comments,strings]%
-%%
-%% awk definitions (c) Christoph Giess
-%%
-\lst@definelanguage[gnu]{Awk}[POSIX]{Awk}%
-  {morekeywords={and,asort,bindtextdomain,compl,dcgettext,gensub,%
-      lshift,mktime,or,rshift,strftime,strtonum,systime,xor,extension}%
-  }%
-\lst@definelanguage[POSIX]{Awk}%
-  {keywords={BEGIN,END,close,getline,next,nextfile,print,printf,%
-      system,fflush,atan2,cos,exp,int,log,rand,sin,sqrt,srand,gsub,%
-      index,length,match,split,sprintf,strtonum,sub,substr,tolower,%
-      toupper,if,while,do,for,break,continue,delete,exit,function,%
-      return},%
-   sensitive,%
-   morecomment=[l]\#,%
-   morecomment=[l]//,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%%
-%% Visual Basic definition (c) 2002 Robert Frank
-%%
-\lst@definelanguage[Visual]{Basic}
-  {morekeywords={Abs,Array,Asc,AscB,AscW,Atn,Avg,CBool,CByte,CCur,%
-      CDate,CDbl,Cdec,Choose,Chr,ChrB,ChrW,CInt,CLng,Command,Cos,%
-      Count,CreateObject,CSng,CStr,CurDir,CVar,CVDate,CVErr,Date,%
-      DateAdd,DateDiff,DatePart,DateSerial,DateValue,Day,DDB,Dir,%
-      DoEvents,Environ,EOF,Error,Exp,FileAttr,FileDateTime,FileLen,%
-      Fix,Format,FreeFile,FV,GetAllStrings,GetAttr,%
-      GetAutoServerSettings,GetObject,GetSetting,Hex,Hour,IIf,%
-      IMEStatus,Input,InputB,InputBox,InStr,InstB,Int,Integer,IPmt,%
-      IsArray,IsDate,IsEmpty,IsError,IsMissing,IsNull,IsNumeric,%
-      IsObject,LBound,LCase,Left,LeftB,Len,LenB,LoadPicture,Loc,LOF,%
-      Log,Ltrim,Max,Mid,MidB,Min,Minute,MIRR,Month,MsgBox,Now,NPer,%
-      NPV,Oct,Partition,Pmt,PPmt,PV,QBColor,Rate,RGB,Right,RightB,Rnd,%
-      Rtrim,Second,Seek,Sgn,Shell,Sin,SLN,Space,Spc,Sqr,StDev,StDevP,%
-      Str,StrComp,StrConv,String,Switch,Sum,SYD,Tab,Tan,Time,Timer,%
-      TimeSerial,TimeValue,Trim,TypeName,UBound,Ucase,Val,Var,VarP,%
-      VarType,Weekday,Year},% functions
-   morekeywords=[2]{Accept,Activate,Add,AddCustom,AddFile,AddFromFile,%
-      AddFromTemplate,AddItem,AddNew,AddToAddInToolbar,%
-      AddToolboxProgID,Append,AppendChunk,Arrange,Assert,AsyncRead,%
-      BatchUpdate,BeginTrans,Bind,Cancel,CancelAsyncRead,CancelBatch,%
-      CancelUpdate,CanPropertyChange,CaptureImage,CellText,CellValue,%
-      Circle,Clear,ClearFields,ClearSel,ClearSelCols,Clone,Close,Cls,%
-      ColContaining,ColumnSize,CommitTrans,CompactDatabase,Compose,%
-      Connect,Copy,CopyQueryDef,CreateDatabase,CreateDragImage,%
-      CreateEmbed,CreateField,CreateGroup,CreateIndex,CreateLink,%
-      CreatePreparedStatement,CreatePropery,CreateQuery,%
-      CreateQueryDef,CreateRelation,CreateTableDef,CreateUser,%
-      CreateWorkspace,Customize,Delete,DeleteColumnLabels,%
-      DeleteColumns,DeleteRowLabels,DeleteRows,DoVerb,Drag,Draw,Edit,%
-      EditCopy,EditPaste,EndDoc,EnsureVisible,EstablishConnection,%
-      Execute,ExtractIcon,Fetch,FetchVerbs,Files,FillCache,Find,%
-      FindFirst,FindItem,FindLast,FindNext,FindPrevious,Forward,%
-      GetBookmark,GetChunk,GetClipString,GetData,GetFirstVisible,%
-      GetFormat,GetHeader,GetLineFromChar,GetNumTicks,GetRows,%
-      GetSelectedPart,GetText,GetVisibleCount,GoBack,GoForward,Hide,%
-      HitTest,HoldFields,Idle,InitializeLabels,InsertColumnLabels,%
-      InsertColumns,InsertObjDlg,InsertRowLabels,InsertRows,Item,%
-      KillDoc,Layout,Line,LinkExecute,LinkPoke,LinkRequest,LinkSend,%
-      Listen,LoadFile,LoadResData,LoadResPicture,LoadResString,%
-      LogEvent,MakeCompileFile,MakeReplica,MoreResults,Move,MoveData,%
-      MoveFirst,MoveLast,MoveNext,MovePrevious,NavigateTo,NewPage,%
-      NewPassword,NextRecordset,OLEDrag,OnAddinsUpdate,OnConnection,%
-      OnDisconnection,OnStartupComplete,Open,OpenConnection,%
-      OpenDatabase,OpenQueryDef,OpenRecordset,OpenResultset,OpenURL,%
-      Overlay,PaintPicture,Paste,PastSpecialDlg,PeekData,Play,Point,%
-      PopulatePartial,PopupMenu,Print,PrintForm,PropertyChanged,Pset,%
-      Quit,Raise,RandomDataFill,RandomFillColumns,RandomFillRows,%
-      rdoCreateEnvironment,rdoRegisterDataSource,ReadFromFile,%
-      ReadProperty,Rebind,ReFill,Refresh,RefreshLink,RegisterDatabase,%
-      Reload,Remove,RemoveAddInFromToolbar,RemoveItem,Render,%
-      RepairDatabase,Reply,ReplyAll,Requery,ResetCustom,%
-      ResetCustomLabel,ResolveName,RestoreToolbar,Resync,Rollback,%
-      RollbackTrans,RowBookmark,RowContaining,RowTop,Save,SaveAs,%
-      SaveFile,SaveToFile,SaveToolbar,SaveToOle1File,Scale,ScaleX,%
-      ScaleY,Scroll,Select,SelectAll,SelectPart,SelPrint,Send,%
-      SendData,Set,SetAutoServerSettings,SetData,SetFocus,SetOption,%
-      SetSize,SetText,SetViewport,Show,ShowColor,ShowFont,ShowHelp,%
-      ShowOpen,ShowPrinter,ShowSave,ShowWhatsThis,SignOff,SignOn,Size,%
-      Span,SplitContaining,StartLabelEdit,StartLogging,Stop,%
-      Synchronize,TextHeight,TextWidth,ToDefaults,TwipsToChartPart,%
-      TypeByChartType,Update,UpdateControls,UpdateRecord,UpdateRow,%
-      Upto,WhatsThisMode,WriteProperty,ZOrder},% methods
-   morekeywords=[3]{AccessKeyPress,AfterAddFile,AfterChangeFileName,%
-      AfterCloseFile,AfterColEdit,AfterColUpdate,AfterDelete,%
-      AfterInsert,AfterLabelEdit,AfterRemoveFile,AfterUpdate,%
-      AfterWriteFile,AmbienChanged,ApplyChanges,Associate,%
-      AsyncReadComplete,AxisActivated,AxisLabelActivated,%
-      AxisLabelSelected,AxisLabelUpdated,AxisSelected,%
-      AxisTitleActivated,AxisTitleSelected,AxisTitleUpdated,%
-      AxisUpdated,BeforeClick,BeforeColEdit,BeforeColUpdate,%
-      BeforeConnect,BeforeDelete,BeforeInsert,BeforeLabelEdit,%
-      BeforeLoadFile,BeforeUpdate,ButtonClick,ButtonCompleted,%
-      ButtonGotFocus,ButtonLostFocus,Change,ChartActivated,%
-      ChartSelected,ChartUpdated,Click,ColEdit,Collapse,ColResize,%
-      ColumnClick,Compare,ConfigChageCancelled,ConfigChanged,%
-      ConnectionRequest,DataArrival,DataChanged,DataUpdated,DblClick,%
-      Deactivate,DeviceArrival,DeviceOtherEvent,DeviceQueryRemove,%
-      DeviceQueryRemoveFailed,DeviceRemoveComplete,DeviceRemovePending,%
-      DevModeChange,Disconnect,DisplayChanged,Dissociate,%
-      DoGetNewFileName,Done,DonePainting,DownClick,DragDrop,DragOver,%
-      DropDown,EditProperty,EnterCell,EnterFocus,Event,ExitFocus,%
-      Expand,FootnoteActivated,FootnoteSelected,FootnoteUpdated,%
-      GotFocus,HeadClick,InfoMessage,Initialize,IniProperties,%
-      ItemActivated,ItemAdded,ItemCheck,ItemClick,ItemReloaded,%
-      ItemRemoved,ItemRenamed,ItemSeletected,KeyDown,KeyPress,KeyUp,%
-      LeaveCell,LegendActivated,LegendSelected,LegendUpdated,%
-      LinkClose,LinkError,LinkNotify,LinkOpen,Load,LostFocus,%
-      MouseDown,MouseMove,MouseUp,NodeClick,ObjectMove,%
-      OLECompleteDrag,OLEDragDrop,OLEDragOver,OLEGiveFeedback,%
-      OLESetData,OLEStartDrag,OnAddNew,OnComm,Paint,PanelClick,%
-      PanelDblClick,PathChange,PatternChange,PlotActivated,%
-      PlotSelected,PlotUpdated,PointActivated,PointLabelActivated,%
-      PointLabelSelected,PointLabelUpdated,PointSelected,%
-      PointUpdated,PowerQuerySuspend,PowerResume,PowerStatusChanged,%
-      PowerSuspend,QueryChangeConfig,QueryComplete,QueryCompleted,%
-      QueryTimeout,QueryUnload,ReadProperties,Reposition,%
-      RequestChangeFileName,RequestWriteFile,Resize,ResultsChanged,%
-      RowColChange,RowCurrencyChange,RowResize,RowStatusChanged,%
-      SelChange,SelectionChanged,SendComplete,SendProgress,%
-      SeriesActivated,SeriesSelected,SeriesUpdated,SettingChanged,%
-      SplitChange,StateChanged,StatusUpdate,SysColorsChanged,%
-      Terminate,TimeChanged,TitleActivated,TitleSelected,%
-      TitleActivated,UnboundAddData,UnboundDeleteRow,%
-      UnboundGetRelativeBookmark,UnboundReadData,UnboundWriteData,%
-      Unload,UpClick,Updated,Validate,ValidationError,WillAssociate,%
-      WillChangeData,WillDissociate,WillExecute,WillUpdateRows,%
-      WithEvents,WriteProperties},% VB-events
-   morekeywords=[4]{AppActivate,Base,Beep,Call,Case,ChDir,ChDrive,%
-      Const,Declare,DefBool,DefByte,DefCur,DefDate,DefDbl,DefDec,%
-      DefInt,DefLng,DefObj,DefSng,DefStr,Deftype,DefVar,DeleteSetting,%
-      Dim,Do,Else,ElseIf,End,Enum,Erase,Event,Exit,Explicit,FileCopy,%
-      For,ForEach,Friend,Function,Get,GoSub,GoTo,If,Implements,Kill,%
-      Let,LineInput,Lock,Lset,MkDir,Name,Next,OnError,On,Option,%
-      Private,Property,Public,Put,RaiseEvent,Randomize,ReDim,Rem,%
-      Reset,Resume,Return,RmDir,Rset,SavePicture,SaveSetting,%
-      SendKeys,SetAttr,Static,Sub,Then,Type,Unlock,Wend,While,Width,%
-      With,Write},% statements
-   sensitive=false,%
-   keywordcomment=rem,%
-   MoreSelectCharTable=\def\lst@BeginKC@{% chmod
-      \lst@ResetToken
-      \lst@BeginComment\lst@GPmode{{\lst@commentstyle}%
-                       \lst@Lmodetrue\lst@modetrue}\@empty},%
-   morecomment=[l]{'},%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]",%
-   }[keywords,comments,strings,keywordcomments]
-\lst@definelanguage[11]{C++}[ISO]{C++}%
-  {morekeywords={alignas,alignof,char16_t,char32_t,constexpr,%
-      decltype,noexcept,nullptr,static_assert,thread_local},%
-  }%
-\lst@definelanguage[ANSI]{C++}[ISO]{C++}{}%
-\lst@definelanguage[GNU]{C++}[ISO]{C++}%
-  {morekeywords={__attribute__,__extension__,__restrict,__restrict__,%
-      typeof,__typeof__},%
-  }%
-\lst@definelanguage[Visual]{C++}[ISO]{C++}%
-  {morekeywords={__asm,__based,__cdecl,__declspec,dllexport,%
-      dllimport,__except,__fastcall,__finally,__inline,__int8,__int16,%
-      __int32,__int64,naked,__stdcall,thread,__try,__leave},%
-  }%
-\lst@definelanguage[ISO]{C++}[ANSI]{C}%
-  {morekeywords={and,and_eq,asm,bad_cast,bad_typeid,bitand,bitor,bool,%
-      catch,class,compl,const_cast,delete,dynamic_cast,explicit,export,%
-      false,friend,inline,mutable,namespace,new,not,not_eq,operator,or,%
-      or_eq,private,protected,public,reinterpret_cast,static_cast,%
-      template,this,throw,true,try,typeid,type_info,typename,using,%
-      virtual,wchar_t,xor,xor_eq},%
-  }%
-%%
-%% Objective-C definition (c) 1997 Detlev Droege
-%%
-\lst@definelanguage[Objective]{C}[ANSI]{C}
-  {morekeywords={bycopy,id,in,inout,oneway,out,self,super,%
-      @class,@defs,@encode,@end,@implementation,@interface,@private,%
-      @protected,@protocol,@public,@selector},%
-   moredirectives={import}%
-  }%
-%%
-%% Handel-C definition, refer http://www.celoxica.com
-%%
-\lst@definelanguage[Handel]{C}[ANSI]{C}
-  {morekeywords={assert,chan,chanin,chanout,clock,delay,expr,external,%
-      external_divide,family,ifselect,in,inline,interface,internal,%
-      internal_divid,intwidth,let,macro,mpram,par,part,prialt,proc,ram,%
-      releasesema,reset,rom,select,sema,set,seq,shared,signal,try,%
-      reset,trysema,typeof,undefined,width,with,wom},%
-  }%
-\lst@definelanguage[ANSI]{C}%
-  {morekeywords={auto,break,case,char,const,continue,default,do,double,%
-      else,enum,extern,float,for,goto,if,int,long,register,return,%
-      short,signed,sizeof,static,struct,switch,typedef,union,unsigned,%
-      void,volatile,while},%
-   sensitive,%
-   morecomment=[s]{/*}{*/},%
-   morecomment=[l]//,% nonstandard
-   morestring=[b]",%
-   morestring=[b]',%
-   moredelim=*[directive]\#,%
-   moredirectives={define,elif,else,endif,error,if,ifdef,ifndef,line,%
-      include,pragma,undef,warning}%
-  }[keywords,comments,strings,directives]%
-%%
-%% C-Sharp definition (c) 2002 Martin Brodbeck
-%%
-\lst@definelanguage[Sharp]{C}%
-  {morekeywords={abstract,base,bool,break,byte,case,catch,char,checked,%
-      class,const,continue,decimal,default,delegate,do,double,else,%
-      enum,event,explicit,extern,false,finally,fixed,float,for,foreach,%
-      goto,if,implicit,in,int,interface,internal,is,lock,long,%
-      namespace,new,null,object,operator,out,override,params,private,%
-      protected,public,readonly,ref,return,sbyte,sealed,short,sizeof,%
-      static,string,struct,switch,this,throw,true,try,typeof,uint,%
-      ulong,unchecked,unsafe,ushort,using,virtual,void,while,%
-      as,volatile,stackalloc},% Kai K\"ohne
-   sensitive,%
-   morecomment=[s]{/*}{*/},%
-   morecomment=[l]//,%
-   morestring=[b]"
-  }[keywords,comments,strings]%
-%%
-%% csh definition (c) 1998 Kai Below
-%%
-\lst@definelanguage{csh}
-  {morekeywords={alias,awk,cat,echo,else,end,endif,endsw,exec,exit,%
-      foreach,glob,goto,history,if,logout,nice,nohup,onintr,repeat,sed,%
-      set,setenv,shift,source,switch,then,time,while,umask,unalias,%
-      unset,wait,while,@,env,argv,child,home,ignoreeof,noclobber,%
-      noglob,nomatch,path,prompt,shell,status,verbose,print,printf,%
-      sqrt,BEGIN,END},%
-   morecomment=[l]\#,%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%%
-%% bash,sh definition (c) 2003 Riccardo Murri <riccardo.murri@gmx.it>
-%%
-\lst@definelanguage{bash}[]{sh}%
-  {morekeywords={alias,bg,bind,builtin,caller,command,compgen,compopt,%
-      complete,coproc,declare,disown,dirs,enable,fc,fg,help,history,%
-      jobs,let,local,logout,mapfile,printf,pushd,popd,readarray,select,%
-      set,suspend,shopt,source,times,type,typeset,ulimit,unalias,wait},%
-  }%
-\lst@definelanguage{sh}%
-  {morekeywords={awk,break,case,cat,cd,continue,do,done,echo,elif,else,%
-      env,esac,eval,exec,exit,export,expr,false,fi,for,function,getopts,%
-      hash,history,if,in,kill,login,newgrp,nice,nohup,ps,pwd,read,%
-      readonly,return,set,sed,shift,test,then,times,trap,true,type,%
-      ulimit,umask,unset,until,wait,while},%
-   morecomment=[l]\#,%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-\lst@definelanguage[08]{Fortran}[03]{Fortran}{%
-  morekeywords={ALL, BLOCK, CODIMENSION, CONCURRENT, CONTIGUOUS, CRITICAL,%
-    ERROR, LOCK, SUBMODULE, SYNC, UNLOCK},%
-    morekeywords=[3]{ACOSH,ASINH,ATANH,ATOMIC_DEFINE,ATOMIC_REF,BESSEL_J0,%
-      BESSEL_J1,BESSEL_JN,BESSEL_Y0,BESSEL_Y1,BESSEL_YN,BGE,BGT,BLE,BLT,%
-      C_SIZEOF,COMPILER_OPTIONS,COMPILER_VERSION,DSHIFTL,DSHIFTR,ERF,ERFC,%
-      ERFC_SCALED,EXECUTE_COMMAND_LINE,GAMMA,HYPOT,IALL,IANY,IMAGE_INDEX,%
-      IPARITY,LCOBOUND,LEADZ,LOG_GAMMA,MASKL,MASKR,MERGE_BITS,NORM2,%
-      NUM_IMAGES,PARITY,POPCNT,POPPAR,SHIFTA,SHIFTL,SHIFTR,STORAGE_SIZE,%
-      THIS_IMAGE,TRAILZ,UCOBOUND}%
-}%
-\lst@definelanguage[03]{Fortran}[95]{Fortran}{%
-  morekeywords={ABSTRACT, ASSOCIATE, ASYNCHRONOUS, BIND, CLASS, DEFERRED,%
-    ENUM, ENUMERATOR, EXTENDS, FINAL, FLUSH, GENERIC, IMPORT,%
-    NON_OVERRIDABLE, NOPASS, PASS, PROTECTED, VALUE, VOLATILE, WAIT},%
-    morekeywords=[2]{DECIMAL,ENCODING,IOMSG,ROUND},% corrected NML from NMT
-    morekeywords=[3]{C_ASSOCIATED,C_F_POINTER,C_F_PROCPOINTER,C_FUNLOC,%
-    C_LOC,COMMAND_ARGUMENT_COUNT,EXTENDS_TYPE_OF,GET_COMMAND,GET_COMMAND_ARGUMENT,%
-    GET_ENVIRONMENT_VARIABLE,IS_IOSTAT_END,MOVE_ALLOC,NEW_LINE,SAME_TYPE_AS,%
-    SELECTED_CHAR_KIND}%
-}%
-\lst@definelanguage[90]{Fortran}[95]{Fortran}{}
-\lst@definelanguage[95]{Fortran}[77]{Fortran}%
-  {deletekeywords=SAVE,%
-   morekeywords={ALLOCATABLE,ALLOCATE,ASSIGNMENT,CASE,%
-      CONTAINS,CYCLE,DEALLOCATE,DEFAULT,EXIT,INCLUDE,IN,NONE,%
-      OUT,INTENT,INTERFACE,MODULE,NAMELIST,%
-      NULLIFY,ONLY,OPERATOR,OPTIONAL,OUT,POINTER,PRIVATE,%
-      PUBLIC,RECURSIVE,RESULT,SELECT,SEQUENCE,%
-      TARGET,USE,WHERE,WHILE,BLOCKDATA,DOUBLEPRECISION,%
-      ENDBLOCKDATA,ENDFILE,ENDFUNCTION,ENDINTERFACE,%
-      ENDMODULE,ENDPROGRAM,ENDSELECT,ENDSUBROUTINE,ENDTYPE,ENDWHERE,%
-      INOUT,SELECTCASE,%
-      ELEMENTAL, ELSEWHERE, FORALL, PURE},%
-    morekeywords=[2]{ACTION,ADVANCE,DELIM,IOLENGTH,LEN,NAME,%
-      NML,PAD,POSITION,READWRITE,SIZE,STAT},% corrected NML from NMT
-    morekeywords=[3]{ADJUSTL,ADJUSTR,ALL,ALLOCATED,ANY,ASSOCIATED,BIT_SIZE,%
-    BTEST,CEILING,COUNT,CPU_TIME,CSHIFT,DATE_AND_TIME,DIGITS,DOT_PRODUCT,%
-    EOSHIFT,EPSILON,EXPONENT,FLOOR,FRACTION,HUGE,IACHAR,IAND,IBCLR,
-    IBITS,IBSET,ICHAR,IEOR,IOR,ISHFT,ISHFTC,KIND,LBOUND,LEN_TRIM,% left out LOGICAL
-    MATMUL,MAXEXPONENT,MAXLOC,MAXVAL,MERGE,MINEXPONENT,MINLOC,MINVAL,%
-    MODULO,MVBITS,NEAREST,NOT,NULL,PACK,PRECISION,PRESENT,PRODUCT,%
-    RADIX,RANDOM_NUMBER,RANDOM_SEED,RANGE,RANK,REPEAT,RESHAPE,RRSPACING,%
-    SCALE,SCAN,SELECTED_INT_KIND,SELECTED_REAL_KIND,SET_EXPONENT,SHAPE,%
-    SINH,SIZE,SPACING,SPREAD,SUM,SYSTEM_CLOCK,TINY,TRANSFER,TRANSPOSE,%
-    TRIM,UBOUND,UNPACK,VERIFY},%
-   deletecomment=[f],% no fixed comment line: 1998 Magne Rudshaug
-   morecomment=[l]!%
-  }%
-\lst@definelanguage[77]{Fortran}%
-  {morekeywords={ASSIGN,BACKSPACE,CALL,CHARACTER,%
-      CLOSE,COMMON,COMPLEX,CONTINUE,DATA,DIMENSION,DO,DOUBLE,%
-      ELSE,ELSEIF,END,ENDIF,ENDDO,ENTRY,EQUIVALENCE,EXTERNAL,%
-      FILE,FORMAT,FUNCTION,GO,TO,GOTO,IF,IMPLICIT,%
-      INQUIRE,INTEGER,INTRINSIC,LOGICAL,%
-      OPEN,PARAMETER,PAUSE,PRECISION,PRINT,PROGRAM,READ,REAL,%
-      RETURN,REWIND,STOP,SUBROUTINE,THEN,%
-      WRITE,SAVE},%
-    morekeywords=[2]{ACCESS,BLANK,BLOCK,DIRECT,EOF,ERR,EXIST,%
-      FMT,FORM,FORMATTED,IOSTAT,NAMED,NEXTREC,NUMBER,OPENED,%
-      REC,RECL,SEQUENTIAL,STATUS,TYPE,UNFORMATTED,UNIT},%
-    morekeywords=[3]{INT,DBLE,CMPLX,ICHAR,CHAR,AINT,ANINT,% left out real
-      NINT,ABS,MOD,SIGN,DIM,DPROD,MAX,MIN,AIMAG,CONJG,SQRT,EXP,LOG,%
-      LOG10,SIN,COS,TAN,ASIN,ACOS,ATAN,ATAN2,SINH,COSH,TANH,LGE,LLE,LLT,%
-      LEN,INDEX},%
-    morekeywords=[4]{AND,EQ,EQV,FALSE,GE,GT,OR,LE,LT,NE,NEQV,NOT,TRUE},%
-   sensitive=f,%% not Fortran-77 standard, but allowed in Fortran-95 %%
-   morecomment=[f]*,%
-   morecomment=[f]C,%
-   morecomment=[f]c,%
-   morestring=[d]",%% not Fortran-77 standard, but allowed in Fortran-95 %%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-\lst@definelanguage{HTML}%
-  {morekeywords={A,ABBR,ACRONYM,ADDRESS,APPLET,AREA,B,BASE,BASEFONT,%
-      BDO,BIG,BLOCKQUOTE,BODY,BR,BUTTON,CAPTION,CENTER,CITE,CODE,COL,%
-      COLGROUP,DD,DEL,DFN,DIR,DIV,DL,DOCTYPE,DT,EM,FIELDSET,FONT,FORM,%
-      FRAME,FRAMESET,HEAD,HR,H1,H2,H3,H4,H5,H6,HTML,I,IFRAME,IMG,INPUT,%
-      INS,ISINDEX,KBD,LABEL,LEGEND,LH,LI,LINK,LISTING,MAP,META,MENU,%
-      NOFRAMES,NOSCRIPT,OBJECT,OPTGROUP,OPTION,P,PARAM,PLAINTEXT,PRE,%
-      OL,Q,S,SAMP,SCRIPT,SELECT,SMALL,SPAN,STRIKE,STRING,STRONG,STYLE,%
-      SUB,SUP,TABLE,TBODY,TD,TEXTAREA,TFOOT,TH,THEAD,TITLE,TR,TT,U,UL,%
-      VAR,XMP,%
-      accesskey,action,align,alink,alt,archive,axis,background,bgcolor,%
-      border,cellpadding,cellspacing,charset,checked,cite,class,classid,%
-      code,codebase,codetype,color,cols,colspan,content,coords,data,%
-      datetime,defer,disabled,dir,event,error,for,frameborder,headers,%
-      height,href,hreflang,hspace,http-equiv,id,ismap,label,lang,link,%
-      longdesc,marginwidth,marginheight,maxlength,media,method,multiple,%
-      name,nohref,noresize,noshade,nowrap,onblur,onchange,onclick,%
-      ondblclick,onfocus,onkeydown,onkeypress,onkeyup,onload,onmousedown,%
-      profile,readonly,onmousemove,onmouseout,onmouseover,onmouseup,%
-      onselect,onunload,rel,rev,rows,rowspan,scheme,scope,scrolling,%
-      selected,shape,size,src,standby,style,tabindex,text,title,type,%
-      units,usemap,valign,value,valuetype,vlink,vspace,width,xmlns},%
-   tag=**[s]<>,%
-   sensitive=f,%
-   morestring=[d]",% ??? doubled
-   MoreSelectCharTable=%
-      \lst@CArgX--\relax\lst@DefDelimB{}{}%
-          {\ifnum\lst@mode=\lst@tagmode\else
-               \expandafter\@gobblethree
-           \fi}%
-          \lst@BeginComment\lst@commentmode{{\lst@commentstyle}}%
-      \lst@CArgX--\relax\lst@DefDelimE{}{}{}%
-          \lst@EndComment\lst@commentmode
-  }[keywords,comments,strings,html]%
-%%
-%% AspectJ definition (c) Robert Wenner
-%%
-\lst@definelanguage[AspectJ]{Java}[]{Java}%
-  {morekeywords={%
-      adviceexecution,after,args,around,aspect,aspectOf,before,%
-      call,cflow,cflowbelow,%
-      execution,get,handler,if,initialization,issingleton,pointcut,%
-      percflow,percflowbelow,perthis,pertarget,preinitialization,%
-      privileged,proceed,returning,set,staticinitialization,strictfp,%
-      target,this,thisEnclosingJoinPoint,thisJoinPoint,throwing,%
-      within,withincode},%
-   MoreSelectCharTable=%
-     \lst@DefSaveDef{`.}\lst@umdot{\lst@umdot\global\let\lst@derefop\@empty}%
-     \ifx\lst@derefinstalled\@empty\else
-        \global\let\lst@derefinstalled\@empty
-\lst@AddToHook{Output}%
-{\lst@ifkeywords
-    \ifx\lst@derefop\@empty
-       \global\let\lst@derefop\relax
-       \ifx\lst@thestyle\lst@gkeywords@sty
-          \ifx\lst@currstyle\relax
-             \let\lst@thestyle\lst@identifierstyle
-          \else
-             \let\lst@thestyle\lst@currstyle
-          \fi
-       \fi
-    \fi
- \fi}
-\lst@AddToHook{BOL}{\global\let\lst@derefop\relax}%
-\lst@AddTo\lst@ProcessSpace{\global\let\lst@derefop\relax}%
-     \fi
-  }%
-\lst@definelanguage{Java}%
-  {morekeywords={abstract,boolean,break,byte,case,catch,char,class,%
-      const,continue,default,do,double,else,extends,false,final,%
-      finally,float,for,goto,if,implements,import,instanceof,int,%
-      interface,label,long,native,new,null,package,private,protected,%
-      public,return,short,static,super,switch,synchronized,this,throw,%
-      throws,transient,true,try,void,volatile,while},%
-   sensitive,%
-   morecomment=[l]//,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]",%
-   morestring=[b]',%
-  }[keywords,comments,strings]%
-%%
-%% ByteCodeJava definition (c) 2004 Martine Gautier
-%%
-\lst@definelanguage{JVMIS}%
-  {morekeywords={aaload,astore,aconst_null,aload,aload_0,aload_1,%
-      aload_2,aload_3,anewarray,areturn,arraylength,astore,astore_0,%
-      astore_1,astore_2,astore_3,athrow,baload,bastore,bipush,caload,%
-      castore,checkcast,d2f,d2i,d2l,dadd,daload,dastore,dcmpg,dcmpl,%
-      dconst_0,dconst_1,ddiv,dload,dload_0,dload_1,dload_2,dload_3,%
-      dmul,dneg,drem,dreturn,dstore,dstore_0,dstore_1,dstore_2,%
-      dstore_3,dsub,dup,dup_x1,dup_x2,dup2,dup2_x1,dup2_x2,f2d,%
-      f2i,f2l,fadd,faload,fastore,fcmpg,fcmpl,fconst_0,fconst_1,%
-      fconst_2,fdiv,fload,fload_0,fload_1,fload_2,fload_3,fmul,%
-      fneg,frem,freturn,fstore,fstore_0,fstore_1,fstore_2,fstore_3,%
-      fsub,getfield,getstatic,goto,goto_w,i2b,i2c,i2d,i2f,i2l,i2s,%
-      iadd,iaload,iand,iastore,iconst_0,iconst_1,iconst_2,iconst_3,%
-      iconst_4,iconst_5,idiv,if_acmpeq,if_acmpne,if_icmpeq,if_icmpne,%
-      if_icmplt,if_cmpge,if_cmpgt,if_cmple,ifeq,ifne,iflt,ifge,ifgt,%
-      ifle,ifnonnull,ifnull,iinc,iload,iload_0,iload_1,iload_2,%
-      iload_3,imul,ineg,instanceof,invokeinterface,invokespecial,%
-      invokestatic,invokevirtual,ior,irem,ireturn,ishl,ishr,istore,%
-      istore_0,istore_1,istore_2,istore_3,isub,iushr,ixor,jsr,jsr_w,%
-      l2d,l2f,l2i,ladd,laload,land,lastore,lcmp,lconst_0,lconst_1,%
-      ldc,ldc_w,ldc2_w,ldiv,lload,lload_0,lload_1,lload_2,lload_3,%
-      lmul,lneg,lookupswitch,lor,lrem,lreturn,lshl,lshr,lstore,%
-      lstore_0,lstore_1,lstore_2,lstore_3,lsub,lushr,lxor,%
-      monitorenter,monitorexit,multianewarray,new,newarray,nop,pop,%
-      pop2,putfield,putstatic,ret,return,saload,sastore,sipush,swap,%
-      tableswitch,wide,limit,locals,stack},%
-  }[keywords]%
-\lst@definelanguage{Matlab}%
-  {morekeywords={gt,lt,gt,lt,amp,abs,acos,acosh,acot,acoth,acsc,acsch,%
-      all,angle,ans,any,asec,asech,asin,asinh,atan,atan2,atanh,auread,%
-      auwrite,axes,axis,balance,bar,bessel,besselk,bessely,beta,%
-      betainc,betaln,blanks,bone,break,brighten,capture,cart2pol,%
-      cart2sph,caxis,cd,cdf2rdf,cedit,ceil,chol,cla,clabel,clc,clear,%
-      clf,clock,close,colmmd,Colon,colorbar,colormap,ColorSpec,colperm,%
-      comet,comet3,compan,compass,computer,cond,condest,conj,contour,%
-      contour3,contourc,contrast,conv,conv2,cool,copper,corrcoef,cos,%
-      cosh,cot,coth,cov,cplxpair,cputime,cross,csc,csch,csvread,%
-      csvwrite,cumprod,cumsum,cylinder,date,dbclear,dbcont,dbdown,%
-      dbquit,dbstack,dbstatus,dbstep,dbstop,dbtype,dbup,ddeadv,ddeexec,%
-      ddeinit,ddepoke,ddereq,ddeterm,ddeunadv,deblank,dec2hex,deconv,%
-      del2,delete,demo,det,diag,diary,diff,diffuse,dir,disp,dlmread,%
-      dlmwrite,dmperm,dot,drawnow,echo,eig,ellipj,ellipke,else,elseif,%
-      end,engClose,engEvalString,engGetFull,engGetMatrix,engOpen,%
-      engOutputBuffer,engPutFull,engPutMatrix,engSetEvalCallback,%
-      engSetEvalTimeout,engWinInit,eps,erf,erfc,erfcx,erfinv,error,%
-      errorbar,etime,etree,eval,exist,exp,expint,expm,expo,eye,fclose,%
-      feather,feof,ferror,feval,fft,fft2,fftshift,fgetl,fgets,figure,%
-      fill,fill3,filter,filter2,find,findstr,finite,fix,flag,fliplr,%
-      flipud,floor,flops,fmin,fmins,fopen,for,format,fplot,fprintf,%
-      fread,frewind,fscanf,fseek,ftell,full,function,funm,fwrite,fzero,%
-      gallery,gamma,gammainc,gammaln,gca,gcd,gcf,gco,get,getenv,%
-      getframe,ginput,global,gplot,gradient,gray,graymon,grid,griddata,%
-      gtext,hadamard,hankel,help,hess,hex2dec,hex2num,hidden,hilb,hist,%
-      hold,home,hostid,hot,hsv,hsv2rgb,if,ifft,ifft2,imag,image,%
-      imagesc,Inf,info,input,int2str,interp1,interp2,interpft,inv,%
-      invhilb,isempty,isglobal,ishold,isieee,isinf,isletter,isnan,%
-      isreal,isspace,issparse,isstr,jet,keyboard,kron,lasterr,lcm,%
-      legend,legendre,length,lin2mu,line,linspace,load,log,log10,log2,%
-      loglog,logm,logspace,lookfor,lower,ls,lscov,lu,magic,matClose,%
-      matDeleteMatrix,matGetDir,matGetFp,matGetFull,matGetMatrix,%
-      matGetNextMatrix,matGetString,matlabrc,matlabroot,matOpen,%
-      matPutFull,matPutMatrix,matPutString,max,mean,median,menu,mesh,%
-      meshc,meshgrid,meshz,mexAtExit,mexCallMATLAB,mexdebug,%
-      mexErrMsgTxt,mexEvalString,mexFunction,mexGetFull,mexGetMatrix,%
-      mexGetMatrixPtr,mexPrintf,mexPutFull,mexPutMatrix,mexSetTrapFlag,%
-      min,more,movie,moviein,mu2lin,mxCalloc,mxCopyCharacterToPtr,%
-      mxCopyComplex16ToPtr,mxCopyInteger4ToPtr,mxCopyPtrToCharacter,%
-      mxCopyPtrToComplex16,mxCopyPtrToInteger4,mxCopyPtrToReal8,%
-      mxCopyReal8ToPtr,mxCreateFull,mxCreateSparse,mxCreateString,%
-      mxFree,mxFreeMatrix,mxGetIr,mxGetJc,mxGetM,mxGetN,mxGetName,%
-      mxGetNzmax,mxGetPi,mxGetPr,mxGetScalar,mxGetString,mxIsComplex,%
-      mxIsFull,mxIsNumeric,mxIsSparse,mxIsString,mxIsTypeDouble,%
-      mxSetIr,mxSetJc,mxSetM,mxSetN,mxSetName,mxSetNzmax,mxSetPi,%
-      mxSetPr,NaN,nargchk,nargin,nargout,newplot,nextpow2,nnls,nnz,%
-      nonzeros,norm,normest,null,num2str,nzmax,ode23,ode45,orient,orth,%
-      pack,pascal,patch,path,pause,pcolor,pi,pink,pinv,plot,plot3,%
-      pol2cart,polar,poly,polyder,polyeig,polyfit,polyval,polyvalm,%
-      pow2,print,printopt,prism,prod,pwd,qr,qrdelete,qrinsert,quad,%
-      quad8,quit,quiver,qz,rand,randn,randperm,rank,rat,rats,rbbox,%
-      rcond,real,realmax,realmin,refresh,rem,reset,reshape,residue,%
-      return,rgb2hsv,rgbplot,rootobject,roots,rose,rosser,rot90,rotate,%
-      round,rref,rrefmovie,rsf2csf,save,saxis,schur,sec,sech,semilogx,%
-      semilogy,set,setstr,shading,sign,sin,sinh,size,slice,sort,sound,%
-      spalloc,sparse,spaugment,spconvert,spdiags,specular,speye,spfun,%
-      sph2cart,sphere,spinmap,spline,spones,spparms,sprandn,sprandsym,%
-      sprank,sprintf,spy,sqrt,sqrtm,sscanf,stairs,startup,std,stem,%
-      str2mat,str2num,strcmp,strings,strrep,strtok,subplot,subscribe,%
-      subspace,sum,surf,surface,surfc,surfl,surfnorm,svd,symbfact,%
-      symmmd,symrcm,tan,tanh,tempdir,tempname,terminal,text,tic,title,%
-      toc,toeplitz,trace,trapz,tril,triu,type,uicontrol,uigetfile,%
-      uimenu,uiputfile,unix,unwrap,upper,vander,ver,version,view,%
-      viewmtx,waitforbuttonpress,waterfall,wavread,wavwrite,what,%
-      whatsnew,which,while,white,whitebg,who,whos,wilkinson,wk1read,%
-      wk1write,xlabel,xor,ylabel,zeros,zlabel,zoom},%
-   sensitive,%
-   morecomment=[l]\%,%
-   morestring=[m]'%
-  }[keywords,comments,strings]%
-\lst@definelanguage[5.2]{Mathematica}[3.0]{Mathematica}%%
-  {morekeywords={Above,AbsoluteOptions,AbsoluteTiming,AccountingForm,%
-      AccuracyGoal,Active,ActiveItem,AddOnHelpPath,%
-      AdjustmentBox,AdjustmentBoxOptions,After,AiryAiPrime,%
-      AlgebraicRulesData,Algebraics,Alias,AlignmentMarker,%
-      AllowInlineCells,AllowScriptLevelChange,Analytic,AnimationCycleOffset,%
-      AnimationCycleRepetitions,AnimationDirection,AnimationDisplayTime,ApartSquareFree,%
-      AppellF1,ArgumentCountQ,ArrayDepth,ArrayPlot,%
-      ArrayQ,ArrayRules,AspectRatioFixed,Assuming,%
-      Assumptions,AutoDelete,AutoEvaluateEvents,AutoGeneratedPackage,%
-      AutoIndent,AutoIndentSpacings,AutoItalicWords,AutoloadPath,%
-      AutoOpenNotebooks,AutoOpenPalettes,AutoScroll,AutoSpacing,%
-      AutoStyleOptions,Axis,BackgroundTasksSettings,Backsubstitution,%
-      Backward,Baseline,Before,BeginDialogPacket,%
-      BeginFrontEndInteractionPacket,Below,BezoutMatrix,BinaryFormat,%
-      BinaryGet,BinaryRead,BinaryReadList,BinaryWrite,%
-      BitAnd,BitNot,BitOr,BitXor,%
-      Black,BlankForm,Blue,Boole,%
-      Booleans,Bottom,Bounds,Box,%
-      BoxBaselineShift,BoxData,BoxDimensions,BoxFormFormatTypes,%
-      BoxFrame,BoxMargins,BoxRegion,Brown,%
-      Buchberger,Button,ButtonBox,ButtonBoxOptions,%
-      ButtonCell,ButtonContents,ButtonData,ButtonEvaluator,%
-      ButtonExpandable,ButtonFrame,ButtonFunction,ButtonMargins,%
-      ButtonMinHeight,ButtonNote,ButtonNotebook,ButtonSource,%
-      ButtonStyle,ButtonStyleMenuListing,ByteOrdering,CallPacket,%
-      CarmichaelLambda,Cell,CellAutoOverwrite,CellBaseline,%
-      CellBoundingBox,CellBracketOptions,CellContents,CellDingbat,%
-      CellEditDuplicate,CellElementsBoundingBox,CellElementSpacings,CellEvaluationDuplicate,%
-      CellFrame,CellFrameColor,CellFrameLabelMargins,CellFrameLabels,%
-      CellFrameMargins,CellGroup,CellGroupData,CellGrouping,%
-      CellGroupingRules,CellHorizontalScrolling,CellLabel,CellLabelAutoDelete,%
-      CellLabelMargins,CellLabelPositioning,CellMargins,CellObject,%
-      CellOpen,CellPasswords,CellPrint,CellSize,%
-      CellStyle,CellTags,CellularAutomaton,Center,%
-      CharacterEncoding,CharacterEncodingsPath,CharacteristicPolynomial,CharacterRange,%
-      CheckAll,CholeskyDecomposition,Clip,ClipboardNotebook,%
-      Closed,ClosingAutoSave,CoefficientArrays,CoefficientDomain,%
-      CofactorExpansion,ColonForm,ColorFunctionScaling,ColorRules,%
-      ColorSelectorSettings,Column,ColumnAlignments,ColumnLines,%
-      ColumnsEqual,ColumnSpacings,ColumnWidths,CommonDefaultFormatTypes,%
-      CompileOptimizations,CompletionsListPacket,Complexes,ComplexityFunction,%
-      Compose,ComposeSeries,ConfigurationPath,ConjugateTranspose,%
-      Connect,ConsoleMessage,ConsoleMessagePacket,ConsolePrint,%
-      ContentsBoundingBox,ContextToFileName,ContinuedFraction,ConversionOptions,%
-      ConversionRules,ConvertToBitmapPacket,ConvertToPostScript,ConvertToPostScriptPacket,%
-      Copyable,CoshIntegral,CounterAssignments,CounterBox,%
-      CounterBoxOptions,CounterEvaluator,CounterFunction,CounterIncrements,%
-      CounterStyle,CounterStyleMenuListing,CreatePalettePacket,Cross,%
-      CurrentlySpeakingPacket,Cyan,CylindricalDecomposition,DampingFactor,%
-      DataRange,Debug,DebugTag,Decimal,%
-      DedekindEta,DefaultDuplicateCellStyle,DefaultFontProperties,DefaultFormatType,%
-      DefaultFormatTypeForStyle,DefaultInlineFormatType,DefaultInputFormatType,
-      DefaultNaturalLanguage,%
-      DefaultNewCellStyle,DefaultNewInlineCellStyle,DefaultNotebook,DefaultOutputFormatType,%
-      DefaultStyleDefinitions,DefaultTextFormatType,DefaultTextInlineFormatType,DefaultValues,%
-      DefineExternal,DegreeLexicographic,DegreeReverseLexicographic,Deletable,%
-      DeleteContents,DeletionWarning,DelimiterFlashTime,DelimiterMatching,%
-      Delimiters,DependentVariables,DiacriticalPositioning,DialogLevel,%
-      DifferenceOrder,DigitCharacter,DigitCount,DiracDelta,%
-      Direction,DirectoryName,DisableConsolePrintPacket,DiscreteDelta,%
-      DisplayAnimation,DisplayEndPacket,DisplayFlushImagePacket,DisplayForm,%
-      DisplayPacket,DisplayRules,DisplaySetSizePacket,DisplayString,%
-      DivisionFreeRowReduction,DOSTextFormat,DoubleExponential,DoublyInfinite,%
-      Down,DragAndDrop,DrawHighlighted,DualLinearProgramming,%
-      DumpGet,DumpSave,Edit,Editable,%
-      EditButtonSettings,EditCellTagsSettings,EditDefinition,EditIn,%
-      Element,EliminationOrder,EllipticExpPrime,EllipticNomeQ,%
-      EllipticReducedHalfPeriods,EllipticThetaPrime,Empty,EnableConsolePrintPacket,%
-      Encoding,EndAdd,EndDialogPacket,EndFrontEndInteractionPacket,%
-      EndOfLine,EndOfString,Enter,EnterExpressionPacket,%
-      EnterTextPacket,EqualColumns,EqualRows,EquatedTo,%
-      Erfi,ErrorBox,ErrorBoxOptions,ErrorNorm,%
-      ErrorPacket,ErrorsDialogSettings,Evaluatable,EvaluatePacket,%
-      EvaluationCell,EvaluationCompletionAction,EvaluationMonitor,EvaluationNotebook,%
-      Evaluator,EvaluatorNames,EventEvaluator,ExactNumberQ,%
-      ExactRootIsolation,Except,ExcludedForms,Exists,%
-      ExitDialog,ExponentPosition,ExponentStep,Export,%
-      ExportAutoReplacements,ExportPacket,ExportString,ExpressionPacket,%
-      ExpToTrig,Extension,ExternalCall,ExternalDataCharacterEncoding,%
-      Extract,Fail,FEDisableConsolePrintPacket,FEEnableConsolePrintPacket,%
-      Fibonacci,File,FileFormat,FileInformation,%
-      FileName,FileNameDialogSettings,FindFit,FindInstance,%
-      FindMaximum,FindSettings,FitAll,FlushPrintOutputPacket,%
-      Font,FontColor,FontFamily,FontName,%
-      FontPostScriptName,FontProperties,FontReencoding,FontSize,%
-      FontSlant,FontSubstitutions,FontTracking,FontVariations,%
-      FontWeight,ForAll,FormatRules,FormatTypeAutoConvert,%
-      FormatValues,FormBox,FormBoxOptions,Forward,%
-      ForwardBackward,FourierCosTransform,FourierParameters,FourierSinTransform,%
-      FourierTransform,FractionalPart,FractionBox,FractionBoxOptions,%
-      FractionLine,FrameBox,FrameBoxOptions,FresnelC,%
-      FresnelS,FromContinuedFraction,FromDigits,FrontEndExecute,%
-      FrontEndObject,FrontEndStackSize,FrontEndToken,FrontEndTokenExecute,%
-      FrontEndVersion,Full,FullAxes,FullSimplify,%
-      FunctionExpand,FunctionInterpolation,GaussKronrod,GaussPoints,%
-      GenerateBitmapCaches,GenerateConditions,GeneratedCell,GeneratedParameters,%
-      Generic,GetBoundingBoxSizePacket,GetContext,GetFileName,%
-      GetFrontEndOptionsDataPacket,GetLinebreakInformationPacket,%
-      GetMenusPacket,GetPageBreakInformationPacket,%
-      Glaisher,GlobalPreferences,GlobalSession,Gradient,%
-      GraphicsData,GraphicsGrouping,Gray,Green,%
-      Grid,GridBaseline,GridBox,GridBoxOptions,%
-      GridCreationSettings,GridDefaultElement,GridFrame,GridFrameMargins,%
-      GroupPageBreakWithin,HarmonicNumber,Hash,HashTable,%
-      HeadCompose,HelpBrowserLookup,HelpBrowserNotebook,HelpBrowserSettings,%
-      HessenbergDecomposition,Hessian,HoldAllComplete,HoldComplete,%
-      HoldPattern,Horizontal,HorizontalForm,HorizontalScrollPosition,%
-      HTMLSave,Hypergeometric0F1Regularized,Hypergeometric1F1Regularized,%
-      Hypergeometric2F1Regularized,%
-      HypergeometricPFQ,HypergeometricPFQRegularized,HyperlinkCreationSettings,Hyphenation,%
-      HyphenationOptions,IgnoreCase,ImageCache,ImageCacheValid,%
-      ImageMargins,ImageOffset,ImageRangeCache,ImageRegion,%
-      ImageResolution,ImageRotated,ImageSize,Import,%
-      ImportAutoReplacements,ImportString,IncludeFileExtension,IncludeSingularTerm,%
-      IndentingNewlineSpacings,IndentMaxFraction,IndexCreationOptions,Inequality,%
-      InexactNumberQ,InexactNumbers,Inherited,InitializationCell,%
-      InitializationCellEvaluation,InitializationCellWarning,%
-      InlineCounterAssignments,InlineCounterIncrements,%
-      InlineRules,InputAliases,InputAutoFormat,InputAutoReplacements,%
-      InputGrouping,InputNamePacket,InputNotebook,InputPacket,%
-      InputSettings,InputStringPacket,InputToBoxFormPacket,InputToInputForm,%
-      InputToStandardForm,InsertionPointObject,IntegerExponent,IntegerPart,%
-      Integers,Interactive,Interlaced,InterpolationOrder,%
-      InterpolationPoints,InterpolationPrecision,InterpretationBox,%
-      InterpretationBoxOptions,%
-      InterpretTemplate,InterruptSettings,Interval,IntervalIntersection,%
-      IntervalMemberQ,IntervalUnion,InverseBetaRegularized,InverseEllipticNomeQ,%
-      InverseErf,InverseErfc,InverseFourierCosTransform,
-      InverseFourierSinTransform,%
-      InverseFourierTransform,InverseGammaRegularized,InverseJacobiCD,%
-      InverseJacobiCN,%
-      InverseJacobiCS,InverseJacobiDC,InverseJacobiDN,InverseJacobiDS,%
-      InverseJacobiNC,InverseJacobiND,InverseJacobiNS,InverseJacobiSC,%
-      InverseJacobiSD,InverseLaplaceTransform,InverseWeierstrassP,InverseZTransform,%
-      Jacobian,JacobiCD,JacobiCN,JacobiCS,%
-      JacobiDC,JacobiDN,JacobiDS,JacobiNC,%
-      JacobiND,JacobiNS,JacobiSC,JacobiSD,%
-      JordanDecomposition,K,Khinchin,KleinInvariantJ,%
-      KroneckerDelta,Language,LanguageCategory,LaplaceTransform,%
-      Larger,Launch,LayoutInformation,Left,%
-      LetterCharacter,Lexicographic,LicenseID,LimitsPositioning,%
-      LimitsPositioningTokens,LinearSolveFunction,LinebreakAdjustments,LineBreakWithin,%
-      LineForm,LineIndent,LineSpacing,LineWrapParts,%
-      LinkActivate,LinkClose,LinkConnect,LinkConnectedQ,%
-      LinkCreate,LinkError,LinkFlush,LinkHost,%
-      LinkInterrupt,LinkLaunch,LinkMode,LinkObject,%
-      LinkOpen,LinkOptions,LinkPatterns,LinkProtocol,%
-      LinkRead,LinkReadHeld,LinkReadyQ,Links,%
-      LinkWrite,LinkWriteHeld,ListConvolve,ListCorrelate,%
-      Listen,ListInterpolation,ListQ,LiteralSearch,%
-      LongestMatch,LongForm,Loopback,LUBackSubstitution,%
-      LUDecomposition,MachineID,MachineName,MachinePrecision,%
-      MacintoshSystemPageSetup,Magenta,Magnification,MakeBoxes,%
-      MakeExpression,MakeRules,Manual,MatchLocalNameQ,%
-      MathematicaNotation,MathieuC,MathieuCharacteristicA,MathieuCharacteristicB,%
-      MathieuCharacteristicExponent,MathieuCPrime,MathieuS,MathieuSPrime,%
-      MathMLForm,MathMLText,MatrixRank,Maximize,%
-      MaxIterations,MaxPlotPoints,MaxPoints,MaxRecursion,%
-      MaxStepFraction,MaxSteps,MaxStepSize,Mean,%
-      Median,MeijerG,MenuPacket,MessageOptions,%
-      MessagePacket,MessagesNotebook,MetaCharacters,Method,%
-      MethodOptions,Minimize,MinRecursion,MinSize,%
-      Mode,ModularLambda,MonomialOrder,MonteCarlo,%
-      Most,MousePointerNote,MultiDimensional,MultilaunchWarning,%
-      MultilineFunction,MultiplicativeOrder,Multiplicity,Nand,%
-      NeedCurrentFrontEndPackagePacket,NeedCurrentFrontEndSymbolsPacket,%
-      NestedScriptRules,NestWhile,%
-      NestWhileList,NevilleThetaC,NevilleThetaD,NevilleThetaN,%
-      NevilleThetaS,Newton,Next,NHoldAll,%
-      NHoldFirst,NHoldRest,NMaximize,NMinimize,%
-      NonAssociative,NonPositive,Nor,Norm,%
-      NormalGrouping,NormalSelection,NormFunction,Notebook,%
-      NotebookApply,NotebookAutoSave,NotebookClose,NotebookConvert,%
-      NotebookConvertSettings,NotebookCreate,NotebookCreateReturnObject,NotebookDefault,%
-      NotebookDelete,NotebookDirectory,NotebookFind,NotebookFindReturnObject,%
-      NotebookGet,NotebookGetLayoutInformationPacket,NotebookGetMisspellingsPacket,%
-      NotebookInformation,%
-      NotebookLocate,NotebookObject,NotebookOpen,NotebookOpenReturnObject,%
-      NotebookPath,NotebookPrint,NotebookPut,NotebookPutReturnObject,%
-      NotebookRead,NotebookResetGeneratedCells,Notebooks,NotebookSave,%
-      NotebookSaveAs,NotebookSelection,NotebookSetupLayoutInformationPacket,%
-      NotebooksMenu,%
-      NotebookWrite,NotElement,NProductExtraFactors,NProductFactors,%
-      NRoots,NSumExtraTerms,NSumTerms,NumberMarks,%
-      NumberMultiplier,NumberString,NumericFunction,NumericQ,%
-      NValues,Offset,OLEData,OneStepRowReduction,%
-      Open,OpenFunctionInspectorPacket,OpenSpecialOptions,OptimizationLevel,%
-      OptionInspectorSettings,OptionQ,OptionsPacket,OptionValueBox,%
-      OptionValueBoxOptions,Orange,Ordering,Oscillatory,%
-      OutputAutoOverwrite,OutputFormData,OutputGrouping,OutputMathEditExpression,%
-      OutputNamePacket,OutputToOutputForm,OutputToStandardForm,Over,%
-      Overflow,Overlaps,Overscript,OverscriptBox,%
-      OverscriptBoxOptions,OwnValues,PadLeft,PadRight,%
-      PageBreakAbove,PageBreakBelow,PageBreakWithin,PageFooterLines,%
-      PageFooters,PageHeaderLines,PageHeaders,PalettePath,%
-      PaperWidth,ParagraphIndent,ParagraphSpacing,ParameterVariables,%
-      ParentConnect,ParentForm,Parenthesize,PasteBoxFormInlineCells,%
-      Path,PatternTest,PeriodicInterpolation,Pick,%
-      Piecewise,PiecewiseExpand,Pink,Pivoting,%
-      PixelConstrained,Placeholder,Plain,Plot3Matrix,%
-      PointForm,PolynomialForm,PolynomialReduce,Polynomials,%
-      PowerModList,Precedence,PreferencesPath,PreserveStyleSheet,%
-      Previous,PrimaryPlaceholder,Primes,PrincipalValue,%
-      PrintAction,PrintingCopies,PrintingOptions,PrintingPageRange,%
-      PrintingStartingPageNumber,PrintingStyleEnvironment,PrintPrecision,%
-      PrivateCellOptions,%
-      PrivateEvaluationOptions,PrivateFontOptions,PrivateNotebookOptions,PrivatePaths,%
-      ProductLog,PromptForm,Purple,Quantile,%
-      QuasiMonteCarlo,QuasiNewton,RadicalBox,RadicalBoxOptions,%
-      RandomSeed,RationalFunctions,Rationals,RawData,%
-      RawMedium,RealBlockForm,Reals,Reap,%
-      Red,Refine,Refresh,RegularExpression,%
-      Reinstall,Release,Removed,RenderingOptions,%
-      RepeatedString,ReplaceList,Rescale,ResetMenusPacket,%
-      Resolve,ResumePacket,ReturnExpressionPacket,ReturnInputFormPacket,%
-      ReturnPacket,ReturnTextPacket,Right,Root,%
-      RootReduce,RootSum,Row,RowAlignments,%
-      RowBox,RowLines,RowMinHeight,RowsEqual,%
-      RowSpacings,RSolve,RuleCondition,RuleForm,%
-      RulerUnits,Saveable,SaveAutoDelete,ScreenRectangle,%
-      ScreenStyleEnvironment,ScriptBaselineShifts,ScriptLevel,ScriptMinSize,%
-      ScriptRules,ScriptSizeMultipliers,ScrollingOptions,ScrollPosition,%
-      Second,SectionGrouping,Selectable,SelectedNotebook,%
-      Selection,SelectionAnimate,SelectionCell,SelectionCellCreateCell,%
-      SelectionCellDefaultStyle,SelectionCellParentStyle,SelectionCreateCell,%
-      SelectionDuplicateCell,%
-      SelectionEvaluate,SelectionEvaluateCreateCell,SelectionMove,SelectionSetStyle,%
-      SelectionStrategy,SendFontInformationToKernel,SequenceHold,SequenceLimit,%
-      SeriesCoefficient,SetBoxFormNamesPacket,SetEvaluationNotebook,%
-      SetFileLoadingContext,%
-      SetNotebookStatusLine,SetOptionsPacket,SetSelectedNotebook,%
-      SetSpeechParametersPacket,%
-      SetValue,ShortestMatch,ShowAutoStyles,ShowCellBracket,%
-      ShowCellLabel,ShowCellTags,ShowClosedCellArea,ShowContents,%
-      ShowCursorTracker,ShowGroupOpenCloseIcon,ShowPageBreaks,ShowSelection,%
-      ShowShortBoxForm,ShowSpecialCharacters,ShowStringCharacters,%
-      ShrinkWrapBoundingBox,%
-      SingleLetterItalics,SingularityDepth,SingularValueDecomposition,%
-      SingularValueList,%
-      SinhIntegral,Smaller,Socket,SolveDelayed,%
-      SoundAndGraphics,Sow,Space,SpaceForm,%
-      SpanAdjustments,SpanCharacterRounding,SpanLineThickness,SpanMaxSize,%
-      SpanMinSize,SpanningCharacters,SpanSymmetric,Sparse,%
-      SparseArray,SpeakTextPacket,SpellingDictionaries,SpellingDictionariesPath,%
-      SpellingOptions,SpellingSuggestionsPacket,Spherical,Split,%
-      SqrtBox,SqrtBoxOptions,StandardDeviation,StandardForm,%
-      StartingStepSize,StartOfLine,StartOfString,StartupSound,%
-      StepMonitor,StieltjesGamma,StoppingTest,StringCases,%
-      StringCount,StringExpression,StringFreeQ,StringQ,%
-      StringReplaceList,StringReplacePart,StringSplit,StripBoxes,%
-      StripWrapperBoxes,StructuredSelection,StruveH,StruveL,%
-      StyleBox,StyleBoxAutoDelete,StyleBoxOptions,StyleData,%
-      StyleDefinitions,StyleForm,StyleMenuListing,StyleNameDialogSettings,%
-      StylePrint,StyleSheetPath,Subresultants,SubscriptBox,%
-      SubscriptBoxOptions,Subsets,Subsuperscript,SubsuperscriptBox,%
-      SubsuperscriptBoxOptions,SubtractFrom,SubValues,SugarCube,%
-      SuperscriptBox,SuperscriptBoxOptions,SuspendPacket,SylvesterMatrix,%
-      SymbolName,Syntax,SyntaxForm,SyntaxPacket,%
-      SystemException,SystemHelpPath,SystemStub,Tab,%
-      TabFilling,TabSpacings,TagBox,TagBoxOptions,%
-      TaggingRules,TagStyle,TargetFunctions,TemporaryVariable,%
-      TensorQ,TeXSave,TextAlignment,TextBoundingBox,%
-      TextData,TextJustification,TextLine,TextPacket,%
-      TextParagraph,TextRendering,TextStyle,ThisLink,%
-      TimeConstraint,TimeVariable,TitleGrouping,ToBoxes,%
-      ToColor,ToFileName,Toggle,ToggleFalse,%
-      Tolerance,TooBig,Top,ToRadicals,%
-      Total,Tr,TraceAction,TraceInternal,%
-      TraceLevel,TraditionalForm,TraditionalFunctionNotation,TraditionalNotation,%
-      TraditionalOrder,TransformationFunctions,TransparentColor,Trapezoidal,%
-      TrigExpand,TrigFactor,TrigFactorList,TrigReduce,%
-      TrigToExp,Tuples,UnAlias,Underflow,%
-      Underoverscript,UnderoverscriptBox,UnderoverscriptBoxOptions,Underscript,%
-      UnderscriptBox,UnderscriptBoxOptions,UndocumentedTestFEParserPacket,%
-      UndocumentedTestGetSelectionPacket,%
-      UnitStep,Up,URL,Using,%
-      V2Get,Value,ValueBox,ValueBoxOptions,%
-      ValueForm,Variance,Verbatim,Verbose,%
-      VerboseConvertToPostScriptPacket,VerifyConvergence,VerifySolutions,Version,%
-      VersionNumber,Vertical,VerticalForm,ViewPointSelectorSettings,%
-      Visible,VisibleCell,WeierstrassHalfPeriods,WeierstrassInvariants,%
-      WeierstrassSigma,WeierstrassZeta,White,Whitespace,%
-      WhitespaceCharacter,WindowClickSelect,WindowElements,WindowFloating,%
-      WindowFrame,WindowFrameElements,WindowMargins,WindowMovable,%
-      WindowSize,WindowTitle,WindowToolbars,WindowWidth,%
-      WordBoundary,WordCharacter,WynnDegree,XMLElement},%
-   morendkeywords={$,$AddOnsDirectory,$AnimationDisplayFunction,%
-      $AnimationFunction,%
-      $Assumptions,$BaseDirectory,$BoxForms,$ByteOrdering,%
-      $CharacterEncoding,$ConditionHold,$CurrentLink,$DefaultPath,%
-      $ExportEncodings,$ExportFormats,$FormatType,$FrontEnd,%
-      $HistoryLength,$HomeDirectory,$ImportEncodings,$ImportFormats,%
-      $InitialDirectory,$InstallationDate,$InstallationDirectory,%
-      $InterfaceEnvironment,%
-      $LaunchDirectory,$LicenseExpirationDate,$LicenseID,$LicenseProcesses,%
-      $LicenseServer,$MachineDomain,$MaxExtraPrecision,$MaxLicenseProcesses,%
-      $MaxNumber,$MaxPiecewiseCases,$MaxPrecision,$MaxRootDegree,%
-      $MinNumber,$MinPrecision,$NetworkLicense,$NumberMarks,%
-      $Off,$OutputForms,$ParentLink,$ParentProcessID,%
-      $PasswordFile,$PathnameSeparator,$PreferencesDirectory,$PrintForms,%
-      $PrintLiteral,$ProcessID,$ProcessorType,$ProductInformation,%
-      $ProgramName,$PSDirectDisplay,$RandomState,$RasterFunction,%
-      $RootDirectory,$SetParentLink,$SoundDisplay,$SuppressInputFormHeads,%
-      $SystemCharacterEncoding,$SystemID,$TemporaryPrefix,$TextStyle,%
-      $TopDirectory,$TraceOff,$TraceOn,$TracePattern,%
-      $TracePostAction,$TracePreAction,$UserAddOnsDirectory,$UserBaseDirectory,%
-      $UserName,Constant,Flat,HoldAll,%
-      HoldAllComplete,HoldFirst,HoldRest,Listable,%
-      Locked,NHoldAll,NHoldFirst,NHoldRest,%
-      NumericFunction,OneIdentity,Orderless,Protected,%
-      ReadProtected,SequenceHold},%
-  }%
-%%
-%% Mathematica definitions (c) 1999 Michael Wiese
-%%
-\lst@definelanguage[3.0]{Mathematica}[1.0]{Mathematica}%
-  {morekeywords={Abort,AbortProtect,AbsoluteDashing,AbsolutePointSize,%
-      AbsoluteThickness,AbsoluteTime,AccountingFormAiry,AiPrime,AiryBi,%
-      AiryBiPrime,Alternatives,AnchoredSearch,AxesEdge,AxesOrigin,%
-      AxesStyle,Background,BetaRegularized,BoxStyle,C,CheckAbort,%
-      Circle,ClebschGordan,CMYKColor,ColorFunction,ColorOutput,Compile,%
-      Compiled,CompiledFunction,ComplexExpand,ComposeList,Composition,%
-      ConstrainedMax,ConstrainedMin,Contexts,ContextToFilename,%
-      ContourLines,Contours,ContourShading,ContourSmoothing,%
-      ContourStyle,CopyDirectory,CopyFile,CosIntegral,CreateDirectory,%
-      Cuboid,Date,DeclarePackage,DefaultColor,DefaultFont,Delete,%
-      DeleteCases,DeleteDirectory,DeleteFile,Dialog,DialogIndent,%
-      DialogProlog,DialogSymbols,DigitQ,Directory,DirectoryStack,Disk,%
-      Dispatch,DownValues,DSolve,Encode,Epilog,Erfc,Evaluate,%
-      ExponentFunction,FaceGrids,FileByteCount,FileDate,FileNames,%
-      FileType,Find,FindList,FixedPointList,FlattenAt,Fold,FoldList,%
-      Frame,FrameLabel,FrameStyle,FrameTicks,FromCharacterCode,%
-      FromDate,FullGraphics,FullOptions,GammaRegularized,%
-      GaussianIntegers,GraphicsArray,GraphicsSpacing,GridLines,%
-      GroebnerBasis,Heads,HeldPart,HomeDirectory,Hue,IgnoreCases,%
-      InputStream,Install,InString,IntegerDigits,InterpolatingFunction,%
-      InterpolatingPolynomial,Interpolation,Interrupt,InverseFunction,%
-      InverseFunctions,JacobiZeta,LetterQ,LinearProgramming,ListPlay,%
-      LogGamma,LowerCaseQ,MachineNumberQ,MantissaExponent,MapIndexed,%
-      MapThread,MatchLocalNames,MatrixExp,MatrixPower,MeshRange,%
-      MeshStyle,MessageList,Module,NDSolve,NSolve,NullRecords,%
-      NullWords,NumberFormat,NumberPadding,NumberSigns,OutputStream,%
-      PaddedForm,ParentDirectory,Pause,Play,PlayRange,PlotRegion,%
-      PolygonIntersections,PolynomialGCD,PolynomialLCM,PolynomialMod,%
-      PostScript,PowerExpand,PrecisionGoal,PrimePi,Prolog,%
-      QRDecomposition,Raster,RasterArray,RealDigits,Record,RecordLists,%
-      RecordSeparators,ReleaseHold,RenameDirectory,RenameFile,%
-      ReplaceHeldPart,ReplacePart,ResetDirectory,Residue,%
-      RiemannSiegelTheta,RiemannSiegelZ,RotateLabel,SameTest,%
-      SampleDepth,SampledSoundFunction,SampledSoundList,SampleRate,%
-      SchurDecomposition,SessionTime,SetAccuracy,SetDirectory,%
-      SetFileDate,SetPrecision,SetStreamPosition,Shallow,SignPadding,%
-      SinIntegral,SixJSymbol,Skip,Sound,SpellingCorrection,%
-      SphericalRegion,Stack,StackBegin,StackComplete,StackInhibit,%
-      StreamPosition,Streams,StringByteCount,StringConversion,%
-      StringDrop,StringInsert,StringPosition,StringReplace,%
-      StringReverse,StringTake,StringToStream,SurfaceColor,%
-      SyntaxLength,SyntaxQ,TableAlignments,TableDepth,%
-      TableDirections,TableHeadings,TableSpacing,ThreeJSymbol,TimeUsed,%
-      TimeZone,ToCharacterCode,ToDate,ToHeldExpression,TokenWords,%
-      ToLowerCase,ToUpperCase,Trace,TraceAbove,TraceBackward,%
-      TraceDepth,TraceDialog,TraceForward,TraceOff,TraceOn,%
-      TraceOriginal,TracePrint,TraceScan,Trig,Unevaluated,Uninstall,%
-      UnsameQ,UpperCaseQ,UpValues,ViewCenter,ViewVertical,With,Word,%
-      WordSearch,WordSeparators},%
-   morendkeywords={Stub,Temporary,$Aborted,$BatchInput,$BatchOutput,%
-      $CreationDate,$DefaultFont,$DumpDates,$DumpSupported,$Failed,%
-      $Input,$Inspector,$IterationLimit,$Language,$Letters,$Linked,%
-      $LinkSupported,$MachineEpsilon,$MachineID,$MachineName,%
-      $MachinePrecision,$MachineType,$MaxMachineNumber,$MessageList,%
-      $MessagePrePrint,$MinMachineNumber,$ModuleNumber,$NewMessage,%
-      $NewSymbol,$Notebooks,$OperatingSystem,$Packages,$PipeSupported,%
-      $PreRead,$ReleaseNumber,$SessionID,$SoundDisplayFunction,%
-      $StringConversion,$StringOrder,$SyntaxHandler,$TimeUnit,%
-      $VersionNumber}%
-  }%
-\lst@definelanguage[1.0]{Mathematica}%
-  {morekeywords={Abs,Accuracy,AccurayGoal,AddTo,AiryAi,AlgebraicRules,%
-      AmbientLight,And,Apart,Append,AppendTo,Apply,ArcCos,ArcCosh,%
-      ArcCot,ArcCoth,ArcCsc,ArcCsch,ArcSec,ArcSech,ArcSin,ArcSinh,%
-      ArcTan,ArcTanh,Arg,ArithmeticGeometricMean,Array,AspectRatio,%
-      AtomQ,Attributes,Axes,AxesLabel,BaseForm,Begin,BeginPackage,%
-      BernoulliB,BesselI,BesselJ,BesselK,BesselY,Beta,Binomial,Blank,%
-      BlankNullSequence,BlankSequence,Block,Boxed,BoxRatios,Break,Byte,%
-      ByteCount,Cancel,Cases,Catch,Ceiling,CForm,Character,Characters,%
-      ChebyshevT,ChebyshevU,Check,Chop,Clear,ClearAll,ClearAttributes,%
-      ClipFill,Close,Coefficient,CoefficientList,Collect,ColumnForm,%
-      Complement,Complex,CompoundExpression,Condition,Conjugate,%
-      Constants,Context,Continuation,Continue,ContourGraphics,%
-      ContourPlot,Cos,Cosh,Cot,Coth,Count,Csc,Csch,Cubics,Cyclotomic,%
-      D,Dashing,Decompose,Decrement,Default,Definition,Denominator,%
-      DensityGraphics,DensityPlot,Depth,Derivative,Det,DiagonalMatrix,%
-      DigitBlock,Dimensions,DirectedInfinity,Display,DisplayFunction,%
-      Distribute,Divide,DivideBy,Divisors,DivisorSigma,Do,Dot,Drop,Dt,%
-      Dump,EdgeForm,Eigensystem,Eigenvalues,Eigenvectors,Eliminate,%
-      EllipticE,EllipticExp,EllipticF,EllipticK,EllipticLog,EllipticPi,%
-      EllipticTheta,End,EndPackage,EngineeringForm,Environment,Equal,%
-      Erf,EulerE,EulerPhi,EvenQ,Exit,Exp,Expand,ExpandAll,%
-      ExpandDenominator,ExpandNumerator,ExpIntegralE,ExpIntegralEi,%
-      Exponent,Expression,ExtendedGCD,FaceForm,Factor,FactorComplete,%
-      Factorial,Factorial2,FactorInteger,FactorList,FactorSquareFree,%
-      FactorSquareFreeList,FactorTerms,FactorTermsList,FindMinimum,%
-      FindRoot,First,Fit,FixedPoint,Flatten,Floor,FontForm,For,Format,%
-      FormatType,FortranForm,Fourier,FreeQ,FullDefinition,FullForm,%
-      Function,Gamma,GCD,GegenbauerC,General,Get,Goto,Graphics,%
-      Graphics3D,GrayLevel,Greater,GreaterEqual,Head,HermiteH,%
-      HiddenSurface,Hold,HoldForm,Hypergeometric0F1,Hypergeometric1F1,%
-      Hypergeometric2F1,HypergeometricU,Identity,IdentityMatrix,If,Im,%
-      Implies,In,Increment,Indent,Infix,Information,Inner,Input,%
-      InputForm,InputString,Insert,Integer,IntegerQ,Integrate,%
-      Intersection,Inverse,InverseFourier,InverseJacobiSN,%
-      InverseSeries,JacobiAmplitude,JacobiP,JacobiSN,JacobiSymbol,Join,%
-      Label,LaguerreL,Last,LatticeReduce,LCM,LeafCount,LegendreP,%
-      LegendreQ,LegendreType,Length,LerchPhi,Less,LessEqual,Level,%
-      Lighting,LightSources,Limit,Line,LinearSolve,LineBreak,List,%
-      ListContourPlot,ListDensityPlot,ListPlot,ListPlot3D,Literal,Log,%
-      LogicalExpand,LogIntegral,MainSolve,Map,MapAll,MapAt,MatchQ,%
-      MatrixForm,MatrixQ,Max,MaxBend,MaxMemoryUsed,MemberQ,%
-      MemoryConstrained,MemoryInUse,Mesh,Message,MessageName,Messages,%
-      Min,Minors,Minus,Mod,Modulus,MoebiusMu,Multinomial,N,NameQ,Names,%
-      NBernoulliB,Needs,Negative,Nest,NestList,NIntegrate,%
-      NonCommutativeMultiply,NonConstants,NonNegative,Normal,Not,%
-      NProduct,NSum,NullSpace,Number,NumberForm,NumberPoint,NumberQ,%
-      NumberSeparator,Numerator,O,OddQ,Off,On,OpenAppend,OpenRead,%
-      OpenTemporary,OpenWrite,Operate,Optional,Options,Or,Order,%
-      OrderedQ,Out,Outer,OutputForm,PageHeight,PageWidth,%
-      ParametricPlot,ParametricPlot3D,Part,Partition,PartitionsP,%
-      PartitionsQ,Pattern,Permutations,Plot,Plot3D,PlotDivision,%
-      PlotJoined,PlotLabel,PlotPoints,PlotRange,PlotStyle,Pochhammer,%
-      Plus,Point,PointSize,PolyGamma,Polygon,PolyLog,PolynomialQ,%
-      PolynomialQuotient,PolynomialRemainder,Position,Positive,Postfix,%
-      Power,PowerMod,PrecedenceForm,Precision,PreDecrement,Prefix,%
-      PreIncrement,Prepend,PrependTo,Prime,PrimeQ,Print,PrintForm,%
-      Product,Protect,PseudoInverse,Put,PutAppend,Quartics,Quit,%
-      Quotient,Random,Range,Rational,Rationalize,Raw,Re,Read,ReadList,%
-      Real,Rectangle,Reduce,Remove,RenderAll,Repeated,RepeatedNull,%
-      Replace,ReplaceAll,ReplaceRepeated,Rest,Resultant,Return,Reverse,%
-      RGBColor,Roots,RotateLeft,RotateRight,Round,RowReduce,Rule,%
-      RuleDelayed,Run,RunThrough,SameQ,Save,Scaled,Scan,ScientificForm,%
-      Sec,Sech,SeedRandom,Select,Sequence,SequenceForm,Series,%
-      SeriesData,Set,SetAttributes,SetDelayed,SetOptions,Shading,Share,%
-      Short,Show,Sign,Signature,Simplify,Sin,SingularValues,Sinh,%
-      Skeleton,Slot,SlotSequence,Solve,SolveAlways,Sort,%
-      SphericalHarmonicY,Splice,Sqrt,StirlingS1,StirlingS2,String,%
-      StringBreak,StringForm,StringJoin,StringLength,StringMatchQ,%
-      StringSkeleton,Subscript,Subscripted,Subtract,SubtractForm,Sum,%
-      Superscript,SurfaceGraphics,Switch,Symbol,Table,TableForm,TagSet,%
-      TagSetDelayed,TagUnset,Take,Tan,Tanh,ToString,TensorRank,TeXForm,%
-      Text,TextForm,Thickness,Thread,Through,Throw,Ticks,%
-      TimeConstrained,Times,TimesBy,Timing,ToExpression,Together,%
-      ToRules,ToString,TotalHeight,TotalWidth,Transpose,TreeForm,TrueQ,%
-      Unequal,Union,Unique,Unprotect,Unset,Update,UpSet,UpSetDelayed,%
-      ValueQ,Variables,VectorQ,ViewPoint,WeierstrassP,%
-      WeierstrassPPrime,Which,While,WorkingPrecision,Write,WriteString,%
-      Xor,ZeroTest,Zeta},%
-   morendkeywords={All,Automatic,Catalan,ComplexInfinity,Constant,%
-      Degree,E,EndOfFile,EulerGamma,False,Flat,GoldenRatio,HoldAll,%
-      HoldFirst,HoldRest,I,Indeterminate,Infinity,Listable,Locked,%
-      Modular,None,Null,OneIdentity,Orderless,Pi,Protected,%
-      ReadProtected,True,$CommandLine,$Context,$ContextPath,$Display,%
-      $DisplayFunction,$Echo,$Epilog,$IgnoreEOF,$Line,$Messages,%
-      $Output,$Path,$Post,$Pre,$PrePrint,$RecursionLimit,$System,%
-      $Urgent,$Version},%
-   sensitive,%
-   morecomment=[s]{(*}{*)},%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%%
-%% Octave definition (c) 2001,2002 Ulrich G. Wortmann
-%%
-\lst@definelanguage{Octave}%
-  {morekeywords={gt,lt,amp,abs,acos,acosh,acot,acoth,acsc,acsch,%
-      all,angle,ans,any,asec,asech,asin,asinh,atan,atan2,atanh,auread,%
-      auwrite,axes,axis,balance,bar,bessel,besselk,bessely,beta,%
-      betainc,betaln,blanks,bone,break,brighten,capture,cart2pol,%
-      cart2sph,caxis,cd,cdf2rdf,cedit,ceil,chol,cla,clabel,clc,clear,%
-      clf,clock,close,colmmd,Colon,colorbar,colormap,ColorSpec,colperm,%
-      comet,comet3,compan,compass,computer,cond,condest,conj,contour,%
-      contour3,contourc,contrast,conv,conv2,cool,copper,corrcoef,cos,%
-      cosh,cot,coth,cov,cplxpair,cputime,cross,csc,csch,csvread,%
-      csvwrite,cumprod,cumsum,cylinder,date,dbclear,dbcont,dbdown,%
-      dbquit,dbstack,dbstatus,dbstep,dbstop,dbtype,dbup,ddeadv,ddeexec,%
-      ddeinit,ddepoke,ddereq,ddeterm,ddeunadv,deblank,dec2hex,deconv,%
-      del2,delete,demo,det,diag,diary,diff,diffuse,dir,disp,dlmread,%
-      dlmwrite,dmperm,dot,drawnow,echo,eig,ellipj,ellipke,else,elseif,%
-      end,engClose,engEvalString,engGetFull,engGetMatrix,engOpen,%
-      engOutputBuffer,engPutFull,engPutMatrix,engSetEvalCallback,%
-      engSetEvalTimeout,engWinInit,eps,erf,erfc,erfcx,erfinv,%
-      errorbar,etime,etree,eval,exist,exp,expint,expm,expo,eye,fclose,%
-      feather,feof,ferror,feval,fft,fft2,fftshift,fgetl,fgets,figure,%
-      fill,fill3,filter,filter2,find,findstr,finite,fix,flag,fliplr,%
-      flipud,floor,flops,fmin,fmins,fopen,for,format,fplot,fprintf,%
-      fread,frewind,fscanf,fseek,ftell,full,function,funm,fwrite,fzero,%
-      gallery,gamma,gammainc,gammaln,gca,gcd,gcf,gco,get,getenv,%
-      getframe,ginput,global,gplot,gradient,gray,graymon,grid,griddata,%
-      gtext,hadamard,hankel,help,hess,hex2dec,hex2num,hidden,hilb,hist,%
-      hold,home,hostid,hot,hsv,hsv2rgb,if,ifft,ifft2,imag,image,%
-      imagesc,Inf,info,input,int2str,interp1,interp2,interpft,inv,%
-      invhilb,isempty,isglobal,ishold,isieee,isinf,isletter,isnan,%
-      isreal,isspace,issparse,isstr,jet,keyboard,kron,lasterr,lcm,%
-      legend,legendre,length,lin2mu,line,linspace,load,log,log10,log2,%
-      loglog,logm,logspace,lookfor,lower,ls,lscov,lu,magic,matClose,%
-      matDeleteMatrix,matGetDir,matGetFp,matGetFull,matGetMatrix,%
-      matGetNextMatrix,matGetString,matlabrc,matlabroot,matOpen,%
-      matPutFull,matPutMatrix,matPutString,max,mean,median,menu,mesh,%
-      meshc,meshgrid,meshz,mexAtExit,mexCallMATLAB,mexdebug,%
-      mexErrMsgTxt,mexEvalString,mexFunction,mexGetFull,mexGetMatrix,%
-      mexGetMatrixPtr,mexPrintf,mexPutFull,mexPutMatrix,mexSetTrapFlag,%
-      min,more,movie,moviein,mu2lin,mxCalloc,mxCopyCharacterToPtr,%
-      mxCopyComplex16ToPtr,mxCopyInteger4ToPtr,mxCopyPtrToCharacter,%
-      mxCopyPtrToComplex16,mxCopyPtrToInteger4,mxCopyPtrToReal8,%
-      mxCopyReal8ToPtr,mxCreateFull,mxCreateSparse,mxCreateString,%
-      mxFree,mxFreeMatrix,mxGetIr,mxGetJc,mxGetM,mxGetN,mxGetName,%
-      mxGetNzmax,mxGetPi,mxGetPr,mxGetScalar,mxGetString,mxIsComplex,%
-      mxIsFull,mxIsNumeric,mxIsSparse,mxIsString,mxIsTypeDouble,%
-      mxSetIr,mxSetJc,mxSetM,mxSetN,mxSetName,mxSetNzmax,mxSetPi,%
-      mxSetPr,NaN,nargchk,nargin,nargout,newplot,nextpow2,nnls,nnz,%
-      nonzeros,norm,normest,null,num2str,nzmax,ode23,ode45,orient,orth,%
-      pack,pascal,patch,path,pause,pcolor,pi,pink,pinv,plot,plot3,%
-      pol2cart,polar,poly,polyder,polyeig,polyfit,polyval,polyvalm,%
-      pow2,print,printopt,prism,prod,pwd,qr,qrdelete,qrinsert,quad,%
-      quad8,quit,quiver,qz,rand,randn,randperm,rank,rat,rats,rbbox,%
-      rcond,real,realmax,realmin,refresh,rem,reset,reshape,residue,%
-      return,rgb2hsv,rgbplot,rootobject,roots,rose,rosser,rot90,rotate,%
-      round,rref,rrefmovie,rsf2csf,save,saxis,schur,sec,sech,semilogx,%
-      semilogy,set,setstr,shading,sign,sin,sinh,size,slice,sort,sound,%
-      spalloc,sparse,spaugment,spconvert,spdiags,specular,speye,spfun,%
-      sph2cart,sphere,spinmap,spline,spones,spparms,sprandn,sprandsym,%
-      sprank,sprintf,spy,sqrt,sqrtm,sscanf,stairs,startup,std,stem,%
-      str2mat,str2num,strcmp,strings,strrep,strtok,subplot,subscribe,%
-      subspace,sum,surf,surface,surfc,surfl,surfnorm,svd,symbfact,%
-      symmmd,symrcm,tan,tanh,tempdir,tempname,terminal,text,tic,title,%
-      toc,toeplitz,trace,trapz,tril,triu,type,uicontrol,uigetfile,%
-      uimenu,uiputfile,unix,unwrap,upper,vander,ver,version,view,%
-      viewmtx,waitforbuttonpress,waterfall,wavread,wavwrite,what,%
-      whatsnew,which,while,white,whitebg,who,whos,wilkinson,wk1read,%
-      stderr,stdout,plot,set,endif,wk1write,xlabel,xor,ylabel,zeros,%
-      zlabel,zoom,endwhile,endfunction,printf,case,switch,otherwise,%
-      system,lsode,endfor,error,ones,oneplot,__gnuplot_set__,do,until},%
-   sensitive=t,%
-   morecomment=[l]\#,%
-   morecomment=[l]\#\#,%
-   morecomment=[l]\%,%
-   morestring=[m]',%
-   morestring=[m]"%
-  }[keywords,comments,strings]%
-\lst@definelanguage[XSC]{Pascal}[Standard]{Pascal}
-  {deletekeywords={alfa,byte,pack,unpack},% 1998 Andreas Stephan
-   morekeywords={dynamic,external,forward,global,module,nil,operator,%
-      priority,sum,type,use,dispose,mark,page,release,cimatrix,%
-      cinterval,civector,cmatrix,complex,cvector,dotprecision,imatrix,%
-      interval,ivector,rmatrix,rvector,string,im,inf,re,sup,chr,comp,%
-      eof,eoln,expo,image,ival,lb,lbound,length,loc,mant,maxlength,odd,%
-      ord,pos,pred,round,rval,sign,substring,succ,trunc,ub,ubound}%
-  }%
-\lst@definelanguage[Borland6]{Pascal}[Standard]{Pascal}
-  {morekeywords={asm,constructor,destructor,implementation,inline,%
-      interface,nil,object,shl,shr,string,unit,uses,xor},%
-   morendkeywords={Abs,Addr,ArcTan,Chr,Concat,Copy,Cos,CSeg,DiskFree,%
-      DiskSize,DosExitCode,DosVersion,DSeg,EnvCount,EnvStr,Eof,Eoln,%
-      Exp,FExpand,FilePos,FileSize,Frac,FSearch,GetBkColor,GetColor,%
-      GetDefaultPalette,GetDriverName,GetEnv,GetGraphMode,GetMaxMode,%
-      GetMaxX,GetMaxY,GetModeName,GetPaletteSize,GetPixel,GetX,GetY,%
-      GraphErrorMsg,GraphResult,Hi,ImageSize,InstallUserDriver,%
-      InstallUserFont,Int,IOResult,KeyPressed,Length,Lo,MaxAvail,%
-      MemAvail,MsDos,Odd,Ofs,Ord,OvrGetBuf,OvrGetRetry,ParamCount,%
-      ParamStr,Pi,Pos,Pred,Ptr,Random,ReadKey,Round,SeekEof,SeekEoln,%
-      Seg,SetAspectRatio,Sin,SizeOf,Sound,SPtr,Sqr,Sqrt,SSeg,Succ,%
-      Swap,TextHeight,TextWidth,Trunc,TypeOf,UpCase,WhereX,WhereY,%
-      Append,Arc,Assign,AssignCrt,Bar,Bar3D,BlockRead,BlockWrite,ChDir,%
-      Circle,ClearDevice,ClearViewPort,Close,CloseGraph,ClrEol,ClrScr,%
-      Dec,Delay,Delete,DelLine,DetectGraph,Dispose,DrawPoly,Ellipse,%
-      Erase,Exec,Exit,FillChar,FillEllipse,FillPoly,FindFirst,FindNext,%
-      FloodFill,Flush,FreeMem,FSplit,GetArcCoords,GetAspectRatio,%
-      GetDate,GetDefaultPalette,GetDir,GetCBreak,GetFAttr,%
-      GetFillSettings,GetFTime,GetImage,GetIntVec,GetLineSettings,%
-      GetMem,GetPalette,GetTextSettings,GetTime,GetVerify,%
-      GetViewSettings,GoToXY,Halt,HighVideo,Inc,InitGraph,Insert,%
-      InsLine,Intr,Keep,Line,LineRel,LineTo,LowVideo,Mark,MkDir,Move,%
-      MoveRel,MoveTo,MsDos,New,NormVideo,NoSound,OutText,OutTextXY,%
-      OvrClearBuf,OvrInit,OvrInitEMS,OvrSetBuf,PackTime,PieSlice,%
-      PutImage,PutPixel,Randomize,Rectangle,Release,Rename,%
-      RestoreCrtMode,RmDir,RunError,Sector,Seek,SetActivePage,%
-      SetAllPalette,SetBkColor,SetCBreak,SetColor,SetDate,SetFAttr,%
-      SetFillPattern,SetFillStyle,SetFTime,SetGraphBufSize,%
-      SetGraphMode,SetIntVec,SetLineStyle,SetPalette,SetRGBPalette,%
-      SetTextBuf,SetTextJustify,SetTextStyle,SetTime,SetUserCharSize,%
-      SetVerify,SetViewPort,SetVisualPage,SetWriteMode,Sound,Str,%
-      SwapVectors,TextBackground,TextColor,TextMode,Truncate,%
-      UnpackTime,Val,Window}%
-  }%
-\lst@definelanguage[Standard]{Pascal}%
-  {morekeywords={alfa,and,array,begin,boolean,byte,case,char,const,div,%
-      do,downto,else,end,false,file,for,function,get,goto,if,in,%
-      integer,label,maxint,mod,new,not,of,or,pack,packed,page,program,%
-      put,procedure,read,readln,real,record,repeat,reset,rewrite,set,%
-      text,then,to,true,type,unpack,until,var,while,with,write,%
-      writeln},%
-   sensitive=f,%
-   morecomment=[s]{(*}{*)},%
-   morecomment=[s]{\{}{\}},%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-\lst@definelanguage{Perl}%
-  {morekeywords={abs,accept,alarm,atan2,bind,binmode,bless,caller,%
-      chdir,chmod,chomp,chop,chown,chr,chroot,close,closedir,connect,%
-      continue,cos,crypt,dbmclose,dbmopen,defined,delete,die,do,dump,%
-      each,else,elsif,endgrent,endhostent,endnetent,endprotoent,%
-      endpwent,endservent,eof,eval,exec,exists,exit,exp,fcntl,fileno,%
-      flock,for,foreach,fork,format,formline,getc,getgrent,getgrgid,%
-      getgrnam,gethostbyaddr,gethostbyname,gethostent,getlogin,%
-      getnetbyaddr,getnetbyname,getnetent,getpeername,getpgrp,%
-      getppid,getpriority,getprotobyname,getprotobynumber,getprotoent,%
-      getpwent,getpwnam,getpwuid,getservbyname,getservbyport,%
-      getservent,getsockname,getsockopt,glob,gmtime,goto,grep,hex,if,%
-      import,index,int,ioctl,join,keys,kill,last,lc,lcfirst,length,%
-      link,listen,local,localtime,log,lstat,m,map,mkdir,msgctl,msgget,%
-      msgrcv,msgsnd,my,next,no,oct,open,opendir,ord,pack,package,pipe,%
-      pop,pos,print,printf,prototype,push,q,qq,quotemeta,qw,qx,rand,%
-      read,readdir,readlink,recv,redo,ref,rename,require,reset,return,%
-      reverse,rewinddir,rindex,rmdir,s,scalar,seek,seekdir,select,%
-      semctl,semget,semop,send,setgrent,sethostent,setnetent,setpgrp,%
-      setpriority,setprotoent,setpwent,setservent,setsockopt,shift,%
-      shmctl,shmget,shmread,shmwrite,shutdown,sin,sleep,socket,%
-      socketpair,sort,splice,split,sprintf,sqrt,srand,stat,study,sub,%
-      substr,symlink,syscall,sysopen,sysread,system,syswrite,tell,%
-      telldir,tie,tied,time,times,tr,truncate,uc,ucfirst,umask,undef,%
-      unless,unlink,unpack,unshift,untie,until,use,utime,values,vec,%
-      wait,waitpid,wantarray,warn,while,write,y},%
-   sensitive,%
-   morecomment=[l]\#,%
-   morestring=[b]",%
-   morestring=[b]',%
-   MoreSelectCharTable=%
-      \lst@ReplaceInput{\$\#}{\lst@ProcessOther\$\lst@ProcessOther\#}%
-  }[keywords,comments,strings]%
-%%
-%% POV definition (c) 1999 Berthold H\"ollmann
-%%
-\lst@definelanguage{POV}%
-  {morekeywords={abs,absorption,acos,acosh,adaptive,adc_bailout,agate,%
-      agate_turb,all,alpha,ambient,ambient_light,angle,aperture,append,%
-      arc_angle,area_light,array,asc,asin,asinh,assumed_gamma,atan,%
-      atan2,atanh,average,background,bezier_spline,bicubic_patch,%
-      black_hole,blob,blue,blur_samples,bounded_by,box,boxed,bozo,%
-      break,brick,brick_size,brightness,brilliance,bumps,bump_map,%
-      bump_size,camera,case,caustics,ceil,checker,chr,clipped_by,clock,%
-      clock_delta,color,color_map,colour,colour_map,component,%
-      composite,concat,cone,confidence,conic_sweep,control0,control1,%
-      cos,cosh,count,crackle,crand,cube,cubic,cubic_spline,cubic_wave,%
-      cylinder,cylindrical,debug,declare,default,defined,degrees,%
-      density,density_file,density_map,dents,difference,diffuse,%
-      dimensions,dimension_size,direction,disc,distance,%
-      distance_maximum,div,eccentricity,else,emission,end,error,%
-      error_bound,exp,extinction,fade_distance,fade_power,falloff,%
-      falloff_angle,false,fclose,file_exists,filter,finish,fisheye,%
-      flatness,flip,floor,focal_point,fog,fog_alt,fog_offset,fog_type,%
-      fopen,frequency,gif,global_settings,gradient,granite,%
-      gray_threshold,green,height_field,hexagon,hf_gray_16,hierarchy,%
-      hollow,hypercomplex,if,ifdef,iff,ifndef,image_map,include,int,%
-      interior,interpolate,intersection,intervals,inverse,ior,irid,%
-      irid_wavelength,jitter,julia_fractal,lambda,lathe,leopard,%
-      light_source,linear_spline,linear_sweep,local,location,log,%
-      looks_like,look_at,low_error_factor,macro,mandel,map_type,marble,%
-      material,material_map,matrix,max,max_intersections,max_iteration,%
-      max_trace_level,media,media_attenuation,media_interaction,merge,%
-      mesh,metallic,min,minimum_reuse,mod,mortar,nearest_count,no,%
-      normal,normal_map,no_shadow,number_of_waves,object,octaves,off,%
-      offset,omega,omnimax,on,once,onion,open,orthographic,panoramic,%
-      perspective,pgm,phase,phong,phong_size,pi,pigment,pigment_map,%
-      planar,plane,png,point_at,poly,polygon,poly_wave,pot,pow,ppm,%
-      precision,prism,pwr,quadratic_spline,quadric,quartic,quaternion,%
-      quick_color,quick_colour,quilted,radial,radians,radiosity,radius,%
-      rainbow,ramp_wave,rand,range,ratio,read,reciprocal,%
-      recursion_limit,red,reflection,reflection_exponent,refraction,%
-      render,repeat,rgb,rgbf,rgbft,rgbt,right,ripples,rotate,roughness,%
-      samples,scale,scallop_wave,scattering,seed,shadowless,sin,%
-      sine_wave,sinh,sky,sky_sphere,slice,slope_map,smooth,%
-      smooth_triangle,sor,specular,sphere,spherical,spiral1,spiral2,%
-      spotlight,spotted,sqr,sqrt,statistics,str,strcmp,strength,strlen,%
-      strlwr,strupr,sturm,substr,superellipsoid,switch,sys,t,tan,tanh,%
-      text,texture,texture_map,tga,thickness,threshold,tightness,tile2,%
-      tiles,torus,track,transform,translate,transmit,triangle,%
-      triangle_wave,true,ttf,turbulence,turb_depth,type,u,%
-      ultra_wide_angle,undef,union,up,use_color,use_colour,use_index,%
-      u_steps,v,val,variance,vaxis_rotate,vcross,vdot,version,vlength,%
-      vnormalize,vrotate,v_steps,warning,warp,water_level,waves,while,%
-      width,wood,wrinkles,write,x,y,yes,z},%
-   moredirectives={break,case,debug,declare,default,else,end,fclose,%
-      fopen,local,macro,read,render,statistics,switch,undef,version,%
-      warning,write},%
-   moredelim=*[directive]\#,%
-   sensitive,%
-   morecomment=[l]//,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[d]",%
-  }[keywords,directives,comments,strings]%
-%%
-%% Python definition (c) 1998 Michael Weber
-%% Additional definitions (2013) Alexis Dimitriadis
-%%
-\lst@definelanguage{Python}%
-  {morekeywords={access,and,break,class,continue,def,del,elif,else,%
-      except,exec,finally,for,from,global,if,import,in,is,lambda,not,%
-      or,pass,print,raise,return,try,while},%
-  % Built-ins
-   morekeywords=[2]{abs,all,any,basestring,bin,bool,bytearray,callable,chr,
-     classmethod,cmp,compile,complex,delattr,dict,dir,divmod,enumerate,eval,
-     execfile,file,filter,float,format,frozenset,getattr,globals,hasattr,hash,
-     help,hex,id,input,int,isinstance,issubclass,iter,len,list,locals,long,map,
-     max,memoryview,min,next,object,oct,open,ord,pow,property,range,raw_input,
-     reduce,reload,repr,reversed,round,set,setattr,slice,sorted,staticmethod,str,
-     sum,super,tuple,type,unichr,unicode,vars,xrange,zip,apply,buffer,coerce,
-     intern},
-   sensitive=true,%
-   morecomment=[l]\#,%
-   morestring=[b]',%
-   morestring=[b]",%
-   morecomment=[s]{'''}{'''},% used for documentation text (mulitiline strings)
-   morecomment=[s]{"""}{"""},% added by Philipp Matthias Hahn
-   morestring=[s]{r'}{'},% `raw' strings
-   morestring=[s]{r"}{"},%
-   morestring=[s]{r'''}{'''},%
-   morestring=[s]{r"""}{"""},%
-   morestring=[s]{u'}{'},% unicode strings
-   morestring=[s]{u"}{"},%
-   morestring=[s]{u'''}{'''},%
-   morestring=[s]{u"""}{"""}%
-  }%
-%%
-%% Scilab definition (c) 2002,2003 Jean-Philippe Grivet
-%%
-\lst@definelanguage{Scilab}%
-  {morekeywords={abcd,abinv,abort,abs,acoshm,acosh,acosm,acos,addcolor,%
-      addf,addinter,addmenu,add_edge,add_node,adj2sp,adj_lists,aff2ab,%
-      amell,analpf,analyze,ans,apropos,arc_graph,arc_number,argn,arhnk,%
-      arl2,arma2p,armac,armax1,armax,arma,arsimul,artest,articul,ascii,%
-      asinhm,asinh,asinm,asin,atanhm,atanh,atanm,atan,augment,auread,%
-      auwrite,balanc,balreal,bandwr,basename,bdiag,besseli,besselj,%
-      besselk,bessely,best_match,bezout,bifish,bilin,binomial,black,%
-      bloc2exp,bloc2ss,bode,bool2s,boolean,boucle,break,bstap,buttmag,%
-      bvode,cainv,calerf,calfrq,call,canon,casc,case,ccontrg,cdfbet,%
-      cdfbin,cdfchi,cdfchn,cdffnc,cdff,cdfgam,cdfnbn,cdfnor,cdfpoi,%
-      cdft,ceil,center,cepstrum,chaintest,chain_struct,champ1,champ,%
-      chart,chdir,cheb1mag,cheb2mag,check_graph,check_io,chepol,chfact,%
-      chol,chsolve,circuit,classmarkov,clean,clearfun,clearglobal,%
-      clear,close,cls2dls,cmb_lin,cmndred,cmoment,code2str,coeff,coffg,%
-      coff,colcompr,colcomp,colinout,colormap,colregul,companion,comp,%
-      cond,conj,connex,contour2di,contour2d,contourf,contour,%
-      contract_edge,contrss,contr,cont_frm,cont_mat,convex_hull,convol,%
-      convstr,con_nodes,copfac,copy,correl,corr,coshm,cosh,cosm,cos,%
-      cotg,cothm,coth,covar,csim,cspect,ctr_gram,cumprod,cumsum,%
-      curblock,cycle_basis,czt,c_link,dasrt,dassl,datafit,date,dbphi,%
-      dcf,ddp,debug,dec2hex,deff,definedfields,degree,delbpt,%
-      delete_arcs,delete_nodes,delete,delip,delmenu,demos,denom,%
-      derivative,derivat,des2ss,des2tf,determ,detr,det,dft,dhinf,%
-      dhnorm,diag,diary,diff,diophant,dirname,dispbpt,dispfiles,disp,%
-      dlgamma,double,dragrect,drawaxis,drawlater,drawnow,draw,driver,%
-      dscr,dsearch,dsimul,dtsi,dt_ility,duplicate,edge_number,%
-      edit_curv,edit_graph_menus,edit_graph,edit,eigenmarkov,ell1mag,%
-      elseif,else,emptystr,endfunction,end,eqfir,eqiir,equil1,equil,%
-      ereduc,erfcx,erfc,erf,errbar,errcatch,errclear,error,eval3dp,%
-      eval3d,eval,evans,evstr,excel2sci,execstr,exec,exists,exit,expm,%
-      exp,external,eye,fac3d,factors,faurre,fchamp,fcontour2d,fcontour,%
-      fec,feedback,feval,ffilt,fftshift,fft,fgrayplot,figure,fileinfo,%
-      file,filter,findm,findobj,findx0BD,find_freq,find_path,find,%
-      findABCD,findAC,findBD,findBDK,findR,fit_dat,fix,floor,flts,foo,%
-      formatman,format,fort,for,fourplan,fplot2d,fplot3d1,fplot3d,%
-      fprintf,fprintfMat,frep2tf,freq,freson,frexp,frfit,frmag,fscanf,%
-      fscanfMat,fsfirlin,fsolve,fspecg,fstabst,fstair,ftest,ftuneq,%
-      fullrfk,fullrf,full,fun2string,funcprot,functions,function,%
-      funptr,fusee,gainplot,gamitg,gammaln,gamma,gcare,gcd,gcf,%
-      genfac3d,genlib,genmarkov,gen_net,geom3d,geomean,getblocklabel,%
-      getcolor,getcurblock,getcwd,getdate,getd,getenv,getfield,getfont,%
-      getf,getio,getlinestyle,getmark,getpid,getscicosvars,getsymbol,%
-      getvalue,getversion,get_function_path,get,gfare,gfrancis,girth,%
-      givens,glever,glist,global,glue,gpeche,graduate,grand,%
-      graphics_entities,graph_2_mat,graph_center,graph_complement,%
-      graph_diameter,graph_power,graph_simp,graph_sum,graph_union,%
-      graph-list,graycolormap,grayplot,graypolarplot,grep,group,%
-      gr_menu,gschur,gsort,gspec,gstacksize,gtild,g_margin,h2norm,halt,%
-      hamilton,hankelsv,hank,harmean,havewindow,help,hermit,hess,%
-      hex2dec,hilb,hinf,hist3d,histplot,horner,host,hotcolormap,%
-      householder,hrmt,htrianr,hypermat,h_cl,h_inf_st,h_inf,h_norm,%
-      iconvert,icon_edit,ieee,if,iirgroup,iirlp,iir,ilib_build,%
-      ilib_compile,ilib_for_link,ilib_gen_gateway,ilib_gen_loader,%
-      ilib_gen_Make,imag,impl,imrep2ss,imult,im_inv,inistate,input,%
-      int16,int2d,int32,int3d,int8,intc,intdec,integrate,interpln,%
-      interp,intersci,intersect,intg,intl,intppty,intsplin,inttrap,%
-      inttype,int,invr,invsyslin,inv_coeff,inv,iqr,isdef,isdir,isequal,%
-      iserror,isglobal,isinf,isnan,isoview,isreal,is_connex,jmat,%
-      justify,kalm,karmarkar,kernel,keyboard,knapsack,kpure,krac2,%
-      kroneck,kron,lasterror,lattn,lattp,lcf,lcmdiag,lcm,ldivf,ldiv,%
-      leastsq,legends,length,leqr,levin,lev,lex_sort,lft,lgfft,library,%
-      lib,lin2mu,lincos,lindquist,lines,line_graph,linfn,linf,link,%
-      linmeq,linpro,linsolve,linspace,lin,listfiles,list,lmisolver,%
-      lmitool,loadmatfile,loadplots,loadwave,load_graph,load,locate,%
-      log10,log1p,log2,logm,logspace,log,lotest,lqe,lqg2stan,lqg_ltr,%
-      lqg,lqr,lsq,lsslist,lstcat,lstsize,ltitr,ludel,lufact,luget,%
-      lusolve,lu,lyap,macglov,macr2lst,macrovar,macro,mad,make_graph,%
-      make_index,manedit,man,mapsound,markp2ss,matfile2sci,matrix,%
-      mat_2_graph,maxi,max_cap_path,max_clique,max_flow,max,mclearerr,%
-      mclose,meanf,mean,median,meof,mese,mesh2d,mfft,mfile2sci,mgeti,%
-      mgetl,mgetstr,mget,milk_drop,mine,mini,minreal,minss,%
-      min_lcost_cflow,min_lcost_flow1,min_lcost_flow2,min_qcost_flow,%
-      min_weight_tree,min,mlist,mode,modulo,moment,mopen,move,%
-      mps2linpro,mputl,mputstr,mput,mrfit,msd,mseek,mtell,mtlb_load,%
-      mtlb_mode,mtlb_save,mtlb_sparse,mu2lin,mulf,mvvacov,m_circle,%
-      names,nand2mean,nanmax,nanmeanf,nanmean,nanmedian,nanmin,%
-      nanstdev,nansum,narsimul,ndims,nearfloat,nehari,neighbors,%
-      netclose,netwindows,netwindow,newest,newfun,nextpow2,nf3d,nfreq,%
-      nlev,nnz,nodes_2_path,nodes_degrees,node_number,noisegen,norm,%
-      null,numdiff,numer,nyquist,obscont1,obscont,observer,obsvss,%
-      obsv_mat,obs_gram,odedc,odedi,odeoptions,ode_discrete,ode_root,%
-      ode,oldload,oldsave,ones,optim,orth,param3d1,param3d,%
-      paramfplot2d,parrot,part,pathconvert,path_2_nodes,pause,pbig,%
-      pdiv,pen2ea,pencan,penlaur,perctl,perfect_match,pertrans,pfss,%
-      phasemag,phc,pinv,pipe_network,playsnd,plot2d1,plot2d2,plot2d3,%
-      plot2d4,plot2d,plot3d1,plot3d2,plot3d3,plot3d,plotframe,%
-      plotprofile,plot_graph,plot,plzr,pmodulo,pol2des,pol2str,pol2tex,%
-      polarplot,polar,polfact,poly,portr3d,portrait,power,ppol,prbs_a,%
-      predecessors,predef,printf,printing,print,prod,profile,projsl,%
-      projspec,proj,psmall,pspect,pvm_addhosts,pvm_barrier,pvm_bcast,%
-      pvm_bufinfo,pvm_config,pvm_delhosts,pvm_error,pvm_exit,%
-      pvm_f772sci,pvm_getinst,pvm_gettid,pvm_get_timer,pvm_gsize,%
-      pvm_halt,pvm_joingroup,pvm_kill,pvm_lvgroup,pvm_mytid,pvm_parent,%
-      pvm_probe,pvm_recv,pvm_reduce,pvm_sci2f77,pvm_send,pvm_set_timer,%
-      pvm_spawn_independent,pvm_spawn,pvm_start,pvm_tasks,%
-      pvm_tidtohost,pvm,pwd,p_margin,qassign,qr,quapro,quart,quaskro,%
-      quit,randpencil,rand,range,rankqr,rank,rat,rcond,rdivf,read4b,%
-      readb,readc_,readmps,read,real,recur,reglin,regress,remezb,remez,%
-      repfreq,replot,residu,resume,return,riccati,riccsl,ricc,ric_desc,%
-      rlist,roots,rotate,round,routh_t,rowcompr,rowcomp,rowinout,%
-      rowregul,rowshuff,rpem,rref,rtitr,rubberbox,salesman,savewave,%
-      save_graph,save,scaling,scanf,schur,sci2exp,sci2for,sci2map,%
-      sciargs,scicosim,scicos,scifunc_block,sd2sci,secto3d,select,%
-      semidef,sensi,setbpt,seteventhandler,setfield,setmenu,%
-      setscicosvars,set,sfact,sgrid,shortest_path,showprofile,%
-      show_arcs,show_graph,show_nodes,sident,signm,sign,simp_mode,simp,%
-      sincd,sinc,sinc,sinhm,sinh,sinm,sin,size,sm2des,sm2ss,smooth,%
-      solve,sorder,sort,sound,sp2adj,spaninter,spanplus,spantwo,sparse,%
-      spchol,spcompack,specfact,spec,speye,spget,splin,split_edge,%
-      spones,sprand,sprintf,spzeros,sqroot,sqrtm,sqrt,squarewave,%
-      square,srfaur,srkf,ss2des,ss2ss,ss2tf,sscanf,sskf,ssprint,ssrand,%
-      stabil,stacksize,standard_define,standard_draw,standard_input,%
-      standard_origin,standard_output,startup,stdevf,stdev,steadycos,%
-      str2code,strange,strcat,strindex,strings,string,stripblanks,%
-      strong_connex,strong_con_nodes,strsubst,st_deviation,st_ility,%
-      subf,subgraph,subplot,successors,sum,supernode,sva,svd,svplot,%
-      sylm,sylv,sysconv,sysdiag,sysfact,syslin,syssize,systems,system,%
-      systmat,tabul,tangent,tanhm,tanh,tanm,tan,tdinit,testmatrix,%
-      texprint,tf2des,tf2ss,then,thrownan,timer,time_id,titlepage,%
-      tk_getdir,tk_getfile,tlist,toeplitz,tokenpos,tokens,trace,%
-      translatepaths,trans_closure,trans,trfmod,trianfml,tril,trimmean,%
-      trisolve,triu,trzeros,typename,typeof,type,uicontrol,uimenu,%
-      uint16,uint32,uint8,ui_observer,ulink,unglue,union,unique,unix_g,%
-      unix_s,unix_w,unix_x,unix,unobs,unsetmenu,user,varargin,%
-      varargout,variancef,variance,varn,warning,wavread,wavwrite,%
-      wcenter,wfir,what,whereami,whereis,where,while,whos,who_user,who,%
-      wiener,wigner,window,winsid,with_gtk,with_pvm,with_texmacs,%
-      with_tk,writb,write4b,write,xarcs,xarc,xarrows,xaxis,xbasc,%
-      xbasimp,xbasr,xchange,xclear,xclea,xclick,xclip,xdel,xend,xfarcs,%
-      xfarc,xfpolys,xfpoly,xfrect,xgetech,xgetfile,xgetmouse,xget,%
-      xgraduate,xgrid,xinfo,xinit,xlfont,xload,xname,xnumb,xpause,%
-      xpolys,xpoly,xrects,xrect,xrpoly,xs2fig,xs2gif,xs2ppm,xs2ps,%
-      xsave,xsegs,select,xsetech,xsetm,xset,xstringb,xstringl,xstring,%
-      xtape,xtitle,x_choices,x_choose,x_dialog,x_matrix,x_mdialog,%
-      x_message_modeless,x_message,yulewalk,zeropen,zeros,zgrid,zpbutt,%
-      zpch1,zpch2,zpell,mfprintf,mfscanf,mprintf,mscanf,msprintf,%
-      msscanf,mucomp,%
-      ABSBLK_f,AFFICH_f,ANDLOG_f,ANIMXY_f,BIGSOM_f,CLINDUMMY_f,CLKIN_f,%
-      CLKINV_f,CLKOUT_f,CLKOUTV_f,CLKSOM_f,CLKSOMV_f,CLKSPLIT_f,%
-      CLOCK_f,CLR_f,CLSS_f,CONST_f,COSBLK_f,CURV_f,DELAY_f,DELAYV_f,%
-      DEMUX_f,DLR_f,DLRADAPT_f,DLSS_f,EVENTSCOPE_f,EVTDLY_f,EVTGEN_f,%
-      EXPBLK_f,G_make,GAIN_f,GAINBLK_f,GENERAL_f,GENERIC_f,GENSIN_f,%
-      GENSQR_f,HALT_f,IFTHEL_f,IN_f,INTEGRAL_f,INTRP2BLK_f,INTRPLBLK_f,%
-      INVBLK_f,LOGBLK_f,LOOKUP_f,Matplot1,Matplot,MAX_f,MCLOCK_f,%
-      MFCLCK_f,MIN_f,MUX_f,NDcost,NEGTOPOS_f,OUT_f,POSTONEG_f,POWBLK_f,%
-      PROD_f,QUANT_f,RAND_f,READC_f,REGISTER_f,RELAY_f,RFILE_f,%
-      ScilabEval,Sfgrayplot,Sgrayplot,SAMPLEHOLD_f,SAT_f,SAWTOOTH_f,%
-      SCOPE_f,SCOPXY_f,SELECT_f,SINBLK_f,SOM_f,SPLIT_f,STOP_f,SUPER_f,%
-      TANBLK_f,TCLSS_f,TEXT_f,TIME_f,TK_EvalFile,TK_EvalStr,TK_GetVar,%
-      TK_SetVar,TRASH_f,WFILE_f,WRITEC_f,ZCROSS_f,%
-      \%asn,\%helps,\%k,\%sn},%
-   alsoletter=\%,% chmod
-   sensitive,%
-   morecomment=[l]//,%
-   morestring=[b]",%
-   morestring=[m]'%
-  }[keywords,comments,strings]%
-%%
-%% SQL definition (c) 1998 Christian Haul
-%%                (c) 2002 Neil Conway
-%%                (c) 2002 Robert Frank
-%%                (c) 2003 Dirk Jesko
-%%
-\lst@definelanguage{SQL}%
-  {morekeywords={ABSOLUTE,ACTION,ADD,ALLOCATE,ALTER,ARE,AS,ASSERTION,%
-      AT,BETWEEN,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,%
-      CATALOG,CHAR_LENGTH,CHARACTER_LENGTH,CLUSTER,COALESCE,%
-      COLLATE,COLLATION,COLUMN,CONNECT,CONNECTION,CONSTRAINT,%
-      CONSTRAINTS,CONVERT,CORRESPONDING,CREATE,CROSS,CURRENT_DATE,%
-      CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,DAY,DEALLOCATE,%
-      DEC,DEFERRABLE,DEFERED,DESCRIBE,DESCRIPTOR,DIAGNOSTICS,%
-      DISCONNECT,DOMAIN,DROP,ELSE,END,EXEC,EXCEPT,EXCEPTION,EXECUTE,%
-      EXTERNAL,EXTRACT,FALSE,FIRST,FOREIGN,FROM,FULL,GET,GLOBAL,%
-      GRAPHIC,HAVING,HOUR,IDENTITY,IMMEDIATE,INDEX,INITIALLY,INNER,%
-      INPUT,INSENSITIVE,INSERT,INTO,INTERSECT,INTERVAL,%
-      ISOLATION,JOIN,KEY,LAST,LEADING,LEFT,LEVEL,LIMIT,LOCAL,LOWER,%
-      MATCH,MINUTE,MONTH,NAMES,NATIONAL,NATURAL,NCHAR,NEXT,NO,NOT,NULL,%
-      NULLIF,OCTET_LENGTH,ON,ONLY,ORDER,ORDERED,OUTER,OUTPUT,OVERLAPS,%
-      PAD,PARTIAL,POSITION,PREPARE,PRESERVE,PRIMARY,PRIOR,READ,%
-      RELATIVE,RESTRICT,REVOKE,RIGHT,ROWS,SCROLL,SECOND,SELECT,SESSION,%
-      SESSION_USER,SIZE,SPACE,SQLSTATE,SUBSTRING,SYSTEM_USER,%
-      TABLE,TEMPORARY,THEN,TIMEZONE_HOUR,%
-      TIMEZONE_MINUTE,TRAILING,TRANSACTION,TRANSLATE,TRANSLATION,TRIM,%
-      TRUE,UNIQUE,UNKNOWN,UPPER,USAGE,USING,VALUE,VALUES,%
-      VARGRAPHIC,VARYING,WHEN,WHERE,WRITE,YEAR,ZONE,%
-      AND,ASC,avg,CHECK,COMMIT,count,DECODE,DESC,DISTINCT,GROUP,IN,% FF
-      LIKE,NUMBER,ROLLBACK,SUBSTR,sum,VARCHAR2,% FF
-      MIN,MAX,UNION,UPDATE,% RF
-      ALL,ANY,CUBE,CUBE,DEFAULT,DELETE,EXISTS,GRANT,OR,RECURSIVE,% DJ
-      ROLE,ROLLUP,SET,SOME,TRIGGER,VIEW},% DJ
-   morendkeywords={BIT,BLOB,CHAR,CHARACTER,CLOB,DATE,DECIMAL,FLOAT,% DJ
-      INT,INTEGER,NUMERIC,SMALLINT,TIME,TIMESTAMP,VARCHAR},% moved here
-   sensitive=false,% DJ
-   morecomment=[l]--,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[d]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%%
-%% VHDL definition (c) 1997 Kai Wollenweber
-%%
-\lst@definelanguage{VHDL}%
-  {morekeywords={ALL,ARCHITECTURE,ABS,AND,ASSERT,ARRAY,AFTER,ALIAS,%
-      ACCESS,ATTRIBUTE,BEGIN,BODY,BUS,BLOCK,BUFFER,CONSTANT,CASE,%
-      COMPONENT,CONFIGURATION,DOWNTO,ELSE,ELSIF,END,ENTITY,EXIT,%
-      FUNCTION,FOR,FILE,GENERIC,GENERATE,GUARDED,GROUP,IF,IN,INOUT,IS,%
-      INERTIAL,IMPURE,LIBRARY,LOOP,LABEL,LITERAL,LINKAGE,MAP,MOD,NOT,%
-      NOR,NAND,NULL,NEXT,NEW,OUT,OF,OR,OTHERS,ON,OPEN,PROCESS,PORT,%
-      PACKAGE,PURE,PROCEDURE,POSTPONED,RANGE,REM,ROL,ROR,REPORT,RECORD,%
-      RETURN,REGISTER,REJECT,SIGNAL,SUBTYPE,SLL,SRL,SLA,SRA,SEVERITY,%
-      SELECT,THEN,TYPE,TRANSPORT,TO,USE,UNITS,UNTIL,VARIABLE,WHEN,WAIT,%
-      WHILE,XOR,XNOR,%
-      DISCONNECT,ELIF,WITH},% Arnaud Tisserand
-   sensitive=f,% 1998 Gaurav Aggarwal
-   morecomment=[l]--,%
-   morestring=[d]{"}%
-  }[keywords,comments,strings]%
-%%
-%% VHDL-AMS definition (c) Steffen Klupsch
-%%
-\lst@definelanguage[AMS]{VHDL}[]{VHDL}%
-  {morekeywords={ACROSS,ARRAY,BREAK,DISCONNECT,NATURE,NOISE,PORT,%
-      PROCEDURAL,QUANTITY,SHARED,SPECTRUM,SUBNATURE,TERMINAL,THROUGH,%
-      TOLERANCE,UNAFFACTED,UNITS}}
-\lst@definelanguage{XSLT}[]{XML}%
-  {morekeywords={%
-     % main elements
-     xsl:stylesheet,xsl:transform,%
-     % childs of the main element
-     xsl:apply-imports,xsl:attribute-set,xsl:decimal-format,xsl:import,%
-     xsl:include,xsl:key,xsl:namespace-alias,xsl:output,xsl:param,%
-     xsl:preserve-space,xsl:strip-space,xsl:template,xsl:variable,%
-     % 21 directives
-     xsl:apply-imports,xsl:apply-templates,xsl:attribute,%
-     xsl:call-template,xsl:choose,xsl:comment,xsl:copy,xsl:copy-of,%
-     xsl:element,xsl:fallback,xsl:for-each,xsl:if,xsl:message,%
-     xsl:number,xsl:otherwise,xsl:processing-instruction,xsl:text,%
-     xsl:value-of,xsl:variable,xsl:when,xsl:with-param},%
-   alsodigit={-},%
-  }%
-\lst@definelanguage{Ant}[]{XML}%
-  {morekeywords={%
-     project,target,patternset,include,exclude,excludesfile,includesfile,filterset,%
-     filter,filtersfile,libfileset,custom,classpath,fileset,none,depend,mapper,%
-     filename,not,date,contains,selector,depth,or,and,present,majority,size,dirset,%
-     filelist,pathelement,path,param,filterreader,extension,filterchain,linecontainsregexp,%
-     regexp,classconstants,headfilter,tabstospaces,striplinebreaks,tailfilter,stripjavacomments,%
-     expandproperties,linecontains,replacetokens,token,striplinecomments,comment,prefixlines,%
-     classfileset,rootfileset,root,description,xmlcatalog,entity,dtd,substitution,%
-     extensionSet,propertyfile,entry,vsscheckin,sql,transaction,cvspass,csc,%
-     dirname,wlrun,wlclasspath,p4label,replaceregexp,get,jjtree,sleep,jarlib,%
-     dependset,targetfileset,srcfileset,srcfilelist,targetfilelist,zip,zipgroupfileset,zipfileset,%
-     patch,jspc,webapp,style,test,arg,jvmarg,sysproperty,testlet,env,tstamp,%
-     format,unwar,vsshistory,icontract,cvschangelog,user,p4submit,ccmcheckin,%
-     p4change,bzip2,vssadd,javadoc,bottom,source,doctitle,header,excludepackage,bootclasspath,%
-     doclet,taglet,packageset,sourcepath,link,footer,package,group,title,tag,%
-     translate,signjar,vajload,vajproject,jarlib,extensionset,WsdlToDotnet,buildnumber,%
-     jpcovmerge,tomcat,ejbjar,weblogictoplink,jboss,borland,weblogic,iplanet,jonas,%
-     support,websphere,wasclasspath,war,manifest,attribute,section,metainf,lib,%
-     classes,webinf,rename,sequential,serverdeploy,generic,property,move,%
-     copydir,cccheckin,wljspc,fixcrlf,sosget,pathconvert,map,record,p4sync,exec,%
-     p4edit,maudit,rulespath,searchpath,antlr,netrexxc,jpcovreport,reference,filters,%
-     coveragepath,execon,targetfile,srcfile,ccmcheckout,ant,xmlvalidate,xslt,%
-     iplanet,ccmcheckintask,gzip,native2ascii,starteam,ear,archives,input,%
-     rmic,extdirs,compilerarg,checksum,mail,bcc,message,cc,to,from,loadfile,vsscheckout,%
-     stylebook,soscheckin,mimemail,stlabel,gunzip,concat,cab,touch,parallel,splash,%
-     antcall,cccheckout,typedef,p4have,xmlproperty,copy,tomcat,antstructure,ccmcreatetask,%
-     rpm,delete,replace,replacefilter,replacetoken,replacevalue,mmetrics,waitfor,isfalse,%
-     equals,available,filepath,os,filesmatch,istrue,isset,socket,http,uptodate,srcfiles,%
-     untar,loadproperties,echoproperties,vajexport,stcheckout,bunzip2,copyfile,vsscreate,%
-     ejbc,unjar,tomcat,wsdltodotnet,mkdir,condition,cvs,commandline,marker,argument,%
-     tempfile,junitreport,report,taskdef,echo,ccupdate,java,renameext,vsslabel,basename,%
-     javadoc2,vsscp,tar,tarfileset,tomcat,vajimport,setproxy,wlstop,p4counter,ilasm,%
-     soscheckout,apply,ccuncheckout,jarlib,location,url,cvstagdiff,jlink,mergefiles,%
-     addfiles,javacc,pvcs,pvcsproject,jarlib,options,depends,chmod,jar,sound,fail,%
-     success,mparse,blgenclient,genkey,dname,javah,class,ccmreconfigure,unzip,javac,%
-     src,p4add,soslabel,jpcoverage,triggers,method,vssget,deltree,ddcreator},
-   deletekeywords={default},%
-  }
-\lst@definelanguage{XML}%
-  {keywords={,CDATA,DOCTYPE,ATTLIST,termdef,ELEMENT,EMPTY,ANY,ID,%
-      IDREF,IDREFS,ENTITY,ENTITIES,NMTOKEN,NMTOKENS,NOTATION,%
-      INCLUDE,IGNORE,SYSTEM,PUBLIC,NDATA,PUBLIC,%
-      PCDATA,REQUIRED,IMPLIED,FIXED,%%% preceded by #
-      xml,xml:space,xml:lang,version,standalone,default,preserve},%
-   alsoother=$,%
-   alsoletter=:,%
-   tag=**[s]<>,%
-   morestring=[d]",% ??? doubled
-   morestring=[d]',% ??? doubled
-   MoreSelectCharTable=%
-      \lst@CArgX--\relax\lst@DefDelimB{}{}%
-          {\ifnum\lst@mode=\lst@tagmode\else
-               \expandafter\@gobblethree
-           \fi}%
-          \lst@BeginComment\lst@commentmode{{\lst@commentstyle}}%
-      \lst@CArgX--\relax\lst@DefDelimE{}{}{}%
-          \lst@EndComment\lst@commentmode
-      \lst@CArgX[CDATA[\relax\lst@CDef{}%
-          {\ifnum\lst@mode=\lst@tagmode
-               \expandafter\lst@BeginCDATA
-           \else \expandafter\lst@CArgEmpty
-           \fi}%
-          \@empty
-      \lst@CArgX]]\relax\lst@CDef{}%
-          {\ifnum\lst@mode=\lst@GPmode
-               \expandafter\lst@EndComment
-           \else \expandafter\lst@CArgEmpty
-           \fi}%
-          \@empty
-  }[keywords,comments,strings,html]%
-\endinput
-%%
-%% End of file `lstlang1.sty'.
Index: doc/LaTeXmacros/listings/lstlang2.sty
===================================================================
--- doc/LaTeXmacros/listings/lstlang2.sty	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,1816 +1,0 @@
-%%
-%% This is file `lstlang2.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% lstdrvrs.dtx  (with options: `lang2')
-%% 
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\ProvidesFile{lstlang2.sty}
-    [2015/06/04 1.6 listings language file]
-%%
-%% Abap definition by Knut Lickert
-%%
-\lst@definelanguage[R/3 6.10]{ABAP}[R/3 4.6C]{ABAP}%
-  {morekeywords={try,endtry},%
-  }[keywords,comments,strings]
-\lst@definelanguage[R/3 4.6C]{ABAP}[R/3 3.1]{ABAP}%
-  {morekeywords={method,ref,class,create,object,%
-        methods,endmethod,private,protected,public,section,%
-        catch,system-exceptions,endcatch,%
-        },%
-   moreprocnamekeys={class},%
-   literate={->}{{$\rightarrow$}}1{=>}{{$\Rightarrow$}}1,%
-  }[keywords,comments,strings,procnames]
-\lst@definelanguage[R/3 3.1]{ABAP}[R/2 5.0]{ABAP}{}%
-\lst@definelanguage[R/2 5.0]{ABAP}%
-  {sensitive=f,%
-   procnamekeys={report,program,form,function,module},%
-   morekeywords={*,add,after,alias,analyzer,and,append,appending,area,assign,at,%
-        authority-check,before,binary,blank,break-point,calendar,call,%
-        case,change,changing,check,clear,cnt,co,collect,commit,common,%
-        component,compute,condense,corresponding,cos,cp,cs,currency-conversion,%
-        cursor,data,database,dataset,decimals,define,delete,deleting,dequeue,%
-        describe,detail,dialog,directory,div,divide,do,documentation,%
-        during,dynpro,else,end-of-page,end-of-selection,endat,endcase,%
-        enddo,endfor,endform,endif,endloop,endmodule,endselect,%
-        endwhile,enqueue,exceptions,exit,exp,export,exporting,extract,%
-        field,fields,field-groups,field-symbols,find,for,form,format,free,%
-        from,function,generating,get,giving,hide,id,if,import,%
-        importing,in,incl,include,initial,initialization,input,insert,%
-        interrupt,into,is,language,leave,leading,left-justified,like,line,lines,line-count,
-        line-selection,list-processing,load,local,log,logfile,loop,%
-        margin,mark,mask,memory,menue,message,mod,modify,module,move,%
-        move-text,multiply,na,new,new-line,new-page,no-gaps,np,ns,%
-        number,obligatory,occurs,of,on,or,others,output,parameter,%
-        parameters,parts,perform,pf-status,places,position,process,%
-        raise,raising,ranges,read,refresh,refresh-dynpro,reject,remote,%
-        replace,report,reserve,reset,restart,right-justified,run,screen,scroll,search,%
-        segments,select,select-options,selection-screen,set,shift,sin,%
-        single,sqrt,start-of-selection,statement,structure,submit,%
-        subtract,summary,summing,suppress,system,table,tables,task,%
-        text,time,to,top-of-page,trace,transaction,transfer,%
-        transfer-dynpro,translate,type,unpack,update,user-command,%
-        using,value,when,where,while,window,with,workfile,write,},%
-   morecomment=[l]",%
-   morecomment=[f][commentstyle][0]*,%
-   morestring=[d]'%
-  }[keywords,comments,strings,procnames]
-\lst@definelanguage[R/2 4.3]{ABAP}[R/2 5.0]{ABAP}%
-  {deletekeywords={function,importing,exporting,changing,exceptions,%
-        raise,raising}%
-  }[keywords,comments,strings]
-%%
-%% ACM and ACMscript definition
-%% (c) 2013 Stefan Pinnow
-%%
-\lst@definelanguage{ACM}{
-  morekeywords={
-    abs,After,acos,And,As,asin,atan,At,Call,Compatibility,Connect,cos,cosh,%
-    Create,Delay,Description,Difference,Do,Else,ElseIf,End,EndFor,EndIf,%
-    EndParallel,EndState,EndSwitch,EndText,EndWith,exp,External,Fixed,For,%
-    ForEach,Free,Global,Hidden,If,Implementation,In,Initial,Input,InterSection,%
-    IntegerSet,Invoke,Is,Language,Library,Link,Log10,LogE,Max,Min,Model,Of,%
-    Once,Options,Output,Parallel,Parameter,Pause,Port,Print,Private,%
-    Procedure,Product,Ramp,Repeat,Restart,Return,Round,Runs,Sigma,sin,sinh,%
-    Size,SnapShot,sqr,sqrt,SRamp,State,Stream,StringSet,Structure,Switch,%
-    SubRoutine,SymDiff,tan,tanh,Task,Text,Time,Then,Truncate,Union,Until,%
-    Uses,Variable,Wait,When,With,WithIn,WorkSpace%
-  },%
-  sensitive=false,%
-  morecomment=[l]{//},%
-  morecomment=[s]{/*}{*/},%
-  string=[b]{"},%
-}[keywords,comments,strings]%
-\lst@definelanguage{ACMscript}[]{VBScript}{%
-  morekeywords={%
-    ElseIf,False,In,Resume,True%
-  },%
-  deletekeywords={%
-    Abs,Array,Clear,CreateObject,CStr,Err,ForReading,ForWriting,%
-    OpenTextFile,Replace,WriteLine%
-  }%
-}[keywords,comments,strings]%
-%%
-%% Corba IDL definition (c) 1999 Jens T. Berger Thielemann
-%%
-\lst@definelanguage[CORBA]{IDL}%
-  {morekeywords={any,attribute,boolean,case,char,const,context,default,%
-      double,enum,exception,fixed,float,in,inout,interface,long,module,%
-      native,Object,octet,oneway,out,raises,readonly,sequence,short,%
-      string,struct,switch,typedef,union,unsigned,void,wchar,wstring,%
-      FALSE,TRUE},%
-   sensitive,%
-   moredirectives={define,elif,else,endif,error,if,ifdef,ifndef,line,%
-      include,pragma,undef,warning},%
-   moredelim=*[directive]\#,%
-   morecomment=[l]//,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]"%
-  }[keywords,comments,strings,directives]%
-%%
-%% (Objective) Caml definition (c) 1999 Patrick Cousot
-%%
-%% Objective CAML and Caml light are freely available, together with a
-%% reference manual, at URL ftp.inria.fr/lang/caml-light for the Unix,
-%% Windows and Macintosh OS operating systems.
-%%
-\lst@definelanguage[Objective]{Caml}[light]{Caml}
-  {deletekeywords={not,prefix,value,where},%
-   morekeywords={assert,asr,class,closed,constraint,external,false,%
-      functor,include,inherit,land,lazy,lor,lsl,lsr,lxor,method,mod,%
-      module,new,open,parser,private,sig,struct,true,val,virtual,when,%
-      object,ref},% TH
-  }%
-\lst@definelanguage[light]{Caml}
-  {morekeywords={and,as,begin,do,done,downto,else,end,exception,for,%
-      fun,function,if,in,let,match,mutable,not,of,or,prefix,rec,then,%
-      to,try,type,value,where,while,with},%
-   sensitive,%
-   morecomment=[n]{(*}{*)},%
-   morestring=[b]",%
-   moredelim=*[directive]\#,%
-   moredirectives={open,close,include}%
-  }[keywords,comments,strings,directives]%
-\lst@definelanguage[ibm]{Cobol}[1985]{Cobol}%
-  {morekeywords={ADDRESS,BEGINNING,COMP-3,COMP-4,COMPUTATIONAL,%
-      COMPUTATIONAL-3,COMPUTATIONAL-4,DISPLAY-1,EGCS,EJECT,ENDING,%
-      ENTRY,GOBACK,ID,MORE-LABELS,NULL,NULLS,PASSWORD,RECORDING,%
-      RETURN-CODE,SERVICE,SKIP1,SKIP2,SKIP3,SORT-CONTROL,SORT-RETURN,%
-      SUPPRESS,TITLE,WHEN-COMPILED},%
-  }%
-\lst@definelanguage[1985]{Cobol}[1974]{Cobol}%
-  {morekeywords={ALPHABET,ALPHABETIC-LOWER,ALPHABETIC-UPPER,%
-      ALPHANUMERIC,ALPHANUMERIC-EDITED,ANY,CLASS,COMMON,CONTENT,%
-      CONTINUE,DAY-OF-WEEK,END-ADD,END-CALL,END-COMPUTE,END-DELETE,%
-      END-DIVIDE,END-EVALUATE,END-IF,END-MULTIPLY,END-PERFORM,END-READ,%
-      END-RECEIVE,END-RETURN,END-REWRITE,END-SEARCH,END-START,%
-      END-STRING,END-SUBTRACT,END-UNSTRING,END-WRITE,EVALUATE,EXTERNAL,%
-      FALSE,GLOBAL,INITIALIZE,NUMERIC-EDITED,ORDER,OTHER,%
-      PACKED-DECIMAL,PADDING,PURGE,REFERENCE,RELOAD,REPLACE,STANDARD-1,%
-      STANDARD-2,TEST,THEN,TRUE},%
-  }%
-\lst@definelanguage[1974]{Cobol}%
-  {morekeywords={ACCEPT,ACCESS,ADD,ADVANCING,AFTER,ALL,ALPHABETIC,ALSO,%
-      ALTER,ALTERNATE,AND,ARE,AREA,AREAS,ASCENDING,ASSIGN,AT,AUTHOR,%
-      BEFORE,BINARY,BLANK,BLOCK,BOTTOM,BY,CALL,CANCEL,CD,CF,CH,%
-      CHARACTER,CHARACTERS,CLOCK-UNITS,CLOSE,COBOL,CODE,CODE-SET,%
-      COLLATING,COLUMN,COMMA,COMMUNICATION,COMP,COMPUTE,CONFIGURATION,%
-      CONTAINS,CONTROL,CONTROLS,CONVERTING,COPY,CORR,CORRESPONDING,%
-      COUNT,CURRENCY,DATA,DATE,DATE-COMPILED,DATE-WRITTEN,DAY,DE,%
-      DEBUG-CONTENTS,DEGUB-ITEM,DEBUG-LINE,DEBUG-NAME,DEBUG-SUB1,%
-      DEBUG-SUB2,DEBUG-SUB3,DEBUGGING,DECIMAL-POINT,DECLARATIVES,%
-      DELETE,DELIMITED,DELIMITER,DEPENDING,DESCENDING,DESTINATION,%
-      DETAIL,DISABLE,DISPLAY,DIVIDE,DIVISION,DOWN,DUPLICATES,DYNAMIC,%
-      EGI,ELSE,EMI,ENABLE,END,END-OF-PAGE,ENTER,ENVIRONMENT,EOP,EQUAL,%
-      ERROR,ESI,EVERY,EXCEPTION,EXIT,EXTEND,FD,FILE,FILE-CONTROL,%
-      FILLER,FINAL,FIRST,FOOTING,FOR,FROM,GENERATE,GIVING,GO,GREATER,%
-      GROUP,HEADING,HIGH-VALUE,HIGH-VALUES,I-O,I-O-CONTROL,%
-      IDENTIFICATION,IF,IN,INDEX,INDEXED,INDICATE,INITIAL,INITIATE,%
-      INPUT,INPUT-OUTPUT,INSPECT,INSTALLATION,INTO,INVALID,IS,JUST,%
-      JUSTIFIED,KEY,LABEL,LAST,LEADING,LEFT,LENGTH,LESS,LIMIT,LIMITS,%
-      LINAGE,LINAGE-COUNTER,LINE,LINE-COUNTER,LINES,LINKAGE,LOCK,%
-      LOW-VALUE,LOW-VALUES,MEMORY,MERGE,MESSAGE,MODE,MODULES,MOVE,%
-      MULTIPLE,MULTIPLY,NATIVE,NEGATIVE,NEXT,NO,NOT,NUMBER,NUMERIC,%
-      OBJECT-COMPUTER,OCCURS,OF,OFF,OMITTED,ON,OPEN,OPTIONAL,OR,%
-      ORGANIZATION,OUTPUT,OVERFLOW,PAGE,PAGE-COUNTER,PERFORM,PF,PH,PIC,%
-      PICTURE,PLUS,POINTER,POSITION,PRINTING,POSITIVE,PRINTING,%
-      PROCEDURE,PROCEDURES,PROCEED,PROGRAM,PROGRAM-ID,QUEUE,QUOTE,%
-      QUOTES,RANDOM,RD,READ,RECEIVE,RECORD,RECORDING,RECORDS,REDEFINES,%
-      REEL,REFERENCES,RELATIVE,RELEASE,REMAINDER,REMOVAL,RENAMES,%
-      REPLACING,REPORT,REPORTING,REPORTS,RERUN,RESERVE,RESET,RETURN,%
-      REVERSED,REWIND,REWRITE,RF,RH,RIGHT,ROUNDED,RUN,SAME,SD,SEARCH,%
-      SECTION,SECURITY,SEGMENT,SEGMENT-LIMIT,SELECT,SEND,SENTENCE,%
-      SEPARATE,SEQUENCE,SEQUENTIAL,SET,SIGN,SIZE,SORT,SORT-MERGE,%
-      SOURCE,SOURCE-COMPUTER,SPACE,SPACES,SPECIAL-NAMES,STANDARD,START,%
-      STATUS,STOP,STRING,SUB-QUEUE-1,SUB-QUEUE-2,SUB-QUEUE-3,SUBTRACT,%
-      SUM,SYMBOLIC,SYNC,SYNCHRONIZED,TABLE,TALLYING,TAPE,TERMINAL,%
-      TERMINATE,TEXT,THAN,THROUGH,THRU,TIME,TIMES,TO,TOP,TRAILING,TYPE,%
-      UNIT,UNSTRING,UNTIL,UP,UPON,USAGE,USE,USING,VALUE,VALUES,VARYING,%
-      WHEN,WITH,WORDS,WORKING-STORAGE,WRITE,ZERO,ZEROES,ZEROS},%
-   alsodigit=-,%
-   sensitive=f,% ???
-   morecomment=[f][commentstyle][6]*,%
-   morestring=[d]"% ??? doubled
-  }[keywords,comments,strings]%
-\lst@definelanguage{Delphi}%
-  {morekeywords={and,as,asm,array,begin,case,class,const,constructor,%
-      destructor,div,do,downto,else,end,except,exports,file,finally,%
-      for,function,goto,if,implementation,in,inherited,inline,%
-      initialization,interface,is,label,library,mod,nil,not,object,of,%
-      or,packed,procedure,program,property,raise,record,repeat,set,%
-      shl,shr,string,then,to,try,type,unit,until,uses,var,while,with,%
-      xor,%
-      absolute,abstract,assembler,at,cdecl,default,dynamic,export,%
-      external,far,forward,index,name,near,nodefault,on,override,%
-      private,protected,public,published,read,resident,storedDir,%
-      virtual,write},%
-   morendkeywords={Abs,AddExitProc,Addr,AllocMem,AnsiCompareStr,%
-      AnsiCompareText,AnsiLowerCase,AnsiUpperCase,Append,AppendStr,%
-      ArcTan,AssignCrt,Assigned,AssignFile,BlockRead,BlockWrite,Break,%
-      ChangeFileExt,ChDir,Chr,CloseFile,ClrEol,ClrScr,Concat,Continue,%
-      Copy,Cos,CSeg,CursorTo,Date,DateTimeToFileDate,DateTimeToStr,%
-      DateTimeToString,DateToStr,DayOfWeek,Dec,DecodeDate,DecodeTime,%
-      Delete,DeleteFile,DiskFree,DiskSize,Dispose,DisposeStr,%
-      DoneWinCrt,DSeg,EncodeDate,EncodeTime,Eof,Eoln,Erase,Exclude,%
-      Exit,Exp,ExpandFileName,ExtractFileExt,ExtractFileName,%
-      ExtractFilePath,FileAge,FileClose,FileDateToDateTime,FileExists,%
-      FileGetAttr,FileGetDate,FileOpen,FilePos,FileRead,FileSearch,%
-      FileSeek,FileSetAttr,FileSetDate,FileSize,FillChar,FindClose,%
-      FindFirst,FindNext,FloatToDecimal,FloatToStrF,FloatToStr,%
-      FloatToText,FloatToTextFmt,Flush,FmtLoadStr,FmtStr,Format,%
-      FormatBuf,FormatDateTime,FormatFloat,Frac,Free,FreeMem,GetDir,%
-      GetMem,GotoXY,Halt,Hi,High,Inc,Include,InitWinCrt,Insert,Int,%
-      IntToHex,IntToStr,IOResult,IsValidIdent,KeyPressed,Length,Ln,Lo,%
-      LoadStr,Low,LowerCase,MaxAvail,MemAvail,MkDir,Move,New,NewStr,%
-      Now,Odd,Ofs,Ord,ParamCount,ParamStr,Pi,Pos,Pred,Ptr,Random,%
-      Randomize,Read,ReadBuf,ReadKey,Readln,ReAllocMem,Rename,%
-      RenameFile,Reset,Rewrite,RmDir,Round,RunError,ScrollTo,Seek,%
-      SeekEof,SeekEoln,Seg,SetTextBuf,Sin,SizeOf,SPtr,Sqr,Sqrt,SSeg,%
-      Str,StrCat,StrComp,StrCopy,StrDispose,StrECopy,StrEnd,StrFmt,%
-      StrLCat,StrIComp,StrLComp,StrLCopy,StrLen,StrLFmt,StrLIComp,%
-      StrLower,StrMove,StrNew,StrPas,StrPCopy,StrPos,StrScan,StrRScan,%
-      StrToDate,StrToDateTime,StrToFloat,StrToInt,StrToIntDef,%
-      StrToTime,StrUpper,Succ,Swap,TextToFloat,Time,TimeToStr,%
-      TrackCursor,Trunc,Truncate,TypeOf,UpCase,UpperCase,Val,WhereX,%
-      WhereY,Write,WriteBuf,WriteChar,Writeln},%
-   sensitive=f,%
-   morecomment=[s]{(*}{*)},%
-   morecomment=[s]{\{}{\}},%
-   morecomment=[l]{//},% 2001 Christian Gudrian
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-\lst@definelanguage{Eiffel}%
-  {morekeywords={alias,all,and,as,BIT,BOOLEAN,CHARACTER,check,class,%
-      creation,Current,debug,deferred,do,DOUBLE,else,elseif,end,%
-      ensure,expanded,export,external,false,feature,from,frozen,if,%
-      implies,indexing,infix,inherit,inspect,INTEGER,invariant,is,%
-      like,local,loop,NONE,not,obsolete,old,once,or,POINTER,prefix,%
-      REAL,redefine,rename,require,rescue,Result,retry,select,%
-      separate,STRING,strip,then,true,undefine,unique,until,variant,%
-      when,xor},%
-   sensitive,%
-   morecomment=[l]--,%
-   morestring=[d]",%
-  }[keywords,comments,strings]%
-%%
-%% Euphoria definition (c) 1998 Detlef Reimers
-%%
-\lst@definelanguage{Euphoria}%
-  {morekeywords={abort,and,and_bits,append,arctan,atom,by,call,%
-      call_proc,call_func,c_proc,c_func,clear_screen,close,%
-      command_line,compare,constant,cos,do,date,else,elsif,end,exit,%
-      find,floor,for,function,getc,getenv,get_key,gets,global,%
-      get_pixel,if,include,integer,length,log,match,machine_func,%
-      machine_proc,mem_copy,mem_set,not,not_bits,or,object,open,%
-      or_bits,procedure,puts,position,prepend,print,printf,power,peek,%
-      poke,pixel,poke4,peek4s,peek4u,return,rand,repeat,remainder,%
-      routine_id,sequence,sqrt,sin,system,sprintf,then,type,to,time,%
-      trace,tan,while,with,without,xor,xor_bits},%
-   sensitive,%
-   morecomment=[l]--,%
-   morestring=[d]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%%
-%% GAP definition
-%% (c) 2013 Heiko Oberdiek
-%%
-\lst@definelanguage{GAP}{%
-  morekeywords={%
-    Assert,Info,IsBound,QUIT,%
-    TryNextMethod,Unbind,and,break,%
-    continue,do,elif,%
-    else,end,false,fi,for,%
-    function,if,in,local,%
-    mod,not,od,or,%
-    quit,rec,repeat,return,%
-    then,true,until,while%
-  },%
-  sensitive,%
-  morecomment=[l]\#,%
-  morestring=[b]",%
-  morestring=[b]',%
-}[keywords,comments,strings]
-%%
-%% Guarded Command Language (GCL)  definition
-%% (c) 2002 Mark van Eijk
-%%
-\lst@definelanguage{GCL}%
-  {morekeywords={const,con,var,array,of,skip,if,fi,do,od,div,mod},%
-   literate={|[}{\ensuremath{|\hskip -0.1em[}}2%
-            {]|}{\ensuremath{]\hskip -0.1em|}}2%
-    {[]}{\ensuremath{[\hskip -0.1em]}}2%
-    {->}{\ensuremath{\rightarrow}~}2%
-    {==}{\ensuremath{\equiv}~}2%
-    {>=}{\ensuremath{\geq}~}2%
-    {<=}{\ensuremath{\leq}~}2%
-    {/\\}{\ensuremath{\land}~}2%
-    {\\/}{\ensuremath{\lor}~}2%
-    {!}{\ensuremath{\lnot}}1%
-    {!=}{\ensuremath{\neq}~}2%
-    {max}{\ensuremath{\uparrow}}1%
-    {min}{\ensuremath{\downarrow}}1,%
-   sensitive=f,%
-   morecomment=[s]{\{}{\}},%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%%
-%% gnuplot definition (c) Christoph Giess
-%%
-\lst@definelanguage{Gnuplot}%
-  {keywords={abs,acos,acosh,arg,asin,asinh,atan,atan2,atanh,besj0,%
-       besj1,besy0,besy1,ceil,cos,cosh,erf,erfc,exp,floor,gamma,ibeta,%
-       inverf,igamma,imag,invnorm,int,lgamma,log,log10,norm,rand,real,%
-       sgn,sin,sinh,sqrt,tan,tanh,column,tm_hour,tm_mday,tm_min,tm_mon,%
-       tm_sec,tm_wday,tm_yday,tm_year,valid,cd,call,clear,exit,fit,%
-       help,if,load,pause,plot,print,pwd,quit,replot,reread,reset,save,%
-       set,show,shell,splot,test,update,angles,arrow,autoscale,border,%
-       boxwidth,clabel,clip,cntrparam,contour,data,dgrid3d,dummy,%
-       format,function,functions,grid,hidden3d,isosamples,key,keytitle,%
-       label,logscale,mapping,offsets,output,parametric,pointsize,%
-       polar,rrange,samples,size,style,surface,terminal,tics,time,%
-       timefmt,title,trange,urange,variables,view,vrange,xdata,xlabel,%
-       xmargin,xrange,xtics,mxtics,mytics,xdtics,xmtics,xzeroaxis,%
-       ydata,ylabel,yrange,ytics,ydtics,ymtics,yzeroaxis,zdata,zero,%
-       zeroaxis,zlabel,zrange,ztics,zdtics,zmtics,timefm,using,title,%
-       with,index,every,thru,smooth},%
-   sensitive,%
-   comment=[l]\#,%
-   morestring=[b]",%
-   morestring=[b]',%
-  }[keywords,comments,strings]%
-%%
-%% http://gretl.sourceforge.net/gretl-help/cmdref.html
-%% (c) 2013 Ignacio D\'iaz-Emparanza
-%%
-\lst@definelanguage{hansl}{%
-  % $-variables are internal functions in hansl
-  keywordsprefix ={\$},
-  morekeywords={ % hansl commands:
-    add,adf,anova,append,ar,ar1,%
-    arbond,arch,arima,biprobit,boxplot,break,%
-    catch,chow,clear,coeffsum,coint,coint2,%
-    corr,corrgm,cusum,data,dataset,debug,%
-    delete,diff,difftest,discrete,dpanel,dummify,%
-    duration,elif,else,end,endif,endloop,%
-    eqnprint,equation,estimate,fcast,foreign,fractint,%
-    freq,function,garch,genr,gmm,gnuplot,%
-    graphpg,hausman,heckit,help,hsk,hurst,%
-    if,include,info,intreg,join,kalman,%
-    kpss,labels,lad,lags,ldiff,leverage,%
-    levinlin,logistic,logit,logs,loop,mahal,%
-    makepkg,markers,meantest,mle,modeltab,modprint,%
-    modtest,mpols,negbin,nls,normtest,nulldata,%
-    ols,omit,open,orthdev,outfile,panel,%
-    pca,pergm,poisson,print,printf,probit,%
-    pvalue,qlrtest,qqplot,quantreg,quit,rename,%
-    reset,restrict,rmplot,run,runs,scatters,%
-    sdiff,set,setinfo,setobs,setmiss,shell,%
-    smpl,spearman,sprintf,square,sscanf,store,%
-    summary,system,tabprint,textplot,tobit,tsls,%
-    var,varlist,vartest,vecm,vif,wls,%
-    xcorrgm,xtab,scalar,series,matrix,string},%
-  morekeywords=[2]{ %  Functions
-    abs,acos,acosh,aggregate,argname,%
-    asin,asinh,atan,atanh,atof,%
-    bessel,BFGSmax,bkfilt,boxcox,bwfilt,%
-    cdemean,cdf,cdiv,ceil,cholesky,%
-    chowlin,cmult,cnorm,colname,colnames,%
-    cols,corr,corrgm,cos,cosh,%
-    cov,critical,cum,deseas,det,%
-    diag,diagcat,diff,digamma,dnorm,%
-    dsort,dummify,eigengen,eigensym,eigsolve,%
-    epochday,errmsg,exp,fcstats,fdjac,%
-    fft,ffti,filter,firstobs,fixname,%
-    floor,fracdiff,gammafun,getenv,getline,%
-    ghk,gini,ginv,halton,hdprod,%
-    hpfilt,I,imaxc,imaxr,imhof,%
-    iminc,iminr,inbundle,infnorm,inlist,%
-    int,inv,invcdf,invmills,invpd,%
-    irf,irr,isconst,isnan,isnull,%
-    isodate,iwishart,kdensity,kfilter,ksimul,%
-    ksmooth,kurtosis,lags,lastobs,ldet,%
-    ldiff,lincomb,ljungbox,lngamma,log,%
-    log10,log2,loess,logistic,lower,%
-    lrvar,max,maxc,maxr,mcorr,%
-    mcov,mcovg,mean,meanc,meanr,%
-    median,mexp,min,minc,minr,%
-    missing,misszero,mlag,mnormal,mols,%
-    monthlen,movavg,mpols,mrandgen,mread,%
-    mreverse,mrls,mshape,msortby,muniform,%
-    mwrite,mxtab,nadarwat,nelem,ngetenv,%
-    nobs,normal,npv,NRmax,nullspace,%
-    obs,obslabel,obsnum,ok,onenorm,%
-    ones,orthdev,pdf,pergm,pmax,%
-    pmean,pmin,pnobs,polroots,polyfit,%
-    princomp,prodc,prodr,psd,psdroot,%
-    pshrink,psum,pvalue,pxsum,qform,%
-    qnorm,qrdecomp,quadtable,quantile,randgen,%
-    randgen1,randint,rank,ranking,rcond,%
-    readfile,regsub,remove,replace,resample,%
-    round,rownames,rows,sd,sdc,%
-    sdiff,selifc,selifr,seq,setnote,%
-    simann,sin,sinh,skewness,sort,%
-    sortby,sqrt,sscanf,sst,strlen,%
-    strncmp,strsplit,strstr,strstrip,strsub,%
-    sum,sumall,sumc,sumr,svd,%
-    tan,tanh,toepsolv,tolower,toupper,%
-    tr,transp,trimr,typestr,uniform,%
-    uniq,unvech,upper,urcpval,values,%
-    var,varname,varnum,varsimul,vec,%
-    vech,weekday,wmean,wsd,wvar,%
-    xmax,xmin,xpx,zeromiss,zeros,%
-  },%
-  sensitive=t,%
-  morecomment=[l]{\#},%
-  morecomment=[s]{/*}{*/},%
-  morestring=[b]{"}}%
-\lstalias{gretl}{hansl}
-%%
-%% Haskell98 as implemented in Hugs98. See http://www.haskell.org
-%% All keywords from Prelude and Standard Libraries
-%% (c) 1999 Peter Bartke
-%%
-\lst@definelanguage{Haskell}%
-  {otherkeywords={=>},%
-   morekeywords={abstype,if,then,else,case,class,data,default,deriving,%
-      hiding,if,in,infix,infixl,infixr,import,instance,let,module,%
-      newtype,of,qualified,type,where,do,AbsoluteSeek,AppendMode,%
-      Array,BlockBuffering,Bool,BufferMode,Char,Complex,Double,Either,%
-      FilePath,Float,Int,Integer,IO,IOError,Ix,LineBuffering,Maybe,%
-      Ordering,NoBuffering,ReadMode,ReadWriteMode,ReadS,RelativeSeek,%
-      SeekFromEnd,SeekMode,ShowS,StdGen,String,Void,Bounded,Enum,Eq,%
-      Eval,ExitCode,exitFailure,exitSuccess,Floating,Fractional,%
-      Functor,Handle,HandlePosn,IOMode,Integral,List,Monad,MonadPlus,%
-      MonadZero,Num,Numeric,Ord,Random,RandomGen,Ratio,Rational,Read,%
-      Real,RealFloat,RealFrac,Show,System,Prelude,EQ,False,GT,Just,%
-      Left,LT,Nothing,Right,WriteMode,True,abs,accum,accumArray,%
-      accumulate,acos,acosh,all,and,any,ap,appendFile,applyM,%
-      approxRational,array,asTypeOf,asin,asinh,assocs,atan,atan2,atanh,%
-      bounds,bracket,bracket_,break,catch,catMaybes,ceiling,chr,cis,%
-      compare,concat,concatMap,conjugate,const,cos,cosh,curry,cycle,%
-      decodeFloat,delete,deleteBy,deleteFirstsBy,denominator,%
-      digitToInt,div,divMod,drop,dropWhile,either,elem,elems,elemIndex,%
-      elemIndices,encodeFloat,enumFrom,enumFromThen,enumFromThenTo,%
-      enumFromTo,error,even,exitFailure,exitWith,exp,exponent,fail,%
-      filter,filterM,find,findIndex,findIndices,flip,floatDigits,%
-      floatRadix,floatRange,floatToDigits,floor,foldl,foldM,foldl1,%
-      foldr,foldr1,fromDouble,fromEnum,fromInt,fromInteger,%
-      fromIntegral,fromJust,fromMaybe,fromRat,fromRational,%
-      fromRealFrac,fst,gcd,genericLength,genericTake,genericDrop,%
-      genericSplitAt,genericIndex,genericReplicate,getArgs,getChar,%
-      getContents,getEnv,getLine,getProgName,getStdGen,getStdRandom,%
-      group,groupBy,guard,hClose,hFileSize,hFlush,hGetBuffering,%
-      hGetChar,hGetContents,hGetLine,hGetPosn,hIsClosed,hIsEOF,hIsOpen,%
-      hIsReadable,hIsSeekable,hIsWritable,hLookAhead,hPutChar,hPutStr,%
-      hPutStrLn,hPrint,hReady,hSeek,hSetBuffering,hSetPosn,head,%
-      hugsIsEOF,hugsHIsEOF,hugsIsSearchErr,hugsIsNameErr,%
-      hugsIsWriteErr,id,ioError,imagPart,index,indices,init,inits,%
-      inRange,insert,insertBy,interact,intersect,intersectBy,%
-      intersperse,intToDigit,ioeGetErrorString,ioeGetFileName,%
-      ioeGetHandle,isAlreadyExistsError,isAlreadyInUseError,isAlpha,%
-      isAlphaNum,isAscii,isControl,isDenormalized,isDoesNotExistError,%
-      isDigit,isEOF,isEOFError,isFullError,isHexDigit,isIEEE,%
-      isIllegalOperation,isInfinite,isJust,isLower,isNaN,%
-      isNegativeZero,isNothing,isOctDigit,isPermissionError,isPrefixOf,%
-      isPrint,isSpace,isSuffixOf,isUpper,isUserError,iterate,ixmap,%
-      join,last,lcm,length,lex,lexDigits,lexLitChar,liftM,liftM2,%
-      liftM3,liftM4,liftM5,lines,listArray,listToMaybe,log,logBase,%
-      lookup,magnitude,makePolar,map,mapAccumL,mapAccumR,mapAndUnzipM,%
-      mapM,mapM_,mapMaybe,max,maxBound,maximum,maximumBy,maybe,%
-      maybeToList,min,minBound,minimum,minimumBy,mkPolar,mkStdGen,%
-      mplus,mod,msum,mzero,negate,next,newStdGen,not,notElem,nub,nubBy,%
-      null,numerator,odd,openFile,or,ord,otherwise,partition,phase,pi,%
-      polar,pred,print,product,properFraction,putChar,putStr,putStrLn,%
-      quot,quotRem,random,randomIO,randomR,randomRIO,randomRs,randoms,%
-      rangeSize,read,readDec,readFile,readFloat,readHex,readInt,readIO,%
-      readList,readLitChar,readLn,readParen,readOct,readSigned,reads,%
-      readsPrec,realPart,realToFrac,recip,rem,repeat,replicate,return,%
-      reverse,round,scaleFloat,scanl,scanl1,scanr,scanr1,seq,sequence,%
-      sequence_,setStdGen,show,showChar,showEFloat,showFFloat,%
-      showFloat,showGFloat,showInt,showList,showLitChar,showParen,%
-      showSigned,showString,shows,showsPrec,significand,signum,sin,%
-      sinh,snd,sort,sortBy,span,split,splitAt,sqrt,stderr,stdin,stdout,%
-      strict,subtract,succ,sum,system,tail,tails,take,takeWhile,tan,%
-      tanh,toEnum,toInt,toInteger,toLower,toRational,toUpper,transpose,%
-      truncate,try,uncurry,undefined,unfoldr,union,unionBy,unless,%
-      unlines,until,unwords,unzip,unzip3,unzip4,unzip5,unzip6,unzip7,%
-      userError,when,words,writeFile,zero,zip,zip3,zip4,zip5,zip6,zip7,%
-      zipWith,zipWithM,zipWithM_,zipWith3,zipWith4,zipWith5,zipWith6,%
-      zipWith7},%
-   sensitive,%
-   morecomment=[l]--,%
-   morecomment=[n]{\{-}{-\}},%
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%%
-%% IDL definition (c) 1998 Juergen Heim
-%%
-\lst@definelanguage{IDL}%
-  {morekeywords={and,begin,case,common,do,else,end,endcase,endelse,%
-      endfor,endif,endrep,endwhile,eq,for,function,ge,goto,gt,if,le,lt,%
-      mod,ne,not,of,on_ioerror,or,pro,repeat,return,then,until,while,%
-      xor,on_error,openw,openr,openu,print,printf,printu,plot,read,%
-      readf,readu,writeu,stop},%
-   sensitive=f,%
-   morecomment=[l];,%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%%
-%% Inform definition (c) 2003 Jonathan Sauer
-%%
-\lst@definelanguage{inform}{%
-    % Language keywords
-    morekeywords={breakdo,else,false,for,has,hasnt,if,%
-                in,indirect,jump,notin,nothing,NULL,objectloop,ofclass,%
-                private,property,provides,return,rfalse,rtrue,self,string,%
-                switch,to,true,until,while,with,%
-                creature,held,multiexcept,multiheld,multiinside,noun,number,%
-                scope,topic},%
-    %
-    % Inform functions
-    morekeywords=[2]{box,child,children,font,give,inversion,metaclass,move,%
-                new_line,parent,print,print_ret,read,remove,restore,sibling,%
-                save,spaces,quit,style,bold,underline,reverse,roman remaining,%
-                create,destroy,recreate,copy},%
-    %
-    % Inform definitions
-    morekeywords=[3]{Attribute,Array,Class,Constant,Default,End,Endif,Extend,%
-                Global,Ifdef,Iffalse,Ifndef,Ifnot,Iftrue,Include,Object,%
-                Property,Verb,Release,Serial,Statusline},%
-    %
-    % Library attributes
-    morekeywords=[4]{absent,animate,clothing,concealed,container,door,edible,%
-                enterable,female,general,light,lockable locked,male,moved,%
-                neuter,on,open,openable,pluralname,proper,scenery,scored,%
-                static,supporter,switchable,talkable,transparent,visited,%
-                workflag,worn},%
-    %
-    % Library properties
-    morekeywords=[5]{n_to,s_to,e_to,w_to,ne_to,nw_to,se_to,sw_to,in_to,%
-                out_to,u_to,d_to,add_to_scope,after,article,articles,before,%
-                cant_go,capacity,daemon,describe,description,door_dir,door_to,%
-                each_turn,found_in,grammar,initial,inside_description,invent,%
-                life,list_together,name number,orders,parse_name,plural,%
-                react_after,react_before,short_name,short_name_indef,time_left,%
-                time_out,when_closed,when_open,when_on,when_off,%
-                with_key},%
-    %
-    % Library routines
-    morekeywords=[6]{Achieved,AfterRoutines,AllowPushDir,Banner,ChangePlayer,%
-                CommonAncestor,DictionaryLookup,GetGNAOfObject,HasLightSource,%
-                IndirectlyContains,IsSeeThrough,Locale,LoopOverScope,LTI_Insert,%
-                MoveFloatingObjects,NextWord,NextWordStopped,NounDomain,%
-                ObjectIsUntouchable OffersLight,ParseToken,PlaceInScope,PlayerTo,%
-                PronounNotice,PronounValue,ScopeWithin,SetPronoun,SetTime,%
-                StartDaemon,StartTimer,StopDaemon,StopTimer,TestScope,TryNumber,%
-                UnsignedCompare,WordAddress,WordInProperty,WordLength,%
-                WriteListFrom,YesOrNo},%
-    %
-    % Library,entry points
-    morekeywords=[7]{AfterLife,AfterPrompt,Amusing,BeforeParsing,ChooseObjects,%
-                DarkToDark,DeathMessage,GamePostRoutine GamePreRoutine,%
-                Initialise,InScope,LookRoutine,NewRoom,ParseNoun,ParseNumber,%
-                ParserError,PrintRank,PrintTaskName,PrintVerb,TimePasses,%
-                UnknownVerb},%
-    %
-    % Library constants
-    morekeywords=[8]{NEWLINE_BIT,INDENT_BIT,FULLINV_BIT,ENGLISH_BIT,RECURSE_BIT,%
-                ALWAYS_BIT,TERSE_BIT,PARTINV_BIT,DEFART_BIT,WORKFLAG_BIT,%
-                ISARE_BIT,CONCEAL_BIT},%
-    %
-    % Library,meta actions
-    morekeywords=[9]{Pronouns,Quit,Restart,Restore,Save,Verify,ScriptOn,ScriptOff,%
-                NotifyOn,NotifyOff,Places,Objects,Score,FullScore,Version,LMode1,%
-                LMode2,Lmode3},%
-    %
-    % Library,main actions
-    morekeywords=[10]{Close,Disrobe,Drop,Eat,Empty,EmptyT,Enter,Examine,Exit,GetOff,%
-                Give,Go,GoIn,Insert,Inv,InvTall,InvWide,Lock,Look,Open,PutOn,Remove,%
-                Search,Show,SwitchOff,SwitchOn,Take,Transfer,Unlock VagueGo,%
-                Wear},%
-    %
-    % Library,stub actions
-    morekeywords=[11]{Answer,Ask,AskFor,Attack,Blow,Burn,Buy,Climb,Consult,Cut,Dig,%
-                Drink,Fill,Jump,JumpOver,Kiss,Listen,LookUnder,Mild,No,Pray,Pull,%
-                Push,PushDir,Rub,Set,SetTo,Sing,Sleep,Smell,,Sleep,Smell,Sorry,%
-                Squeeze,Strong,Swim,Swing,Taste,Tell,Think,ThrowAt,Tie,Touch,Turn,%
-                Wait,Wake,WakeOther,Wave,WaveHands,Yes},%
-    %
-    otherkeywords={->,-->},%
-    sensitive=false,%
-    morestring=[d]{"},%
-    morecomment=[l]{!}%
-  }[keywords,comments,strings]%
-\lst@definelanguage{Lisp}%
-  {morekeywords={abort,abs,acons,acos,acosh,adjoin,alphanumericp,alter,%
-      append,apply,apropos,aref,arrayp,ash,asin,asinh,assoc,atan,atanh,%
-      atom,bit,boole,boundp,break,butlast,byte,catenate,ceiling,cerror,%
-      char,character,characterp,choose,chunk,cis,close,clrhash,coerce,%
-      collect,commonp,compile,complement,complex,complexp,concatenate,%
-      conjugate,cons,consp,constantp,continue,cos,cosh,cotruncate,%
-      count,delete,denominator,describe,directory,disassemble,%
-      documentation,dpb,dribble,ed,eighth,elt,enclose,endp,eq,eql,%
-      equal,equalp,error,eval,evalhook,evenp,every,exp,expand,export,%
-      expt,fboundp,fceiling,fdefinition,ffloor,fifth,fill,find,first,%
-      float,floatp,floor,fmakunbound,format,fourth,fround,ftruncate,%
-      funcall,functionp,gatherer,gcd,generator,gensym,gentemp,get,getf,%
-      gethash,identity,imagpart,import,inspect,integerp,intern,%
-      intersection,tively,isqrt,keywordp,last,latch,lcm,ldb,ldiff,%
-      length,list,listen,listp,load,log,logand,logbitp,logcount,logeqv,%
-      logior,lognand,lognor,lognot,logtest,logxor,macroexpand,%
-      makunbound,map,mapc,mapcan,mapcar,mapcon,maphash,mapl,maplist,%
-      mask,max,member,merge,min,mingle,minusp,mismatch,mod,namestring,%
-      nbutlast,nconc,nintersection,ninth,not,notany,notevery,nreconc,%
-      nreverse,nsublis,nsubst,nth,nthcdr,null,numberp,numerator,nunion,%
-      oddp,open,packagep,pairlis,pathname,pathnamep,phase,plusp,%
-      position,positions,pprint,previous,princ,print,proclaim,provide,%
-      random,rassoc,rational,rationalize,rationalp,read,readtablep,%
-      realp,realpart,reduce,rem,remhash,remove,remprop,replace,require,%
-      rest,revappend,reverse,room,round,rplaca,rplacd,sbit,scan,schar,%
-      search,second,series,set,seventh,shadow,signal,signum,sin,sinh,%
-      sixth,sleep,some,sort,split,sqrt,streamp,string,stringp,sublis,%
-      subseq,subseries,subsetp,subst,substitute,subtypep,svref,sxhash,%
-      symbolp,tailp,tan,tanh,tenth,terpri,third,truename,truncate,%
-      typep,unexport,unintern,union,until,values,vector,vectorp,warn,%
-      write,zerop,and,assert,case,ccase,cond,ctypecase,decf,declaim,%
-      defclass,defconstant,defgeneric,defmacro,defmethod,defpackage,%
-      defparameter,defsetf,defstruct,deftype,defun,defvar,do,dolist,%
-      dotimes,ecase,encapsulated,etypecase,flet,formatter,gathering,%
-      incf,iterate,labels,let,locally,loop,macrolet,mapping,or,pop,%
-      producing,prog,psetf,psetq,push,pushnew,remf,return,rotatef,%
-      setf,shiftf,step,time,trace,typecase,unless,untrace,when},%
-   sensitive,% ???
-   alsodigit=-,%
-   morecomment=[l];,%
-   morecomment=[s]{\#|}{|\#},% 1997 Aslak Raanes
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%%
-%% AutoLISP/VisualLISP - Stefan Lagotzki, info@lagotzki.de
-%%
-\lst@definelanguage[Auto]{Lisp}%
-  {morekeywords={abs,acad_colordlg,acad_helpdlg,acad_strlsort,%
-      action_tile,add_list,alert,alloc,and,angle,angtof,angtos,append,%
-      apply,arx,arxload,arxunload,ascii,assoc,atan,atof,atoi,atom,%
-      atoms-family,autoarxload,autoload,Boole,boundp,caddr,cadr,car,%
-      cdr,chr,client_data_tile,close,command,cond,cons,cos,cvunit,%
-      defun,defun-q,defun-q-list-ref,defun-q-list-set,dictadd,dictnext,%
-      dictremove,dictrename,dictsearch,dimx_tile,dimy_tile,distance,%
-      distof,done_dialog,end_image,end_list,entdel,entget,entlast,%
-      entmake,entmakex,entmod,entnext,entsel,entupd,eq,equal,*error*,%
-      eval,exit,exp,expand,expt,fill_image,findfile,fix,float,foreach,%
-      function,gc,gcd,get_attr,get_tile,getangle,getcfg,getcname,%
-      getcorner,getdist,getenv,getfiled,getint,getkword,getorient,%
-      getpoint,getreal,getstring,getvar,graphscr,grclear,grdraw,grread,%
-      grtext,grvecs,handent,help,if,initdia,initget,inters,itoa,lambda,%
-      last,layoutlist,length,list,listp,load,load_dialog,log,logand,%
-      logior,lsh,mapcar,max,mem,member,menucmd,menugroup,min,minusp,%
-      mode_tile,namedobjdict,nentsel,nentselp,new_dialog,not,nth,%
-      null,numberp,open,or,osnap,polar,prin1,princ,print,progn,prompt,%
-      quit,quote,read,read-char,read-line,redraw,regapp,rem,repeat,%
-      reverse,rtos,set,set_tile,setcfg,setenv,setfunhelp,setq,%
-      setvar,setview,sin,slide_image,snvalid,sqrt,ssadd,ssdel,ssget,%
-      ssgetfirst,sslength,ssmemb,ssname,ssnamex,sssetfirst,startapp,%
-      start_dialog,start_image,start_list,strcase,strcat,strlen,subst,%
-      substr,tablet,tblnext,tblobjname,tblsearch,term_dialog,terpri,%
-      textbox,textpage,textscr,trace,trans,type,unload_dialog,untrace,%
-      vector_image,ver,vl-acad-defun,vl-acad-undefun,vl-arx-import,%
-      vl-bb-ref,vl-bb-set,vl-catch-all-apply,%
-      vl-catch-all-error-message,vl-catch-all-error-p,vl-cmdf,vl-consp,%
-      vl-directory-files,vl-doc-export,vl-doc-import,vl-doc-ref,%
-      vl-doc-set,vl-every,vl-exit-with-error,vl-exit-with-value,%
-      vl-file-copy,vl-file-delete,vl-file-directory-p,vl-file-rename,%
-      vl-file-size,vl-file-systime,vl-filename-base,%
-      vl-filename-directory,vl-filename-extension,vl-filename-mktemp,%
-      vl-get-resource,vl-list*,vl-list->string,%
-      vl-list-exported-functions,vl-list-length,vl-list-loaded-vlx,%
-      vl-load-all,vl-load-com,vl-load-reactors,vl-member-if,%
-      vl-member-if-not,vl-position,vl-prin1-to-string,%
-      vl-princ-to-string,vl-propagate,vl-registry-delete,%
-      vl-registry-descendents,vl-registry-read,vl-registry-write,%
-      vl-remove,vl-remove-if,vl-remove-if-not,vl-some,vl-sort,%
-      vl-sort-i,vl-string->list,vl-string-elt,vl-string-left-trim,%
-      vl-string-mismatch,vl-string-position,vl-string-right-trim,%
-      vl-string-search,vl-string-subst,vl-string-translate,%
-      vl-string-trim,vl-symbol-name,vl-symbol-value,vl-symbolp,%
-      vl-unload-vlx,vl-vbaload,vl-vbarun,vl-vlx-loaded-p,vlax-3D-point,%
-      vlax-add-cmd,vlax-create-object,vlax-curve-getArea,%
-      vlax-curve-getDistAtParam,vlax-curve-getDistAtPoint,%
-      vlax-curve-getEndParam,vlax-curve-getEndPoint,%
-      vlax-curve-getParamAtDist,vlax-curve-getParamAtPoint,%
-      vlax-curve-getPointAtDist,vlax-curve-getPointAtParam,%
-      vlax-curve-getStartParam,vlax-curve-getStartPoint,%
-      vlax-curve-isClosed,vlax-curve-isPeriodic,vlax-curve-isPlanar,%
-      vlax-curve-getClosestPointTo,%
-      vlax-curve-getClosestPointToProjection,vlax-curve-getFirstDeriv,%
-      vlax-curve-getSecondDeriv,vlax-dump-object,%
-      vlax-ename->vla-object,vlax-erased-p,vlax-for,%
-      vlax-get-acad-object,vlax-get-object,vlax-get-or-create-object,%
-      vlax-get-property,vlax-import-type-library,vlax-invoke-method,%
-      vlax-ldata-delete,vlax-ldata-get,vlax-ldata-list,vlax-ldata-put,%
-      vlax-ldata-test,vlax-make-safearray,vlax-make-variant,%
-      vlax-map-collection,vlax-method-applicable-p,%
-      vlax-object-released-p,vlax-product-key,%
-      vlax-property-available-p,vlax-put-property,vlax-read-enabled-p,%
-      vlax-release-object,vlax-remove-cmd,vlax-safearray-fill,%
-      vlax-safearray-get-dim,vlax-safearray-get-element,%
-      vlax-safearray-get-l-bound,vlax-safearray-get-u-bound,%
-      vlax-safearray-put-element,vlax-safearray-type,%
-      vlax-safearray->list,vlax-tmatrix,vlax-typeinfo-available-p,%
-      vlax-variant-change-type,vlax-variant-type,vlax-variant-value,%
-      vlax-vla-object->ename,vlax-write-enabled-p,vlisp-compile,%
-      vlr-acdb-reactor,vlr-add,vlr-added-p,vlr-beep-reaction,%
-      vlr-command-reactor,vlr-current-reaction-name,vlr-data,%
-      vlr-data-set,vlr-deepclone-reactor,vlr-docmanager-reactor,%
-      vlr-dwg-reactor,vlr-dxf-reactor,vlr-editor-reactor,%
-      vlr-insert-reactor,vlr-linker-reactor,vlr-lisp-reactor,%
-      vlr-miscellaneous-reactor,vlr-mouse-reactor,vlr-notification,%
-      vlr-object-reactor,vlr-owner-add,vlr-owner-remove,vlr-owners,%
-      vlr-pers,vlr-pers-list,vlr-pers-p,vlr-pers-release,%
-      vlr-reaction-names,vlr-reaction-set,vlr-reactions,vlr-reactors,%
-      vlr-remove,vlr-remove-all,vlr-set-notification,%
-      vlr-sysvar-reactor,vlr-toolbar-reactor,vlr-trace-reaction,%
-      vlr-type,vlr-types,vlr-undo-reactor,vlr-wblock-reactor,%
-      vlr-window-reactor,vlr-xref-reactor,vports,wcmatch,while,%
-      write-char,write-line,xdroom,xdsize,zerop},%
-   alsodigit=->,%
-   otherkeywords={1+,1-},%
-   sensitive=false,%
-   morecomment=[l];,%
-   morecomment=[l];;,%
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%%
-%% Lua definitions (c) 2013 Stephan Hennig
-%%
-\lst@definelanguage[5.0]{Lua}{%
-  alsoletter={.},%
-  morekeywords=[1]{%
-    and, break, do, else, elseif, end, false, for, function, if, in,%
-    local, nil, not, or, repeat, return, then, true, until, while,%
-  },%
-  morekeywords=[2]{%
-    _G, _LOADED, _REQUIREDNAME, _VERSION, LUA_PATH,%
-    assert, collectgarbage, dofile, error, gcinfo, getfenv,%
-    getmetatable, ipairs, loadfile, loadlib, loadstring, newproxy,%
-    next, pairs, pcall, print, rawequal, rawget, rawset, require,%
-    setfenv, setmetatable, tonumber, tostring, type, unpack, xpcall,%
-    coroutine, coroutine.create, coroutine.resume,%
-    coroutine.status, coroutine.wrap, coroutine.yield,%
-    _TRACEBACK, debug, debug.debug, debug.gethook, debug.getinfo,%
-    debug.getlocal, debug.getupvalue, debug.sethook, debug.setlocal,%
-    debug.setupvalue,debug.traceback,%
-    io, io.close, io.flush, io.input, io.lines, io.open, io.output,%
-    io.popen, io.read, io.stderr, io.stdin, io.stdout, io.tmpfile,%
-    io.type, io.write,%
-    __pow, math, math.abs, math.acos, math.asin, math.atan, math.atan2,%
-    math.ceil, math.cos, math.deg, math.exp, math.floor, math.frexp,%
-    math.ldexp, math.log, math.log10, math.max, math.min, math.mod,%
-    math.pi, math.pow, math.rad, math.random, math.randomseed, math.sin,%
-    math.sqrt, math.tan,%
-    os, os.clock, os.date, os.difftime, os.execute, os.exit, os.getenv,%
-    os.remove, os.rename, os.setlocale, os.time, os.tmpname,%
-    string, string.byte, string.char, string.dump, string.find,%
-    string.format, string.gfind, string.gsub, string.len, string.lower,%
-    string.rep, string.sub, string.upper,%
-    table, table.concat, table.foreach, table.foreachi, table.getn,%
-    table.insert, table.remove, table.setn, table.sort,%
-  },%
-  morekeywords=[2]{%
-    _PROMPT, _PROMPT2, arg,%
-  },%
-  sensitive=true,%
-  % single line comments
-  morecomment=[l]{--},%
-  % multi line comments
-  morecomment=[s]{--[[}{]]},%
-  % backslash escaped strings
-  morestring=[b]",%
-  morestring=[b]',%
-  % multi line strings
-  morestring=[s]{[[}{]]},%
-}[keywords,comments,strings]%
-\lst@definelanguage[5.1]{Lua}[5.0]{Lua}{%
-  deletekeywords=[2]{%
-    _LOADED, _REQUIREDNAME, LUA_PATH, gcinfo, loadlib,%
-    _TRACEBACK,%
-    __pow, math.mod,%
-    string.gfind,%
-    table.foreach, table.foreachi, table.getn, table.setn,%
-  },%
-  morekeywords=[2]{%
-    load, select,%
-    coroutine.running,%
-    debug.getfenv, debug.getmetatable, debug.getregistry, debug.setfenv,%
-    debug.setmetatable,%
-    math.cosh, math.fmod, math.huge, math.modf, math.sinh, math.tanh,%
-    module, package, package.config, package.cpath, package.loaded,%
-    package.loaders, package.loadlib, package.path, package.preload,%
-    package.seeall,%
-    string.gmatch, string.match, string.reverse,%
-    table.maxn,%
-  },%
-  morecomment=[s]{--[=[}{]=]},%
-  morecomment=[s]{--[==[}{]==]},%
-  morecomment=[s]{--[===[}{]===]},%
-  morecomment=[s]{--[====[}{]====]},%
-  morecomment=[s]{--[=====[}{]=====]},%
-  morecomment=[s]{--[======[}{]======]},%
-  morecomment=[s]{--[=======[}{]=======]},%
-  morecomment=[s]{--[========[}{]========]},%
-  morecomment=[s]{--[=========[}{]=========]},%
-  morecomment=[s]{--[==========[}{]==========]},%
-  morestring=[s]{[=[}{]=]},%
-  morestring=[s]{[==[}{]==]},%
-  morestring=[s]{[===[}{]===]},%
-  morestring=[s]{[====[}{]====]},%
-  morestring=[s]{[=====[}{]=====]},%
-  morestring=[s]{[======[}{]======]},%
-  morestring=[s]{[=======[}{]=======]},%
-  morestring=[s]{[========[}{]========]},%
-  morestring=[s]{[=========[}{]=========]},%
-  morestring=[s]{[==========[}{]==========]},%
-}[keywords,comments,strings]%
-\lst@definelanguage[5.2]{Lua}[5.1]{Lua}{%
-  morekeywords=[1]{%
-    goto,%
-  },%
-  deletekeywords=[2]{%
-    getfenv, loadstring, module, newproxy, setfenv, unpack,%
-    debug.getfenv, debug.setfenv,%
-    math.log10,%
-    package.loaders, package.seeall,%
-    table.maxn,%
-  },%
-  morekeywords=[2]{%
-    rawlen,%
-    bit32, bit32.arshift, bit32.band, bit32.bnot, bit32.bor,%
-    bit32.btest, bit32.bxor, bit32.extract, bit32.lrotate,%
-    bit32.lshift, bit32.replace, bit32.rrotate, bit32.rshift,%
-    debug.getuservalue, debug.setuservalue, debug.upvalueid,%
-    debug.upvaluejoin,%
-    package.searchers, package.searchpath,%
-    table.pack, table.unpack,%
-  },%
-  morekeywords=[2]{%
-    _ENV,%
-  },%
-  moredelim=[s][keywordstyle3]{::}{::},%
-}[keywords,comments,strings]%
-\lst@definelanguage[5.3]{Lua}[5.2]{Lua}{%
-  deletekeywords=[2]{%
-    bit32, bit32.arshift, bit32.band, bit32.bnot, bit32.bor,%
-    bit32.btest, bit32.bxor, bit32.extract, bit32.lrotate,%
-    bit32.lshift, bit32.replace, bit32.rrotate, bit32.rshift,%
-    math.atan2, math.cosh, math.frexp, math.ldexp, math.pow,%
-    math.sinh, math.tanh,%
-  },%
-  morekeywords=[2]{%
-    coroutine.isyieldable,%
-    math.maxinteger, math.mininteger, math.tointeger, math.type,%
-    math.ult,%
-    string.pack, string.packsize, string.unpack,%
-    table.move,%
-    utf8, utf8.char, utf8.charpattern, utf8.codepoint, utf8.codes,%
-    utf8.len, utf8.offset,%
-  },%
-}[keywords,comments,strings]%
-%%
-%% Make definitions (c) 2000 Rolf Niepraschk
-%%
-\lst@definelanguage[gnu]{make}%
-  {morekeywords={SHELL,MAKE,MAKEFLAGS,$@,$\%,$<,$?,$^,$+,$*,%
-      @,^,<,\%,+,?,*,% Markus Pahlow
-      export,unexport,include,override,define,ifdef,ifneq,ifeq,else,%
-      endif,vpath,subst,patsubst,strip,findstring,filter,filter-out,%
-      sort,dir,notdir,suffix,basename,addsuffix,addprefix,join,word,%
-      words,firstword,wildcard,shell,origin,foreach,%
-      @D,@F,*D,*F,\%D,\%F,<D,<F,^D,^F,+D,+F,?D,?F,%
-      AR,AS,CC,CXX,CO,CPP,FC,GET,LEX,PC,YACC,YACCR,MAKEINFO,TEXI2DVI,%
-      WEAVE,CWEAVE,TANGLE,CTANGLE,RM,M2C,LINT,COMPILE,LINK,PREPROCESS,%
-      CHECKOUT,%
-      ARFLAGS,ASFLAGS,CFLAGS,CXXFLAGS,COFLAGS,CPPFLAGS,FFLAGS,GFLAGS,%
-      LDFLAGS,LOADLIBES,LFLAGS,PFLAGS,RFLAGS,YFLAGS,M2FLAGS,MODFLAGS,%
-      LINTFLAGS,MAKEINFO_FLAGS,TEXI2DVI_FLAGS,COFLAGS,GFLAGS,%
-      OUTPUT_OPTION,SCCS_OUTPUT_OPTION,% missing comma: Markus Pahlow
-      .PHONY,.SUFFIXES,.DEFAULT,.PRECIOUS,.INTERMEDIATE,.SECONDARY,%
-      .IGNORE,.SILENT,.EXPORT_ALL_VARIABLES,MAKEFILES,VPATH,MAKESHELL,%
-      MAKELEVEL,MAKECMDGOALS,SUFFIXES},%
-   sensitive=true,
-   morecomment=[l]\#,%
-   morestring=[b]"%
-  }[keywords,comments,strings,make]%
-\lst@definelanguage{make}
-  {morekeywords={SHELL,MAKE,MAKEFLAGS,$@,$\%,$<,$?,$^,$+,$*},%
-   sensitive=true,%
-   morecomment=[l]\#,%
-   morestring=[b]"%
-  }[keywords,comments,strings,make]%
-%%
-%% Mercury definition (c) 1997 Dominique de Waleffe
-%% Extended (c) 2001 Ralph Becket
-%%
-\lst@definelanguage{Mercury}%
-  {otherkeywords={::,->,-->,--->,:-,==,=>,<=,<=>},%
-   morekeywords={module,include_module,import_module,interface,%
-      end_module,implementation,mode,is,failure,semidet,nondet,det,%
-      multi,erroneous,inst,in,out,di,uo,ui,type,typeclass,instance,%
-      where,with_type,pred,func,lambda,impure,semipure,if,then,else,%
-      some,all,not,true,fail,pragma,memo,no_inline,inline,loop_check,%
-      minimal_model,fact_table,type_spec,terminates,does_not_terminate,%
-      check_termination,promise_only_solution,unsafe_promise_unique,%
-      source_file,obsolete,import,export,c_header_code,c_code,%
-      foreign_code,foreign_proc,may_call_mercury,will_not_call_mercury,%
-      thread_safe,not_thread_safe},%
-   sensitive=t,%
-   morecomment=[l]\%,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[bd]",%
-   morestring=[bd]'%
-  }[keywords,comments,strings]%
-%%
-%% Miranda definition (c) 1998 Peter Bartke
-%%
-%% Miranda: pure lazy functional language with polymorphic type system,
-%%          garbage collection and functions as first class citizens
-%%
-\lst@definelanguage{Miranda}%
-  {morekeywords={abstype,div,if,mod,otherwise,readvals,show,type,where,%
-     with,bool,char,num,sys_message,False,True,Appendfile,Closefile,%
-     Exit,Stderr,Stdout,System,Tofile,\%include,\%export,\%free,%
-     \%insert,abs,and,arctan,cjustify,code,concat,const,converse,cos,%
-     decode,digit,drop,dropwhile,entier,error,exp,filemode,filter,%
-     foldl,foldl1,foldr,foldr1,force,fst,getenv,hd,hugenum,id,index,%
-     init,integer,iterate,last,lay,layn,letter,limit,lines,ljustify,%
-     log,log10,map,map2,max,max2,member,merge,min,min2,mkset,neg,%
-     numval,or,pi,postfix,product,read,rep,repeat,reverse,rjustify,%
-     scan,seq,showfloat,shownum,showscaled,sin,snd,sort,spaces,sqrt,%
-     subtract,sum,system,take,takewhile,tinynum,tl,transpose,undef,%
-     until,zip2,zip3,zip4,zip5,zip6,zip},%
-   sensitive,%
-   morecomment=[l]||,%
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-%%
-%% ML definition (c) 1999 Torben Hoffmann
-%%
-\lst@definelanguage{ML}%
-  {morekeywords={abstype,and,andalso,as,case,do,datatype,else,end,%
-       eqtype,exception,fn,fun,functor,handle,if,in,include,infix,%
-       infixr,let,local,nonfix,of,op,open,orelse,raise,rec,sharing,sig,%
-       signature,struct,structure,then,type,val,with,withtype,while},%
-   sensitive,%
-   morecomment=[n]{(*}{*)},%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%%
-%% Oz definition (c) Andres Becerra Sandoval
-%%
-\lst@definelanguage{Oz}%
-  {morekeywords={andthen,at,attr,case,catch,choice,class,%
-      cond,declare,define,dis,div,else,elsecase,%
-      elseif,end,export,fail,false,feat,finally,%
-      from,fun,functor,if,import,in,local,%
-      lock,meth,mod,not,of,or,orelse,%
-      prepare,proc,prop,raise,require,self,skip,%
-      then,thread,true,try,unit},%
-   sensitive=true,%
-   morecomment=[l]{\%},%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]",%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%%
-%% PHP definition by Luca Balzerani
-%%
-\lst@definelanguage{PHP}%
-  {morekeywords={%
-  %--- core language
-    <?,?>,::,break,case,continue,default,do,else,%
-    elseif,for,foreach,if,include,require,phpinfo,%
-    switch,while,false,FALSE,true,TRUE,%
-  %--- apache functions
-    apache_lookup_uri,apache_note,ascii2ebcdic,ebcdic2ascii,%
-    virtual,apache_child_terminate,apache_setenv,%
-  %--- array functions
-    array,array_change_key_case,array_chunk,array_count_values,%
-    array_filter,array_flip,array_fill,array_intersect,%
-    array_keys,array_map,array_merge,array_merge_recursive,%
-    array_pad,array_pop,array_push,array_rand,array_reverse,%
-    array_shift,array_slice,array_splice,array_sum,array_unique,%
-    array_values,array_walk,arsort,asort,compact,count,current,each,%
-    extract,in_array,array_search,key,krsort,ksort,list,natsort,%
-    next,pos,prev,range,reset,rsort,shuffle,sizeof,sort,uasort,%
-    usort,%
-  %--- aspell functions
-    aspell_new,aspell_check,aspell_check_raw,aspell_suggest,%
-  %--- bc functions
-    bcadd,bccomp,bcdiv,bcmod,bcmul,bcpow,bcscale,bcsqrt,bcsub,%
-  %--- bzip2 functions
-    bzclose,bzcompress,bzdecompress,bzerrno,bzerror,bzerrstr,%
-    bzopen,bzread,bzwrite,%
-  %--- calendar functions
-    JDToGregorian,GregorianToJD,JDToJulian,JulianToJD,JDToJewish,%
-    JDToFrench,FrenchToJD,JDMonthName,JDDayOfWeek,easter_date,%
-    unixtojd,jdtounix,cal_days_in_month,cal_to_jd,cal_from_jd,%
-  %--- ccvs functions
-    ccvs_init,ccvs_done,ccvs_new,ccvs_add,ccvs_delete,ccvs_auth,%
-    ccvs_reverse,ccvs_sale,ccvs_void,ccvs_status,ccvs_count,%
-    ccvs_report,ccvs_command,ccvs_textvalue,%
-  %--- classobj functions
-    call_user_method,call_user_method_array,class_exists,get_class,%
-    get_class_vars,get_declared_classes,get_object_vars,%
-    is_a,is_subclass_of,method_exists,%
-  %--- com functions
-    COM,VARIANT,com_load,com_invoke,com_propget,com_get,com_propput,%
-    com_set,com_addref,com_release,com_isenum,com_load_typelib,%
-  %--- cpdf functions
-    cpdf_add_annotation,cpdf_add_outline,cpdf_arc,cpdf_begin_text,%
-    cpdf_clip,cpdf_close,cpdf_closepath,cpdf_closepath_fill_stroke,%
-    cpdf_continue_text,cpdf_curveto,cpdf_end_text,cpdf_fill,%
-    cpdf_finalize,cpdf_finalize_page,%
-    cpdf_import_jpeg,cpdf_lineto,cpdf_moveto,cpdf_newpath,cpdf_open,%
-    cpdf_page_init,cpdf_place_inline_image,cpdf_rect,cpdf_restore,%
-    cpdf_rmoveto,cpdf_rotate,cpdf_rotate_text,cpdf_save,%
-    cpdf_scale,cpdf_set_char_spacing,cpdf_set_creator,%
-    cpdf_set_font,cpdf_set_horiz_scaling,cpdf_set_keywords,%
-    cpdf_set_page_animation,cpdf_set_subject,cpdf_set_text_matrix,%
-    cpdf_set_text_rendering,cpdf_set_text_rise,cpdf_set_title,%
-    cpdf_setdash,cpdf_setflat,cpdf_setgray,cpdf_setgray_fill,%
-    cpdf_setlinecap,cpdf_setlinejoin,cpdf_setlinewidth,%
-    cpdf_setrgbcolor,cpdf_setrgbcolor_fill,cpdf_setrgbcolor_stroke,%
-    cpdf_show_xy,cpdf_stringwidth,cpdf_set_font_directories,%
-    cpdf_set_viewer_preferences,cpdf_stroke,cpdf_text,%
-    cpdf_set_action_url,%
-  %--- crack functions
-    crack_opendict,crack_closedict,crack_check,crack_getlastmessage,%
-  %--- ctype functions
-    ctype_alnum,ctype_alpha,ctype_cntrl,ctype_digit,ctype_lower,%
-    ctype_print,ctype_punct,ctype_space,ctype_upper,ctype_xdigit,%
-  %--- curl functions
-    curl_init,curl_setopt,curl_exec,curl_close,curl_version,%
-    curl_error,curl_getinfo,%
-  %--- cybercash functions
-    cybercash_encr,cybercash_decr,cybercash_base64_encode,%
-  %--- cybermut functions
-    cybermut_creerformulairecm,cybermut_testmac,%
-  %--- cyrus functions
-    cyrus_connect,cyrus_authenticate,cyrus_bind,cyrus_unbind,%
-    cyrus_close,%
-  %--- datetime functions
-    checkdate,date,getdate,gettimeofday,gmdate,gmmktime,gmstrftime,%
-    microtime,mktime,strftime,time,strtotime,%
-  %--- dbase functions
-    dbase_create,dbase_open,dbase_close,dbase_pack,dbase_add_record,%
-    dbase_delete_record,dbase_get_record,%
-    dbase_numfields,dbase_numrecords,%
-  %--- dba functions
-    dba_close,dba_delete,dba_exists,dba_fetch,dba_firstkey,%
-    dba_nextkey,dba_popen,dba_open,dba_optimize,dba_replace,%
-  %--- dbm functions
-    dbmopen,dbmclose,dbmexists,dbmfetch,dbminsert,dbmreplace,%
-    dbmfirstkey,dbmnextkey,dblist,%
-  %--- dbx functions
-    dbx_close,dbx_connect,dbx_error,dbx_query,dbx_sort,dbx_compare,%
-  %--- dio functions
-    dio_open,dio_read,dio_write,dio_truncate,dio_stat,dio_seek,%
-    dio_close,%
-  %--- dir functions
-    chroot,chdir,dir,closedir,getcwd,opendir,readdir,rewinddir,%
-  %--- dotnet functions
-    dotnet_load,%
-  %--- errorfunc functions
-    error_log,error_reporting,restore_error_handler,%
-    trigger_error,user_error,%
-  %--- exec functions
-    escapeshellarg,escapeshellcmd,exec,passthru,system,shell_exec,%
-  %--- fbsql functions
-    fbsql_affected_rows,fbsql_autocommit,fbsql_change_user,%
-    fbsql_commit,fbsql_connect,fbsql_create_db,fbsql_create_blob,%
-    fbsql_database_password,fbsql_data_seek,fbsql_db_query,%
-    fbsql_drop_db,fbsql_errno,fbsql_error,fbsql_fetch_array,%
-    fbsql_fetch_field,fbsql_fetch_lengths,fbsql_fetch_object,%
-    fbsql_field_flags,fbsql_field_name,fbsql_field_len,%
-    fbsql_field_table,fbsql_field_type,fbsql_free_result,%
-    fbsql_list_dbs,fbsql_list_fields,fbsql_list_tables,%
-    fbsql_num_fields,fbsql_num_rows,fbsql_pconnect,fbsql_query,%
-    fbsql_read_clob,fbsql_result,fbsql_rollback,fbsql_set_lob_mode,%
-    fbsql_start_db,fbsql_stop_db,fbsql_tablename,fbsql_warnings,%
-    fbsql_get_autostart_info,fbsql_hostname,fbsql_password,%
-    fbsql_username,%
-  %--- fdf functions
-    fdf_open,fdf_close,fdf_create,fdf_save,fdf_get_value,%
-    fdf_next_field_name,fdf_set_ap,fdf_set_status,fdf_get_status,%
-    fdf_get_file,fdf_set_flags,fdf_set_opt,%
-    fdf_set_javascript_action,fdf_set_encoding,fdf_add_template,%
-  %--- filepro functions
-    filepro,filepro_fieldname,filepro_fieldtype,filepro_fieldwidth,%
-    filepro_fieldcount,filepro_rowcount,%
-  %--- filesystem functions
-    basename,chgrp,chmod,chown,clearstatcache,copy,delete,dirname,%
-    diskfreespace,disk_total_space,fclose,feof,fflush,fgetc,fgetcsv,%
-    fgetss,file_get_contents,file,file_exists,fileatime,filectime,%
-    fileinode,filemtime,fileowner,fileperms,filesize,filetype,flock,%
-    fopen,fpassthru,fputs,fread,fscanf,fseek,fstat,ftell,ftruncate,%
-    set_file_buffer,is_dir,is_executable,is_file,is_link,%
-    is_writable,is_writeable,is_uploaded_file,link,linkinfo,mkdir,%
-    parse_ini_file,pathinfo,pclose,popen,readfile,readlink,rename,%
-    rmdir,stat,lstat,realpath,symlink,tempnam,tmpfile,touch,umask,%
-  %--- fribidi functions
-    fribidi_log2vis,%
-  %--- ftp functions
-    ftp_connect,ftp_login,ftp_pwd,ftp_cdup,ftp_chdir,ftp_mkdir,%
-    ftp_nlist,ftp_rawlist,ftp_systype,ftp_pasv,ftp_get,ftp_fget,%
-    ftp_fput,ftp_size,ftp_mdtm,ftp_rename,ftp_delete,ftp_site,%
-    ftp_quit,ftp_exec,ftp_set_option,ftp_get_option,%
-  %--- funchand functions
-    call_user_func_array,call_user_func,create_function,%
-    func_get_args,func_num_args,function_exists,%
-    register_shutdown_function,register_tick_function,%
-  %--- gettext functions
-    bindtextdomain,bind_textdomain_codeset,dcgettext,dcngettext,%
-    dngettext,gettext,ngettext,textdomain,%
-  %--- gmp functions
-    gmp_init,gmp_intval,gmp_strval,gmp_add,gmp_sub,gmp_mul,%
-    gmp_div_r,gmp_div_qr,gmp_div,gmp_mod,gmp_divexact,gmp_cmp,%
-    gmp_com,gmp_abs,gmp_sign,gmp_fact,gmp_sqrt,gmp_sqrtrm,%
-    gmp_pow,gmp_powm,gmp_prob_prime,gmp_gcd,gmp_gcdext,gmp_invert,%
-    gmp_jacobi,gmp_random,gmp_and,gmp_or,gmp_xor,gmp_setbit,%
-    gmp_scan0,gmp_scan1,gmp_popcount,gmp_hamdist,%
-  %--- http functions
-    header,headers_sent,setcookie,%
-  %--- hw functions
-    hw_Array2Objrec,hw_Children,hw_ChildrenObj,hw_Close,hw_Connect,%
-    hw_Deleteobject,hw_DocByAnchor,hw_DocByAnchorObj,%
-    hw_Document_BodyTag,hw_Document_Content,hw_Document_SetContent,%
-    hw_ErrorMsg,hw_EditText,hw_Error,hw_Free_Document,hw_GetParents,%
-    hw_GetChildColl,hw_GetChildCollObj,hw_GetRemote,%
-    hw_GetSrcByDestObj,hw_GetObject,hw_GetAndLock,hw_GetText,%
-    hw_GetObjectByQueryObj,hw_GetObjectByQueryColl,%
-    hw_GetChildDocColl,hw_GetChildDocCollObj,hw_GetAnchors,%
-    hw_Mv,hw_Identify,hw_InCollections,hw_Info,hw_InsColl,hw_InsDoc,%
-    hw_InsertObject,hw_mapid,hw_Modifyobject,hw_New_Document,%
-    hw_Output_Document,hw_pConnect,hw_PipeDocument,hw_Root,%
-    hw_Who,hw_getusername,hw_stat,hw_setlinkroot,hw_connection_info,%
-    hw_insertanchors,hw_getrellink,hw_changeobject,%
-  %--- ibase functions
-    ibase_connect,ibase_pconnect,ibase_close,ibase_query,%
-    ibase_fetch_row,ibase_fetch_object,ibase_field_info,%
-    ibase_free_result,ibase_prepare,ibase_execute,ibase_trans,%
-    ibase_rollback,ibase_timefmt,ibase_num_fields,ibase_blob_add,%
-    ibase_blob_close,ibase_blob_create,ibase_blob_echo,%
-    ibase_blob_import,ibase_blob_info,ibase_blob_open,%
-  %--- icap functions
-    icap_open,icap_close,icap_fetch_event,icap_list_events,%
-    icap_delete_event,icap_snooze,icap_list_alarms,%
-    icap_rename_calendar,icap_delete_calendar,icap_reopen,%
-  %--- iconv functions
-    iconv,iconv_get_encoding,iconv_set_encoding,ob_iconv_handler,%
-  %--- ifx functions
-    ifx_connect,ifx_pconnect,ifx_close,ifx_query,ifx_prepare,ifx_do,%
-    ifx_errormsg,ifx_affected_rows,ifx_getsqlca,ifx_fetch_row,%
-    ifx_fieldtypes,ifx_fieldproperties,ifx_num_fields,ifx_num_rows,%
-    ifx_create_char,ifx_free_char,ifx_update_char,ifx_get_char,%
-    ifx_copy_blob,ifx_free_blob,ifx_get_blob,ifx_update_blob,%
-    ifx_textasvarchar,ifx_byteasvarchar,ifx_nullformat,%
-    ifxus_free_slob,ifxus_close_slob,ifxus_open_slob,%
-    ifxus_seek_slob,ifxus_read_slob,ifxus_write_slob,%
-  %--- iisfunc functions
-    iis_get_server_by_path,iis_get_server_by_comment,iis_add_server,%
-    iis_set_dir_security,iis_get_dir_security,iis_set_server_rights,%
-    iis_set_script_map,iis_get_script_map,iis_set_app_settings,%
-    iis_stop_server,iis_stop_service,iis_start_service,%
-  %--- image functions
-    exif_imagetype,exif_read_data,exif_thumbnail,getimagesize,%
-    imagealphablending,imagearc,imagefilledarc,imageellipse,%
-    imagechar,imagecharup,imagecolorallocate,imagecolordeallocate,%
-    imagecolorclosest,imagecolorclosestalpha,imagecolorclosestthwb,%
-    imagecolorexactalpha,imagecolorresolve,imagecolorresolvealpha,%
-    imagecolorset,imagecolorsforindex,imagecolorstotal,%
-    imagecopy,imagecopymerge,imagecopymergegray,imagecopyresized,%
-    imagecreate,imagecreatetruecolor,imagetruecolortopalette,%
-    imagecreatefromgd2,imagecreatefromgd2part,imagecreatefromgif,%
-    imagecreatefrompng,imagecreatefromwbmp,imagecreatefromstring,%
-    imagecreatefromxpm,imagedashedline,imagedestroy,imagefill,%
-    imagefilledrectangle,imagefilltoborder,imagefontheight,%
-    imagegd,imagegd2,imagegif,imagepng,imagejpeg,imagewbmp,%
-    imageline,imageloadfont,imagepalettecopy,imagepolygon,%
-    imagepsencodefont,imagepsfreefont,imagepsloadfont,%
-    imagepsslantfont,imagepstext,imagerectangle,imagesetpixel,%
-    imagesetstyle,imagesettile,imagesetthickness,imagestring,%
-    imagesx,imagesy,imagettfbbox,imageftbbox,imagettftext,%
-    imagetypes,jpeg2wbmp,png2wbmp,iptcembed,read_exif_data,%
-  %--- imap functions
-    imap_8bit,imap_alerts,imap_append,imap_base64,imap_binary,%
-    imap_bodystruct,imap_check,imap_clearflag_full,imap_close,%
-    imap_delete,imap_deletemailbox,imap_errors,imap_expunge,%
-    imap_fetchbody,imap_fetchheader,imap_fetchstructure,%
-    imap_getmailboxes,imap_getsubscribed,imap_header,%
-    imap_headers,imap_last_error,imap_listmailbox,%
-    imap_mail,imap_mail_compose,imap_mail_copy,imap_mail_move,%
-    imap_mime_header_decode,imap_msgno,imap_num_msg,imap_num_recent,%
-    imap_ping,imap_popen,imap_qprint,imap_renamemailbox,imap_reopen,%
-    imap_rfc822_parse_headers,imap_rfc822_write_address,%
-    imap_search,imap_setacl,imap_set_quota,imap_setflag_full,%
-    imap_status,imap_subscribe,imap_uid,imap_undelete,%
-    imap_utf7_decode,imap_utf7_encode,imap_utf8,imap_thread,%
-  %--- info functions
-    assert,assert_options,extension_loaded,dl,getenv,get_cfg_var,%
-    get_defined_constants,get_extension_funcs,getmygid,%
-    get_loaded_extensions,get_magic_quotes_gpc,%
-    getlastmod,getmyinode,getmypid,getmyuid,get_required_files,%
-    ini_alter,ini_get,ini_get_all,ini_restore,ini_set,phpcredits,%
-    phpversion,php_logo_guid,php_sapi_name,php_uname,putenv,%
-    set_time_limit,version_compare,zend_logo_guid,zend_version,%
-  %--- ircg functions
-    ircg_pconnect,ircg_fetch_error_msg,ircg_set_current,ircg_join,%
-    ircg_msg,ircg_notice,ircg_nick,ircg_topic,ircg_channel_mode,%
-    ircg_whois,ircg_kick,ircg_ignore_add,ircg_ignore_del,%
-    ircg_is_conn_alive,ircg_lookup_format_messages,%
-    ircg_set_on_die,ircg_set_file,ircg_get_username,%
-    ircg_nickname_unescape,%
-  %--- java functions
-    java_last_exception_clear,java_last_exception_get,%
-  %--- ldap functions
-    ldap_add,ldap_bind,ldap_close,ldap_compare,ldap_connect,%
-    ldap_delete,ldap_dn2ufn,ldap_err2str,ldap_errno,ldap_error,%
-    ldap_first_attribute,ldap_first_entry,ldap_free_result,%
-    ldap_get_dn,ldap_get_entries,ldap_get_option,ldap_get_values,%
-    ldap_list,ldap_modify,ldap_mod_add,ldap_mod_del,%
-    ldap_next_attribute,ldap_next_entry,ldap_read,ldap_rename,%
-    ldap_set_option,ldap_unbind,ldap_8859_to_t61,%
-    ldap_next_reference,ldap_parse_reference,ldap_parse_result,%
-    ldap_sort,ldap_start_tls,ldap_t61_to_8859,%
-  %--- mail functions
-    mail,ezmlm_hash,%
-  %--- math functions
-    abs,acos,acosh,asin,asinh,atan,atanh,atan2,base_convert,bindec,%
-    cos,cosh,decbin,dechex,decoct,deg2rad,exp,expm1,floor,%
-    hexdec,hypot,is_finite,is_infinite,is_nan,lcg_value,log,log10,%
-    max,min,mt_rand,mt_srand,mt_getrandmax,number_format,octdec,pi,%
-    rad2deg,rand,round,sin,sinh,sqrt,srand,tan,tanh,%
-  %--- mbstring functions
-    mb_language,mb_parse_str,mb_internal_encoding,mb_http_input,%
-    mb_detect_order,mb_substitute_character,mb_output_handler,%
-    mb_strlen,mb_strpos,mb_strrpos,mb_substr,mb_strcut,mb_strwidth,%
-    mb_convert_encoding,mb_detect_encoding,mb_convert_kana,%
-    mb_decode_mimeheader,mb_convert_variables,%
-    mb_decode_numericentity,mb_send_mail,mb_get_info,%
-    mb_ereg,mb_eregi,mb_ereg_replace,mb_eregi_replace,mb_split,%
-    mb_ereg_search,mb_ereg_search_pos,mb_ereg_search_regs,%
-    mb_ereg_search_getregs,mb_ereg_search_getpos,%
-  %--- mcal functions
-    mcal_open,mcal_popen,mcal_reopen,mcal_close,%
-    mcal_rename_calendar,mcal_delete_calendar,mcal_fetch_event,%
-    mcal_append_event,mcal_store_event,mcal_delete_event,%
-    mcal_list_alarms,mcal_event_init,mcal_event_set_category,%
-    mcal_event_set_description,mcal_event_set_start,%
-    mcal_event_set_alarm,mcal_event_set_class,mcal_is_leap_year,%
-    mcal_date_valid,mcal_time_valid,mcal_day_of_week,%
-    mcal_date_compare,mcal_next_recurrence,%
-    mcal_event_set_recur_daily,mcal_event_set_recur_weekly,%
-    mcal_event_set_recur_monthly_wday,mcal_event_set_recur_yearly,%
-    mcal_event_add_attribute,mcal_expunge,mcal_week_of_year,%
-  %--- mcrypt functions
-    mcrypt_get_cipher_name,mcrypt_get_block_size,%
-    mcrypt_create_iv,mcrypt_cbc,mcrypt_cfb,mcrypt_ecb,mcrypt_ofb,%
-    mcrypt_list_modes,mcrypt_get_iv_size,mcrypt_encrypt,%
-    mcrypt_module_open,mcrypt_module_close,mcrypt_generic_deinit,%
-    mcrypt_generic,mdecrypt_generic,mcrypt_generic_end,%
-    mcrypt_enc_is_block_algorithm_mode,%
-    mcrypt_enc_is_block_mode,mcrypt_enc_get_block_size,%
-    mcrypt_enc_get_supported_key_sizes,mcrypt_enc_get_iv_size,%
-    mcrypt_enc_get_modes_name,mcrypt_module_self_test,%
-    mcrypt_module_is_block_algorithm,mcrypt_module_is_block_mode,%
-    mcrypt_module_get_algo_key_size,%
-  %--- mhash functions
-    mhash_get_hash_name,mhash_get_block_size,mhash_count,mhash,%
-  %--- misc functions
-    connection_aborted,connection_status,connection_timeout,%
-    define,defined,die,eval,exit,get_browser,highlight_file,%
-    ignore_user_abort,iptcparse,leak,pack,show_source,sleep,uniqid,%
-    usleep,%
-  %--- mnogosearch functions
-    udm_add_search_limit,udm_alloc_agent,udm_api_version,%
-    udm_cat_list,udm_clear_search_limits,udm_errno,udm_error,%
-    udm_free_agent,udm_free_ispell_data,udm_free_res,%
-    udm_get_res_field,udm_get_res_param,udm_load_ispell_data,%
-    udm_check_charset,udm_check_stored,udm_close_stored,udm_crc32,%
-  %--- msession functions
-    msession_connect,msession_disconnect,msession_count,%
-    msession_destroy,msession_lock,msession_unlock,msession_set,%
-    msession_uniq,msession_randstr,msession_find,msession_list,%
-    msession_set_array,msession_listvar,msession_timeout,%
-    msession_getdata,msession_setdata,msession_plugin,%
-  %--- msql functions
-    msql,msql_affected_rows,msql_close,msql_connect,msql_create_db,%
-    msql_data_seek,msql_dbname,msql_drop_db,msql_dropdb,msql_error,%
-    msql_fetch_field,msql_fetch_object,msql_fetch_row,%
-    msql_field_seek,msql_fieldtable,msql_fieldtype,msql_fieldflags,%
-    msql_free_result,msql_freeresult,msql_list_fields,%
-    msql_list_dbs,msql_listdbs,msql_list_tables,msql_listtables,%
-    msql_num_rows,msql_numfields,msql_numrows,msql_pconnect,%
-    msql_regcase,msql_result,msql_select_db,msql_selectdb,%
-  %--- mssql functions
-    mssql_close,mssql_connect,mssql_data_seek,mssql_fetch_array,%
-    mssql_fetch_object,mssql_fetch_row,mssql_field_length,%
-    mssql_field_seek,mssql_field_type,mssql_free_result,%
-    mssql_min_error_severity,mssql_min_message_severity,%
-    mssql_num_fields,mssql_num_rows,mssql_pconnect,mssql_query,%
-    mssql_select_db,mssql_bind,mssql_execute,mssql_fetch_assoc,%
-    mssql_guid_string,mssql_init,mssql_rows_affected,%
-  %--- muscat functions
-    muscat_setup,muscat_setup_net,muscat_give,muscat_get,%
-  %--- mysql functions
-    mysql_affected_rows,mysql_change_user,mysql_character_set_name,%
-    mysql_connect,mysql_create_db,mysql_data_seek,mysql_db_name,%
-    mysql_drop_db,mysql_errno,mysql_error,mysql_escape_string,%
-    mysql_fetch_assoc,mysql_fetch_field,mysql_fetch_lengths,%
-    mysql_fetch_row,mysql_field_flags,mysql_field_name,%
-    mysql_field_seek,mysql_field_table,mysql_field_type,%
-    mysql_info,mysql_insert_id,mysql_list_dbs,mysql_list_fields,%
-    mysql_list_tables,mysql_num_fields,mysql_num_rows,%
-    mysql_ping,mysql_query,mysql_unbuffered_query,%
-    mysql_result,mysql_select_db,mysql_tablename,mysql_thread_id,%
-    mysql_get_host_info,mysql_get_proto_info,mysql_get_server_info,%
-  %--- network functions
-    checkdnsrr,closelog,debugger_off,debugger_on,%
-    fsockopen,gethostbyaddr,gethostbyname,gethostbynamel,getmxrr,%
-    getprotobynumber,getservbyname,getservbyport,ip2long,long2ip,%
-    pfsockopen,socket_get_status,socket_set_blocking,%
-    syslog,%
-  %--- nis functions
-    yp_get_default_domain,yp_order,yp_master,yp_match,yp_first,%
-    yp_errno,yp_err_string,yp_all,yp_cat,%
-  %--- oci8 functions
-    OCIDefineByName,OCIBindByName,OCILogon,OCIPLogon,OCINLogon,%
-    OCIExecute,OCICommit,OCIRollback,OCINewDescriptor,OCIRowCount,%
-    OCIResult,OCIFetch,OCIFetchInto,OCIFetchStatement,%
-    OCIColumnName,OCIColumnSize,OCIColumnType,OCIServerVersion,%
-    OCINewCursor,OCIFreeStatement,OCIFreeCursor,OCIFreeDesc,%
-    OCIError,OCIInternalDebug,OCICancel,OCISetPrefetch,%
-    OCISaveLobFile,OCISaveLob,OCILoadLob,OCIColumnScale,%
-    OCIColumnTypeRaw,OCINewCollection,OCIFreeCollection,%
-    OCICollAppend,OCICollAssignElem,OCICollGetElem,OCICollMax,%
-    OCICollTrim,%
-  %--- oracle functions
-    Ora_Bind,Ora_Close,Ora_ColumnName,Ora_ColumnSize,Ora_ColumnType,%
-    Ora_CommitOff,Ora_CommitOn,Ora_Do,Ora_Error,Ora_ErrorCode,%
-    Ora_Fetch,Ora_Fetch_Into,Ora_GetColumn,Ora_Logoff,Ora_Logon,%
-    Ora_Numcols,Ora_Numrows,Ora_Open,Ora_Parse,Ora_Rollback,%
-  %--- outcontrol functions
-    flush,ob_start,ob_get_contents,ob_get_length,ob_get_level,%
-    ob_flush,ob_clean,ob_end_flush,ob_end_clean,ob_implicit_flush,%
-  %--- ovrimos functions
-    ovrimos_connect,ovrimos_close,ovrimos_longreadlen,%
-    ovrimos_execute,ovrimos_cursor,ovrimos_exec,ovrimos_fetch_into,%
-    ovrimos_result,ovrimos_result_all,ovrimos_num_rows,%
-    ovrimos_field_name,ovrimos_field_type,ovrimos_field_len,%
-    ovrimos_free_result,ovrimos_commit,ovrimos_rollback,%
-  %--- pcntl functions
-    pcntl_fork,pcntl_signal,pcntl_waitpid,pcntl_wexitstatus,%
-    pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,%
-    pcntl_exec,%
-  %--- pcre functions
-    preg_match,preg_match_all,preg_replace,preg_replace_callback,%
-    preg_quote,preg_grep,Pattern Modifiers,Pattern Syntax,%
-  %--- pdf functions
-    pdf_add_annotation,pdf_add_bookmark,pdf_add_launchlink,%
-    pdf_add_note,pdf_add_outline,pdf_add_pdflink,pdf_add_thumbnail,%
-    pdf_arc,pdf_arcn,pdf_attach_file,pdf_begin_page,%
-    pdf_begin_template,pdf_circle,pdf_clip,pdf_close,pdf_closepath,%
-    pdf_closepath_stroke,pdf_close_image,pdf_close_pdi,%
-    pdf_concat,pdf_continue_text,pdf_curveto,pdf_delete,%
-    pdf_endpath,pdf_end_pattern,pdf_end_template,pdf_fill,%
-    pdf_findfont,pdf_get_buffer,pdf_get_font,pdf_get_fontname,%
-    pdf_get_image_height,pdf_get_image_width,pdf_get_parameter,%
-    pdf_get_pdi_value,pdf_get_majorversion,pdf_get_minorversion,%
-    pdf_initgraphics,pdf_lineto,pdf_makespotcolor,pdf_moveto,%
-    pdf_open,pdf_open_CCITT,pdf_open_file,pdf_open_gif,%
-    pdf_open_image_file,pdf_open_jpeg,pdf_open_memory_image,%
-    pdf_open_pdi_page,pdf_open_png,pdf_open_tiff,pdf_place_image,%
-    pdf_rect,pdf_restore,pdf_rotate,pdf_save,pdf_scale,pdf_setcolor,%
-    pdf_setflat,pdf_setfont,pdf_setgray,pdf_setgray_fill,%
-    pdf_setlinecap,pdf_setlinejoin,pdf_setlinewidth,pdf_setmatrix,%
-    pdf_setpolydash,pdf_setrgbcolor,pdf_setrgbcolor_fill,%
-    pdf_set_border_color,pdf_set_border_dash,pdf_set_border_style,%
-    pdf_set_duration,pdf_set_font,pdf_set_horiz_scaling,%
-    pdf_set_info_author,pdf_set_info_creator,pdf_set_info_keywords,%
-    pdf_set_info_title,pdf_set_leading,pdf_set_parameter,%
-    pdf_set_text_rendering,pdf_set_text_rise,pdf_set_text_matrix,%
-    pdf_set_word_spacing,pdf_show,pdf_show_boxed,pdf_show_xy,%
-    pdf_stringwidth,pdf_stroke,pdf_translate,%
-  %--- pfpro functions
-    pfpro_init,pfpro_cleanup,pfpro_process,pfpro_process_raw,%
-  %--- pgsql functions
-    pg_close,pg_affected_rows,pg_connect,pg_dbname,pg_end_copy,%
-    pg_query,pg_fetch_array,pg_fetch_object,pg_fetch_row,%
-    pg_field_name,pg_field_num,pg_field_prtlen,pg_field_size,%
-    pg_free_result,pg_last_oid,pg_host,pg_last_notice,pg_lo_close,%
-    pg_lo_export,pg_lo_import,pg_lo_open,pg_lo_read,pg_lo_seek,%
-    pg_lo_read_all,pg_lo_unlink,pg_lo_write,pg_num_fields,%
-    pg_options,pg_pconnect,pg_port,pg_put_line,pg_fetch_result,%
-    pg_client_encoding,pg_trace,pg_tty,pg_untrace,pg_get_result,%
-    pg_send_query,pg_cancel_query,pg_connection_busy,%
-    pg_connection_status,pg_copy_from,pg_copy_to,pg_escape_bytea,%
-    pg_result_error,%
-  %--- posix functions
-    posix_kill,posix_getpid,posix_getppid,posix_getuid,%
-    posix_getgid,posix_getegid,posix_setuid,posix_seteuid,%
-    posix_setegid,posix_getgroups,posix_getlogin,posix_getpgrp,%
-    posix_setpgid,posix_getpgid,posix_getsid,posix_uname,%
-    posix_ctermid,posix_ttyname,posix_isatty,posix_getcwd,%
-    posix_getgrnam,posix_getgrgid,posix_getpwnam,posix_getpwuid,%
-  %--- printer functions
-    printer_open,printer_abort,printer_close,printer_write,%
-    printer_set_option,printer_get_option,printer_create_dc,%
-    printer_start_doc,printer_end_doc,printer_start_page,%
-    printer_create_pen,printer_delete_pen,printer_select_pen,%
-    printer_delete_brush,printer_select_brush,printer_create_font,%
-    printer_select_font,printer_logical_fontheight,%
-    printer_draw_rectangle,printer_draw_elipse,printer_draw_text,%
-    printer_draw_chord,printer_draw_pie,printer_draw_bmp,%
-  %--- pspell functions
-    pspell_add_to_personal,pspell_add_to_session,pspell_check,%
-    pspell_config_create,pspell_config_ignore,pspell_config_mode,%
-    pspell_config_repl,pspell_config_runtogether,%
-    pspell_new,pspell_new_config,pspell_new_personal,%
-    pspell_store_replacement,pspell_suggest,%
-  %--- qtdom functions
-    qdom_tree,qdom_error,%
-  %--- readline functions
-    readline,readline_add_history,readline_clear_history,%
-    readline_info,readline_list_history,readline_read_history,%
-  %--- recode functions
-    recode_string,recode,recode_file,%
-  %--- regex functions
-    ereg,ereg_replace,eregi,eregi_replace,split,spliti,sql_regcase,%
-  %--- sem functions
-    sem_get,sem_acquire,sem_release,sem_remove,shm_attach,%
-    shm_remove,shm_put_var,shm_get_var,shm_remove_var,ftok,%
-  %--- sesam functions
-    sesam_connect,sesam_disconnect,sesam_settransaction,%
-    sesam_rollback,sesam_execimm,sesam_query,sesam_num_fields,%
-    sesam_diagnostic,sesam_fetch_result,sesam_affected_rows,%
-    sesam_field_array,sesam_fetch_row,sesam_fetch_array,%
-    sesam_free_result,%
-  %--- session functions
-    session_start,session_destroy,session_name,session_module_name,%
-    session_id,session_register,session_unregister,session_unset,%
-    session_get_cookie_params,session_set_cookie_params,%
-    session_encode,session_set_save_handler,session_cache_limiter,%
-    session_write_close,%
-  %--- shmop functions
-    shmop_open,shmop_read,shmop_write,shmop_size,shmop_delete,%
-  %--- snmp functions
-    snmpget,snmpset,snmpwalk,snmpwalkoid,snmp_get_quick_print,%
-    snmprealwalk,%
-  %--- strings functions
-    addcslashes,addslashes,bin2hex,chop,chr,chunk_split,%
-    count_chars,crc32,crypt,echo,explode,get_html_translation_table,%
-    hebrev,hebrevc,htmlentities,htmlspecialchars,implode,join,%
-    localeconv,ltrim,md5,md5_file,metaphone,nl_langinfo,nl2br,ord,%
-    print,printf,quoted_printable_decode,quotemeta,str_rot13,rtrim,%
-    setlocale,similar_text,soundex,sprintf,strncasecmp,strcasecmp,%
-    strcmp,strcoll,strcspn,strip_tags,stripcslashes,stripslashes,%
-    strlen,strnatcmp,strnatcasecmp,strncmp,str_pad,strpos,strrchr,%
-    strrev,strrpos,strspn,strstr,strtok,strtolower,strtoupper,%
-    strtr,substr,substr_count,substr_replace,trim,ucfirst,ucwords,%
-    vsprintf,wordwrap,%
-  %--- swf functions
-    swf_openfile,swf_closefile,swf_labelframe,swf_showframe,%
-    swf_getframe,swf_mulcolor,swf_addcolor,swf_placeobject,%
-    swf_removeobject,swf_nextid,swf_startdoaction,%
-    swf_actiongeturl,swf_actionnextframe,swf_actionprevframe,%
-    swf_actionstop,swf_actiontogglequality,swf_actionwaitforframe,%
-    swf_actiongotolabel,swf_enddoaction,swf_defineline,%
-    swf_definepoly,swf_startshape,swf_shapelinesolid,%
-    swf_shapefillsolid,swf_shapefillbitmapclip,%
-    swf_shapemoveto,swf_shapelineto,swf_shapecurveto,%
-    swf_shapearc,swf_endshape,swf_definefont,swf_setfont,%
-    swf_fontslant,swf_fonttracking,swf_getfontinfo,swf_definetext,%
-    swf_definebitmap,swf_getbitmapinfo,swf_startsymbol,%
-    swf_startbutton,swf_addbuttonrecord,swf_oncondition,%
-    swf_viewport,swf_ortho,swf_ortho2,swf_perspective,swf_polarview,%
-    swf_pushmatrix,swf_popmatrix,swf_scale,swf_translate,swf_rotate,%
-  %--- sybase functions
-    sybase_affected_rows,sybase_close,sybase_connect,%
-    sybase_fetch_array,sybase_fetch_field,sybase_fetch_object,%
-    sybase_field_seek,sybase_free_result,sybase_get_last_message,%
-    sybase_min_error_severity,sybase_min_message_severity,%
-    sybase_num_fields,sybase_num_rows,sybase_pconnect,sybase_query,%
-    sybase_select_db,%
-  %--- uodbc functions
-    odbc_autocommit,odbc_binmode,odbc_close,odbc_close_all,%
-    odbc_connect,odbc_cursor,odbc_do,odbc_error,odbc_errormsg,%
-    odbc_execute,odbc_fetch_into,odbc_fetch_row,odbc_fetch_array,%
-    odbc_fetch_object,odbc_field_name,odbc_field_num,%
-    odbc_field_len,odbc_field_precision,odbc_field_scale,%
-    odbc_longreadlen,odbc_num_fields,odbc_pconnect,odbc_prepare,%
-    odbc_result,odbc_result_all,odbc_rollback,odbc_setoption,%
-    odbc_tableprivileges,odbc_columns,odbc_columnprivileges,%
-    odbc_primarykeys,odbc_foreignkeys,odbc_procedures,%
-    odbc_specialcolumns,odbc_statistics,%
-  %--- url functions
-    base64_decode,base64_encode,parse_url,rawurldecode,rawurlencode,%
-    urlencode,%
-  %--- var functions
-    doubleval,empty,floatval,gettype,get_defined_vars,%
-    import_request_variables,intval,is_array,is_bool,is_double,%
-    is_int,is_integer,is_long,is_null,is_numeric,is_object,is_real,%
-    is_scalar,is_string,isset,print_r,serialize,settype,strval,%
-    unset,var_dump,var_export,is_callable,%
-  %--- vpopmail functions
-    vpopmail_add_domain,vpopmail_del_domain,%
-    vpopmail_add_domain_ex,vpopmail_del_domain_ex,%
-    vpopmail_add_user,vpopmail_del_user,vpopmail_passwd,%
-    vpopmail_auth_user,vpopmail_alias_add,vpopmail_alias_del,%
-    vpopmail_alias_get,vpopmail_alias_get_all,vpopmail_error,%
-  %--- w32api functions
-    w32api_set_call_method,w32api_register_function,%
-    w32api_deftype,w32api_init_dtype,%
-  %--- wddx functions
-    wddx_serialize_value,wddx_serialize_vars,wddx_packet_start,%
-    wddx_add_vars,wddx_deserialize,%
-  %--- xml functions
-    xml_parser_create,xml_set_object,xml_set_element_handler,%
-    xml_set_processing_instruction_handler,xml_set_default_handler,%
-    xml_set_notation_decl_handler,%
-    xml_parse,xml_get_error_code,xml_error_string,%
-    xml_get_current_column_number,xml_get_current_byte_index,%
-    xml_parser_free,xml_parser_set_option,xml_parser_get_option,%
-    utf8_encode,xml_parser_create_ns,%
-    xml_set_start_namespace_decl_handler,%
-  %--- xslt functions
-    xslt_set_log,xslt_create,xslt_errno,xslt_error,xslt_free,%
-    xslt_set_sax_handler,xslt_set_scheme_handler,%
-    xslt_set_base,xslt_set_encoding,xslt_set_sax_handlers,%
-  %--- yaz functions
-    yaz_addinfo,yaz_close,yaz_connect,yaz_errno,yaz_error,yaz_hits,%
-    yaz_database,yaz_range,yaz_record,yaz_search,yaz_present,%
-    yaz_scan,yaz_scan_result,yaz_ccl_conf,yaz_ccl_parse,%
-    yaz_wait,yaz_sort,%
-  %--- zip functions
-    zip_close,zip_entry_close,zip_entry_compressedsize,%
-    zip_entry_filesize,zip_entry_name,zip_entry_open,zip_entry_read,%
-    zip_read,%
-  %--- zlib functions
-    gzclose,gzeof,gzfile,gzgetc,gzgets,gzgetss,gzopen,gzpassthru,%
-    gzread,gzrewind,gzseek,gztell,gzwrite,readgzfile,gzcompress,%
-    gzdeflate,gzinflate,gzencode,},%
-   sensitive,%
-   morecomment=[l]\#,%
-   morecomment=[l]//,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]",%
-   morestring=[b]'%
-  }[keywords,comments,strings]%
-%%
-%% Prolog definition (c) 1997 Dominique de Waleffe
-%%
-\lst@definelanguage{Prolog}%
-  {morekeywords={op,mod,abort,ancestors,arg,ascii,ask,assert,asserta,%
-      assertz,atom,atomic,char,clause,close,concat,consult,ed,ef,em,%
-      eof,fail,file,findall,write,functor,getc,integer,is,length,%
-      listing,load,name,nl,nonvar,not,numbervars,op,or,pp,prin,print,%
-      private,prompt,putc,ratom,read,read_from_this_file,rename,repeat,%
-      retract,retractall,save,see,seeing,seen,sh,skip,statistics,%
-      subgoal_of,system,tab,tell,telling,time,told,trace,true,unload,%
-      untrace,var,write},%
-   sensitive=f,%
-   morecomment=[l]\%,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[bd]",%
-   morestring=[bd]'%
-  }[keywords,comments,strings]%
-%%
-%% classic rexx listings definition
-%% by Patrick TJ McPhee <ptjm@interlog.com>
-%%
-\lst@definelanguage{Rexx}
-  {morekeywords={address,arg,call,do,drop,else,end,exit,if,iterate,%
-                 interpret,leave,nop,numeric,options,otherwise,parse,%
-                 procedure,pull,push,queue,return,say,signal,then,to,%
-                 trace,when},%
-   sensitive=false,%
-   morecomment=[n]{/*}{*/},%
-   morestring=[d]{'},%
-   morestring=[d]{"},%
-  }[keywords,comments,strings]%
-\lst@definelanguage{Ruby}%
-  {morekeywords={__FILE__,__LINE__,BEGIN,END,alias,and,begin,break,%
-      case,class,def,defined?,do,else,elsif,end,ensure,false,for,%
-      if,in,module,next,nil,not,or,redo,rescue,retry,return,self,%
-      super,then,true,undef,unless,until,when,while,yield},%
-   sensitive=true,%
-   morecomment=[l]\#,%
-   morecomment=[l]\#\#,%
-   morecomment=[s]{=BEGIN}{=END},%
-   morestring=[b]',%
-   morestring=[b]",%
-   morestring=[s]{\%q/}{/},%
-   morestring=[s]{\%q!}{!},%
-   morestring=[s]{\%q\{}{\}},%
-   morestring=[s]{\%q(}{)},%
-   morestring=[s]{\%q[}{]},%
-   morestring=[s]{\%q-}{-},%
-   morestring=[s]{\%Q/}{/},%
-   morestring=[s]{\%Q!}{!},%
-   morestring=[s]{\%Q\{}{\}},%
-   morestring=[s]{\%Q(}{)},%
-   morestring=[s]{\%Q[}{]},%
-   morestring=[s]{\%Q-}{-}%
-  }[keywords,comments,strings]%
-%%
-%% SHELXL definition (c) 1999 Aidan Philip Heerdegen
-%%
-\lst@definelanguage{SHELXL}%
-  {morekeywords={TITL,CELL,ZERR,LATT,SYMM,SFAC,DISP,UNIT,LAUE,%
-      REM,MORE,TIME,END,HKLF,OMIT,SHEL,BASF,TWIN,EXTI,SWAT,%
-      MERG,SPEC,RESI,MOVE,ANIS,AFIX,HFIX,FRAG,FEND,EXYZ,EADP,%
-      EQIV,OMIT,CONN,PART,BIND,FREE,DFIX,BUMP,SAME,SADI,CHIV,%
-      FLAT,DELU,SIMU,DEFS,ISOR,SUMP,L.S.,CGLS,SLIM,BLOC,DAMP,%
-      WGHT,FVAR,BOND,CONF,MPLA,RTAB,LIST,ACTA,SIZE,TEMP,WPDB,%
-      FMAP,GRID,PLAN,MOLE},%
-   sensitive=false,%
-   alsoother=_,% Makes the syntax highlighting ignore the underscores
-   morecomment=[l]{! },%
-  }%
-%%
-%% Tcl/Tk definition (c) Gerd Neugebauer
-%%
-\lst@definelanguage[tk]{tcl}[]{tcl}%
-  {morekeywords={activate,add,separator,radiobutton,checkbutton,%
-      command,cascade,all,bell,bind,bindtags,button,canvas,canvasx,%
-      canvasy,cascade,cget,checkbutton,config,configu,configur,%
-      configure,clipboard,create,arc,bitmap,image,line,oval,polygon,%
-      rectangle,text,textwindow,curselection,delete,destroy,end,entry,%
-      entrycget,event,focus,font,actual,families,measure,metrics,names,%
-      frame,get,grab,current,release,status,grid,columnconfigure,%
-      rowconfigure,image,image,create,bitmap,photo,delete,height,types,%
-      widt,names,index,insert,invoke,itemconfigure,label,listbox,lower,%
-      menu,menubutton,message,move,option,add,clear,get,readfile,pack,%
-      photo,place,radiobutton,raise,scale,scroll,scrollbar,search,see,%
-      selection,send,stdin,stdout,stderr,tag,bind,text,tk,tkerror,%
-      tkwait,window,variable,visibility,toplevel,unknown,update,winfo,%
-      class,exists,ismapped,parent,reqwidth,reqheight,rootx,rooty,%
-      width,height,wm,aspect,client,command,deiconify,focusmodel,frame,%
-      geometry,group,iconbitmap,iconify,iconmask,iconname,iconposition,%
-      iconwindow,maxsize,minsize,overrideredirect,positionfrom,%
-      protocol,sizefrom,state,title,transient,withdraw,xview,yview,%
-      yposition,%
-      -accelerator,-activebackground,-activeborderwidth,%
-      -activeforeground,-after,-anchor,-arrow,-arrowshape,-aspect,%
-      -async,-background,-before,-bg,-bigincrement,-bitmap,-bordermode,%
-      -borderwidth,-button,-capstyle,-channel,-class,-closeenough,%
-      -colormap,-column,-columnspan,-command,-confine,-container,%
-      -count,-cursor,-data,-default,-detail,-digits,-direction,%
-      -displayof,-disableforeground,-elementborderwidth,-expand,%
-      -exportselection,-extend,-family,-fg,-file,-fill,-focus,-font,%
-      -fontmap,-foreground,-format,-from,-gamma,-global,-height,%
-      -highlightbackground,-highlightcolor,-highlightthickness,-icon,%
-      -image,-in,-insertbackground,-insertborderwidth,-insertofftime,%
-      -insertontime,-imsertwidth,-ipadx,-ipady,-joinstyle,-jump,%
-      -justify,-keycode,-keysym,-label,-lastfor,-length,-maskdata,%
-      -maskfile,-menu,-message,-mode,-offvalue,-onvalue,-orient,%
-      -outlien,-outlinestipple,-overstrike,-override,-padx,-pady,%
-      -pageanchor,-pageheight,-pagewidth,-pagey,-pagey,-palette,%
-      -parent,-place,-postcommand,-relheight,-relief,-relwidth,-relx,%
-      -rely,-repeatdelay,-repeatinterval,-resolution,-root,-rootx,%
-      -rooty,-rotate,-row,-rowspan,-screen,-selectcolor,-selectimage,%
-      -sendevent,-serial,-setgrid,-showvalue,-shrink,-side,-size,%
-      -slant,-sliderlength,-sliderrelief,-smooth,-splinesteps,-state,%
-      -sticky,-stipple,-style,-subsample,-subwindow,-tags,-takefocus,%
-      -tearoff,-tearoffcommand,-text,-textvariable,-tickinterval,-time,%
-      -title,-to,-troughcolor,-type,-underline,-use,-value,-variable,%
-      -visual,-width,-wrap,-wraplength,-x,-xscrollcommand,-y,%
-      -bgstipple,-fgstipple,-lmargin1,-lmargin2,-rmargin,-spacing1,%
-      -spacing2,-spacing3,-tabs,-yscrollcommand,-zoom,%
-      activate,add,addtag,bbox,cget,clone,configure,coords,%
-      curselection,debug,delete,delta,deselect,dlineinfo,dtag,dump,%
-      entrycget,entryconfigure,find,flash,fraction,get,gettags,handle,%
-      icursor,identify,index,insert,invoke,itemcget,itemconfigure,mark,%
-      moveto,own,post,postcascade,postscript,put,redither,ranges,%
-      scale,select,show,tag,type,unpost,xscrollcommand,xview,%
-      yscrollcommand,yview,yposition}%
-  }%
-\lst@definelanguage[]{tcl}%
-  {alsoletter={.:,*=&-},%
-   morekeywords={after,append,array,names,exists,anymore,donesearch,%
-      get,nextelement,set,size,startsearch,auto_mkindex,binary,break,%
-      case,catch,cd,clock,close,concat,console,continue,default,else,%
-      elseif,eof,error,eval,exec,-keepnewline,exit,expr,fblocked,%
-      fconfigure,fcopy,file,atime,dirname,executable,exists,extension,%
-      isdirectory,isfile,join,lstat,mtime,owned,readable,readlink,%
-      rootname,size,stat,tail,type,writable,-permissions,-group,-owner,%
-      -archive,-hidden,-readonly,-system,-creator,-type,-force,%
-      fileevent,flush,for,foreach,format,gets,glob,global,history,if,%
-      incr,info,argsbody,cmdcount,commands,complete,default,exists,%
-      globals,level,library,locals,patchlevel,procs,script,tclversion,%
-      vars,interp,join,lappend,lindex,linsert,list,llength,lrange,%
-      lreplace,lsearch,-exact,-regexp,-glob,lsort,-ascii,-integer,%
-      -real,-dictionary,-increasing,-decreasing,-index,-command,load,%
-      namespace,open,package,forget,ifneeded,provide,require,unknown,%
-      vcompare,versions,vsatisfies,pid,proc,puts,-nonewline,pwd,read,%
-      regexp,-indices,regsub,-all,-nocaserename,return,scan,seek,set,%
-      socket,source,split,string,compare,first,index,last,length,match,%
-      range,tolower,toupper,trim,trimleft,trimright,subst,switch,tell,%
-      time,trace,variable,vdelete,vinfo,unknown,unset,uplevel,upvar,%
-      vwait,while,acos,asin,atan,atan2,ceil,cos,cosh,exp,floor,fmod,%
-      hypot,log,log10,pow,sin,sinh,sqrt,tan,tanh,abs,double,int,round%
-      },%
-   morestring=[d]",%
-   morecomment=[f]\#,%
-   morecomment=[l]{;\#},%
-   morecomment=[l]{[\#},%
-   morecomment=[l]{\{\#}%
-  }[keywords,comments,strings]%
-%%
-%% VBScript definition (c) 2000 Sonja Weidmann
-%%
-\lst@definelanguage{VBScript}%
-  {morekeywords={Call,Case,Const,Dim,Do,Each,Else,End,Erase,Error,Exit,%
-      Explicit,For,Function,If,Loop,Next,On,Option,Private,Public,%
-      Randomize,ReDim,Rem,Select,Set,Sub,Then,Wend,While,Abs,Array,Asc,%
-      Atn,CBool,CByte,CCur,CDate,CDbl,Chr,CInt,CLng,Cos,CreateObject,%
-      CSng,CStr,Date,DateAdd,DateDiff,DatePart,DateSerial,DateValue,%
-      Day,Exp,Filter,Fix,FormatCurrency,FormatDateTime,FormatNumber,%
-      FormatPercent,GetObject,Hex,Hour,InputBox,InStr,InStrRev,Int,%
-      IsArray,IsDate,IsEmpty,IsNull,IsNumeric,IsObject,Join,LBound,%
-      LCase,Left,Len,LoadPicture,Log,LTrim,Mid,Minute,Month,MonthName,%
-      MsgBox,Now,Oct,Replace,RGB,Right,Rnd,Round,RTrim,ScriptEngine,%
-      ScriptEngineBuildVersion,ScriptEngineMajorVersion,%
-      ScriptEngineMinorVersion,Second,Sgn,Sin,Space,Split,Sqr,StrComp,%
-      StrReverse,String,Tan,Time,TimeSerial,TimeValue,Trim,TypeName,%
-      UBound,UCase,VarType,Weekday,WeekdayName,Year, And,Eqv,Imp,Is,%
-      Mod,Not,Or,Xor,Add,BuildPath,Clear,Close,Copy,CopyFile,%
-      CopyFolder,CreateFolder,CreateTextFile,Delete,DeleteFile,%
-      DeleteFolder,Dictionary,Drive,DriveExists,Drives,Err,Exists,File,%
-      FileExists,FileSystemObject,Files,Folder,FolderExists,Folders,%
-      GetAbsolutePathName,GetBaseName,GetDrive,GetDriveName,%
-      GetExtensionName,GetFile,GetFileName,GetFolder,%
-      GetParentFolderName,GetSpecialFolder,GetTempName,Items,Keys,Move,%
-      MoveFile,MoveFolder,OpenAsTextStream,OpenTextFile,Raise,Read,%
-      ReadAll,ReadLine,Remove,RemoveAll,Skip,SkipLine,TextStream,Write,%
-      WriteBlankLines,WriteLine,Alias,Archive,CDROM,Compressed,%
-      Directory,Fixed,ForAppending,ForReading,ForWriting,Hidden,Normal,%
-      RAMDisk,ReadOnly,Remote,Removable,System,SystemFolder,%
-      TemporaryFolder,TristateFalse,TristateTrue,TristateUseDefault,%
-      Unknown,Volume,WindowsFolder,vbAbortRetryIgnore,%
-      vbApplicationModal,vbArray,vbBinaryCompare,vbBlack,vbBlue,%
-      vbBoolean,vbByte,vbCr,vbCrLf,vbCritical,vbCurrency,vbCyan,%
-      vbDataObject,vbDate,vbDecimal,vbDefaultButton1,vbDefaultButton2,%
-      vbDefaultButton3,vbDefaultButton4,vbDouble,vbEmpty,vbError,%
-      vbExclamation,vbFirstFourDays,vbFirstFullWeek,vbFirstJan1,%
-      vbFormFeed,vbFriday,vbGeneralDate,vbGreen,vbInformation,%
-      vbInteger,vbLf,vbLong,vbLongDate,vbLongTime,vbMagenta,vbMonday,%
-      vbNewLine,vbNull,vbNullChar,vbNullString,vbOKC,ancel,vbOKOnly,%
-      vbObject,vbObjectError,vbQuestion,vbRed,vbRetryCancel,vbSaturday,%
-      vbShortDate,vbShortTime,vbSingle,vbString,vbSunday,vbSystemModal,%
-      vbTab,vbTextCompare,vbThursday,vbTuesday,vbUseSystem,%
-      vbUseSystemDayOfWeek,vbVariant,vbVerticalTab,vbWednesday,vbWhite,%
-      vbYellow,vbYesNo,vbYesNoCancel},%
-   sensitive=f,%
-   morecomment=[l]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%%
-%% VRML definition (c) 2001 Oliver Baum
-%%
-\lst@definelanguage[97]{VRML}
-  {morekeywords={DEF,EXTERNPROTO,FALSE,IS,NULL,PROTO,ROUTE,TO,TRUE,USE,%
-      eventIn,eventOut,exposedField,field,Introduction,Anchor,%
-      Appearance,AudioClip,Background,Billboard,Box,Collision,Color,%
-      ColorInterpolator,Cone,Coordinate,CoordinateInterpolator,%
-      Cylinder,CylinderSensor,DirectionalLight,ElevationGrid,Extrusion,%
-      Fog,FontStyle,Group,ImageTexture,IndexedFaceSet,IndexedLineSet,%
-      Inline,LOD,Material,MovieTexture,NavigationInfo,Normal,%
-      NormalInterpolator,OrientationInterpolator,PixelTexture,%
-      PlaneSensor,PointLight,PointSet,PositionInterpolator,%
-      ProximitySensor,ScalarInterpolator,Script,Shape,Sound,Sphere,%
-      SphereSensor,SpotLight,Switch,Text,TextureCoordinate,%
-      TextureTransform,TimeSensor,TouchSensor,Transform,Viewpoint,%
-      VisibilitySensor,WorldInfo},%
-   morecomment=[l]\#,% bug: starts comment in the first column
-   morestring=[b]"%
-  }[keywords,comments,strings]
-\endinput
-%%
-%% End of file `lstlang2.sty'.
Index: doc/LaTeXmacros/listings/lstlang3.sty
===================================================================
--- doc/LaTeXmacros/listings/lstlang3.sty	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,1616 +1,0 @@
-%%
-%% This is file `lstlang3.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% lstdrvrs.dtx  (with options: `lang3')
-%% 
-%% The listings package is copyright 1996--2004 Carsten Heinz, and
-%% continued maintenance on the package is copyright 2006--2007 Brooks
-%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
-%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
-%% 2007/2013 any individual author listed in this file.
-%%
-%% This file is distributed under the terms of the LaTeX Project Public
-%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
-%% Either version 1.3 or, at your option, any later version.
-%%
-%% This file is completely free and comes without any warranty.
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\ProvidesFile{lstlang3.sty}
-    [2015/06/04 1.6 listings language file]
-\lst@definelanguage[68]{Algol}%
-  {morekeywords={abs,and,arg,begin,bin,bits,bool,by,bytes,case,channel,%
-      char,co,comment,compl,conj,divab,do,down,elem,elif,else,empty,%
-      end,entier,eq,esac,exit,false,fi,file,flex,for,format,from,ge,%
-      goto,gt,heap,if,im,in,int,is,isnt,le,leng,level,loc,long,lt,lwb,%
-      minusab,mod,modab,mode,ne,nil,not,od,odd,of,op,or,ouse,out,over,%
-      overab,par,plusab,plusto,pr,pragmat,prio,proc,re,real,ref,repr,%
-      round,sema,shl,short,shorten,shr,sign,skip,string,struct,then,%
-      timesab,to,true,union,up,upb,void,while},%
-   sensitive=f,% ???
-   morecomment=[s]{\#}{\#},%
-   keywordcomment={co,comment}%
-  }[keywords,comments,keywordcomments]%
-\lst@definelanguage[60]{Algol}%
-  {morekeywords={array,begin,Boolean,code,comment,div,do,else,end,%
-      false,for,goto,if,integer,label,own,power,procedure,real,step,%
-      string,switch,then,true,until,value,while},%
-   sensitive=f,% ???
-   keywordcommentsemicolon={end}{else,end}{comment}%
-  }[keywords,keywordcomments]%
-%%
-%% Motorola 68K definition (c) 2006 Michael Franke
-%%
-\lst@definelanguage[Motorola68k]{Assembler}%
- {morekeywords={ABCD,ADD,%
-ADDA,ADDI,ADDQ,ADDX,AND,ANDI,ASL,ASR,BCC,BLS,BCS,BLT,BEQ,BMI,BF,BNE,BGE,BPL,%
-BGT,BT,BHI,BVC,BLE,BVS,BCHG,BCLR,BRA,BSET,BSR,BTST,CHK,CLR,CMP,CMPA,CMPI,CMPM,%
-DBCC,DBLS,DBCS,DBLT,DBEQ,DBMI,DBF,DBNE,DBGE,DBPL,DBGT,DBT,DBHI,DBVC,DBLE,DBVS,DIVS,%
-DIVU,EOR,EORI,EXG,EXT,ILLEGAL,JMP,JSR,LEA,LINK,LSL,LSR,MOVE,MOVEA,MOVEM,MOVEP,MOVEQ,%
-MULS,MULU,NBCD,NEG,NEGX,NOP,NOT,OR,ORI,PEA,RESET,ROL,ROR,ROXL,ROXR,RTE,RTR,RTS,SBCD,%
-SCC,SLS,SCS,SLT,SEQ,SMI,SF,SNE,SGE,SPL,SGT,ST,SHI,SVC,SLE,SVS,STOP,SUB,SUBA,SUBI,SUBQ,%
-SUBX,SWAP,TAS,TRAP,TRAPV,TST,UNLK},%
-   sensitive=false,%
-   morecomment=[l]*,%
-   morecomment=[l];%
-   }[keywords,comments,strings]
-%%
-%% x86masm definition (c) 2002 Andrew Zabolotny
-%%
-\lst@definelanguage[x86masm]{Assembler}%
-  {morekeywords={al,ah,ax,eax,bl,bh,bx,ebx,cl,ch,cx,ecx,dl,dh,dx,edx,%
-      si,esi,di,edi,bp,ebp,sp,esp,cs,ds,es,ss,fs,gs,cr0,cr1,cr2,cr3,%
-      db0,db1,db2,db3,db4,db5,db6,db7,tr0,tr1,tr2,tr3,tr4,tr5,tr6,tr7,%
-      st,aaa,aad,aam,aas,adc,add,and,arpl,bound,bsf,bsr,bswap,bt,btc,%
-      btr,bts,call,cbw,cdq,clc,cld,cli,clts,cmc,cmp,cmps,cmpsb,cmpsw,%
-      cmpsd,cmpxchg,cwd,cwde,daa,das,dec,div,enter,hlt,idiv,imul,in,%
-      inc,ins,int,into,invd,invlpg,iret,ja,jae,jb,jbe,jc,jcxz,jecxz,%
-      je,jg,jge,jl,jle,jna,jnae,jnb,jnbe,jnc,jne,jng,jnge,jnl,jnle,%
-      jno,jnp,jns,jnz,jo,jp,jpe,jpo,js,jz,jmp,lahf,lar,lea,leave,lgdt,%
-      lidt,lldt,lmsw,lock,lods,lodsb,lodsw,lodsd,loop,loopz,loopnz,%
-      loope,loopne,lds,les,lfs,lgs,lss,lsl,ltr,mov,movs,movsb,movsw,%
-      movsd,movsx,movzx,mul,neg,nop,not,or,out,outs,pop,popa,popad,%
-      popf,popfd,push,pusha,pushad,pushf,pushfd,rcl,rcr,rep,repe,%
-      repne,repz,repnz,ret,retf,rol,ror,sahf,sal,sar,sbb,scas,seta,%
-      setae,setb,setbe,setc,sete,setg,setge,setl,setle,setna,setnae,%
-      setnb,setnbe,setnc,setne,setng,setnge,setnl,setnle,setno,setnp,%
-      setns,setnz,seto,setp,setpe,setpo,sets,setz,sgdt,shl,shld,shr,%
-      shrd,sidt,sldt,smsw,stc,std,sti,stos,stosb,stosw,stosd,str,sub,%
-      test,verr,verw,wait,wbinvd,xadd,xchg,xlatb,xor,fabs,fadd,fbld,%
-      fbstp,fchs,fclex,fcom,fcos,fdecstp,fdiv,fdivr,ffree,fiadd,ficom,%
-      fidiv,fidivr,fild,fimul,fincstp,finit,fist,fisub,fisubr,fld,fld1,%
-      fldl2e,fldl2t,fldlg2,fldln2,fldpi,fldz,fldcw,fldenv,fmul,fnop,%
-      fpatan,fprem,fprem1,fptan,frndint,frstor,fsave,fscale,fsetpm,%
-      fsin,fsincos,fsqrt,fst,fstcw,fstenv,fstsw,fsub,fsubr,ftst,fucom,%
-      fwait,fxam,fxch,fxtract,fyl2x,fyl2xp1,f2xm1},%
-   morekeywords=[2]{.align,.alpha,assume,byte,code,comm,comment,.const,%
-      .cref,.data,.data?,db,dd,df,dosseg,dq,dt,dw,dword,else,end,endif,%
-      endm,endp,ends,eq,equ,.err,.err1,.err2,.errb,.errdef,.errdif,%
-      .erre,.erridn,.errnb,.errndef,.errnz,event,exitm,extrn,far,%
-      .fardata,.fardata?,fword,ge,group,gt,high,if,if1,if2,ifb,ifdef,%
-      ifdif,ife,ifidn,ifnb,ifndef,include,includelib,irp,irpc,label,%
-      .lall,le,length,.lfcond,.list,local,low,lt,macro,mask,mod,.model,%
-      name,ne,near,offset,org,out,page,proc,ptr,public,purge,qword,.%
-      radix,record,rept,.sall,seg,segment,.seq,.sfcond,short,size,%
-      .stack,struc,subttl,tbyte,.tfcond,this,title,type,.type,width,%
-      word,.xall,.xcref,.xlist},%
-   alsoletter=.,alsodigit=?,%
-   sensitive=f,%
-   morestring=[b]",%
-   morestring=[b]',%
-   morecomment=[l];%
-   }[keywords,comments,strings]
-%%
-%% Clean definition (c) 1999 Jos\'e Romildo Malaquias
-%%
-%% Clean 1.3 :  some standard functional language: pure, lazy,
-%%              polymorphic type system, modules, type classes,
-%%              garbage collection, functions as first class citizens
-%%
-\lst@definelanguage{Clean}%
-  {otherkeywords={:,::,=,:==,=:,=>,->,<-,<-:,\{,\},\{|,|\},\#,\#!,|,\&,%
-      [,],!,.,\\\\,;,_},%
-   morekeywords={from,definition,implementation,import,module,system,%
-      case,code,if,in,let,let!,of,where,with,infix,infixl,infixr},%
-   morendkeywords={True,False,Start,Int,Real,Char,Bool,String,World,%
-      File,ProcId},%
-   sensitive,%
-   morecomment=[l]//,% missing comma: Markus Pahlow
-   morecomment=[n]{/*}{*/},%
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-\lst@definelanguage{CIL}%
-  {morekeywords=[1]{assembly,beforefieldinit,class,default,cdecl,cil,corflags,%
-                    culture,custom,data,entrypoint,fastcall,field,file,%
-                    hidebysig,hash,il,imagebase,locals,managed,marshall,%
-                    maxstack,mresource,method,module,namespace,publickey,%
-                    stdcall,subsystem,thiscall,unmanaged,vararg,ver,vtfixup,%
-                   % types
-                    bool,char,float32,float64,int,int8,int16,int32,%
-                    int64,method,native,object,string,modopt,modreq,pinned,%
-                    typedref,valuetype,unsigned,void,%
-                   % defining types
-                    abstract,ansi,auto,autochar,beforefieldinit,boxed,class,%
-                    explicit,extends,implements,interface,famandassem,family,%
-                    famorassem,inherits,nested,override,pack,private,property,%
-                    public,rtspecialname,sealed,sequential,serializable,size,%
-                    specialname,static,unicode,%
-                   % postfix
-                    algorithm,alignment,extern,init,from,nometadata,with},%
-  morekeywords=[2]{add,and,arglist,beq,bge,bgt,ble,blt,bne,br,break,brfalse,%
-                    brtrue,call,calli,ceq,cgt,ckfinite,clt,conv,cpblk,div,%
-                    dup,endfilter,endfinally,initblk,jmp,ldarg,ldarga,ldc,%
-                    ldftn,ldind,ldloc,ldloca,ldnull,leave,localloc,mul,neg,%
-                    nop,not,or,pop,rem,ret,shl,shr,starg,stind,stloc,sub,%
-                    switch,xor,%
-                   % prefix
-                    tail,unaligned,volatile,%
-                   % postfix
-                    un,s,ovf,%
-                   % object
-                    box,callvirt,castclass,cpobj,cctor,ctor,initobj,isinst,%
-                    ldelem,ldelema,ldfld,ldflda,ldlen,ldobj,ldsfld,ldsflda,%
-                    ldstr,ldtoken,ldvirtftn,mkrefany,newarr,newobj,refanytype,%
-                    refanyval,rethrow,sizeof,stelem,stfld,stobj,stsfld,throw,%
-                    unbox},%
-  sensitive=true,%
-  morecomment=[l]{//},%
-  morestring=[b]"%
-}[keywords,comments,strings]%
-\lst@definelanguage{Comal 80}%
-  {morekeywords={AND,AUTO,CASE,DATA,DEL,DIM,DIV,DO,ELSE,ENDCASE,ENDIF,%
-      ENDPROC,ENDWHILE,EOD,EXEC,FALSE,FOR,GOTO,IF,INPUT,INT,LIST,LOAD,%
-      MOD,NEW,NEXT,NOT,OF,OR,PRINT,PROC,RANDOM,RENUM,REPEAT,RND,RUN,%
-      SAVE,SELECT,STOP,TAB,THEN,TRUE,UNTIL,WHILE,ZONE},%
-   sensitive=f,% ???
-   morecomment=[l]//,%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-\lst@definelanguage[WinXP]{command.com}%
-  {morekeywords={assoc,at,attrib,bootcfg,break,cacls,call,cd,chcp,chdir,%
-      chkdsk,chkntfs,cls,cmd,cmdextversion,color,comp,compact,convert,copy,%
-      date,defined,del,dir,diskcomp,diskcopy,do,doskey,echo,else,endlocal,%
-      erase,errorlevel,exist,exit,fc,find,findstr,for,format,ftype,goto,%
-      graftabl,help,if,in,label,md,mkdir,mode,more,move,not,off,path,%
-      pause,popd,print,prompt,pushd,rd,recover,ren,rename,replace,rmdir,%
-      set,setlocal,shift,sort,start,subst,time,title,tree,type,ver,%
-      verify,vol,xcopy},%
-   sensitive=false,%
-   alsoother={@},%
-   alsoletter={\%~:-/},%
-   morecomment=[l]{rem},%
-   morecomment=[l]{reM},%
-   morecomment=[l]{rEm},%
-   morecomment=[l]{rEM},%
-   morecomment=[l]{Rem},%
-   morecomment=[l]{ReM},%
-   morecomment=[l]{REm},%
-   morecomment=[l]{REM},%
-   morestring=[d]"%
-}[keywords,comments,strings]%
-\lst@definelanguage{Comsol}%
-  {morekeywords={%
-      adaption,arc1,arc2,arrayr,assemble,asseminit,beziercurve2,block2,%
-      block3,bsplinecurve2,bsplinecurve3,bsplinesurf3,bypassplot,cardg,%
-      ccoeffgroup,chamfer,checkgeom,circ1,circ2,coeff2cell,comsol,%
-      cone2,cone3,Contents,createhexes,createprisms,createquads,csgbl2,%
-      csgbl3,csgcmpbz,csgimplbz,csginitaux,csginitnr,csgproputil,%
-      csgrbconv,csgunique3,csguniquep,csgversion,csgvvovl,curve2,%
-      curve3,cylinder2,cylinder3,dat2str,defastget,display,drawgetobj,%
-      drawreobj,drawsetobj,dst,duplicate,dxflayers,dxfread,dxfwrite,%
-      econe2,econe3,eigloop,elcconstr,elcplbnd,elcplextr,elcplproj,%
-      elcplscalar,elempty,elemreobj,eleqc,eleqw,elevate,elgeom,ellip1,%
-      ellip2,ellipsoid2,ellipsoid3,ellipsoidgen_fl23,elmat,elovar,%
-      elpconstr,elshape,elvar,elvarm,embed,extrude,face3,faceprim3,%
-      fastsetop,fem2jxfem,femblocksu,femdiff,femeig,femexport,femgui,%
-      femimport,femiter,femlab,femlin,femmesh,femmeshexp,femnlin,%
-      femplot,femsfun,femsim,femsimlowlevel,femsimserver,femsol,%
-      femsolver,femstate,femstruct,femtime,femwave,festyle,fieldnames,%
-      fillet,fl1d,fl2d,fl3d,flaction,flafun,flappconvert,flappobj,%
-      flaxisequal,flbase,flbinary,flc1hs,flc2hs,flcanpnt,flcell2draw,%
-      flclear,flcolorbar,flcompact,flconeplot,flcontour2mesh,%
-      flcontour2meshaux,flconvreact,flconvreact1d,flconvreact2d,%
-      flconvreact3d,flcyl,fldc1hs,fldc2hs,fldegree,fldegreer3,%
-      fldegreet3,fldimvarsget,fldisp,fldraw2cell,fldrawnow,fldsmhs,%
-      fldsmsign,flevalmat,flexch,flexchprop,flfastgeom,flform,flgc,%
-      flgcbo,flgdconv,flgeom2cellstr,flgeomadj,flgeomarcize,flgeomec,%
-      flgeomed,flgeomepol,flgeomes,flgeomfc,flgeomfd,flgeomfdp,%
-      flgeomff1,flgeomff2,flgeomfn,flgeomfs,flgeomgetlocalsys,%
-      flgeominit,flgeominitprop,flgeomitransform,flgeomloft,flgeommesh,%
-      flgeomnbs,flgeomnes,flgeomnmr,flgeomnv,flgeompsinv,flgeomrmsing,%
-      flgeomrotp,flgeomsd,flgeomsdim,flgeomse,flgeomsf2,flgeomspm,%
-      flgeomtransform,flgeomud,flgeomvtx,flgetdraw,flheat,flheat1d,%
-      flheat2d,flheat3d,flhelmholtz,flhelmholtz1d,flhelmholtz2d,%
-      flhelmholtz3d,flim2curve,flinterp1,fliscont,flismember,%
-      flisnumeric,fljaction,fllaplace,fllaplace1d,fllaplace2d,%
-      fllaplace3d,flload,flloadfl,flloadmatfile,flloadmfile,%
-      fllobj2cellstr,flmakeevalstr,flmapsoljac,flmat2str,flmatch,%
-      flmesh2spline,flmesh2splineaux,flml65setup,flngdof,flnull,%
-      flnullorth,flpde,flpdeac,flpdec,flpdec1d,flpdec2d,flpdec3d,%
-      flpdedc,flpdedc2d,flpdedc3d,flpdedf,flpdedf1d,flpdedf2d,%
-      flpdedf3d,flpdees,flpdees2d,flpdees3d,flpdeg,flpdeg1d,flpdeg2d,%
-      flpdeg3d,flpdeht,flpdeht1d,flpdeht2d,flpdeht3d,flpdems,flpdems2d,%
-      flpdems3d,flpdens,flpdens2d,flpdens3d,flpdepn,flpdeps,flpdesm3d,%
-      flpdew,flpdew1d,flpdew2d,flpdew3d,flpdewb,flpdewb1d,flpdewb2d,%
-      flpdewb3d,flpdewc,flpdewc1d,flpdewc2d,flpdewc3d,flpdewe,%
-      flpdewe3d,flpdewp,flpdewp2d,flpdewp3d,flplot,flpoisson,%
-      flpoisson1d,flpoisson2d,flpoisson3d,flpric2,flpric3,flreobj,%
-      flreport,flresolvepath,flsave,flschrodinger,flschrodinger1d,%
-      flschrodinger2d,flschrodinger3d,flsde,flsdp,flsdt,flsetalpha,%
-      flsetdraw,flsmhs,flsmsign,flspnull,fltherm_cond1,fltrg,flversion,%
-      flversions,flverver,flwave,flwave1d,flwave2d,flwave3d,%
-      flwriteghist,formstr,gdsread,gencyl2,gencyl3,genextrude,%
-      genextrudeaux,geom,geom0,geom0get,geom1,geom1get,geom2,geom2get,%
-      geom3,geom3get,geom3j2m,geom3m2j,geomaddlblmargin,geomanalyze,%
-      geomarrayr,geomassign,geomcoerce,geomcomp,geomconnect,geomcopy,%
-      geomcsg,geomdel,geomedit,geomexport,geomfile,geomget,%
-      geomgetlabels,geomgetwrkpln,geomimport,geominfo,geominfoaux,%
-      geomlblplot,geomload,geomnumparse,geomobject,geomparse,geomplot,%
-      geomplot1,geomplot2,geomplot3,geomposition,geomproputil,%
-      geomreconstruct,geomreobj,geomserver,geomspline,geomsurf,%
-      geomupdate,get,getfemgeom,getisocurve,getjptr,getmesh,getsdim,%
-      getvmatrixexch,handlesolnumstr,helix1,helix2,helix3,hexahedron2,%
-      hexahedron3,histfrommat,idst,igesread,importplotdata,isempty,%
-      isfield,isfunc,isscript,javaclass,jproputil,jptr2geom,jptrgeom1,%
-      jptrgeom1_fl23,jptrgeom2,jptrgeom2_fl23,jptrgeom3,jptrgeom3_fl23,%
-      keiter,line1,line2,loadobj,loft,matlabinterpdata,mesh2geom,%
-      meshassign,meshcaseadd,meshcasedel,meshcaseutil,meshcheck,%
-      meshembed,meshenrich,meshenrich1,meshenrich2,meshenrich3,%
-      meshexport,meshextend,meshextrude,meshget,meshimport,meshinit,%
-      meshintegrate,meshmap,meshoptim,meshparse,meshplot,meshplot1,%
-      meshplot2,meshplot3,meshplotproputil,meshpoi,meshproputil,%
-      meshptplot,meshqual,meshrefine,meshrevolve,meshsmooth,%
-      meshsmooth2,meshsweep,meshvolume,minus,mirror,mkreflparams,%
-      mmsolve,modetype,move,moveglobalfields,mphproputil,mtimes,%
-      multiphysics,mypostinterp,notscript,onlyelsconstr,outassign,%
-      paramgeom,pde2draw,pde2equ,pde2fem,pde2geom,pdeblxpd,plus,point1,%
-      point2,point3,poisson,poly1,poly2,postanim,postapplysettings,%
-      postarrow,postarrowbnd,postcolorbar,postcont,postcontdomind,%
-      postcoord,postcopyprop,postcrossplot,postdistrprops,posteval,%
-      postflow,postfnd,postgeomplot,postgetfem,postgetstylecolor,%
-      postglobaleval,postglobalplot,postgp,postinit,postint,postinterp,%
-      postiso,postlin,postmakecontcol,postmax,postmaxmin,postmin,%
-      postmkcontbar,postmknormexpr,postmovie,postnewplot,%
-      postoldmaxminprops,postpd2pm,postplot,postplotconstants,%
-      postpm2pd,postprinc,postprincbnd,postprocgui,postproputil,%
-      postslice,postsurf,posttet,posttitle,print2file,pyramid2,%
-      pyramid3,rect1,rect2,restorefields,revolve,rmfield,rotate,%
-      rotmatrix,scale,serialize,set,setmesh,sh2str,sharg_2_5,shbub,%
-      shdisc,shdiv,shherm,shlag,shvec,simplecoerce,simreobj,slblocks,%
-      solassign,solid0,solid1,solid2,solid3,solidprim3,solproputil,%
-      solsize,solveraddcases,sphere2,sphere3,spiceimport,splineaux,%
-      split,splittoprim,square1,square2,stlread,submode,submodes,%
-      subsasgn,subsref,tangent,taucs,tetrahedron2,tetrahedron3,%
-      tobsplines,torus2,torus3,transform,update,updateassoc,%
-      updateassocinfo,updatefem,updateguistruct,updateobj,vrmlread,%
-      xmeshinfo,xmeshinit},%
-   sensitive=false,%
-   morecomment=[l]\%,%
-   morestring=[m]'%
-  }[keywords,comments,strings]%
-\lst@definelanguage{Elan}%
-  {morekeywords={ABS,AND,BOOL,CAND,CASE,CAT,COLUMNS,CONCR,CONJ,CONST,%
-      COR,DECR,DEFINES,DET,DIV,DOWNTO,ELIF,ELSE,END,ENDIF,ENDOP,%
-      ENDPACKET,ENDPROC,ENDREP,ENDSELECT,FALSE,FI,FILE,FOR,FROM,IF,%
-      INCR,INT,INV,LEAVE,LENGTH,LET,MOD,NOT,OF,OP,OR,OTHERWISE,PACKET,%
-      PROC,REAL,REP,REPEAT,ROW,ROWS,SELECT,SIGN,STRUCT,SUB,TEXT,THEN,%
-      TRANSP,TRUE,TYPE,UNTIL,UPTO,VAR,WHILE,WITH,XOR,%
-      maxint,sign,abs,min,max,random,initializerandom,subtext,code,%
-      replace,text,laenge,pos,compress,change,maxreal,smallreal,floor,%
-      pi,e,ln,log2,log10,sqrt,exp,tan,tand,sin,sind,cos,cosd,arctan,%
-      arctand,int,real,lastconversionok,put,putline,line,page,get,%
-      getline,input,output,sequentialfile,maxlinelaenge,reset,eof,%
-      close,complexzero,complexone,complexi,complex,realpart,imagpart,%
-      dphi,phi,vector,norm,replace,matrix,idn,row,column,sub,%
-      replacerow,replacecolumn,replaceelement,transp,errorsstop,stop},%
-   sensitive,%
-   morestring=[d]"%
-  }[keywords,strings]%
-%%
-%% Erlang definition (c) 2003 Daniel Gazard
-%%
-\lst@definelanguage{erlang}%
-  {morekeywords={abs,after,and,apply,atom,atom_to_list,band,binary,%
-      binary_to_list,binary_to_term,bor,bsl,bsr,bxor,case,catch,%
-      date,div,element,erase,end,exit,export,float,float_to_list,%
-      get,halt,hash,hd,if,info,import,integer,integer_to_list,%
-      length,link,list,list_to_atom,list_to_float,list_to_integer,%
-      list_to_tuple,module,node,nodes,now,of,or,pid,port,ports,%
-      processes,put,receive,reference,register,registered,rem,%
-      round,self,setelement,size,spawn,throw,time,tl,trace,trunc,%
-      tuple,tuple_to_list,unlink,unregister,whereis,error,false,%
-      infinity,nil,ok,true,undefined,when},%
-   otherkeywords={->,!,[,],\{,\}},%
-   morecomment=[l]\%,%
-   morestring=[b]",%
-   morestring=[b]'%
-  }[keywords,comments,strings]%
-\lst@definelanguage{Scala}%
-  {morekeywords={abstract,case,catch,class,def,%
-    do,else,extends,false,final,finally,%
-    for,if,implicit,import,lazy,match,mixin,%
-    new,null,object,override,package,%
-    private,protected,requires,return,sealed,%
-    super,this,trait,true,try,%
-    type,val,var,while,with,yield},%+
-otherkeywords={=,=>,<-,<\%,<:,>:,\#,@},%
-   sensitive,%
-   morecomment=[l]//,%
-   morecomment=[n]{/*}{*/},%
-   morestring=[b]",%
-   morestring=[b]',%
-   morestring=[b]""",%
-  }[keywords,comments,strings]%
-\lst@definelanguage{ksh}
-  {morekeywords={alias,awk,cat,echo,else,elif,fi,exec,exit,%
-      for,in,do,done,select,case,esac,while,until,function,%
-      time,export,cd,eval,fc,fg,kill,let,pwd,read,return,rm,%
-      glob,goto,history,if,logout,nice,nohup,onintr,repeat,sed,%
-      set,setenv,shift,source,switch,then,umask,unalias,%
-      unset,wait,@,env,argv,child,home,ignoreeof,noclobber,%
-      noglob,nomatch,path,prompt,shell,status,verbose,print,printf,%
-      sqrt,BEGIN,END},%
-   morecomment=[l]\#,%
-   morestring=[d]",%
-   morestring=[d]',%
-   morestring=[d]`%
-  }[keywords,comments,strings]%
-\lst@definelanguage{Lingo}
-  {morekeywords={abort,after,and,before,do,down,halt,me,new,not,of,%
-      on,or,otherwise,pass,put,result,return,set,tell,the,then,to,with,%
-      repeat,while,case,if,else,true,false,global,property,\_global,\_key,%
-      \_mouse,\_movie,\_player,\_sound,\_system,abbr,abbrev,abbreviated,abs,%
-      actionsenabled,activateapplication,activatewindow,active3drenderer,%
-      activecastlib,activewindow,actorlist,add,addat,addbackdrop,addcamera,%
-      addchild,addmodifier,addoverlay,addprop,addtoworld,addvertex,alert,%
-      alerthook,alignment,allowcustomcaching,allowgraphicmenu,allowsavelocal,%
-      allowtransportcontrol,allowvolumecontrol,allowzooming,alphathreshold,%
-      ambient,ambientcolor,ancestor,angle,anglebetween,animationenabled,%
-      antialias,antialiasthreshold,append,applicationname,applicationpath,%
-      appminimize,atan,attenuation,attributevalue,auto,autoblend,automask,%
-      autotab,axisangle,back,backcolor,backdrop,backgroundcolor,backspace,%
-      beep,beepon,beginrecording,beginsprite,beveldepth,beveltype,bgcolor,%
-      bias,bitand,bitmap,bitmapsizes,bitnot,bitor,bitrate,bitspersample,%
-      bitxor,blend,blendconstant,blendconstantlist,blendfactor,blendfunction,%
-      blendfunctionlist,blendlevel,blendrange,blendsource,blendsourcelist,%
-      blendtime,bone,bonesplayer,border,both,bottom,bottomcap,bottomradius,%
-      bottomspacing,boundary,boundingsphere,box,boxdropshadow,boxtype,%
-      breakconnection,breakloop,brightness,broadcastprops,browsername,%
-      buffersize,build,buttonsenabled,buttonstyle,buttontype,bytesstreamed,%
-      boolean,cachedocverify,cachesize,call,callancestor,camera,cameracount,%
-      cameraposition,camerarotation,cancelidleload,castlib,castlibnum,%
-      castmemberlist,center,centerregpoint,centerstage,changearea,channelcount,%
-      char,characterset,charpostoloc,chars,charspacing,chartonum,%
-      checkboxaccess,checkboxtype,checkmark,checknetmessages,child,chunksize,%
-      clearatrender,clearcache,clearerror,clearframe,clearglobals,clearvalue,%
-      clickloc,clickmode,clickon,clone,clonedeep,clonemodelfromcastmember,%
-      clonemotionfromcastmember,close,closed,closewindow,closexlib,collision,%
-      collisiondata,collisionnormal,color,world,colorbuffer,colorbufferdepth,%
-      colordepth,colorlist,colorrange,colors,colorsteps,commanddown,comments,%
-      compressed,connecttonetserver,constrainh,constraint,constrainv,,%
-      continue,controldown,controller,copypixels,copyrightinfo,copyto,%
-      copytoclipboard,cos,count,cpuhogticks,creaseangle,creases,[contains],%
-      createfolder,createmask,creatematte,creationdate,creator,crop,cross,%
-      crossproduct,cuepassed,cuepointnames,cuepointtimes,currentloopstate,%
-      currentspritenum,currenttime,cursor,cursorsize,curve,cylinder,ate,day,%
-      deactivateapplication,deactivatewindow,debug,debugplaybackenabled,%
-      decaymode,defaultrect,defaultrectmode,delay,delete,deleteall,deleteat,%
-      deletecamera,deletefolder,deleteframe,deletegroup,deletelight,%
-      deletemodel,deletemodelresource,deletemotion,deleteone,deleteprop,%
-      deleteshader,deletetexture,deletevertex,density,depth,depthbufferdepth,%
-      desktoprectlist,diffuse,diffusecolor,diffuselightmap,%
-      digitalvideotimescale,digitalvideotype,direction,directionalcolor,%
-      directionalpreset,directtostage,disableimagingtransformation,displayface,%
-      displaymode,distanceto,distribution,dither,done,doneparsing,dot,%
-      dotproduct,doubleclick,downloadnetthing,drag,draw,drawrect,dropshadow,%
-      duplicate,duplicateframe,duration,editable,editshortcutsenabled,%
-      elapsedtime,emissive,emitter,empty,emulatemultibuttonmouse,enabled,%
-      enablehotspot,end,endangle,endcolor,endframe,endrecording,endsprite,%
-      endtime,enter,enterframe,environment,erase,error,eventpassmode,%
-      exchange,exists,exit,exitframe,exitlock,exp,externalevent,%
-      externalparamcount,externalparamname,externalparamvalue,extractalpha,%
-      extrude3d,face,fadein,fadeout,fadeto,far,field,fieldofview,filename,%
-      fill,fillcolor,fillcycles,filldirection,filled,fillmode,filloffset,%
-      fillscale,findempty,findlabel,findpos,findposnear,finishidleload,%
-      firstindent,fixedlinespace,fixedrate,fixstagesize,flashrect,flashtostage,%
-      flat,fliph,flipv,float,floatp,floatprecision,flush,flushinputevents,%
-      fog,folderchar,font,fontsize,fontstyle,forecolor,forget,frame,%
-      framecount,framelabel,framepalette,framerate,frameready,framescript,%
-      framesound1,framesound2,framestohms,frametempo,frametransition,freeblock,%
-      freebytes,fromcastmember,fromimageobject,front,frontwindow,%
-      generatenormals,getaprop,getat,getbehaviordescription,getbehaviortooltip,%
-      getboneid,geterror,geterrorstring,gethardwareinfo,gethotspotrect,getlast,%
-      getlatestnetid,getnetaddresscookie,getneterrorstring,getnetmessage,%
-      getnetoutgoingbytes,getnettext,getnormalized,getnthfilenameinfolder,%
-      getnumberwaitingnetmessages,getone,getpeerconnectionlist,getpixel,%
-      getplaylist,getpos,getpref,getprop,getpropat,getpropertydescriptionlist,%
-      getrendererservices,getstreamstatus,gettemppath,getworldtransform,globals,%
-      glossmap,go,gotoframe,gotonetmovie,gotonetpage,gradienttype,gravity,%
-      group,handler,handlers,height,heightvertices,high,highlightpercentage,%
-      highlightstrength,hilite,hither,hittest,hmstoframes,hold,hotspot,html,%
-      hyperlink,hyperlinkclicked,hyperlinkrange,hyperlinks,hyperlinkstate,%
-      id3tags,identity,idle,idlehandlerperiod,idleloaddone,idleloadmode,%
-      idleloadperiod,idleloadtag,idlereadchunksize,ilk,image,imagecompression,%
-      imageenabled,imagequality,immovable,importfileinto,inflate,ink,inker,%
-      inlineimeenabled,insertbackdrop,insertframe,insertoverlay,inside,%
-      installmenu,instance,integer,integerp,interface,interpolate,%
-      interpolateto,intersect,index,interval,inverse,invert,invertmask,%
-      isbusy,isinworld,isoktoattach,ispastcuepoint,item,itemdelimiter,kerning,%
-      kerningthreshold,key,keyboardfocussprite,keycode,keydown,keydownscript,%
-      keyframeplayer,keypressed,keyup,keyupscript,label,labellist,last,%
-      lastchannel,lastclick,lastevent,lastframe,lastkey,lastroll,left,%
-      leftindent,length,lengthvertices,level,lifetime,light,line,linearlist,%
-      linecolor,linecount,linedirection,lineheight,lineoffset,linepostolocv,%
-      linesize,linkas,linked,list,listp,loaded,loadfile,loc,loch,locked,%
-      locktranslation,loctocharpos,locv,locvtolinepos,locz,lod,log,long,%
-      loop,loopcount,loopendtime,loopsremaining,loopstarttime,machinetype,%
-      magnitude,map,mapImageToStage,mapmembertostage,mapstagetomember,margin,%
-      marker,markerlist,mask,max,maxinteger,maxspeed,mci,media,mediaready,%
-      member,membernum,members,memorysize,menu,mesh,meshdeform,milliseconds,%
-      min,minspeed,modal,mode,model,modela,modelb,modelresource,%
-      modelsunderloc,modelsunderray,modelunderloc,modified,modifiedby,%
-      modifieddate,modifier,modifiers,month,mostrecentcuepoint,motion,%
-      mousechar,mousedown,mousedownscript,mouseenter,mouseh,mouseitem,%
-      mouseleave,mouselevel,mouseline,mouseloc,mousemember,mouseoverbutton,%
-      mouseup,mouseupoutside,mouseupscript,mousev,mousewithin,mouseword,move,%
-      moveablesprite,movetoback,movetofront,movevertex,movevertexhandle,%
-      movewindow,movie,movieaboutinfo,moviecopyrightinfo,moviefilefreesize,%
-      moviefilesize,moviefileversion,movieimagecompression,movieimagequality,%
-      moviename,moviepath,movierate,movietime,moviextralist,mpeglayer,%
-      multiply,multisound,name,near,nearfiltering,neighbor,netabort,netdone,%
-      neterror,netlastmoddate,netmime,netpresent,netstatus,nettextresult,%
-      netthrottleticks,newcamera,newcurve,newgroup,newlight,newmesh,newmodel,%
-      newmodelresource,newmotion,newshader,newtexture,next,none,normalize,%
-      normallist,normals,nothing,notify,nudge,number,numchannels,%
-      numparticles,numsegments,numtochar,objectp,offset,open,openresfile,%
-      openwindow,openxlib,optiondown,organizationname,originalfont,originh,%
-      originmode,originpoint,originv,orthoheight,overlay,pageheight,palette,%
-      palettemapping,paletteref,paletteindex,pan,paragraph,param,paramcount,%
-      parent,parsestring,particle,pasteclipboardinto,path,pathname,%
-      pathstrength,pattern,pause,pausedatstart,pausestate,percentplayed,%
-      percentstreamed,period,perpendicularto,persistent,pi,picture,picturep,%
-      plane,platform,play,playbackmode,playfile,playing,playlist,playnext,%
-      playrate,point,pointat,pointatorientation,pointinhyperlink,%
-      pointofcontact,pointtochar,pointtoitem,pointtoline,pointtoparagraph,%
-      pointtoword,position,positionreset,posterframe,postnettext,power,%
-      preferred3drenderer,preload,preloadbuffer,preloadeventabort,preloadmember,%
-      preloadmode,preloadmovie,preloadnetthing,preloadram,preloadtime,%
-      premultiply,prepareframe,preparemovie,prerotate,prescale,pretranslate,%
-      previous,primitives,printfrom,productversion,projection,projectionangle,%
-      propList,proxyserver,pttohotspotid,puppet,puppetpalette,puppetsound,%
-      puppetsprite,puppettempo,puppettransition,purgepriority,%
-      qtregisteraccesskey,qtunregisteraccesskey,quad,quality,queue,quit,quote,%
-      radius,ramneeded,random,randomseed,randomvector,rateshift,rawnew,read,%
-      readvalue,recordfont,rect,ref,reflectionmap,reflectivity,region,%
-      registerforevent,registerscript,regpoint,regpointvertex,removebackdrop,%
-      removefromworld,removelast,removemodifier,removeoverlay,rename,renderer,%
-      rendererdevicelist,renderformat,renderstyle,resetworld,resizewindow,%
-      resolution,resolve,resolvea,resolveb,resource,restart,resume,%
-      reverttoworlddefaults,rewind,rgb,rgba4444,rgba5550,rgba5551,rgba5650,%
-      rgba8880,rgba8888,right,rightindent,rightmousedown,rightmouseup,%
-      rollover,romanlingo,rootlock,rootnode,rotate,rotation,rotationreset,%
-      rtf,runmode,runpropertydialog,safeplayer,samplecount,samplerate,%
-      samplesize,save,savedlocal,savemovie,scale,scalemode,score,scorecolor,%
-      scoreselection,script,scriptexecutionstyle,scriptinstancelist,scriptlist,%
-      scriptnum,scriptsenabled,scripttext,scripttype,scrollbyline,scrollbypage,%
-      scrolltop,sds,searchcurrentfolder,searchpath,searchpaths,seconds,%
-      selectedtext,selection,selend,selstart,sendallsprites,sendevent,%
-      sendnetmessage,sendsprite,serialnumber,setalpha,setaprop,setat,%
-      setcollisioncallback,setflashproperty,setnetbufferlimits,%
-      setnetmessagehandler,setpixel,setplaylist,setpref,setprop,setscriptlist,%
-      settrackenabled,setvariable,shader,shaderlist,shadowpercentage,%
-      shadowstrength,shapetype,shiftdown,shininess,shockwave3d,short,%
-      showglobals,showlocals,showprops,showresfile,showxlib,shutdown,%
-      silhouettes,sin,size,sizerange,skew,sleep,smoothness,sort,sound,%
-      soundbusy,soundchannel,sounddevice,sounddevicelist,soundenabled,%
-      soundkeepdevice,soundlevel,soundmixmedia,source,sourcerect,space,%
-      specular,specularcolor,specularlightmap,sphere,spotangle,spotdecay,%
-      sprite,spritenum,spritespacetoworldspace,sqrt,stage,stagebottom,%
-      stagecolor,stageleft,stageright,stagetoflash,stagetop,standard,%
-      startangle,startframe,startmovie,starttime,starttimer,state,static,%
-      status,stepframe,stilldown,stop,stopevent,stopmovie,stoptime,stream,%
-      streammode,streamname,streamsize,streamstatus,string,stringp,%
-      strokecolor,strokewidth,style,subdivision,sweep,swing,switchcolordepth,%
-      symbol,symbolp,systemdate,tab,tabcount,tabs,tan,target,%
-      tellstreamstatus,tension,text,texture,texturecoordinatelist,%
-      texturecoordinates,texturelayer,texturelist,texturemember,texturemode,%
-      texturemodelist,texturerenderformat,texturerepeat,texturerepeatlist,%
-      texturetransform,texturetransformlist,texturetype,thumbnail,ticks,tilt,%
-      time,timeout,timeouthandler,timeoutkeydown,timeoutlapsed,timeoutlength,%
-      timeoutlist,timeoutmouse,timeoutplay,timeoutscript,timer,timescale,%
-      title,titlevisible,toon,top,topcap,topradius,topspacing,trace,%
-      traceload,tracelogfile,trackcount,trackenabled,tracknextkeytime,%
-      tracknextsampletime,trackpreviouskeytime,trackprevioussampletime,%
-      trackstarttime,trackstoptime,tracktext,tracktype,trails,transform,%
-      transitiontype,translate,triggercallback,trimwhitespace,tunneldepth,%
-      tweened,tweenmode,type,[transparent],union,unload,unloadmember,%
-      unloadmovie,unregisterallevents,update,updateframe,updatelock,%
-      updatemovieenabled,updatestage,url,usealpha,usediffusewithtexture,%
-      usefastquads,usehypertextstyles,uselineoffset,userdata,username,value,%
-      vector,version,vertex,vertexlist,vertices,video,videoforwindowspresent,%
-      viewh,viewpoint,viewscale,viewv,visibility,visible,void,voidp,volume,%
-      volumeinfo,wait,waitfornetconnection,warpmode,width,widthvertices,wind,%
-      window,windowlist,windowpresent,windowtype,word,wordwrap,world,%
-      worldposition,worldspacetospritespace,worldtransform,wraptransform,%
-      wraptransformlist,write,writevalue,,xaxis,xtra,xtralist,xtras,,yaxis,%
-      year,yon,zaxis,zoombox,zoomwindow,repeat,Conditional,Boolean,TypeDef,%
-      Statement,Operator,String,Comment,Identifier,Special,x,y,z}
-   sensitive=false,
-   morecomment=[l]{--},
-   morestring=[b]",
-  }[keywords,comments,strings]%
-\lst@definelanguage{LLVM}{%
-  morekeywords={%
-    ret,br,switch,indirectbr,invoke,resume,unreachable,%
-    add,fadd,sub,fsub,mul,fmul,udiv,sdiv,fdiv,urem,srem,frem,%
-    shl,lshr,ashr,and,or,xor,%
-    extractelement,insertelement,shufflevector,%
-    extractvalue,insertvalue,%
-    alloca,load,store,fence,cmpxchg,atomicrmw,getelementptr,%
-    trunc,zext,sext,fptrunc,fpext,fptoui,fptosi,uitofp,sitofp,ptrtoint,%
-    inttoptr,bitcast,to,%
-    icmp,fcmp,phi,select,call,va_arg,landingpad,%
-    xchg,add,sub,and,nand,or,xor,max,min,umax,umin,%
-    eq,ne,ugt,uge,ult,ule,sgt,sge,slt,sle,%
-    false,oeq,ogt,oge,olt,ole,one,ord,ueq,ugt,uge,ult,ule,une,uno,true,%
-    private,linker_private,linker_private_weak,linker_private_weak_def_auto,%
-    internal,available_externally,linkonce,common,weak,appending,extern_weak,%
-    linkonce_odr,weak_odr,external,dllimport,dllexport,%
-    define,declare,%
-    zeroext,signext,inreg,byval,sret,noalias,nocapture,next,%
-    gc,%
-    address_safety,alignstack,alwaysinline,nonlazybind,inlinehint,naked,%
-    noimplicitfloat,noinline,noredzone,noreturn,nounwind,optsize,readnone,%
-    readonly,returns_twice,ssp,sspreq,uwtable,%
-    module,asm,%
-    target,datalayout,%
-    sideeffect,alignstack,%
-    nuw,nsw,exact,inbounds,unnamed_addr},%
-  morekeywords=[2]{%
-    i1,i2,i4,i8,i16,i32,i64,i128,i256,i512,i1024,% <-- Most common integers
-    half,float,double,x86_fp80,fp128,ppc_fp128,x86mmx,%
-    void,label,metadata},%
-  alsoletter=.,%
-  sensitive=false,%
-  morecomment=[l];,%
-  morestring=[b]"%
-}
-\lst@definelanguage{Logo}%
-  {morekeywords={and,atan,arctan,both,break,bf,bl,butfirst,butlast,%
-      cbreak, close,co,continue,cos,count,clearscreen,cs,debquit,%
-      describe,diff,difference,ed,edit,either,emptyp,equalp,er,erase,%
-      errpause,errquit,fifp,filefprint,fifty,fileftype,fip,fileprint,%
-      fird,fileread,fity,filetype,fiwd,fileword,f,first,or,fp,fprint,%
-      fput,fty,ftype,full,fullscreen,go,bye,goodbye,gprop,greaterp,%
-      help,if,iff,iffalse,ift,iftrue,nth,item,keyp,llast,lessp,list,%
-      local,lput,make,max,maximum,memberp,memtrace,min,minimum,namep,%
-      not,numberp,oflush,openr,openread,openw,openwrite,op,output,%
-      pause,plist,pots,pow,pprop,pps,pr,print,product,quotient,random,%
-      rc,readchar,rl,readlist,remprop,repcount,repeat,request,rnd,run,%
-      se,sentence,sentencep,setc,setcolor,setipause,setqpause,po,show,%
-      sin,split,splitscreen,sqrt,stop,sum,test,text,textscreen,thing,%
-      to,tone,top,toplevel,type,untrace,wait,word,wordp,yaccdebug,is,%
-      mod,remainder,trace,zerop,back,bk,bto,btouch,fd,forward,fto,%
-      ftouch,getpen,heading,hit,hitoot,ht,hideturtle,loff,lampoff,lon,%
-      lampon,lt,left,lot,lotoot,lto,ltouch,penc,pencolor,pd,pendown,pe,%
-      penerase,penmode,pu,penup,px,penreverse,rt,right,rto,rtouch,%
-      scrunch,seth,setheading,setscrun,setscrunch,setxy,shownp,st,%
-      showturtle,towardsxy,clean,wipeclean,xcor,ycor,tur,turtle,%
-      display,dpy},%
-   sensitive=f% ???
-  }[keywords]%
-%%
-%% MetaPost definition (c) 2004 Brooks Moses
-%%   This definition is based on the language specifications
-%%   contained in the _User's Manual for Metapost_, with the core
-%%   language enhancements that are described in the _Drawing
-%%   Graphs with MetaPost_ documentation.
-%%
-\lst@definelanguage{MetaPost}%
-  {% keywords[1] = MetaPost primitives (not found in following tables)
-   morekeywords={end,begingroup,endgroup,beginfig,endfig,def,vardef,%
-      primary,secondary,tertiary,primarydef,secondarydef,tertiarydef,%
-      expr,suffix,text,enddef,if,fi,else,elseif,for,forsuffixes,%
-      forever,endfor,upto,downto,stop,until,tension,controls,on,off,%
-      btex,etex,within,input},
-   % keywords[2] = Operators (Tables 6-9 in MetaPost User's manual)
-   morekeywords=[2]{abs,and,angle,arclength,arctime,ASCII,bbox,bluepart,%
-      boolean,bot,ceiling,center,char,color,cosd,cutafter,cutbefore,%
-      cycle,decimal,dir,direction,directionpoint,directiontime,div,%
-      dotprod,floor,fontsize,greenpart,hex,infont,intersectionpoint,%
-      intersectiontimes,inverse,known,length,lft,llcorner,lrcorner,%
-      makepath,makepen,mexp,mlog,mod,normaldeviate,not,numeric,oct,%
-      odd,or,pair,path,pen,penoffset,picture,point,postcontrol,%
-      precontrol,redpart,reverse,rotated,round,rt,scaled,shifted,%
-      sind,slanted,sqrt,str,string,subpath,substring,top,transform,%
-      transformed,ulcorner,uniformdeviate,unitvector,unknown,%
-      urcorner,whatever,xpart,xscaled,xxpart,xypart,ypart,yscaled,%
-      yxpart,yypart,zscaled,of,reflectedabout,rotatedaround,ulft,urt,%
-      llft,lrt,readfrom,write,stroked,filled,textual,clipped,bounded,%
-      pathpart,penpart,dashpart,textpart,fontpart},%
-   % keywords[3] = Commands (Table 10)
-   morekeywords=[3]{addto,clip,cutdraw,draw,drawarrow,drawdblarrow,%
-      fill,filldraw,interim,let,loggingall,newinternal,pickup,%
-      save,setbounds,shipout,show,showdependencies,showtoken,%
-      showvariable,special,tracingall,tracingnone,undraw,unfill,%
-      unfilldraw,to,also,contour,doublepath,withcolor,withpen,%
-      dashed,randomseed},%
-   % keywords[4] = Function-Like Macros (Table 11)
-   morekeywords=[4]{boxit,boxjoin,bpath,buildcycle,circleit,dashpattern,%
-      decr,dotlabel,dotlabels,drawboxed,drawboxes,drawoptions,%
-      drawunboxed,fixpos,fixsize,incr,interpath,label,labels,max,min,pic,%
-      thelabel,z,image},%
-   % keywords[5] = Internal and Predefined Variables (Tables 3, 4)
-   morekeywords=[5]{ahangle,ahlength,bboxmargin,charcode,circmargin,%
-      day,defaultdx,defaultdy,defaultpen,defaultscale,labeloffset,%
-      linecap,linejoin,miterlimit,month,pausing,prologues,showstopping,%
-      time,tracingcapsules,tracingchoices,tracingcommands,%
-      tracingequations,tracinglostchars,tracingmacros,tracingonline,%
-      tracingoutput,tracingrestores,tracingspecs,tracingstats,%
-      tracingtitles,truecorners,warningcheck,year},
-   morekeywords=[5]{background,currentpen,currentpicture,cuttings,%
-      defaultfont},%
-   % keywords[6] = Predefined Constants (Table 5)
-   morekeywords=[6]{beveled,black,blue,bp,butt,cc,cm,dd,ditto,down,%
-      epsilon,evenly,false,fullcircle,green,halfcircle,identity,%
-      in,infinity,left,mitered,mm,nullpicture,origin,pc,pencircle,%
-      pt,quartercircle,red,right,rounded,squared,true,unitsquare,%
-      up,white,withdots},
-   sensitive=false,%
-   alsoother={0123456789$},%
-   morecomment=[l]\%,%
-   morestring=[mf]{input\ },%
-   morestring=[b]"%
-  }[keywords,comments,strings,mf]%
-%%
-%% Mizar definition (c) 2003 Adam Grabowski
-%%
-%% Mizar is freely available at URL www.mizar.org for the Linux x86,
-%% Solaris x86, and Windows operating systems.
-%%
-\lst@definelanguage{Mizar}%
-  {otherkeywords={->,(\#,\#),.=),\&},%
-   morekeywords={vocabulary,constructors,$1,$1,$2,$3,$4,$5,$6,$7,$8,%
-      @proof,according,aggregate,and,antonym,as,associativity,assume,%
-      asymmetry,attr,be,begin,being,by,canceled,case,cases,cluster,%
-      clusters,coherence,commutativity,compatibility,connectedness,%
-      consider,consistency,constructors,contradiction,correctness,def,%
-      deffunc,define,definition,definitions,defpred,end,environ,equals,%
-      ex,exactly,existence,for,from,func,given,hence,hereby,holds,%
-      idempotence,if,iff,implies,involutiveness,irreflexivity,is,it,%
-      let,means,mode,non,not,notation,now,of,or,otherwise,over,per,%
-      pred,prefix,projectivity,proof,provided,qua,reconsider,redefine,%
-      reflexivity,requirements,reserve,scheme,schemes,section,selector,%
-      set,st,struct,such,suppose,symmetry,synonym,take,that,the,then,%
-      theorem,theorems,thesis,thus,to,transitivity,uniqueness,%
-      vocabulary,where},%
-   sensitive=t,%
-   morecomment=[l]::%
-  }[keywords,comments]%
-\lst@definelanguage{Modula-2}%
-  {morekeywords={AND,ARRAY,BEGIN,BY,CASE,CONST,DIV,DO,ELSE,ELSIF,END,%
-      EXIT,EXPORT,FOR,FROM,IF,IMPLEMENTATION,IMPORT,IN,MOD,MODULE,NOT,%
-      OF,OR,POINTER,PROCEDURE,QUALIFIED,RECORD,REPEAT,RETURN,SET,THEN,%
-      TYPE,UNTIL,VAR,WHILE,WITH,ABS,BITSET,BOOLEAN,CAP,CARDINAL,CHAR,%
-      CHR,DEC,EXCL,FALSE,FLOAT,HALT,HIGH,INC,INCL,INTEGER,LONGCARD,%
-      LONGINT,LONGREAL,MAX,MIN,NIL,ODD,ORD,PROC,REAL,SIZE,TRUE,TRUNC,%
-      VAL,DEFINITION,LOOP},% added keywords due to Peter Bartke 99/07/22
-   sensitive,%
-   morecomment=[n]{(*}{*)},%
-   morestring=[d]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-\lst@definelanguage{MuPAD}{%
-   morekeywords={end,next,break,if,then,elif,else,end_if,case,end_case,%
-      otherwise,for,from,to,step,downto,in,end_for,while,end_while,%
-      repeat,until,end_repeat,or,and,not,xor,div,mod,union,minus,%
-      intersect,subset,proc,begin,end_proc,domain,end_domain,category,%
-      end_category,axiom,end_axiom,quit,delete,frame},%
-   morekeywords=[2]{NIL,FAIL,TRUE,FALSE,UNKNOWN,I,RD_INF,RD_NINF,%
-      RD_NAN,name,local,option,save,inherits,of,do},%
-   otherkeywords={\%if,?,!,:=,<,>,=,<=,<>,>=,==>,<=>,::,..,...,->,%
-      @,@@,\$},%
-   sensitive=true,%
-   morecomment=[l]{//},%
-   morecomment=[n]{/*}{*/},%
-   morestring=[b]",%
-   morestring=[d]{`}%
-  }[keywords,comments,strings]
-\lst@definelanguage{NASTRAN}
-  {morekeywords={ENDDATA},%
-   morecomment=[l]$,%
-   MoreSelectCharTable=%
-        \lst@CArgX BEGIN\ BULK\relax\lst@CDef{}%
-        {\lst@ifmode\else \ifnum\lst@length=\z@
-             \lst@EnterMode{\lst@GPmode}{\lst@modetrue
-                  \let\lst@currstyle\lst@gkeywords@sty}%
-         \fi \fi}%
-        {\ifnum\lst@mode=\lst@GPmode
-             \lst@XPrintToken \lst@LeaveMode
-         \fi}%
-  }[keywords,comments]%
-\lst@definelanguage{Oberon-2}%
-  {morekeywords={ARRAY,BEGIN,BOOLEAN,BY,CASE,CHAR,CONST,DIV,DO,ELSE,%
-      ELSIF,END,EXIT,FALSE,FOR,IF,IMPORT,IN,INTEGER,IS,LONGINT,%
-      LONGREAL,LOOP,MOD,MODULE,NIL,OF,OR,POINTER,PROCEDURE,REAL,RECORD,%
-      REPEAT,RETURN,SET,SHORTINT,THEN,TO,TRUE,TYPE,UNTIL,VAR,WHILE,%
-      WITH,ABS,ASH,CAP,CHR,COPY,DEC,ENTIER,EXCL,HALT,INC,INCL,LEN,LONG,%
-      MAX,MIN,NEW,ODD,ORD,SHORT,SIZE},%
-   sensitive,%
-   morecomment=[n]{(*}{*)},%
-   morestring=[d]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-%%
-%% OCL definition (c) 2000 Achim D. Brucker
-%%
-%% You are allowed to use, modify and distribute this code either under
-%% the terms of the LPPL (version 1.0 or later) or the GPL (version 2.0
-%% or later).
-%%
-\lst@definelanguage[decorative]{OCL}[OMG]{OCL}
-  {otherkeywords={@pre},%
-   morendkeywords={name,attributes,associatoinEnds,operations,%
-      supertypes,allSupertypes,allInstances,oclIsKindOf,oclIsTypeOf,%
-      oclAsType,oclInState,oclIsNew,evaluationType,abs,floor,round,max,%
-      min,div,mod,size,concat,toUpper,toLower,substring,includes,%
-      excludes,count,includesAll,exludesAll,isEmpty,notEmpty,sum,%
-      exists,forAll,isUnique,sortedBy,iterate,union,intersection,%
-      including,excluding,symmetricDifference,select,reject,collect,%
-      asSequence,asBag,asSequence,asSet,append,prepend,subSequence,at,%
-      first,last,true,false,isQuery}%
-  }%
-\lst@definelanguage[OMG]{OCL}%
-    {morekeywords={context,pre,inv,post},%
-    ndkeywords={or,xor,and,not,implies,if,then,else,endif},%
-    morekeywords=[3]{Boolean,Integer,Real,String,Set,Sequence,Bag,%
-       OclType,OclAny,OclExpression,Enumeration,Collection,},%
-    sensitive=t,%
-    morecomment=[l]--,%
-    morestring=[d]'%
-   }[keywords,comments,strings]%
-\lst@definelanguage{Plasm}%
-  {sensitive=false,%
-   morekeywords={aa,abs,ac,acolor,acos,actor,al,alias,align,and,%
-      animation,animation,appearance,apply,ar,arc,as,asin,assoc,atan,%
-      axialcamera,axialcameras,basehermite,bbox,bbox,bernstein,%
-      bernsteinbasis,bezier,beziercurve,beziermanifold,bezierstripe,%
-      beziersurface,bigger,biggest,bilinearsurface,binormal,%
-      biquadraticsurface,black,blend,blue,bottom,box,brown,bspize,%
-      bspline,bsplinebasis,c,cabinet,camera,cart,case,cat,catch,ceil,%
-      centeredcameras,centralcavalier,char,charseq,choose,circle,%
-      circumference,class,cmap,color,comp,computecoords,cone,%
-      conicalsurface,cons,control,convexcoords,convexhull,coonspatch,%
-      copy,cos,cosh,crease,crosspolytope,cube,cubiccardinal,%
-      cubiccardinalbasis,cubichermite,cubicubspline,cubicubsplinebasis,%
-      cuboid,curl,curvature,curve2cspath,curve2mapvect,cyan,cylinder,%
-      cylindricalsurface,d,deboor,def,depol,depth_sort,depth_test,%
-      derbernstein,derbernsteinbase,derbezier,determinant,difference,%
-      differencepr,dim,dimetric,dirproject,displaygraph,displaynubspline,%
-      displaynurbspline,distl,distr,div,divergence,dodecahedron,dot,down,%
-      dp,drawedges,drawforks,drawtree,ds,dsphere,dump,dumprep,ellipse,%
-      embed,end,eq,ex,exp,explode,export,extract_bodies,extract_polygons,%
-      extract_wires,extrude,extrusion,fact,false,feature,ff,fillcolor,%
-      filter,finitecone,first,flash,flashani,floor,fontcolor,fontheight,%
-      fontspacing,fontwidth,fractalsimplex,frame,frame,frameflash,fromto,%
-      gausscurvature,ge,grad,gradient,gradmap,gray,green,gt,help,hermite,%
-      hermitebasis,hermitesurface,hexahedron,icosahedron,id,idnt,if,in,%
-      inarcs,innerprod,inset,insl,insr,intersection,intersectionpr,%
-      intervals,intmax,intmin,intsto,inv,isa,isanimpol,isbool,ischar,%
-      isclosedshape,iscloseto,isempty,iseven,isfun,isfunvect,isge,isgt,%
-      isint,isintneg,isinto,isintpos,isle,islt,ismat,ismatof,isnat,%
-      isnull,isnum,isnumneg,isnumpos,isodd,isometric,isorthoshape,ispair,%
-      ispoint,ispointseq,ispol,ispoldim,ispolytope,ispurepol,isreal,%
-      isrealneg,isrealpos,isrealvect,isseq,isseqof,isshape,issimplex,%
-      issqrmat,isstring,isvect,iszero,jacobian,join,joints,k,last,le,%
-      left,leftcavalier,len,less,lesseq,lex,lift,light,linecolor,%
-      linesize,list,ln,load,loadlib,loop,lt,lxmy,magenta,map,mapshapes,%
-      markersize,mat,matdotprod,material,mathom,max,mean,meanpoint,med,%
-      merge,mesh,min,minkowski,mirror,mixedprod,mk,mkframe,mkpol,%
-      mkvector,mkversork,mod,model,move,mul,multextrude,mxby,mxmy,mxty,%
-      myfont,n,nat2string,neq,ngon,norm2,normalmap,not,nu_grid,nubspline,%
-      nubsplineknots,nurbspline,nurbsplineknots,octahedron,offset,%
-      onepoint,open,optimize,or,orange,ord,ortho,orthoproject,orthox,%
-      orthoy,orthoz,outarcs,outerloop,outerwarp,pairdiff,parallel,%
-      pascaltriangle,pdiff,pdifference,permutahedron,permutations,%
-      perspective,perspective,pi,pivotop,plane,planemapping,pmap,%
-      points2shape,polar,polyline,polymarker,polypoint,power,powerset,%
-      presort,principalnormal,print,prism,profileprodsurface,%
-      progressivesum,project,projection,purple,pyramid,q,quadarray,%
-      quadmesh,quote,r,raise,range,rationalbezier,rationalblend,%
-      rationalbspline,rationalize,red,rev,reverse,rgbacolor,right,%
-      rightcavalier,ring,rn,rotatedtext,rotationalsurface,rotn,rtail,%
-      ruledsurface,rxmy,s,save,scalarmatprod,scalarvectprod,schlegel2d,%
-      schlegel3d,sdifference,sdifferencepr,segment,sel,setand,setdiff,%
-      setfontcolor,setor,setxor,sex,shape_0,shape_1,shape2points,%
-      shape2pol,shapeclosed,shapecomb,shapediff,shapedist,%
-      shapeinbetweening,shapeinf,shapejoin,shapelen,shapenorm,%
-      shapenormal,shapeprod,shaperot,shapesum,shapesup,shapezero,shift,%
-      showprop,sign,signal,simplex,simplexpile,sin,sinh,size,skeleton,%
-      skew,smaller,smallest,solidifier,solidify,sort,sphere,spline,%
-      splinesampling,splitcells,splitpols,sqr,sqrt,star,string,%
-      stringtokens,struct,sub,svg,sweep,t,tail,tan,tangent,tanh,%
-      tensorprodsurface,tetrahedron,text,texture,textwithattributes,%
-      thinsolid,threepoints,time,tmax,tmin,top,torus,torusmap,trace,%
-      trans,tree,trianglefan,trianglestripe,trimetric,true,truncone,tt,%
-      tube,twopoints,uk,ukpol,ukpolf,union,unionpr,unitvect,unprune,up,%
-      vect2dtoangle,vect2mat,vectdiff,vectnorm,vectprod,vectsum,view,%
-      viewmodel,viewmodel,vrml,warp,warp,where,white,with,xcavalier,xor,%
-      xquadarray,xx,ycavalier,yellow},%
-   moredirectives={loadlib},%
-   otherkeywords={-,+,*,**,/,~,|,..,^,\&,\&\&,\#,\#\#},%
-   morecomment=[s]{\%}{\%},%
-   morestring=[b]',%
-   literate={~}{{$\sim$}}{1} {^}{$\wedge$}{1},%
-  }[keywords,directives,comments,strings]%
-\lst@definelanguage{PL/I}%
-  {morekeywords={ABS,ATAN,AUTOMATIC,AUTO,ATAND,BEGIN,BINARY,BIN,BIT,%
-      BUILTIN,BY,CALL,CHARACTER,CHAR,CHECK,COLUMN,COL,COMPLEX,CPLX,%
-      COPY,COS,COSD,COSH,DATA,DATE,DECIMAL,DEC,DECLARE,DCL,DO,EDIT,%
-      ELSE,END,ENDFILE,ENDPAGE,ENTRY,EXP,EXTERNAL,EXT,FINISH,FIXED,%
-      FIXEDOVERFLOW,FOFL,FLOAT,FORMAT,GET,GO,GOTO,IF,IMAG,INDEX,%
-      INITIAL,INIT,INTERNAL,INT,LABEL,LENGTH,LIKE,LINE,LIST,LOG,LOG2,%
-      LOG10,MAIN,MAX,MIN,MOD,NOCHECK,NOFIXEDOVERFLOW,NOFOFL,NOOVERFLOW,%
-      NOOFL,NOSIZE,NOUNDERFLOW,NOUFL,NOZERODIVIDE,NOZDIV,ON,OPTIONS,%
-      OVERFLOW,OFL,PAGE,PICTURE,PROCEDURE,PROC,PUT,READ,REPEAT,RETURN,%
-      RETURNS,ROUND,SIN,SIND,SINH,SIZE,SKIP,SQRT,STATIC,STOP,STRING,%
-      SUBSTR,SUM,SYSIN,SYSPRINT,TAN,TAND,TANH,THEN,TO,UNDERFLOW,UFL,%
-      VARYING,WHILE,WRITE,ZERODIVIDE,ZDIV},%
-   sensitive=f,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[d]'%
-  }[keywords,comments,strings]%
-%%
-%% PostScript language definition (c) 2005 Christophe Jorssen.
-%%
-\lst@definelanguage{PostScript}{%
-  morekeywords={abs,add,aload,anchorsearch,and,arc,arcn,arct,arcto,array,ashow,
-    astore,atan,awidthshow,begin,bind,bitshift,bytesavailable,cachestatus,
-    ceiling,charpath,clear,cleartomark,cleardictstack,clip,clippath,closefile,
-    closepath,colorimage,concat,concatmatrix,condition,copy,copypage,cos,count,
-    countdictstack,countexecstack,counttomark,cshow,currentblackgeneration,
-    currentcacheparams,currentcmykcolor,currentcolor,currentcolorrendering,
-    currentcolorscreen,currentcolorspace,currentcolortransfer,currentcontext,
-    currentdash,currentdevparams,currentdict,currentfile,currentflat,currentfont,
-    currentglobal,currentgray,currentgstate,currenthalftone,currenthalftonephase,
-    currenthsbcolor,currentlinecap,currentlinejoin,currentlinewidth,currentmatrix,
-    currentmiterlimit,currentobjectformat,currentpacking,currentpagedevice,
-    currentpoint,currentrgbcolor,currentscreen,currentshared,currentstrokeadjust,
-    currentsystemparams,currenttransfer,currentundercolorremoval,currentuserparams,
-    curveto,cvi,cvlit,cvn,cvr,cvrs,cvs,cvx,def,defaultmatrix,definefont,
-    defineresource,defineusername,defineuserobject,deletefile,detach,deviceinfo,
-    dict,dictstack,div,dtransform,dup,
-    echo,eexec,end,eoclip,eofill,eoviewclip,eq,erasepage,errordict,exch,exec,
-    execform,execstack,execuserobject,executeonly,executive,exit,
-    exp,false,file,filenameforall,fileposition,fill,filter,findencoding,findfont,
-    findresource,flattenpath,floor,flush,flushfile,FontDirectory,for,forall,fork,ge,
-    get,getinterval,globaldict,GlobalFontDirectory,glyphshow,grestore,grestoreall,
-    gsave,gstate,gt,identmatrix,idiv,idtransform,if,ifelse,image,
-    imagemask,index,ineofill,infill,initclip,initgraphics,initmatrix,initviewclip,
-    instroke,internaldict,inueofill,inufill,inustroke,
-    invertmatrix,ISOLatin1Encoding,itransform,join,kshow,
-    known,languagelevel,le,length,lineto,ln,load,lock,log,loop,lt,
-    makefont,makepattern,mark,matrix,maxlength,mod,monitor,moveto,mul,ne,neg,
-    newpath,noaccess,not,notify,null,nulldevice,or,packedarray,
-    pathbbox,pathforall,pop,print,printobject,product,prompt,pstack,put,putinterval,
-    quit,rand,rcurveto,read,readhexstring,readline,readonly,readstring,
-    realtime,rectclip,rectfill,rectstroke,rectviewclip,renamefile,repeat,resetfile,
-    resourceforall,resourcestatus,restore,reversepath,revision,rlineto,rmoveto,roll,
-    rootfont,rotate,round,rrand,run,save,scale,scalefont,scheck,search,selectfont,
-    serialnumber,setbbox,setblackgeneration,setcachedevice,setcachedevice2,
-    setcachelimit,setcacheparams,setcharwidth,setcmykcolor,setcolor,
-    setcolorrendering,setcolorscreen,setcolorspace,setcolortransfer,setdash,
-    setdevparams,setfileposition,setflat,setfont,setglobal,setgray,setgstate,
-    sethalftone,sethalftonephase,sethsbcolor,setlinecap,setlinejoin,setlinewidth,
-    setmatrix,setmiterlimit,setobjectformat,setoverprint,setpacking,setpagedevice,
-    setpattern,setrgbcolor,setscreen,setshared,setstrokeadjust,setsystemparams,
-    settransfer,setucacheparams,setundercolorremoval,setuserparams,setvmthreshold,
-    shareddict,show,showpage,sin,sqrt,srand,stack,
-    StandardEncoding,start,startjob,status,statusdict,stop,stopped,store,string,
-    stringwidth,stroke,strokepath,sub,systemdict,transform,
-    translate,true,truncate,type,token,uappend,ucache,ucachestatus,
-    ueofill,ufill,undef,
-    upath,userdict,UserObjects,
-    usertime,ustroke,ustrokepath,version,viewclip,viewclippath,vmreclaim,
-    vmstatus,wait,wcheck,where,widthshow,write,writehexstring,writeobject,
-    writestring,wtranslation,xcheck,xor,xshow,xyshow,yield,yshow},
-  sensitive,
-  morecomment=[l]\%}[keywords,comments]
-%%
-%% Promela definition (c) 2004 William Thimbleby
-%%
-\lst@definelanguage{Promela}
-  {morekeywords={active,assert,atomic,bit,bool,break,byte,chan,d_step,%
-      Dproctype,do,else,empty,enabled,fi,full,goto,hidden,if,init,int,%
-      len,mtype,nempty,never,nfull,od,of,pcvalue,printf,priority,%
-      proctype,provided,run,short,skip,timeout,typedef,unless,unsigned,%
-      xr,xs,true,false,inline,eval},%
-   moredirectives={define,ifdef,ifndef,if,if,else,endif,undef,include},%
-   moredelim=*[directive]\#,%
-   morecomment=[s]{/*}{*/},%
-   morestring=[b]"%
-  }[keywords,comments,strings,directives]%
-%%
-%% PSTricks definition (c) 2006 Herbert Voss
-%%
-\lst@definelanguage{PSTricks}%
-  {morekeywords={%
-    begin,end,definecolor,multido,%
-    KillGlue,DontKillGlue,pslbrace,bsrbrace,psscalebox,psset,pstVerb,pstverb,%
-    pst@def,,psframebox,psclip,endclip,endpspicture,psframe,
-%%    pspicture,%
-    multirput,multips,Rput,rput,uput,cput,lput,%
-    newrgbcolor,newgray,newcmykcolor,
-%%
-%% pstricks-add
-    psStep,psgraph,psbrace,psPrintValue,
-%%
-%% pst-plot
-    psvlabel,pshlabel,psplot,psline,pscustom,pscurve,psccurve,%
-    readdata,savedata,fileplot,dataplot,listplot,%
-    psecurce,psgraph,parametricplot,%
-    psellipse,psaxes,ncline,nccurve,psbezier,parabola,%
-    qdisk,qline,clipbox,endpsclip,%
-    psgrid,pscircle,pscirclebox,psdiabox,pstribox,%
-    newpsfontdot,psdot,psdots,%
-    pspolygon,psdiamond,psoval,pstriangle,%
-    psarc,psarcn,psellipticarc,psellipticarcn,pswedge,psellipticwedge,
-    pcline,pcdiag,pcdiagg,pccurve,pccurve,pcecurve,%
-    scalebox,scaleboxto,psmathboxtrue,everypsbox,psverbboxtrue,overlaybox,%
-    psoverlay,putoverlaybox,%
-    newpsstyle,newpsobject,%
-    moveto,newpath,closepath,stroke,fill,gsave,grestore,msave,mrestore,translate,scale,%
-    swapaxes,rotate,openshadow,closedshadow,movepath,lineto,rlineto,curveto,rcurveto,%
-    code,dim,coor,rcoor,file,arrows,setcolor,%
-    rotateleft,rotateright,rotatedown,%
-%%
-%% pst-node
-    nput,naput,nbput,ncput,%
-    ncarc,ncbox,ncangle,ncangles,ncloop,ncdiag,ncdiagg,ncarcbox,ncbar,%
-    cnodeput,nccircle,%
-    pnode,rnode,Rnode,Cnode,cnode,fnode,%
-    circlenode,ovalnode,trinode,dianode,%
-    psmatrix,endpsmatrix,psspan,%
-%%
-%% pst-tree
-    pstree,Tcircle,TCircle,Ttri,Tn,TC,Tc,Tfan,TR,Tr,Tdia,Toval,Tdot,Tp,Tf,%
-    skiplevel,skiplevels,endskiplevels,tspace,tlput,%
-%%
-%% pst-text
-    pscharpath,pstextpath,
-%%
-%% pst-barcode
-    psbarcode,
-%%
-%% pst-coil
-    psboxfill,pscoil,psCoil,pszigzag,nccoil,
-    psshadow,pstilt,psTilt,ThreeDput,
-%%
-%% pst-gr3d
-    PstGridThreeDNodeProcessor,%
-%%
-%% pst-vue3d
-    PstGridThreeD,
-    AxesThreeD,LineThreeD,DieThreeD,FrameThreeD,SphereCircleThreeD,SphereMeridienThreeD,
-    QuadrillageThreeD,TetraedreThreeD,PyramideThreeD,ConeThreeD,CylindreThreeD,
-    DodecahedronThreeD,ConeThreeD,SphereThreeD,SphereInverseThreeD,DemiSphereThreeD,
-    SphereCreuseThreeD,SphereCircledThreeD,PortionSphereThreeD,pNodeThreeD,CubeThreeD,%
-%%
-%% pst-3dplot
-    pstThreeDCoor,pstThreeDDot,pstThreeDTriangle,pstThreeDCircle,pstPlanePut,%
-    pstThreeDBox,pstThreeDEllipse,pstThreeDLine,pstThreeDPut,%
-    pstThreeDNode,pstThreeDSquare,psplotThreeD,parametricplotThreeD,fileplotThreeD,%
-    dataplotThreeD,pstScalePoints,%
-%%
-%% pst-circ
-    resistor,battery,Ucc,Icc,capacitor,coil,diode,Zener,LED,lamp,switch,wire,tension,
-    circledipole,multidipole,OA,transistor,Tswitch,potentiometer,transformer,
-    optoCoupler,logic,
-%%
-%% pst-eucl
-    pstTriangle,pstMediatorAB,pstInterLL,pstMiddleAB,pstProjection,pstCircleOA,pstLineAB,%
-%%
-%% pst-func
-    psBessel,psPolynomial,psFourier,psGaussI,psGauss,psSi,pssi,psCi,psci,%
-%%
-%% pst-infixplot
-    psPlot,
-%%
-%% pst-ob3d
-    PstDie,PstCube,
-%%
-%% pst-poly
-    PstPolygon,pspolygonbox,
-%%
-%% pst-bar
-    psbarchart,readpsbardata,psbarscale,newpsbarstyle,%
-%%
-%% pst-lens
-    PstLens,%
-%%
-%% pst-geo
-    WorldMap,WorldMapII,WorldMapThreeD,WorldMapThreeDII,pnodeMap,MapPut,%
-%%
-%% pst-autoseg
-    asr,firstnode,merge,massoc,labelmerge,%
-%%
-%% gastex
-    node,imark,fmark,rmark,drawqbpedge,drawedge,drawloop,%
-%%
-%% pst-labo
-    Distillation,Ballon,
-%%
-%% pst-optic
-    lens,Transform,%
-%%
-%% pst-light3d
-    PstLightThreeDText,%
-%%
-%% calendrier
-    Calendrier,%
-%%
-%% pst-osci
-    Oscillo%
-  },%
-   sensitive,%
-   alsoother={0123456789$_},%
-   morecomment=[l]\% %
-  }[keywords,comments]%
-%%
-%% Reduce definition (c) 2002 Geraint Paul Bevan
-%%
-\lst@definelanguage{Reduce}%
-  {morekeywords={%
-%% reserved identifiers
-abs,acos,acosh,acot,acoth,acsc,acsch,%
-adjprec,algebraic,algint,allbranch,allfac,and,%
-antisymmetric,append,arglength,array,asec,asech,%
-asin,asinh,atan,atan2,atanh,begin,bfspace,bye,%
-card_no,ceiling,clear,clearrules,coeff,coeffn,%
-cofactor,combineexpt,combinelogs,comment,comp,%
-complex,conj,cons,cont,cos,cosh,cot,coth,cramer,%
-cref,csc,csch,decompose,define,defn,deg,demo,den,%
-depend,det,df,difference,dilog,display,div,do,e,%
-echo,ed,editdef,ei,end,eps,eq,equal,erf,errcont,%
-evallhseqp,eval_mode,even,evenp,exp,expandlogs,%
-expr,expt,ezgcd,factor,factorial,factorize,fexpr,%
-first,fix,fixp,floor,for,forall,foreach,fort,%
-fort_width,freeof,fullroots,g,gcd,geq,go,goto,%
-greaterp,high_pow,hypot,i,if,ifactor,impart,in,%
-index,infinity,infix,input,int,integer,interpol,%
-intstr,k,korder,lambda,lcm,lcof,length,leq,lessp,%
-let,lhs,linear,linelength,lisp,list,listargp,%
-listargs,ln,load,load_package,log,log10,logb,%
-low_pow,lterm,macro,mainvar,mass,mat,match,%
-mateigen,matrix,max,mcd,member,memq,min,minus,mkid,%
-modular,msg,mshell,multiplicities,nat,neq,nero,%
-nextprime,nil,nodepend,noncom,nonzero,nosplit,%
-nospur,nullspace,num,numberp,odd,off,on,operator,%
-or,order,ordp,out,output,part,pause,period,pf,pi,%
-plus,precedence,precise,precision,pret,pri,primep,%
-print_precision,procedure,product,quit,quotient,%
-random,random_new_seed,rank,rat,ratarg,rational,%
-rationalize,ratpri,real,rederr,reduct,remainder,%
-remfac,remind,repart,repeat,rest,resultant,retry,%
-return,reverse,revpri,rhs,rlisp88,%
-root_multiplicity,round,roundall,roundbf,rounded,%
-saveas,savestructr,scalar,sec,sech,second,set,%
-setmod,setq,share,showrules,showtime,shut,sign,sin,%
-sinh,smacro,solve,solvesingular,spur,sqrt,structr,%
-sub,sum,symbolic,symmetric,t,tan,tanh,third,time,%
-times,tp,tra,trace,trfac,trigform,trint,until,%
-varname,vecdim,vector,weight,when,where,while,%
-write,ws,wtlevel,%
-%% identifiers with spaces
-%% for all,for each,go to,such that,%
-},%
-  sensitive=false,%
-  morecomment=[l]\%,%
-  morecomment=[s]{COMMENT}{;},%
-  morecomment=[s]{COMMENT}{$},%
-  morestring="%
- }[keywords,comments,strings]%
-%%
-%% RSL definition (c) 2004 Brian Christensen
-%%
-\lst@definelanguage{RSL}%
-  {morekeywords={Bool,Char,devt_relation,Int,Nat,Real,Text,Unit,abs,any,%
-      as,axiom,card,case,channel,chaos,class,do,dom,elems,else,elsif,end,%
-      extend,false,for,hd,hide,if,in,inds,initialise,int,len,let,local,%
-      object,of,out,post,pre,read,real,rng,scheme,skip,stop,swap,%
-      test_case,theory,then,tl,true,type,until,use,value,variable,while,%
-      with,write},%
-literate=%
-{<}{$<$}{1}%
-{>}{$>$}{1}%
-{[}{$[$}{1}%%
-{]}{$]$}{1}%%
-{^}{{\mbox{$\widehat{\;}$}}}{1}%%
-{'}{{\raisebox{1ex}[1ex][0ex]{\protect\scriptsize$\prime$}}}{1}%%
-{||}{{\mbox{$\parallel$}}}{2}%%
-{|-}{$\vdash$}{1}%%
-{|=|}{{\mbox{$\lceil\!\rceil\!\!\!\!\!\!\;\lfloor\!\rfloor$}}}{1}%%
-{**}{$\uparrow$}{1}%
-{/\\}{$\wedge$}{1}%%
-{inter}{$\cap$}{1}%%
-{-\\}{$\lambda$}{1}%%
-{->}{$\rightarrow$}{1}%%
-{-m->}{{\mbox{$\rightarrow \hspace{-2.5\lst@width} _{m}\;$}}}{1}%
-{-~m->}{{\mbox{$\stackrel{\sim}{\mbox{$\rightarrow\hspace{-2.5\lst@width} _{m}\;$}}$}}}{1}%
-{-~->}{{\mbox{$\stackrel{\sim}{\rightarrow}$}}}{1}%%
-{-set}{\bf{-set}}{4}%%
-{-list}{{$^{\ast}$}}{1}%%
-{-inflist}{$^\omega$}{1}%
-{-infset}{{\mbox{{\bf -infset}}}}{7}%
-{\#}{$\circ$}{1}%
-{:-}{{\raisebox{.4ex}{\tiny $\bullet$}}}{1}%%
-{=}{$=$}{1}%%
-{==}{$==$}{2}%%
-{=>}{$\Rightarrow$}{1}%%
-{\ is\protect\^^M}{{$\;\equiv$}}{2}%
-{\ is\ }{{$\equiv$}}{3}%%
-{\ isin\protect\^^M}{$\;\in$}{2}%%
-{~}{$\sim$}{1}%%
-{~=}{$\neq$}{1}%%
-{~isin}{$\notin$}{1}%%
-{+>}{$\mapsto$}{1}%%
-{++}{}{1}%
-{|^|}{{\mbox{$\lceil\!\rceil$}}}{1}%%
-{\\/}{$\vee$}{1}%%
-{exists}{$\exists$}{1}%%
-{union}{$\cup$}{1}%%
-{>=}{$\geq$}{1}%%
-{><}{$\times$}{1}%%
-{>>}{$\supset$}{1}%
-{>>=}{$\supseteq$}{1}%%
-{<=}{$\leq$}{1}%%
-{<<}{$\subset$}{1}%
-{<.}{$\langle$}{1}%%
-{<<=}{$\subseteq$}{1}%%
-{<->}{$\leftrightarrow$}{1}%%
-{[=}{$\sqsubseteq$}{1}%%
-{\{=}{$\preceq$}{1}%%
-{\ all\protect\^^M}{$\forall$}{2}%%
-{\ all\ }{$\forall$}{3}%%
-{!!}{$\dagger$}{1}%%
-{always}{$\Box$}{1}%%
-{.>}{$\rangle$}{1}%%
-{`alpha}{$\alpha$}{1}%
-{`beta}{$\beta$}{1}%
-{`gamma}{$\gamma$}{1}%
-{`delta}{$\delta$}{1}%
-{`epsilon}{$\epsilon$}{1}%
-{`zeta}{$\zeta$}{1}%
-{`eta}{$\eta$}{1}%
-{`theta}{$\theta$}{1}%
-{`iota}{$\iota$}{1}%
-{`kappa}{$\kappa$}{1}%
-{`mu}{$\mu$}{1}%
-{`nu}{$\nu$}{1}%
-{`xi}{$\xi$}{1}%
-{`pi}{$\pi$}{1}%
-{`rho}{$\rho$}{1}%
-{`sigma}{$\sigma$}{1}%
-{`tau}{$\tau$}{1}%
-{`upsilon}{$\upsilon$}{1}%
-{`phi}{$\phi$}{1}%
-{`chi}{$\chi$}{1}%
-{`psi}{$\psi$}{1}%
-{`omega}{$\omega$}{1}%
-{`Gamma}{$\Gamma$}{1}%
-{`Delta}{$\Delta$}{1}%
-{`Theta}{$\Theta$}{1}%
-{`Lambda}{$\Lambda$}{1}%
-{`Xi}{$\Xi$}{1}%
-{`Pi}{$\Pi$}{1}%
-{`Sigma}{$\Sigma$}{1}%
-{`Upsilon}{$\Upsilon$}{1}%
-{`Phi}{$\Phi$}{1}%
-{`Psi}{$\Psi$}{1}%
-{`Omega}{$\Omega$}{1},%
-   sensitive=true,%
-   morecomment=[l]{--},%
-   morecomment=[s]{/*}{*/}%
-  }[keywords,comments]%
-\lst@definelanguage[IBM]{Simula}[DEC]{Simula}{}%
-\lst@definelanguage[DEC]{Simula}[67]{Simula}%
-  {morekeywords={and,eq,eqv,ge,gt,hidden,imp,le,long,lt,ne,not,%
-      options,or,protected,short}%
-  }%
-\lst@definelanguage[CII]{Simula}[67]{Simula}%
-  {morekeywords={and,equiv,exit,impl,not,or,stop}}%
-\lst@definelanguage[67]{Simula}%
-  {morekeywords={activate,after,array,at,before,begin,boolean,%
-      character,class,comment,delay,detach,do,else,end,external,false,%
-      for,go,goto,if,in,inner,inspect,integer,is,label,name,new,none,%
-      notext,otherwise,prior,procedure,qua,reactivate,real,ref,resume,%
-      simset,simulation,step,switch,text,then,this,to,true,until,value,%
-      virtual,when,while},%
-   sensitive=f,%
-   keywordcommentsemicolon={end}{else,end,otherwise,when}{comment},%
-   morestring=[d]",%
-   morestring=[d]'%
-  }[keywords,keywordcomments,strings]%
-%%
-%% SPARQL definition (c) 2006 Christoph Kiefer
-%%
-\lst@definelanguage{SPARQL}%
-  {morekeywords={BASE,PREFIX,SELECT,DISTINCT,CONSTRUCT,DESCRIBE,ASK,%
-        FROM,NAMED,WHERE,ORDER,BY,ASC,DESC,LIMIT,OFFSET,OPTIONAL,%
-        GRAPH,UNION,FILTER,a,STR,LANG,LANGMATCHES,DATATYPE,BOUND,%
-        isIRI,isURI,isBLANK,isLITERAL,REGEX,true,false},%
-   sensitive=false,%
-   morecomment=[l]\#,%
-   morestring=[d]',%
-   morestring=[d]"%
-  }[keywords,comments,strings]%
-\lst@definelanguage{S}[]{R}{}
-\lst@definelanguage[PLUS]{S}[]{R}{}
-\lst@definelanguage{R}%
-  {keywords={abbreviate,abline,abs,acos,acosh,action,add1,add,%
-      aggregate,alias,Alias,alist,all,anova,any,aov,aperm,append,apply,%
-      approx,approxfun,apropos,Arg,args,array,arrows,as,asin,asinh,%
-      atan,atan2,atanh,attach,attr,attributes,autoload,autoloader,ave,%
-      axis,backsolve,barplot,basename,besselI,besselJ,besselK,besselY,%
-      beta,binomial,body,box,boxplot,break,browser,bug,builtins,bxp,by,%
-      c,C,call,Call,case,cat,category,cbind,ceiling,character,char,%
-      charmatch,check,chol,chol2inv,choose,chull,class,close,cm,codes,%
-      coef,coefficients,co,col,colnames,colors,colours,commandArgs,%
-      comment,complete,complex,conflicts,Conj,contents,contour,%
-      contrasts,contr,control,helmert,contrib,convolve,cooks,coords,%
-      distance,coplot,cor,cos,cosh,count,fields,cov,covratio,wt,CRAN,%
-      create,crossprod,cummax,cummin,cumprod,cumsum,curve,cut,cycle,D,%
-      data,dataentry,date,dbeta,dbinom,dcauchy,dchisq,de,debug,%
-      debugger,Defunct,default,delay,delete,deltat,demo,de,density,%
-      deparse,dependencies,Deprecated,deriv,description,detach,%
-      dev2bitmap,dev,cur,deviance,off,prev,,dexp,df,dfbetas,dffits,%
-      dgamma,dgeom,dget,dhyper,diag,diff,digamma,dim,dimnames,dir,%
-      dirname,dlnorm,dlogis,dnbinom,dnchisq,dnorm,do,dotplot,double,%
-      download,dpois,dput,drop,drop1,dsignrank,dt,dummy,dump,dunif,%
-      duplicated,dweibull,dwilcox,dyn,edit,eff,effects,eigen,else,%
-      emacs,end,environment,env,erase,eval,equal,evalq,example,exists,%
-      exit,exp,expand,expression,External,extract,extractAIC,factor,%
-      fail,family,fft,file,filled,find,fitted,fivenum,fix,floor,for,%
-      For,formals,format,formatC,formula,Fortran,forwardsolve,frame,%
-      frequency,ftable,ftable2table,function,gamma,Gamma,gammaCody,%
-      gaussian,gc,gcinfo,gctorture,get,getenv,geterrmessage,getOption,%
-      getwd,gl,glm,globalenv,gnome,GNOME,graphics,gray,grep,grey,grid,%
-      gsub,hasTsp,hat,heat,help,hist,home,hsv,httpclient,I,identify,if,%
-      ifelse,Im,image,\%in\%,index,influence,measures,inherits,install,%
-      installed,integer,interaction,interactive,Internal,intersect,%
-      inverse,invisible,IQR,is,jitter,kappa,kronecker,labels,lapply,%
-      layout,lbeta,lchoose,lcm,legend,length,levels,lgamma,library,%
-      licence,license,lines,list,lm,load,local,locator,log,log10,log1p,%
-      log2,logical,loglin,lower,lowess,ls,lsfit,lsf,ls,machine,Machine,%
-      mad,mahalanobis,make,link,margin,match,Math,matlines,mat,matplot,%
-      matpoints,matrix,max,mean,median,memory,menu,merge,methods,min,%
-      missing,Mod,mode,model,response,mosaicplot,mtext,mvfft,na,nan,%
-      names,omit,nargs,nchar,ncol,NCOL,new,next,NextMethod,nextn,%
-      nlevels,nlm,noquote,NotYetImplemented,NotYetUsed,nrow,NROW,null,%
-      numeric,\%o\%,objects,offset,old,on,Ops,optim,optimise,optimize,%
-      options,or,order,ordered,outer,package,packages,page,pairlist,%
-      pairs,palette,panel,par,parent,parse,paste,path,pbeta,pbinom,%
-      pcauchy,pchisq,pentagamma,persp,pexp,pf,pgamma,pgeom,phyper,pico,%
-      pictex,piechart,Platform,plnorm,plogis,plot,pmatch,pmax,pmin,%
-      pnbinom,pnchisq,pnorm,points,poisson,poly,polygon,polyroot,pos,%
-      postscript,power,ppoints,ppois,predict,preplot,pretty,Primitive,%
-      print,prmatrix,proc,prod,profile,proj,prompt,prop,provide,%
-      psignrank,ps,pt,ptukey,punif,pweibull,pwilcox,q,qbeta,qbinom,%
-      qcauchy,qchisq,qexp,qf,qgamma,qgeom,qhyper,qlnorm,qlogis,qnbinom,%
-      qnchisq,qnorm,qpois,qqline,qqnorm,qqplot,qr,Q,qty,qy,qsignrank,%
-      qt,qtukey,quantile,quasi,quit,qunif,quote,qweibull,qwilcox,%
-      rainbow,range,rank,rbeta,rbind,rbinom,rcauchy,rchisq,Re,read,csv,%
-      csv2,fwf,readline,socket,real,Recall,rect,reformulate,regexpr,%
-      relevel,remove,rep,repeat,replace,replications,report,require,%
-      resid,residuals,restart,return,rev,rexp,rf,rgamma,rgb,rgeom,R,%
-      rhyper,rle,rlnorm,rlogis,rm,rnbinom,RNGkind,rnorm,round,row,%
-      rownames,rowsum,rpois,rsignrank,rstandard,rstudent,rt,rug,runif,%
-      rweibull,rwilcox,sample,sapply,save,scale,scan,scan,screen,sd,se,%
-      search,searchpaths,segments,seq,sequence,setdiff,setequal,set,%
-      setwd,show,sign,signif,sin,single,sinh,sink,solve,sort,source,%
-      spline,splinefun,split,sqrt,stars,start,stat,stem,step,stop,%
-      storage,strstrheight,stripplot,strsplit,structure,strwidth,sub,%
-      subset,substitute,substr,substring,sum,summary,sunflowerplot,svd,%
-      sweep,switch,symbol,symbols,symnum,sys,status,system,t,table,%
-      tabulate,tan,tanh,tapply,tempfile,terms,terrain,tetragamma,text,%
-      time,title,topo,trace,traceback,transform,tri,trigamma,trunc,try,%
-      ts,tsp,typeof,unclass,undebug,undoc,union,unique,uniroot,unix,%
-      unlink,unlist,unname,untrace,update,upper,url,UseMethod,var,%
-      variable,vector,Version,vi,warning,warnings,weighted,weights,%
-      which,while,window,write,\%x\%,x11,X11,xedit,xemacs,xinch,xor,%
-      xpdrows,xy,xyinch,yinch,zapsmall,zip},%
-   otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/},%
-   alsoother={._$},%
-   sensitive,%
-   morecomment=[l]\#,%
-   morestring=[d]",%
-   morestring=[d]'% 2001 Robert Denham
-  }%
-\lst@definelanguage{SAS}%
-  {procnamekeys={proc},%
-   morekeywords={DATA,AND,OR,NOT,EQ,GT,LT,GE,LE,NE,INFILE,INPUT,DO,BY,%
-      TO,SIN,COS,OUTPUT,END,PLOT,RUN,LIBNAME,VAR,TITLE,FIRSTOBS,OBS,%
-      DELIMITER,DLM,EOF,ABS,DIM,HBOUND,LBOUND,MAX,MIN,MOD,SIGN,SQRT,%
-      CEIL,FLOOR,FUZZ,INT,ROUND,TRUNC,DIGAMMA,ERF,ERFC,EXP,GAMMA,%
-      LGAMMA,LOG,LOG2,LOG10,ARCOS,ARSIN,ATAN,COSH,SINH,TANH,TAN,%
-      POISSON,PROBBETA,PROBBNML,PROBCHI,PROBF,PROBGAM,PROBHYPR,%
-      PROBNEGB,PROBNORM,PROBT,BETAINV,CINV,FINV,GAMINV,PROBIT,TINV,CSS,%
-      CV,KURTOSIS,MEAN,NMISS,RANGE,SKEWNESS,STD,STDERR,SUM,USS,NORMAL,%
-      RANBIN,RANCAU,RANEXP,RANGAM,RANNOR,RANPOI,RANTBL,RANTRI,RANUNI,%
-      UNIFORM,IF,THEN,ELSE,WHILE,UNTIL,DROP,KEEP,LABEL,DEFAULT,ARRAY,%
-      MERGE,CARDS,CARDS4,PUT,SET,UPDATE,ABORT,DELETE,DISPLAY,LIST,%
-      LOSTCARD,MISSING,STOP,WHERE,ARRAY,DROP,KEEP,WINDOW,LENGTH,RENAME,%
-      RETAIN,MEANS,UNIVARIATE,SUMMARY,TABULATE,CORR,FREQ,FOOTNOTE,NOTE,%
-      SHOW},%
-   otherkeywords={!,!=,~,$,*,\&,_,/,<,>=,=<,>},%
-   morestring=[d]'%
-   }[keywords,comments,strings,procnames]%
-\lst@definelanguage[AlLaTeX]{TeX}[LaTeX]{TeX}%
-  {moretexcs={AtBeginDocument,AtBeginDvi,AtEndDocument,AtEndOfClass,%
-      AtEndOfPackage,ClassError,ClassInfo,ClassWarning,%
-      ClassWarningNoLine,CurrentOption,DeclareErrorFont,%
-      DeclareFixedFont,DeclareFontEncoding,DeclareFontEncodingDefaults,%
-      DeclareFontFamily,DeclareFontShape,DeclareFontSubstitution,%
-      DeclareMathAccent,DeclareMathAlphabet,DeclareMathAlphabet,%
-      DeclareMathDelimiter,DeclareMathRadical,DeclareMathSizes,%
-      DeclareMathSymbol,DeclareMathVersion,DeclareOldFontCommand,%
-      DeclareOption,DeclarePreloadSizes,DeclareRobustCommand,%
-      DeclareSizeFunction,DeclareSymbolFont,DeclareSymbolFontAlphabet,%
-      DeclareTextAccent,DeclareTextAccentDefault,DeclareTextCommand,%
-      DeclareTextCommandDefault,DeclareTextComposite,%
-      DeclareTextCompositeCommand,DeclareTextFontCommand,%
-      DeclareTextSymbol,DeclareTextSymbolDefault,ExecuteOptions,%
-      GenericError,GenericInfo,GenericWarning,IfFileExists,%
-      InputIfFileExists,LoadClass,LoadClassWithOptions,MessageBreak,%
-      OptionNotUsed,PackageError,PackageInfo,PackageWarning,%
-      PackageWarningNoLine,PassOptionsToClass,PassOptionsToPackage,%
-      ProcessOptionsProvidesClass,ProvidesFile,ProvidesFile,%
-      ProvidesPackage,ProvideTextCommand,RequirePackage,%
-      RequirePackageWithOptions,SetMathAlphabet,SetSymbolFont,%
-      TextSymbolUnavailable,UseTextAccent,UseTextSymbol},%
-   morekeywords={array,center,displaymath,document,enumerate,eqnarray,%
-      equation,flushleft,flushright,itemize,list,lrbox,math,minipage,%
-      picture,sloppypar,tabbing,tabular,trivlist,verbatim}%
-  }%
-\lst@definelanguage[LaTeX]{TeX}[common]{TeX}%
-  {moretexcs={a,AA,aa,addcontentsline,addpenalty,addtocontents,%
-      addtocounter,addtolength,addtoversion,addvspace,alph,Alph,and,%
-      arabic,array,arraycolsep,arrayrulewidth,arraystretch,author,%
-      baselinestretch,begin,bezier,bfseries,bibcite,bibdata,bibitem,%
-      bibliography,bibliographystyle,bibstyle,bigskip,boldmath,%
-      botfigrule,bottomfraction,Box,caption,center,CheckCommand,circle,%
-      citation,cite,cleardoublepage,clearpage,cline,columnsep,%
-      columnseprule,columnwidth,contentsline,dashbox,date,dblfigrule,%
-      dblfloatpagefraction,dblfloatsep,dbltextfloatsep,dbltopfraction,%
-      defaultscriptratio,defaultscriptscriptratio,depth,Diamond,%
-      displaymath,document,documentclass,documentstyle,doublerulesep,%
-      em,emph,endarray,endcenter,enddisplaymath,enddocument,%
-      endenumerate,endeqnarray,endequation,endflushleft,endflushright,%
-      enditemize,endlist,endlrbox,endmath,endminipage,endpicture,%
-      endsloppypar,endtabbing,endtabular,endtrivlist,endverbatim,%
-      enlargethispage,ensuremath,enumerate,eqnarray,equation,%
-      evensidemargin,extracolsep,fbox,fboxrule,fboxsep,filecontents,%
-      fill,floatpagefraction,floatsep,flushbottom,flushleft,flushright,%
-      fnsymbol,fontencoding,fontfamily,fontseries,fontshape,fontsize,%
-      fontsubfuzz,footnotemark,footnotesep,footnotetext,footskip,frac,%
-      frame,framebox,fussy,glossary,headheight,headsep,height,hline,%
-      hspace,I,include,includeonly,index,inputlineno,intextsep,%
-      itemindent,itemize,itemsep,iterate,itshape,Join,kill,label,%
-      labelsep,labelwidth,LaTeX,LaTeXe,leadsto,lefteqn,leftmargin,%
-      leftmargini,leftmarginii,leftmarginiii,leftmarginiv,leftmarginv,%
-      leftmarginvi,leftmark,lhd,lim,linebreak,linespread,linethickness,%
-      linewidth,list,listfiles,listfiles,listparindent,lrbox,%
-      makeatletter,makeatother,makebox,makeglossary,makeindex,%
-      makelabel,MakeLowercase,MakeUppercase,marginpar,marginparpush,%
-      marginparsep,marginparwidth,markboth,markright,math,mathbf,%
-      mathellipsis,mathgroup,mathit,mathrm,mathsf,mathsterling,mathtt,%
-      mathunderscore,mathversion,mbox,mdseries,mho,minipage,%
-      multicolumn,multiput,NeedsTeXFormat,newcommand,newcounter,%
-      newenvironment,newfont,newhelp,newlabel,newlength,newline,%
-      newmathalphabet,newpage,newsavebox,newtheorem,nobreakspace,%
-      nobreakspace,nocite,nocorr,nocorrlist,nofiles,nolinebreak,%
-      nonumber,nopagebreak,normalcolor,normalfont,normalmarginpar,%
-      numberline,obeycr,oddsidemargin,oldstylenums,onecolumn,oval,%
-      pagebreak,pagenumbering,pageref,pagestyle,paperheight,paperwidth,%
-      paragraphmark,parbox,parsep,partopsep,picture,poptabs,pounds,%
-      protect,pushtabs,put,qbezier,qbeziermax,r,raggedleft,raisebox,%
-      ref,refstepcounter,renewcommand,renewenvironment,restorecr,%
-      reversemarginpar,rhd,rightmargin,rightmark,rmfamily,roman,Roman,%
-      rootbox,rule,samepage,sbox,scshape,secdef,section,sectionmark,%
-      selectfont,setcounter,settodepth,settoheight,settowidth,sffamily,%
-      shortstack,showoutput,showoverfull,sloppy,sloppypar,slshape,%
-      smallskip,sqsubset,sqsupset,SS,stackrel,stepcounter,stop,stretch,%
-      subparagraphmark,subsectionmark,subsubsectionmark,sum,%
-      suppressfloats,symbol,tabbing,tabbingsep,tabcolsep,tabular,%
-      tabularnewline,textasciicircum,textasciitilde,textbackslash,%
-      textbar,textbf,textbraceleft,textbraceright,textbullet,%
-      textcircled,textcompwordmark,textdagger,textdaggerdbl,textdollar,%
-      textellipsis,textemdash,textendash,textexclamdown,textfloatsep,%
-      textfraction,textgreater,textheight,textit,textless,textmd,%
-      textnormal,textparagraph,textperiodcentered,textquestiondown,%
-      textquotedblleft,textquotedblright,textquoteleft,textquoteright,%
-      textregistered,textrm,textsc,textsection,textsf,textsl,%
-      textsterling,textsuperscript,texttrademark,texttt,textunderscore,%
-      textup,textvisiblespace,textwidth,thanks,thefootnote,thempfn,%
-      thempfn,thempfootnote,thepage,thepage,thicklines,thinlines,%
-      thispagestyle,title,today,topfigrule,topfraction,topmargin,%
-      topsep,totalheight,tracingfonts,trivlist,ttfamily,twocolumn,%
-      typein,typeout,unboldmath,unitlength,unlhd,unrhd,upshape,usebox,%
-      usecounter,usefont,usepackage,value,vector,verb,verbatim,vline,%
-      vspace,width,%
-      normalsize,small,footnotesize,scriptsize,tiny,large,Large,LARGE,%
-      huge,Huge}%
-  }%
-\lst@definelanguage[plain]{TeX}[common]{TeX}%
-  {moretexcs={advancepageno,beginsection,bf,bffam,bye,cal,cleartabs,%
-      columns,dosupereject,endinsert,eqalign,eqalignno,fiverm,fivebf,%
-      fivei,fivesy,folio,footline,hang,headline,it,itemitem,itfam,%
-      leqalignno,magnification,makefootline,makeheadline,midinsert,mit,%
-      mscount,nopagenumbers,normalbottom,of,oldstyle,pagebody,%
-      pagecontents,pageinsert,pageno,plainoutput,preloaded,proclaim,rm,%
-      settabs,sevenbf,seveni,sevensy,sevenrm,sl,slfam,supereject,%
-      tabalign,tabs,tabsdone,tabsyet,tenbf,tenex,teni,tenit,tenrm,%
-      tensl,tensy,tentt,textindent,topglue,topins,topinsert,tt,ttfam,%
-      ttraggedright,vfootnote}%
-  }%
-\lst@definelanguage[common]{TeX}[primitive]{TeX}
-  {moretexcs={active,acute,ae,AE,aleph,allocationnumber,allowbreak,%
-      alpha,amalg,angle,approx,arccos,arcsin,arctan,arg,arrowvert,%
-      Arrowvert,ast,asymp,b,backslash,bar,beta,bgroup,big,Big,bigbreak,%
-      bigcap,bigcirc,bigcup,bigg,Bigg,biggl,Biggl,biggm,Biggm,biggr,%
-      Biggr,bigl,Bigl,bigm,Bigm,bigodot,bigoplus,bigotimes,bigr,Bigr,%
-      bigskip,bigskipamount,bigsqcup,bigtriangledown,bigtriangleup,%
-      biguplus,bigvee,bigwedge,bmod,bordermatrix,bot,bowtie,brace,%
-      braceld,bracelu,bracerd,braceru,bracevert,brack,break,breve,%
-      buildrel,bullet,c,cap,cases,cdot,cdotp,cdots,centering,%
-      centerline,check,chi,choose,circ,clubsuit,colon,cong,coprod,%
-      copyright,cos,cosh,cot,coth,csc,cup,d,dag,dagger,dashv,ddag,%
-      ddagger,ddot,ddots,deg,delta,Delta,det,diamond,diamondsuit,dim,%
-      displaylines,div,do,dospecials,dot,doteq,dotfill,dots,downarrow,%
-      Downarrow,downbracefill,egroup,eject,ell,empty,emptyset,endgraf,%
-      endline,enskip,enspace,epsilon,equiv,eta,exists,exp,filbreak,%
-      flat,fmtname,fmtversion,footins,footnote,footnoterule,forall,%
-      frenchspacing,frown,gamma,Gamma,gcd,ge,geq,gets,gg,goodbreak,%
-      grave,H,hat,hbar,heartsuit,hglue,hideskip,hidewidth,hom,%
-      hookleftarrow,hookrightarrow,hphantom,hrulefill,i,ialign,iff,Im,%
-      imath,in,inf,infty,int,interdisplaylinepenalty,%
-      interfootnotelinepenalty,intop,iota,item,j,jmath,joinrel,jot,%
-      kappa,ker,l,L,lambda,Lambda,land,langle,lbrace,lbrack,lceil,%
-      ldotp,ldots,le,leavevmode,leftarrow,Leftarrow,leftarrowfill,%
-      leftharpoondown,leftharpoonup,leftline,leftrightarrow,%
-      Leftrightarrow,leq,lfloor,lg,lgroup,lhook,lim,liminf,limsup,line,%
-      ll,llap,lmoustache,ln,lnot,log,longleftarrow,Longleftarrow,%
-      longleftrightarrow,Longleftrightarrow,longmapsto,longrightarrow,%
-      Longrightarrow,loop,lor,lq,magstep,magstep,magstephalf,mapsto,%
-      mapstochar,mathhexbox,mathpalette,mathstrut,matrix,max,maxdimen,%
-      medbreak,medskip,medskipamount,mid,min,models,mp,mu,multispan,%
-      nabla,narrower,natural,ne,nearrow,neg,negthinspace,neq,newbox,%
-      newcount,newdimen,newfam,newif,newinsert,newlanguage,newmuskip,%
-      newread,newskip,newtoks,newwrite,next,ni,nobreak,nointerlineskip,%
-      nonfrenchspacing,normalbaselines,normalbaselineskip,%
-      normallineskip,normallineskiplimit,not,notin,nu,null,nwarrow,o,O,%
-      oalign,obeylines,obeyspaces,odot,oe,OE,offinterlineskip,oint,%
-      ointop,omega,Omega,ominus,ooalign,openup,oplus,oslash,otimes,%
-      overbrace,overleftarrow,overrightarrow,owns,P,parallel,partial,%
-      perp,phantom,phi,Phi,pi,Pi,pm,pmatrix,pmod,Pr,prec,preceq,prime,%
-      prod,propto,psi,Psi,qquad,quad,raggedbottom,raggedright,rangle,%
-      rbrace,rbrack,rceil,Re,relbar,Relbar,removelastskip,repeat,%
-      rfloor,rgroup,rho,rhook,rightarrow,Rightarrow,rightarrowfill,%
-      rightharpoondown,rightharpoonup,rightleftharpoons,rightline,rlap,%
-      rmoustache,root,rq,S,sb,searrow,sec,setminus,sharp,showhyphens,%
-      sigma,Sigma,sim,simeq,sin,sinh,skew,slash,smallbreak,smallint,%
-      smallskip,smallskipamount,smash,smile,sp,space,spadesuit,sqcap,%
-      sqcup,sqrt,sqsubseteq,sqsupseteq,ss,star,strut,strutbox,subset,%
-      subseteq,succ,succeq,sum,sup,supset,supseteq,surd,swarrow,t,tan,%
-      tanh,tau,TeX,theta,Theta,thinspace,tilde,times,to,top,tracingall,%
-      triangle,triangleleft,triangleright,u,underbar,underbrace,%
-      uparrow,Uparrow,upbracefill,updownarrow,Updownarrow,uplus,%
-      upsilon,Upsilon,v,varepsilon,varphi,varpi,varrho,varsigma,%
-      vartheta,vdash,vdots,vec,vee,vert,Vert,vglue,vphantom,wedge,%
-      widehat,widetilde,wlog,wp,wr,xi,Xi,zeta}%
-  }%
-\lst@definelanguage[primitive]{TeX}%
-  {moretexcs={above,abovedisplayshortskip,abovedisplayskip,aftergroup,%
-      abovewithdelims,accent,adjdemerits,advance,afterassignment,atop,%
-      atopwithdelims,badness,baselineskip,batchmode,begingroup,%
-      belowdisplayshortskip,belowdisplayskip,binoppenalty,botmark,box,%
-      boxmaxdepth,brokenpenalty,catcode,char,chardef,cleaders,closein,%
-      closeout,clubpenalty,copy,count,countdef,cr,crcr,csname,day,%
-      deadcycles,def,defaulthyphenchar,defaultskewchar,delcode,%
-      delimiter,delimiterfactor,delimitershortfall,dimen,dimendef,%
-      discretionary,displayindent,displaylimits,displaystyle,%
-      displaywidowpenalty,displaywidth,divide,doublehyphendemerits,dp,%
-      edef,else,emergencystretch,end,endcsname,endgroup,endinput,%
-      endlinechar,eqno,errhelp,errmessage,errorcontextlines,%
-      errorstopmode,escapechar,everycr,everydisplay,everyhbox,everyjob,%
-      everymath,everypar,everyvbox,exhyphenpenalty,expandafter,fam,fi,%
-      finalhypendemerits,firstmark,floatingpenalty,font,fontdimen,%
-      fontname,futurelet,gdef,global,globaldefs,halign,hangafter,%
-      hangindent,hbadness,hbox,hfil,hfill,hfilneg,hfuzz,hoffset,%
-      holdinginserts,hrule,hsize,hskip,hss,ht,hyphenation,hyphenchar,%
-      hyphenpenalty,if,ifcase,ifcat,ifdim,ifeof,iffalse,ifhbox,ifhmode,%
-      ifinner,ifmmode,ifnum,ifodd,iftrue,ifvbox,ifvmode,ifvoid,ifx,%
-      ignorespaces,immediate,indent,input,insert,insertpenalties,%
-      interlinepenalty,jobname,kern,language,lastbox,lastkern,%
-      lastpenalty,lastskip,lccode,leaders,left,lefthyphenmin,leftskip,%
-      leqno,let,limits,linepenalty,lineskip,lineskiplimit,long,%
-      looseness,lower,lowercase,mag,mark,mathaccent,mathbin,mathchar,%
-      mathchardef,mathchoice,mathclose,mathcode,mathinner,mathop,%
-      mathopen,mathord,mathpunct,mathrel,mathsurround,maxdeadcycles,%
-      maxdepth,meaning,medmuskip,message,mkern,month,moveleft,%
-      moveright,mskip,multiply,muskip,muskipdef,newlinechar,noalign,%
-      noboundary,noexpand,noindent,nolimits,nonscript,nonstopmode,%
-      nulldelimiterspace,nullfont,number,omit,openin,openout,or,outer,%
-      output,outputpenalty,over,overfullrule,overline,overwithdelims,%
-      pagedepth,pagefilllstretch,pagefillstretch,pagefilstretch,%
-      pagegoal,pageshrink,pagestretch,pagetotal,par,parfillskip,%
-      parindent,parshape,parskip,patterns,pausing,penalty,%
-      postdisplaypenalty,predisplaypenalty,predisplaysize,pretolerance,%
-      prevdepth,prevgraf,radical,raise,read,relax,relpenalty,right,%
-      righthyphenmin,rightskip,romannumeral,scriptfont,%
-      scriptscriptfont,scriptscriptstyle,scriptspace,scriptstyle,%
-      scrollmode,setbox,setlanguage,sfcode,shipout,show,showbox,%
-      showboxbreadth,showboxdepth,showlists,showthe,skewchar,skip,%
-      skipdef,spacefactor,spaceskip,span,special,splitbotmark,%
-      splitfirstmark,splitmaxdepth,splittopskip,string,tabskip,%
-      textfont,textstyle,the,thickmuskip,thinmuskip,time,toks,toksdef,%
-      tolerance,topmark,topskip,tracingcommands,tracinglostchars,%
-      tracingmacros,tracingonline,tracingoutput,tracingpages,%
-      tracingparagraphs,tracingrestores,tracingstats,uccode,uchyph,%
-      underline,unhbox,unhcopy,unkern,unpenalty,unskip,unvbox,unvcopy,%
-      uppercase,vadjust,valign,vbadness,vbox,vcenter,vfil,vfill,%
-      vfilneg,vfuzz,voffset,vrule,vsize,vskip,vsplit,vss,vtop,wd,%
-      widowpenalty,write,xdef,xleaders,xspaceskip,year},%
-   sensitive,%
-   alsoother={0123456789$_},%$ to make Emacs fontlocking happy
-   morecomment=[l]\%%
-  }[keywords,tex,comments]%
-%%
-%% Verilog definition (c) 2003 Cameron H. G. Wright <c.h.g.wright@ieee.org>
-%%   Based on the IEEE 1364-2001 Verilog HDL standard
-%%   Ref: S. Palnitkar, "Verilog HDL: A Guide to Digital Design and Synthesis,"
-%%        Prentice Hall, 2003. ISBN: 0-13-044911-3
-%%
-\lst@definelanguage{Verilog}%
-  {morekeywords={% reserved keywords
-      always,and,assign,automatic,begin,buf,bufif0,bufif1,case,casex,%
-      casez,cell,cmos,config,deassign,default,defparam,design,disable,%
-      edge,else,end,endcase,endconfig,endfunction,endgenerate,%
-      endmodule,endprimitive,endspecify,endtable,endtask,event,for,%
-      force,forever,fork,function,generate,genvar,highz0,highz1,if,%
-      ifnone,incdir,include,initial,inout,input,instance,integer,join,%
-      large,liblist,library,localparam,macromodule,medium,module,nand,%
-      negedge,nmos,nor,noshowcancelled,not,notif0,notif1,or,output,%
-      parameter,pmos,posedge,primitive,pull0,pull1,pulldown,pullup,%
-      pulsestyle_onevent,pulsestyle_ondetect,rcmos,real,realtime,reg,%
-      release,repeat,rnmos,rpmos,rtran,rtranif0,rtranif1,scalared,%
-      showcancelled,signed,small,specify,specparam,strong0,strong1,%
-      supply0,supply1,table,task,time,tran,tranif0,tranif1,tri,tri0,%
-      tri1,triand,trior,trireg,unsigned,use,vectored,wait,wand,weak0,%
-      weak1,while,wire,wor,xnor,xor},%
-   morekeywords=[2]{% system tasks and functions
-      $bitstoreal,$countdrivers,$display,$fclose,$fdisplay,$fmonitor,%
-      $fopen,$fstrobe,$fwrite,$finish,$getpattern,$history,$incsave,%
-      $input,$itor,$key,$list,$log,$monitor,$monitoroff,$monitoron,%
-      $nokey},%
-   morekeywords=[3]{% compiler directives
-      `accelerate,`autoexpand_vectornets,`celldefine,`default_nettype,%
-      `define,`else,`elsif,`endcelldefine,`endif,`endprotect,%
-      `endprotected,`expand_vectornets,`ifdef,`ifndef,`include,%
-      `no_accelerate,`noexpand_vectornets,`noremove_gatenames,%
-      `nounconnected_drive,`protect,`protected,`remove_gatenames,%
-      `remove_netnames,`resetall,`timescale,`unconnected_drive},%
-   alsoletter=\`,%
-   sensitive,%
-   morecomment=[s]{/*}{*/},%
-   morecomment=[l]//,% nonstandard
-   morestring=[b]"%
-  }[keywords,comments,strings]%
-\endinput
-%%
-%% End of file `lstlang3.sty'.
Index: doc/LaTeXmacros/listings/lstmisc.sty
===================================================================
--- doc/LaTeXmacros/listings/lstmisc.sty	(revision 1a6e8552cdf095c795a52cfbf402c8ee91b10f23)
+++ 	(revision )
@@ -1,2084 +1,0 @@
-%%
-%% This is file `lstmisc.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% listings.dtx  (with options: `misc,0.21')
-%% 
-%% Please read the software license in listings-1.3.dtx or listings-1.3.pdf.
-%%
-%% (w)(c) 1996--2004 Carsten Heinz and/or any other author listed
-%% elsewhere in this file.
-%% (c) 2006 Brooks Moses
-%% (c) 2013- Jobst Hoffmann
-%%
-%% Send comments and ideas on the package, error reports and additional
-%% programming languages to Jobst Hoffmann at <j.hoffmann@fh-aachen.de>.
-%%
-\def\filedate{2015/06/04}
-\def\fileversion{1.6}
-\ProvidesFile{lstmisc.sty}
-             [\filedate\space\fileversion\space(Carsten Heinz)]
-\lst@CheckVersion\fileversion
-    {\typeout{^^J%
-     ***^^J%
-     *** This file requires `listings.sty' version \fileversion.^^J%
-     *** You have a serious problem, so I'm exiting ...^^J%
-     ***^^J}%
-     \batchmode \@@end}
-\lst@BeginAspect{writefile}
-\newtoks\lst@WFtoken % global
-\lst@AddToHook{InitVarsBOL}{\global\lst@WFtoken{}}
-\newwrite\lst@WF
-\global\let\lst@WFifopen\iffalse % init
-\gdef\lst@WFWriteToFile{%
-  \begingroup
-   \let\lst@UM\@empty
-   \expandafter\edef\expandafter\lst@temp\expandafter{\the\lst@WFtoken}%
-   \immediate\write\lst@WF{\lst@temp}%
-  \endgroup
-  \global\lst@WFtoken{}}
-\gdef\lst@WFAppend#1{%
-    \global\lst@WFtoken=\expandafter{\the\lst@WFtoken#1}}
-\gdef\lst@BeginWriteFile{\lst@WFBegin\@gobble}
-\gdef\lst@BeginAlsoWriteFile{\lst@WFBegin\lst@OutputBox}
-\begingroup \catcode`\^^I=11
-\gdef\lst@WFBegin#1#2{%
-    \begingroup
-    \let\lst@OutputBox#1%
-    \def\lst@Append##1{%
-        \advance\lst@length\@ne
-        \expandafter\lst@token\expandafter{\the\lst@token##1}%
-        \ifx ##1\lst@outputspace \else
-            \lst@WFAppend##1%
-        \fi}%
-    \lst@lAddTo\lst@PreGotoTabStop{\lst@WFAppend{^^I}}%
-    \lst@lAddTo\lst@ProcessSpace{\lst@WFAppend{ }}%
-    \let\lst@DeInit\lst@WFDeInit
-    \let\lst@MProcessListing\lst@WFMProcessListing
-    \lst@WFifopen\else
-        \immediate\openout\lst@WF=#2\relax
-        \global\let\lst@WFifopen\iftrue
-        \@gobbletwo\fi\fi
-    \fi}
-\endgroup
-\gdef\lst@EndWriteFile{%
-    \immediate\closeout\lst@WF \endgroup
-    \global\let\lst@WFifopen\iffalse}
-\global\let\lst@WFMProcessListing\lst@MProcessListing
-\global\let\lst@WFDeInit\lst@DeInit
-\lst@AddToAtTop\lst@WFMProcessListing{\lst@WFWriteToFile}
-\lst@AddToAtTop\lst@WFDeInit{%
-    \ifnum\lst@length=\z@\else \lst@WFWriteToFile \fi}
-\lst@EndAspect
-\lst@BeginAspect{strings}
-\gdef\lst@stringtypes{d,b,m,bd,db,s}
-\gdef\lst@StringKey#1#2{%
-    \lst@Delim\lst@stringstyle #2\relax
-        {String}\lst@stringtypes #1%
-                     {\lst@BeginString\lst@EndString}%
-        \@@end\@empty{}}
-\lst@Key{string}\relax{\lst@StringKey\@empty{#1}}
-\lst@Key{morestring}\relax{\lst@StringKey\relax{#1}}
-\lst@Key{deletestring}\relax{\lst@StringKey\@nil{#1}}
-\lst@Key{stringstyle}{}{\def\lst@stringstyle{#1}}
-\lst@AddToHook{EmptyStyle}{\let\lst@stringstyle\@empty}
-\lst@Key{showstringspaces}t[t]{\lstKV@SetIf{#1}\lst@ifshowstringspaces}
-\gdef\lst@BeginString{%
-    \lst@DelimOpen
-        \lst@ifexstrings\else
-        {\lst@ifshowstringspaces
-             \lst@keepspacestrue
-             \let\lst@outputspace\lst@visiblespace
-         \fi}}
-\lst@AddToHookExe{ExcludeDelims}{\let\lst@ifexstrings\iffalse}
-\gdef\lst@EndString{\lst@DelimClose\lst@ifexstrings\else}
-\gdef\lst@StringDM@d#1#2\@empty#3#4#5{%
-    \lst@CArg #2\relax\lst@DefDelimBE{}{}{}#3{#1}{#5}#4}
-\gdef\lst@StringDM@b#1#2\@empty#3#4#5{%
-    \let\lst@ifbstring\iftrue
-    \lst@CArg #2\relax\lst@DefDelimBE
-       {\lst@ifletter \lst@Output \lst@letterfalse \fi}%
-       {\ifx\lst@lastother\lstum@backslash
-            \expandafter\@gobblethree
-        \fi}{}#3{#1}{#5}#4}
-\global\let\lst@ifbstring\iffalse % init
-\lst@AddToHook{SelectCharTable}{%
-    \lst@ifbstring
-        \lst@CArgX \\\\\relax \lst@CDefX{}%
-           {\lst@ProcessOther\lstum@backslash
-            \lst@ProcessOther\lstum@backslash
-            \let\lst@lastother\relax}%
-           {}%
-    \fi}
-\global\let\lst@StringDM@bd\lst@StringDM@b
-\global\let\lst@StringDM@db\lst@StringDM@bd
-\gdef\lst@StringDM@m#1#2\@empty#3#4#5{%
-    \lst@CArg #2\relax\lst@DefDelimBE{}{}%
-        {\let\lst@next\@gobblethree
-         \lst@ifletter\else
-             \lst@IfLastOtherOneOf{)].0123456789\lstum@rbrace'}%
-                 {}%
-                 {\let\lst@next\@empty}%
-         \fi
-         \lst@next}#3{#1}{#5}#4}
-\gdef\lst@StringDM@s#1#2#3\@empty#4#5#6{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#4{#1}{#6}%
-    \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}}
-\lst@SaveOutputDef{"7D}\lstum@rbrace
-\lst@EndAspect
-\lst@BeginAspect{mf}
-\lst@AddTo\lst@stringtypes{,mf}
-\lst@NewMode\lst@mfinputmode
-\gdef\lst@String@mf#1\@empty#2#3#4{%
-  \lst@CArg #1\relax\lst@DefDelimB
-       {}{}{\lst@ifletter \expandafter\@gobblethree \fi}%
-       \lst@BeginStringMFinput\lst@mfinputmode{#4\lst@Lmodetrue}%
-  \@ifundefined{lsts@semicolon}%
-  {\lst@DefSaveDef{`\;}\lsts@semicolon{% ; and space end the filename
-      \ifnum\lst@mode=\lst@mfinputmode
-          \lst@XPrintToken
-          \expandafter\lst@LeaveMode
-      \fi
-      \lsts@semicolon}%
-   \lst@DefSaveDef{`\ }\lsts@space{%
-      \ifnum\lst@mode=\lst@mfinputmode
-          \lst@XPrintToken
-          \expandafter\lst@LeaveMode
-      \fi
-      \lsts@space}%
-  }{}}
-\gdef\lst@BeginStringMFinput#1#2#3\@empty{%
-    \lst@TrackNewLines \lst@XPrintToken
-      \begingroup
-        \lst@mode\lst@nomode
-        #3\lst@XPrintToken
-      \endgroup
-      \lst@ResetToken
-    \lst@EnterMode{#1}{\def\lst@currstyle#2}%
-    \lst@ifshowstringspaces
-         \lst@keepspacestrue
-         \let\lst@outputspace\lst@visiblespace
-    \fi}
-\lst@EndAspect
-\lst@BeginAspect{comments}
-\lst@NewMode\lst@commentmode
-\gdef\lst@commenttypes{l,f,s,n}
-\gdef\lst@CommentKey#1#2{%
-    \lst@Delim\lst@commentstyle #2\relax
-        {Comment}\lst@commenttypes #1%
-                {\lst@BeginComment\lst@EndComment}%
-        i\@empty{\lst@BeginInvisible\lst@EndInvisible}}
-\lst@Key{comment}\relax{\lst@CommentKey\@empty{#1}}
-\lst@Key{morecomment}\relax{\lst@CommentKey\relax{#1}}
-\lst@Key{deletecomment}\relax{\lst@CommentKey\@nil{#1}}
-\lst@Key{commentstyle}{}{\def\lst@commentstyle{#1}}
-\lst@AddToHook{EmptyStyle}{\let\lst@commentstyle\itshape}
-\gdef\lst@BeginComment{%
-    \lst@DelimOpen
-        \lst@ifexcomments\else
-        \lsthk@AfterBeginComment}
-\gdef\lst@EndComment{\lst@DelimClose\lst@ifexcomments\else}
-\lst@AddToHook{AfterBeginComment}{}
-\lst@AddToHookExe{ExcludeDelims}{\let\lst@ifexcomments\iffalse}
-\gdef\lst@BeginInvisible#1#2#3\@empty{%
-    \lst@TrackNewLines \lst@XPrintToken
-    \lst@BeginDropOutput{#1}}
-\gdef\lst@EndInvisible#1\@empty{\lst@EndDropOutput}
-\gdef\lst@CommentDM@l#1#2\@empty#3#4#5{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#3{#1}{#5\lst@Lmodetrue}}
-\gdef\lst@CommentDM@f#1{%
-    \@ifnextchar[{\lst@Comment@@f{#1}}%
-                 {\lst@Comment@@f{#1}[0]}}
-\gdef\lst@Comment@@f#1[#2]#3\@empty#4#5#6{%
-    \lst@CArg #3\relax\lst@DefDelimB{}{}%
-        {\lst@CalcColumn
-         \ifnum #2=\@tempcnta\else
-             \expandafter\@gobblethree
-         \fi}%
-        #4{#1}{#6\lst@Lmodetrue}}
-\gdef\lst@CommentDM@s#1#2#3\@empty#4#5#6{%
-    \lst@CArg #2\relax\lst@DefDelimB{}{}{}#4{#1}{#6}%
-    \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}}
-\gdef\lst@CommentDM@n#1#2#3\@empty#4#5#6{%
-    \ifx\@empty#3\@empty\else
-        \def\@tempa{#2}\def\@tempb{#3}%
-        \ifx\@tempa\@tempb
-            \PackageError{Listings}{Identical delimiters}%
-            {These delimiters make no sense with nested comments.}%
-        \else
-            \lst@CArg #2\relax\lst@DefDelimB
-                {}%
-                {\ifnum\lst@mode=#1\relax \expandafter\@gobble \fi}%
-                {}#4{#1}{#6}%
-            \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}%
-        \fi
-    \fi}
-\lst@EndAspect
-\lst@BeginAspect{pod}
-\lst@Key{printpod}{false}[t]{\lstKV@SetIf{#1}\lst@ifprintpod}
-\lst@Key{podcomment}{false}[t]{\lstKV@SetIf{#1}\lst@ifpodcomment}
-\lst@AddToHookExe{SetLanguage}{\let\lst@ifpodcomment\iffalse}
-\lst@NewMode\lst@PODmode
-\lst@AddToHook{SelectCharTable}
-    {\lst@ifpodcomment
-         \lst@CArgX =\relax\lst@DefDelimB{}{}%
-           {\ifnum\@tempcnta=\z@
-                \lst@ifprintpod\else
-                    \def\lst@bnext{\lst@BeginDropOutput\lst@PODmode}%
-                    \expandafter\expandafter\expandafter\@gobblethree
-                \fi
-            \else
-               \expandafter\@gobblethree
-            \fi}%
-           \lst@BeginComment\lst@PODmode{{\lst@commentstyle}}%
-         \lst@CArgX =cut\^^M\relax\lst@DefDelimE
-           {\lst@CalcColumn}%
-           {\ifnum\@tempcnta=\z@\else
-                \expandafter\@gobblethree
-            \fi}%
-           {}%
-           \lst@EndComment\lst@PODmode
-     \fi}
-\lst@EndAspect
-\lst@BeginAspect[keywords]{html}
-\gdef\lst@tagtypes{s}
-\gdef\lst@TagKey#1#2{%
-    \lst@Delim\lst@tagstyle #2\relax
-        {Tag}\lst@tagtypes #1%
-                     {\lst@BeginTag\lst@EndTag}%
-        \@@end\@empty{}}
-\lst@Key{tag}\relax{\lst@TagKey\@empty{#1}}
-\lst@Key{tagstyle}{}{\def\lst@tagstyle{#1}}
-\lst@AddToHook{EmptyStyle}{\let\lst@tagstyle\@empty}
-\gdef\lst@BeginTag{%
-    \lst@DelimOpen
-        \lst@ifextags\else
-        {\let\lst@ifkeywords\iftrue
-         \lst@ifmarkfirstintag \lst@firstintagtrue \fi}}
-\lst@AddToHookExe{ExcludeDelims}{\let\lst@ifextags\iffalse}
-\gdef\lst@EndTag{\lst@DelimClose\lst@ifextags\else}
-\lst@Key{usekeywordsintag}t[t]{\lstKV@SetIf{#1}\lst@ifusekeysintag}
-\lst@Key{markfirstintag}f[t]{\lstKV@SetIf{#1}\lst@ifmarkfirstintag}
-\gdef\lst@firstintagtrue{\global\let\lst@iffirstintag\iftrue}
-\global\let\lst@iffirstintag\iffalse
-\lst@AddToHook{PostOutput}{\lst@tagresetfirst}
-\lst@AddToHook{Output}
-    {\gdef\lst@tagresetfirst{\global\let\lst@iffirstintag\iffalse}}
-\lst@AddToHook{OutputOther}{\gdef\lst@tagresetfirst{}}
-\lst@AddToHook{Output}
-    {\ifnum\lst@mode=\lst@tagmode
-         \lst@iffirstintag \let\lst@thestyle\lst@gkeywords@sty \fi
-         \lst@ifusekeysintag\else \let\lst@thestyle\lst@gkeywords@sty\fi
-     \fi}
-\lst@NewMode\lst@tagmode
-\lst@AddToHook{Init}{\global\let\lst@ifnotag\iftrue}
-\lst@AddToHook{SelectCharTable}{\let\lst@ifkeywords\lst@ifnotag}
-\gdef\lst@Tag@s#1#2\@empty#3#4#5{%
-    \global\let\lst@ifnotag\iffalse
-    \lst@CArg #1\relax\lst@DefDelimB {}{}%
-        {\ifnum\lst@mode=\lst@tagmode \expandafter\@gobblethree \fi}%
-        #3\lst@tagmode{#5}%
-    \lst@CArg #2\relax\lst@DefDelimE {}{}{}#4\lst@tagmode}%
-\gdef\lst@BeginCDATA#1\@empty{%
-    \lst@TrackNewLines \lst@PrintToken
-    \lst@EnterMode\lst@GPmode{}\let\lst@ifmode\iffalse
-    \lst@mode\lst@tagmode #1\lst@mode\lst@GPmode\relax\lst@modetrue}
-\lst@EndAspect
-\lst@BeginAspect{escape}
-\lst@Key{texcl}{false}[t]{\lstKV@SetIf{#1}\lst@iftexcl}
-\lst@AddToHook{TextStyle}{\let\lst@iftexcl\iffalse}
-\lst@AddToHook{EOL}
-    {\ifnum\lst@mode=\lst@TeXLmode
-         \expandafter\lst@escapeend
-         \expandafter\lst@LeaveAllModes
-         \expandafter\lst@ReenterModes
-     \fi}
-\lst@AddToHook{AfterBeginComment}
-    {\lst@iftexcl \lst@ifLmode \lst@ifdropinput\else
-         \lst@PrintToken
-         \lst@LeaveMode \lst@InterruptModes
-         \lst@EnterMode{\lst@TeXLmode}{\lst@modetrue\lst@commentstyle}%
-         \expandafter\expandafter\expandafter\lst@escapebegin
-     \fi \fi \fi}
-\lst@NewMode\lst@TeXLmode
-\gdef\lst@ActiveCDefX#1{\lst@ActiveCDefX@#1}
-\gdef\lst@ActiveCDefX@#1#2#3{
-    \catcode`#1\active\lccode`\~=`#1%
-    \lowercase{\lst@CDefIt~}{#2}{#3}{}}
-\gdef\lst@Escape#1#2#3#4{%
-    \lst@CArgX #1\relax\lst@CDefX
-        {}%
-        {\lst@ifdropinput\else
-         \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken
-         \lst@InterruptModes
-         \lst@EnterMode{\lst@TeXmode}{\lst@modetrue}%
-         \ifx\^^M#2%
-             \lst@CArg #2\relax\lst@ActiveCDefX
-                 {}%
-                 {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes}%
-                 {\lst@MProcessListing}%
-         \else
-             \lst@CArg #2\relax\lst@ActiveCDefX
-                 {}%
-                 {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes
-                  \lst@newlines\z@ \lst@whitespacefalse}%
-                 {}%
-         \fi
-         #3\lst@escapebegin
-         \fi}%
-        {}}
-\lst@NewMode\lst@TeXmode
-\lst@Key{escapebegin}{}{\def\lst@escapebegin{#1}}
-\lst@Key{escapeend}{}{\def\lst@escapeend{#1}}
-\lst@Key{escapechar}{}
-    {\ifx\@empty#1\@empty
-         \let\lst@DefEsc\relax
-     \else
-         \def\lst@DefEsc{\lst@Escape{#1}{#1}{}{}}%
-     \fi}
-\lst@AddToHook{TextStyle}{\let\lst@DefEsc\@empty}
-\lst@AddToHook{SelectCharTable}{\lst@DefEsc}
-\lst@Key{escapeinside}{}{\lstKV@TwoArg{#1}%
-    {\let\lst@DefEsc\@empty
-     \ifx\@empty##1@empty\else \ifx\@empty##2\@empty\else
-         \def\lst@DefEsc{\lst@Escape{##1}{##2}{}{}}%
-     \fi\fi}}
-\lst@Key{mathescape}{false}[t]{\lstKV@SetIf{#1}\lst@ifmathescape}
-\lst@AddToHook{SelectCharTable}
-    {\lst@ifmathescape \lst@Escape{\$}{\$}%
-        {\setbox\@tempboxa=\hbox\bgroup$}%
-        {$\egroup \lst@CalcLostSpaceAndOutput}\fi}
-\lst@EndAspect
-\lst@BeginAspect{keywords}
-\global\let\lst@ifsensitive\iftrue % init
-\global\let\lst@ifsensitivedefed\iffalse % init % \global
-\lst@ifsavemem\else
-\gdef\lst@KeywordTest#1#2#3{%
-    \begingroup \let\lst@UM\@empty
-    \global\expandafter\let\expandafter\@gtempa
-        \csname\@lst#1@\the\lst@token\endcsname
-    \endgroup
-    \ifx\@gtempa\relax\else
-        \let\lst@thestyle\@gtempa
-    \fi}
-\gdef\lst@KEYWORDTEST{%
-    \uppercase\expandafter{\expandafter
-        \lst@KEYWORDTEST@\the\lst@token}\relax}
-\gdef\lst@KEYWORDTEST@#1\relax#2#3#4{%
-    \begingroup \let\lst@UM\@empty
-    \global\expandafter\let\expandafter\@gtempa
-        \csname\@lst#2@#1\endcsname
-    \endgroup
-    \ifx\@gtempa\relax\else
-        \let\lst@thestyle\@gtempa
-    \fi}
-\gdef\lst@WorkingTest#1#2#3{%
-    \begingroup \let\lst@UM\@empty
-    \global\expandafter\let\expandafter\@gtempa
-        \csname\@lst#1@\the\lst@token\endcsname
-    \endgroup
-    \@gtempa}
-\gdef\lst@WORKINGTEST{%
-    \uppercase\expandafter{\expandafter
-        \lst@WORKINGTEST@\the\lst@token}\relax}
-\gdef\lst@WORKINGTEST@#1\relax#2#3#4{%
-    \begingroup \let\lst@UM\@empty
-    \global\expandafter\let\expandafter\@gtempa
-        \csname\@lst#2@#1\endcsname
-    \endgroup
-    \@gtempa}
-\gdef\lst@DefineKeywords#1#2#3{%
-    \lst@ifsensitive
-        \def\lst@next{\lst@for#2}%
-    \else
-        \def\lst@next{\uppercase\expandafter{\expandafter\lst@for#2}}%
-    \fi
-    \lst@next\do
-    {\expandafter\ifx\csname\@lst#1@##1\endcsname\relax
-        \global\expandafter\let\csname\@lst#1@##1\endcsname#3%
-     \fi}}
-\gdef\lst@UndefineKeywords#1#2#3{%
-    \lst@ifsensitivedefed
-        \def\lst@next{\lst@for#2}%
-    \else
-        \def\lst@next{\uppercase\expandafter{\expandafter\lst@for#2}}%
-    \fi
-    \lst@next\do
-    {\expandafter\ifx\csname\@lst#1@##1\endcsname#3%
-        \global\expandafter\let\csname\@lst#1@##1\endcsname\relax
-     \fi}}
-\fi
-\lst@ifsavemem
-\gdef\lst@IfOneOutOf#1\relax#2{%
-    \def\lst@temp##1,#1,##2##3\relax{%
-        \ifx\@empty##2\else \expandafter\lst@IOOOfirst \fi}%
-    \def\lst@next{\lst@IfOneOutOf@#1\relax}%
-    \expandafter\lst@next#2\relax\relax}
-\gdef\lst@IfOneOutOf@#1\relax#2#3{%
-    \ifx#2\relax
-        \expandafter\@secondoftwo
-    \else
-        \expandafter\lst@temp\expandafter,#2,#1,\@empty\relax
-        \expandafter\lst@next
-    \fi}
-\ifx\iffalse\else\fi
-\gdef\lst@IOOOfirst#1\relax#2#3{\fi#2}
-\gdef\lst@IFONEOUTOF#1\relax#2{%
-    \uppercase{\def\lst@temp##1,#1},##2##3\relax{%
-        \ifx\@empty##2\else \expandafter\lst@IOOOfirst \fi}%
-    \def\lst@next{\lst@IFONEOUTOF@#1\relax}%
-    \expandafter\lst@next#2\relax}
-\gdef\lst@IFONEOUTOF@#1\relax#2#3{%
-    \ifx#2\relax
-        \expandafter\@secondoftwo
-    \else
-        \uppercase
-            {\expandafter\lst@temp\expandafter,#2,#1,\@empty\relax}%
-        \expandafter\lst@next
-    \fi}
-\gdef\lst@KWTest{%
-    \begingroup \let\lst@UM\@empty
-    \expandafter\xdef\expandafter\@gtempa\expandafter{\the\lst@token}%
-    \endgroup
-    \expandafter\lst@IfOneOutOf\@gtempa\relax}
-\gdef\lst@KeywordTest#1#2#3{\lst@KWTest #2{\let\lst@thestyle#3}{}}
-\global\let\lst@KEYWORDTEST\lst@KeywordTest
-\gdef\lst@WorkingTest#1#2#3{\lst@KWTest #2#3{}}
-\global\let\lst@WORKINGTEST\lst@WorkingTest
-\fi
-\lst@Key{sensitive}\relax[t]{\lstKV@SetIf{#1}\lst@ifsensitive}
-\lst@AddToHook{SetLanguage}{\let\lst@ifsensitive\iftrue}
-\lst@AddToHook{Init}
-    {\lst@ifsensitive\else
-         \let\lst@KeywordTest\lst@KEYWORDTEST
-         \let\lst@WorkingTest\lst@WORKINGTEST
-         \let\lst@IfOneOutOf\lst@IFONEOUTOF
-     \fi}
-\gdef\lst@MakeMacroUppercase#1{%
-    \ifx\@undefined#1\else \uppercase\expandafter
-        {\expandafter\def\expandafter#1\expandafter{#1}}%
-    \fi}
-\gdef\lst@InstallTest#1#2#3#4#5#6#7#8{%
-    \lst@AddToHook{TrackKeywords}{\lst@TrackKeywords{#1}#2#4#6#7#8}%
-    \lst@AddToHook{PostTrackKeywords}{\lst@PostTrackKeywords#2#3#4#5}}
-\lst@AddToHook{Init}{\lsthk@TrackKeywords\lsthk@PostTrackKeywords}
-\lst@AddToHook{TrackKeywords}
-    {\global\let\lst@DoDefineKeywords\@empty}% init
-\lst@AddToHook{PostTrackKeywords}
-    {\lst@DoDefineKeywords
-     \global\let\lst@DoDefineKeywords\@empty}% init
-\lst@AddToHook{Output}{\lst@ifkeywords \lsthk@DetectKeywords \fi}
-\lst@AddToHook{DetectKeywords}{}% init
-\lst@AddToHook{ModeTrue}{\let\lst@ifkeywords\iffalse}
-\lst@AddToHookExe{Init}{\let\lst@ifkeywords\iftrue}
-\gdef\lst@InstallTestNow#1#2#3#4#5{%
-    \@ifundefined{\string#2#1}%
-    {\global\@namedef{\string#2#1}{}%
-     \edef\@tempa{%
-         \noexpand\lst@AddToHook{\ifx#5dDetectKeywords\else Output\fi}%
-         {\ifx #4w\noexpand\lst@WorkingTest
-             \else\noexpand\lst@KeywordTest \fi
-          {#1}\noexpand#2\noexpand#3}}%
-     \lst@ifsavemem
-         \@tempa
-     \else
-         \@ifundefined{\@lst#1@if@ins}%
-             {\@tempa \global\@namedef{\@lst#1@if@ins}{}}%
-             {}%
-     \fi}
-    {}}
-\gdef\lst@TrackKeywords#1#2#3#4#5#6{%
-    \lst@false
-    \def\lst@arg{{#1}#4}%
-    \expandafter\expandafter\expandafter\lst@TK@
-        \expandafter\lst@arg#2\relax\relax
-    \lst@ifsavemem\else
-        \def\lst@arg{{#1}#4#2}%
-        \expandafter\expandafter\expandafter\lst@TK@@
-            \expandafter\lst@arg#3\relax\relax
-    \fi
-    \lst@if \lst@InstallTestNow{#1}#2#4#5#6\fi}
-\gdef\lst@TK@#1#2#3#4{%
-  \ifx\lst@ifsensitive\lst@ifsensitivedefed
-    \ifx#3#4\else
-      \lst@true
-      \lst@ifsavemem\else
-          \lst@UndefineKeywords{#1}#4#2%
-          \lst@AddTo\lst@DoDefineKeywords{\lst@DefineKeywords{#1}#3#2}%
-      \fi
-    \fi
-  \else
-    \ifx#3\relax\else
-      \lst@true
-      \lst@ifsavemem\else
-          \lst@UndefineKeywords{#1}#4#2%
-          \lst@AddTo\lst@DoDefineKeywords{\lst@DefineKeywords{#1}#3#2}%
-      \fi
-    \fi
-  \fi
-  \lst@ifsavemem \ifx#3\relax\else
-      \lst@ifsensitive\else \lst@MakeMacroUppercase#3\fi
-  \fi \fi
-  \ifx#3\relax
-      \expandafter\@gobblethree
-  \fi
-  \lst@TK@{#1}#2}
-\gdef\lst@TK@@#1#2#3#4#5{%
-    \ifx#4\relax
-        \expandafter\@gobblefour
-    \else
-        \lst@IfSubstring{#4#5}#3{}{\lst@UndefineKeywords{#1}#5#2}%
-    \fi
-    \lst@TK@@{#1}#2#3}
-\lst@AddToHook{InitVars}
-    {\global\let\lst@ifsensitivedefed\lst@ifsensitive}
-\gdef\lst@PostTrackKeywords#1#2#3#4{%
-    \lst@ifsavemem\else
-        \global\let#3#1%
-        \global\let#4#2%
-    \fi}
-\lst@Key{classoffset}\z@{\def\lst@classoffset{#1}}
-\gdef\lst@InstallFamily#1#2#3#4#5{%
-    \lst@Key{#2}\relax{\lst@UseFamily{#2}##1\relax\lst@MakeKeywords}%
-    \lst@Key{more#2}\relax
-        {\lst@UseFamily{#2}##1\relax\lst@MakeMoreKeywords}%
-    \lst@Key{delete#2}\relax
-        {\lst@UseFamily{#2}##1\relax\lst@DeleteKeywords}%
-    \ifx\@empty#3\@empty\else
-        \lst@Key{#3}{#4}{\lstKV@OptArg[\@ne]{##1}%
-            {\@tempcnta\lst@classoffset \advance\@tempcnta####1\relax
-             \@namedef{lst@#3\ifnum\@tempcnta=\@ne\else \the\@tempcnta
-                             \fi}{####2}}}%
-    \fi
-    \expandafter\lst@InstallFamily@
-        \csname\@lst @#2@data\expandafter\endcsname
-        \csname\@lst @#5\endcsname {#1}{#2}{#3}}
-\gdef\lst@InstallFamily@#1#2#3#4#5#6#7#8{%
-    \gdef#1{{#3}{#4}{#5}#2#7}%
-    \long\def\lst@temp##1{#6}%
-    \ifx\lst@temp\@gobble
-        \lst@AddTo#1{s#8}%
-    \else
-        \lst@AddTo#1{w#8}%
-        \global\@namedef{lst@g#4@wp}##1{#6}%
-    \fi}
-\gdef\lst@UseFamily#1{%
-    \def\lst@family{#1}%
-    \@ifnextchar[\lst@UseFamily@{\lst@UseFamily@[\@ne]}}
-\gdef\lst@UseFamily@[#1]{%
-    \@tempcnta\lst@classoffset \advance\@tempcnta#1\relax
-    \lst@ProvideFamily\lst@family
-    \lst@UseFamily@a
-        {\lst@family\ifnum\@tempcnta=\@ne\else \the\@tempcnta \fi}}
-\gdef\lst@UseFamily@a#1{%
-    \expandafter\lst@UseFamily@b
-       \csname\@lst @#1@list\expandafter\endcsname
-       \csname\@lst @#1\expandafter\endcsname
-       \csname\@lst @#1@also\expandafter\endcsname
-       \csname\@lst @g#1\endcsname}
-\gdef\lst@UseFamily@b#1#2#3#4#5\relax#6{\lstKV@XOptArg[]{#5}#6#1#2#3#4}
-\gdef\lst@ProvideFamily#1{%
-    \@ifundefined{lstfam@#1\ifnum\@tempcnta=\@ne\else\the\@tempcnta\fi}%
-    {\global\@namedef{lstfam@#1\ifnum\@tempcnta=\@ne\else
-                                        \the\@tempcnta\fi}{}%
-     \expandafter\expandafter\expandafter\lst@ProvideFamily@
-         \csname\@lst @#1@data\endcsname
-         {\ifnum\@tempcnta=\@ne\else \the\@tempcnta \fi}}%
-    {}}%
-\gdef\lst@ProvideFamily@#1#2#3#4#5#6#7#8{%
-    \expandafter\xdef\csname\@lst @g#2#8@sty\endcsname
-    {\if #6w%
-         \expandafter\noexpand\csname\@lst @g#2@wp\endcsname{#8}%
-     \else
-         \expandafter\noexpand\csname\@lst @#3#8\endcsname
-     \fi}%
-    \ifx\@empty#3\@empty\else
-        \edef\lst@temp{\noexpand\lst@AddToHook{Init}{%
-            \noexpand\lst@ProvideStyle\expandafter\noexpand
-                \csname\@lst @#3#8\endcsname\noexpand#4}}%
-        \lst@temp
-    \fi
-    \expandafter\lst@ProvideFamily@@
-         \csname\@lst @#2#8@list\expandafter\endcsname
-         \csname\@lst @#2#8\expandafter\endcsname
-         \csname\@lst @#2#8@also\expandafter\endcsname
-         \csname\@lst @g#2#8@list\expandafter\endcsname
-         \csname\@lst @g#2#8\expandafter\endcsname
-         \csname\@lst @g#2#8@sty\expandafter\endcsname
-         {#1}#5#6#7}
-\gdef\lst@ProvideFamily@@#1#2#3#4#5#6#7#8{%
-    \gdef#1{#2#5}\global\let#2\@empty \global\let#3\@empty % init
-    \gdef#4{#2#5}\global\let#5\@empty % init
-    \if #8l\relax
-        \lst@AddToHook{SetLanguage}{\def#1{#2#5}\let#2\@empty}%
-    \fi
-    \lst@InstallTest{#7}#1#2#4#5#6}
-\gdef\lst@InstallKeywords#1#2#3#4#5{%
-    \lst@Key{#2}\relax
-        {\lst@UseFamily{#2}[\@ne]##1\relax\lst@MakeKeywords}%
-    \lst@Key{more#2}\relax
-        {\lst@UseFamily{#2}[\@ne]##1\relax\lst@MakeMoreKeywords}%
-    \lst@Key{delete#2}\relax
-        {\lst@UseFamily{#2}[\@ne]##1\relax\lst@DeleteKeywords}%
-    \ifx\@empty#3\@empty\else
-        \lst@Key{#3}{#4}{\@namedef{lst@#3}{##1}}%
-    \fi
-    \expandafter\lst@InstallFamily@
-        \csname\@lst @#2@data\expandafter\endcsname
-        \csname\@lst @#5\endcsname {#1}{#2}{#3}}
-\gdef\lst@ProvideStyle#1#2{%
-    \ifx#1\@undefined \let#1#2%
-    \else\ifx#1\relax \let#1#2\fi\fi}
-\gdef\lst@BuildClassList#1#2,{%
-    \ifx\relax#2\@empty\else
-        \ifx\@empty#2\@empty\else
-            \lst@lExtend#1{\csname\@lst @#2\expandafter\endcsname
-                           \csname\@lst @g#2\endcsname}%
-        \fi
-        \expandafter\lst@BuildClassList\expandafter#1
-    \fi}
-\gdef\lst@DeleteClassesIn#1#2{%
-    \expandafter\lst@DCI@\expandafter#1#2\relax\relax}
-\gdef\lst@DCI@#1#2#3{%
-    \ifx#2\relax
-        \expandafter\@gobbletwo
-    \else
-        \def\lst@temp##1#2#3##2{%
-            \lst@lAddTo#1{##1}%
-            \ifx ##2\relax\else
-                \expandafter\lst@temp
-            \fi ##2}%
-        \let\@tempa#1\let#1\@empty
-        \expandafter\lst@temp\@tempa#2#3\relax
-    \fi
-    \lst@DCI@#1}
-\gdef\lst@MakeKeywords[#1]#2#3#4#5#6{%
-    \def#3{#4#6}\let#4\@empty \let#5\@empty
-    \lst@MakeMoreKeywords[#1]{#2}#3#4#5#6}
-\gdef\lst@MakeMoreKeywords[#1]#2#3#4#5#6{%
-    \lst@BuildClassList#3#1,\relax,%
-    \lst@DefOther\lst@temp{,#2}\lst@lExtend#4\lst@temp}
-\gdef\lst@DeleteKeywords[#1]#2#3#4#5#6{%
-    \lst@MakeKeywords[#1]{#2}\@tempa\@tempb#5#6%
-    \lst@DeleteClassesIn#3\@tempa
-    \lst@DeleteKeysIn#4\@tempb}
-\lst@InstallFamily k{keywords}{keywordstyle}\bfseries{keywordstyle}{}ld
-\gdef\lst@DefKeywordstyle#1#2\@nil@{%
-   \@namedef{lst@keywordstyle\ifnum\@tempcnta=\@ne\else\the\@tempcnta
-                             \fi}{#1#2}}%
-\lst@Key{keywordstyle}{\bfseries}{\lstKV@OptArg[\@ne]{#1}%
-  {\@tempcnta\lst@classoffset \advance\@tempcnta##1\relax
-   \@ifstar{\lst@DefKeywordstyle{\uppercase\expandafter{%
-                                 \expandafter\lst@token
-                                 \expandafter{\the\lst@token}}}}%
-           {\lst@DefKeywordstyle{}}##2\@nil@}}
-\lst@Key{ndkeywords}\relax
-    {\lst@UseFamily{keywords}[\tw@]#1\relax\lst@MakeKeywords}%
-\lst@Key{morendkeywords}\relax
-    {\lst@UseFamily{keywords}[\tw@]#1\relax\lst@MakeMoreKeywords}%
-\lst@Key{deletendkeywords}\relax
-    {\lst@UseFamily{keywords}[\tw@]#1\relax\lst@DeleteKeywords}%
-\lst@Key{ndkeywordstyle}\relax{\@namedef{lst@keywordstyle2}{#1}}%
-\lst@Key{keywordsprefix}\relax{\lst@DefActive\lst@keywordsprefix{#1}}
-\global\let\lst@keywordsprefix\@empty
-\lst@AddToHook{SelectCharTable}
-    {\ifx\lst@keywordsprefix\@empty\else
-         \expandafter\lst@CArg\lst@keywordsprefix\relax
-             \lst@CDef{}%
-                      {\lst@ifletter\else
-                           \global\let\lst@prefixkeyword\@empty
-                       \fi}%
-                      {}%
-     \fi}
-\lst@AddToHook{Init}{\global\let\lst@prefixkeyword\relax}
-\lst@AddToHook{Output}
-    {\ifx\lst@prefixkeyword\@empty
-         \let\lst@thestyle\lst@gkeywords@sty
-         \global\let\lst@prefixkeyword\relax
-     \fi}%
-\lst@Key{otherkeywords}{}{%
-    \let\lst@otherkeywords\@empty
-    \lst@for{#1}\do{%
-      \lst@MakeActive{##1}%
-      \lst@lExtend\lst@otherkeywords{%
-          \expandafter\lst@CArg\lst@temp\relax\lst@CDef
-              {}\lst@PrintOtherKeyword\@empty}}}
-\lst@AddToHook{SelectCharTable}{\lst@otherkeywords}
-\gdef\lst@PrintOtherKeyword#1\@empty{%
-    \lst@XPrintToken
-    \begingroup
-      \lst@modetrue \lsthk@TextStyle
-      \let\lst@ProcessDigit\lst@ProcessLetter
-      \let\lst@ProcessOther\lst@ProcessLetter
-      \lst@lettertrue
-      #1%
-  \lst@SaveToken
-    \endgroup
-\lst@RestoreToken
-\global\let\lst@savedcurrstyle\lst@currstyle
-\let\lst@currstyle\lst@gkeywords@sty
-    \lst@Output
-\let\lst@currstyle\lst@savedcurrstyle}
-\lst@EndAspect
-\lst@BeginAspect[keywords]{emph}
-\lst@InstallFamily e{emph}{emphstyle}{}{emphstyle}{}od
-\lst@EndAspect
-\lst@BeginAspect[keywords]{tex}
-\lst@InstallFamily {cs}{texcs}{texcsstyle}\relax{keywordstyle}
-    {\ifx\lst@lastother\lstum@backslash
-         \expandafter\let\expandafter\lst@thestyle
-                         \csname lst@texcsstyle#1\endcsname
-     \fi}
-    ld
-\lst@Key{texcsstyle}\relax
-  {\@ifstar{\lst@true\lst@DefTexcsstyle}%
-           {\lst@false\lst@DefTexcsstyle}#1\@nil@}
-\gdef\lst@DefTexcsstyle#1\@nil@{%
-    \let\lst@iftexcsincludebs\lst@if
-    \lstKV@OptArg[\@ne]{#1}%
-    {\@tempcnta\lst@classoffset \advance\@tempcnta##1\relax
-     \@namedef{lst@texcsstyle\ifnum\@tempcnta=\@ne\else
-                                   \the\@tempcnta \fi}{##2}}}%
-\global\let\lst@iftexcsincludebs\iffalse
-\let\lst@iftexcsincludebs\iffalse
-\lst@AddToHook{SelectCharTable}
-{\lst@iftexcsincludebs \ifx\@empty\lst@texcs\else
-     \lst@DefSaveDef{`\\}\lsts@texcsbs
-      {\lst@ifletter
-           \lst@Output
-       \else
-           \lst@OutputOther
-       \fi
-       \lst@Merge\lsts@texcsbs}%
- \fi \fi}
-\lst@EndAspect
-\lst@BeginAspect[keywords]{directives}
-\lst@NewMode\lst@CDmode
-\lst@AddToHook{EOL}{\ifnum\lst@mode=\lst@CDmode \lst@LeaveMode \fi}
-\lst@InstallKeywords{d}{directives}{directivestyle}\relax{keywordstyle}
-    {\ifnum\lst@mode=\lst@CDmode
-         \let\lst@thestyle\lst@directivestyle
-     \fi}
-    ld
-\global\let\lst@directives\@empty % init
-\lst@AddTo\lst@delimtypes{,directive}
-\gdef\lst@Delim@directive#1\@empty#2#3#4{%
-    \lst@CArg #1\relax\lst@DefDelimB
-        {\lst@CalcColumn}%
-        {}%
-        {\ifnum\@tempcnta=\z@
-             \def\lst@bnext{#2\lst@CDmode{#4\lst@Lmodetrue}%
-                \let\lst@currstyle\lst@directivestyle}%
- \fi
- \@gobblethree}%
-        #2\lst@CDmode{#4\lst@Lmodetrue}}
-\lst@AddTo\lst@stringtypes{,directive}
-\gdef\lst@StringDM@directive#1#2#3\@empty{%
-    \lst@CArg #2\relax\lst@CDef
-        {}%
-        {\let\lst@bnext\lst@CArgEmpty
-         \ifnum\lst@mode=\lst@CDmode
-             \def\lst@bnext{\lst@BeginString{#1}}%
-         \fi
-         \lst@bnext}%
-        \@empty
-    \lst@CArg #3\relax\lst@CDef
-        {}%
-        {\let\lst@enext\lst@CArgEmpty
-         \ifnum #1=\lst@mode
-             \let\lst@bnext\lst@EndString
-         \fi
-         \lst@bnext}%
-        \@empty}
-\lst@EndAspect
-\lst@BeginAspect[keywords,comments]{keywordcomments}
-\lst@NewMode\lst@KCmode \lst@NewMode\lst@KCSmode
-\gdef\lst@BeginKC{\aftergroup\aftergroup\aftergroup\lst@BeginKC@}%
-\gdef\lst@BeginKC@{%
-    \lst@ResetToken
-    \lst@BeginComment\lst@KCmode{{\lst@commentstyle}\lst@modetrue}%
-                     \@empty}%
-\gdef\lst@BeginKCS{\aftergroup\aftergroup\aftergroup\lst@BeginKCS@}%
-\gdef\lst@BeginKCS@{%
-    \lst@ResetToken
-    \lst@BeginComment\lst@KCSmode{{\lst@commentstyle}\lst@modetrue}%
-                     \@empty}%
-\lst@AddToHook{PostOutput}{\lst@KCpost \global\let\lst@KCpost\@empty}
-\global\let\lst@KCpost\@empty % init
-\gdef\lst@EndKC{\lst@SaveToken \lst@LeaveMode \lst@RestoreToken
-    \let\lst@thestyle\lst@identifierstyle \lsthk@Output}
-\lst@InstallKeywords{kc}{keywordcomment}{}\relax{}
-    {\ifnum\lst@mode=\lst@KCmode
-         \edef\lst@temp{\the\lst@token}%
-         \ifx\lst@temp\lst@KCmatch
-             \lst@EndKC
-         \fi
-     \else
-         \lst@ifmode\else
-             \xdef\lst@KCmatch{\the\lst@token}%
-             \global\let\lst@KCpost\lst@BeginKC
-         \fi
-     \fi}
-    lo
-\lst@Key{keywordcommentsemicolon}{}{\lstKV@ThreeArg{#1}%
-    {\def\lst@KCAkeywordsB{##1}%
-     \def\lst@KCAkeywordsE{##2}%
-     \def\lst@KCBkeywordsB{##3}%
-     \def\lst@KCkeywords{##1##2##3}}}
-\lst@AddToHook{SetLanguage}{%
-    \let\lst@KCAkeywordsB\@empty \let\lst@KCAkeywordsE\@empty
-    \let\lst@KCBkeywordsB\@empty \let\lst@KCkeywords\@empty}
-\lst@AddToHook{SelectCharTable}
-    {\ifx\lst@KCkeywords\@empty\else
-        \lst@DefSaveDef{`\;}\lsts@EKC
-            {\lst@XPrintToken
-             \ifnum\lst@mode=\lst@KCmode \lst@EndComment\@empty \else
-             \ifnum\lst@mode=\lst@KCSmode \lst@EndComment\@empty
-             \fi \fi
-             \lsts@EKC}%
-     \fi}
-\gdef\lst@KCAWorkB{%
-    \lst@ifmode\else \global\let\lst@KCpost\lst@BeginKC \fi}
-\gdef\lst@KCBWorkB{%
-    \lst@ifmode\else \global\let\lst@KCpost\lst@BeginKCS \fi}
-\gdef\lst@KCAWorkE{\ifnum\lst@mode=\lst@KCmode \lst@EndKC \fi}
-\lst@ProvideFamily@@
-    \lst@KCAkeywordsB@list\lst@KCAkeywordsB \lst@KC@also
-    \lst@gKCAkeywordsB@list\lst@gKCAkeywordsB \lst@KCAWorkB
-    {kcb}owo % prefix, other key, working procedure, Output hook
-\lst@ProvideFamily@@
-    \lst@KCAkeywordsE@list\lst@KCAkeywordsE \lst@KC@also
-    \lst@gKCAkeywordsE@list\lst@gKCAkeywordsE \lst@KCAWorkE
-    {kce}owo
-\lst@ProvideFamily@@
-    \lst@KCBkeywordsB@list\lst@KCBkeywordsB \lst@KC@also
-    \lst@gKCBkeywordsB@list\lst@gKCBkeywordsB \lst@KCBWorkB
-    {kcs}owo
-\lst@EndAspect
-\lst@BeginAspect[keywords]{index}
-\lst@InstallFamily w{index}{indexstyle}\lstindexmacro{indexstyle}
-    {\csname\@lst @indexstyle#1\expandafter\endcsname
-         \expandafter{\the\lst@token}}
-    od
-\lst@UserCommand\lstindexmacro#1{\index{{\ttfamily#1}}}
-\lst@EndAspect
-\lst@BeginAspect[keywords]{procnames}
-\gdef\lst@procnametrue{\global\let\lst@ifprocname\iftrue}
-\gdef\lst@procnamefalse{\global\let\lst@ifprocname\iffalse}
-\lst@AddToHook{Init}{\lst@procnamefalse}
-\lst@AddToHook{DetectKeywords}
-    {\lst@ifprocname
-         \let\lst@thestyle\lst@procnamestyle
-         \lst@ifindexproc \csname\@lst @gindex@sty\endcsname \fi
-         \lst@procnamefalse
-     \fi}
-\lst@Key{procnamestyle}{}{\def\lst@procnamestyle{#1}}
-\lst@Key{indexprocnames}{false}[t]{\lstKV@SetIf{#1}\lst@ifindexproc}
-\lst@AddToHook{Init}{\lst@ifindexproc \lst@indexproc \fi}
-\gdef\lst@indexproc{%
-    \@ifundefined{lst@indexstyle1}%
-        {\@namedef{lst@indexstyle1}##1{}}%
-        {}}
-\lst@InstallKeywords w{procnamekeys}{}\relax{}
-    {\global\let\lst@PNpost\lst@procnametrue}
-    od
-\lst@AddToHook{PostOutput}{\lst@PNpost\global\let\lst@PNpost\@empty}
-\global\let\lst@PNpost\@empty % init
-\lst@EndAspect
-\lst@BeginAspect{style}
-\@ifundefined{lststylefiles}
-    {\lst@UserCommand\lststylefiles{lststy0.sty}}{}
-\lst@UserCommand\lstdefinestyle{\lst@DefStyle\iftrue}
-\lst@UserCommand\lst@definestyle{\lst@DefStyle\iffalse}
-\gdef\lst@DefStyle{\lst@DefDriver{style}{sty}\lstset}
-\global\@namedef{lststy@$}{\lsthk@EmptyStyle}
-\lst@AddToHook{EmptyStyle}{}% init
-\lst@Key{style}\relax{%
-    \lst@LAS{style}{sty}{[]{#1}}\lst@NoAlias\lststylefiles
-        \lsthk@SetStyle
-        {}}
-\lst@AddToHook{SetStyle}{}% init
-\lst@EndAspect
-\lst@BeginAspect{language}
-\@ifundefined{lstdriverfiles}
-    {\lst@UserCommand\lstlanguagefiles{lstlang0.sty}}{}
-\lst@UserCommand\lstdefinelanguage{\lst@DefLang\iftrue}
-\lst@UserCommand\lst@definelanguage{\lst@DefLang\iffalse}
-\gdef\lst@DefLang{\lst@DefDriver{language}{lang}\lstset}
-\lstdefinelanguage{}{}
-\lst@Key{language}\relax{\lstKV@OptArg[]{#1}%
-    {\lst@LAS{language}{lang}{[##1]{##2}}\lst@FindAlias\lstlanguagefiles
-         \lsthk@SetLanguage
-         {\lst@FindAlias[##1]{##2}%
-          \let\lst@language\lst@malias
-          \let\lst@dialect\lst@oalias}}}
-\lst@Key{alsolanguage}\relax{\lstKV@OptArg[]{#1}%
-    {\lst@LAS{language}{lang}{[##1]{##2}}\lst@FindAlias\lstlanguagefiles
-         {}%
-         {\lst@FindAlias[##1]{##2}%
-          \let\lst@language\lst@malias
-          \let\lst@dialect\lst@oalias}}}
-\lst@AddToHook{SetLanguage}{}% init
-\lst@UserCommand\lstalias{\@ifnextchar[\lstalias@\lstalias@@}
-\gdef\lstalias@[#1]#2{\lstalias@b #2$#1}
-\gdef\lstalias@b#1[#2]#3{\lst@NormedNameDef{lsta@#1}{#3$#2}}
-\gdef\lstalias@@#1#2{\lst@NormedNameDef{lsta@#1}{#2}}
-\lst@Key{defaultdialect}\relax
-    {\lstKV@OptArg[]{#1}{\lst@NormedNameDef{lstdd@##2}{##1}}}
-\gdef\lst@FindAlias[#1]#2{%
-    \lst@NormedDef\lst@oalias{#1}%
-    \lst@NormedDef\lst@malias{#2}%
-    \@ifundefined{lsta@\lst@malias}{}%
-        {\edef\lst@malias{\csname\@lst a@\lst@malias\endcsname}}%
-    \ifx\@empty\lst@oalias \@ifundefined{lstdd@\lst@malias}{}%
-        {\edef\lst@oalias{\csname\@lst dd@\lst@malias\endcsname}}%
-    \fi
-    \edef\lst@temp{\lst@malias $\lst@oalias}%
-    \@ifundefined{lsta@\lst@temp}{}%
-        {\edef\lst@temp{\csname\@lst a@\lst@temp\endcsname}}%
-    \expandafter\lst@FindAlias@\lst@temp $}
-\gdef\lst@FindAlias@#1$#2${%
-    \def\lst@malias{#1}\def\lst@oalias{#2}%
-    \ifx\@empty\lst@oalias \@ifundefined{lstdd@\lst@malias}{}%
-        {\edef\lst@oalias{\csname\@lst dd@\lst@malias\endcsname}}%
-    \fi}
-\gdef\lst@RequireLanguages#1{%
-    \lst@Require{language}{lang}{#1}\lst@FindAlias\lstlanguagefiles
-    \ifx\lst@loadaspects\@empty\else
-        \lst@RequireAspects\lst@loadaspects
-    \fi}
-\global\let\lstloadlanguages\lst@RequireLanguages
-\lst@EndAspect
-\lst@BeginAspect{formats}
-\@ifundefined{lstformatfiles}
-    {\lst@UserCommand\lstformatfiles{lstfmt0.sty}}{}
-\lst@UserCommand\lstdefineformat{\lst@DefFormat\iftrue}
-\lst@UserCommand\lst@defineformat{\lst@DefFormat\iffalse}
-\gdef\lst@DefFormat{\lst@DefDriver{format}{fmt}\lst@UseFormat}
-\lstdefineformat{}{}
-\lst@Key{format}\relax{%
-    \lst@LAS{format}{fmt}{[]{#1}}\lst@NoAlias\lstformatfiles
-        \lsthk@SetFormat
-        {}}
-\lst@AddToHook{SetFormat}{\let\lst@fmtformat\@empty}% init
-\gdef\lst@fmtSplit#1#2{%
-    \def\lst@temp##1#2##2\relax##3{%
-        \ifnum##3=\z@
-            \ifx\@empty##2\@empty
-                \lst@false
-                \let\lst@fmta#1%
-                \let\lst@fmtb\@empty
-            \else
-                \expandafter\lst@temp#1\relax\@ne
-            \fi
-        \else
-            \def\lst@fmta{##1}\def\lst@fmtb{##2}%
-        \fi}%
-    \lst@true
-    \expandafter\lst@temp#1#2\relax\z@}
-\gdef\lst@IfNextCharWhitespace#1#2#3{%
-    \lst@IfSubstring#3\lst@whitespaces{#1}{#2}#3}
-\begingroup
-\catcode`\^^I=12\catcode`\^^J=12\catcode`\^^M=12\catcode`\^^L=12\relax%
-\lst@DefActive\lst@whitespaces{\ ^^I^^J^^M}% add ^^L
-\global\let\lst@whitespaces\lst@whitespaces%
-\endgroup
-\gdef\lst@fmtIfIdentifier#1{%
-    \ifx\relax#1\@empty
-        \expandafter\@secondoftwo
-    \else
-        \expandafter\lst@fmtIfIdentifier@\expandafter#1%
-    \fi}
-\gdef\lst@fmtIfIdentifier@#1#2\relax{%
-    \let\lst@next\@secondoftwo
-    \ifnum`#1=`_\else
-    \ifnum`#1<64\else
-    \ifnum`#1<91\let\lst@next\@firstoftwo\else
-    \ifnum`#1<97\else
-    \ifnum`#1<123\let\lst@next\@firstoftwo\else
-    \fi \fi \fi \fi \fi
-    \lst@next}
-\gdef\lst@fmtIfNextCharIn#1{%
-    \ifx\@empty#1\@empty \expandafter\@secondoftwo \else
-                         \def\lst@next{\lst@fmtIfNextCharIn@{#1}}%
-                         \expandafter\lst@next\fi}
-\gdef\lst@fmtIfNextCharIn@#1#2#3#4{%
-    \def\lst@temp##1#4##2##3\relax{%
-        \ifx \@empty##2\expandafter\@secondoftwo
-                 \else \expandafter\@firstoftwo \fi}%
-    \lst@temp#1#4\@empty\relax{#2}{#3}#4}
-\gdef\lst@fmtCDef#1{\lst@fmtCDef@#1}
-\gdef\lst@fmtCDef@#1#2#3#4#5#6#7{%
-    \lst@CDefIt#1{#2}{#3}%
-               {\lst@fmtIfNextCharIn{#5}{#4#2#3}{#6#4#2#3#7}}%
-               #4%
-               {}{}{}}
-\gdef\lst@fmtCDefX#1{\lst@fmtCDefX@#1}
-\gdef\lst@fmtCDefX@#1#2#3#4#5#6#7{%
-    \let#4#1%
-    \ifx\@empty#2\@empty
-        \def#1{\lst@fmtIfNextCharIn{#5}{#4}{#6#7}}%
-    \else \ifx\@empty#3\@empty
-        \def#1##1{%
-            \ifx##1#2%
-                \def\lst@next{\lst@fmtIfNextCharIn{#5}{#4##1}%
-                                                      {#6#7}}%
-            \else
-                 \def\lst@next{#4##1}%
-            \fi
-            \lst@next}%
-    \else
-        \def#1{%
-            \lst@IfNextCharsArg{#2#3}%
-                {\lst@fmtIfNextCharIn{#5}{\expandafter#4\lst@eaten}%
-                                         {#6#7}}%
-                {\expandafter#4\lst@eaten}}%
-    \fi \fi}
-\gdef\lst@UseFormat#1{%
-    \def\lst@fmtwhole{#1}%
-    \lst@UseFormat@}
-\gdef\lst@UseFormat@{%
-    \lst@fmtSplit\lst@fmtwhole,%
-    \let\lst@fmtwhole\lst@fmtb
-    \ifx\lst@fmta\@empty\else
-        \lst@fmtSplit\lst@fmta=%
-        \ifx\@empty\lst@fmta\else
-            \expandafter\lstKV@XOptArg\expandafter[\expandafter]%
-                \expandafter{\lst@fmtb}\lst@UseFormat@b
-        \fi
-    \fi
-    \ifx\lst@fmtwhole\@empty\else
-        \expandafter\lst@UseFormat@
-    \fi}
-\gdef\lst@UseFormat@b[#1]#2{%
-    \def\lst@fmtc{{#1}}\lst@lExtend\lst@fmtc{\expandafter{\lst@fmta}}%
-    \def\lst@fmtb{#2}%
-    \lst@fmtSplit\lst@fmtb\string
-    \ifx\@empty\lst@fmta
-        \lst@lAddTo\lst@fmtc{{}}%
-    \else
-        \lst@lExtend\lst@fmtc{\expandafter
-            {\expandafter\lst@fmtPre\expandafter{\lst@fmta}}}%
-    \fi
-    \ifx\@empty\lst@fmtb
-        \lst@lAddTo\lst@fmtc{{}}%
-    \else
-        \lst@lExtend\lst@fmtc{\expandafter
-            {\expandafter\lst@fmtPost\expandafter{\lst@fmtb}}}%
-    \fi
-    \expandafter\lst@UseFormat@c\lst@fmtc}
-\gdef\lst@UseFormat@c#1#2#3#4{%
-    \lst@fmtIfIdentifier#2\relax
-    {\lst@fmtIdentifier{#2}%
-     \lst@if\else \PackageWarning{Listings}%
-         {Cannot drop identifier in format definition}%
-     \fi}%
-    {\lst@if
-         \lst@lAddTo\lst@fmtformat{\lst@CArgX#2\relax\lst@fmtCDef}%
-     \else
-         \lst@lAddTo\lst@fmtformat{\lst@CArgX#2\relax\lst@fmtCDefX}%
-     \fi
-     \lst@DefActive\lst@fmtc{#1}%
-     \lst@lExtend\lst@fmtformat{\expandafter{\lst@fmtc}{#3}{#4}}}}
-\lst@AddToHook{SelectCharTable}{\lst@fmtformat}
-\global\let\lst@fmtformat\@empty
-\gdef\lst@fmtPre#1{%
-    \lst@PrintToken
-    \begingroup
-    \let\newline\lst@fmtEnsureNewLine
-    \let\space\lst@fmtEnsureSpace
-    \let\indent\lst@fmtIndent
-    \let\noindent\lst@fmtNoindent
-    #1%
-    \endgroup}
-\gdef\lst@fmtPost#1{%
-    \global\let\lst@fmtPostOutput\@empty
-    \begingroup
-    \def\newline{\lst@AddTo\lst@fmtPostOutput\lst@fmtEnsureNewLine}%
-    \def\space{\aftergroup\lst@fmtEnsurePostSpace}%
-    \def\indent{\lst@AddTo\lst@fmtPostOutput\lst@fmtIndent}%
-    \def\noindent{\lst@AddTo\lst@fmtPostOutput\lst@fmtNoindent}%
-    \aftergroup\lst@PrintToken
-    #1%
-    \endgroup}
-\lst@AddToHook{Init}{\global\let\lst@fmtPostOutput\@empty}
-\lst@AddToHook{PostOutput}
-    {\lst@fmtPostOutput \global\let\lst@fmtPostOutput\@empty}
-\gdef\lst@fmtEnsureSpace{%
-    \lst@ifwhitespace\else \expandafter\lst@ProcessSpace \fi}
-\gdef\lst@fmtEnsurePostSpace{%
-    \lst@IfNextCharWhitespace{}{\lst@ProcessSpace}}
-\lst@Key{fmtindent}{20pt}{\def\lst@fmtindent{#1}}
-\newdimen\lst@fmtcurrindent
-\lst@AddToHook{InitVars}{\global\lst@fmtcurrindent\z@}
-\gdef\lst@fmtIndent{\global\advance\lst@fmtcurrindent\lst@fmtindent}
-\gdef\lst@fmtNoindent{\global\advance\lst@fmtcurrindent-\lst@fmtindent}
-\gdef\lst@fmtEnsureNewLine{%
-    \global\advance\lst@newlines\@ne
-    \global\advance\lst@newlinesensured\@ne
-    \lst@fmtignoretrue}
-\lst@AddToAtTop\lst@DoNewLines{%
-    \ifnum\lst@newlines>\lst@newlinesensured
-        \global\advance\lst@newlines-\lst@newlinesensured
-    \fi
-    \global\lst@newlinesensured\z@}
-\newcount\lst@newlinesensured % global
-\lst@AddToHook{Init}{\global\lst@newlinesensured\z@}
-\gdef\lst@fmtignoretrue{\let\lst@fmtifignore\iftrue}
-\gdef\lst@fmtignorefalse{\let\lst@fmtifignore\iffalse}
-\lst@AddToHook{InitVars}{\lst@fmtignorefalse}
-\lst@AddToHook{Output}{\lst@fmtignorefalse}
-\gdef\lst@fmtUseLostSpace{%
-    \lst@ifnewline \kern\lst@fmtcurrindent \global\lst@lostspace\z@
-    \else
-        \lst@OldOLS
-    \fi}
-\lst@AddToHook{Init}
-    {\lst@true
-     \ifx\lst@fmtformat\@empty \ifx\lst@fmt\@empty \lst@false \fi\fi
-     \lst@if
-        \let\lst@OldOLS\lst@OutputLostSpace
-        \let\lst@OutputLostSpace\lst@fmtUseLostSpace
-        \let\lst@ProcessSpace\lst@fmtProcessSpace
-     \fi}
-\gdef\lst@fmtProcessSpace{%
-    \lst@ifletter
-        \lst@Output
-        \lst@fmtifignore\else
-            \lst@AppendOther\lst@outputspace
-        \fi
-    \else \lst@ifkeepspaces
-        \lst@AppendOther\lst@outputspace
-    \else \ifnum\lst@newlines=\z@
-        \lst@AppendSpecialSpace
-    \else \ifnum\lst@length=\z@
-            \global\advance\lst@lostspace\lst@width
-            \global\advance\lst@pos\m@ne
-        \else
-            \lst@AppendSpecialSpace
-        \fi
-    \fi \fi \fi
-    \lst@whitespacetrue}
-\lst@InstallTest{f}
-    \lst@fmt@list\lst@fmt \lst@gfmt@list\lst@gfmt
-    \lst@gfmt@wp
-    wd
-\gdef\lst@fmt@list{\lst@fmt\lst@gfmt}\global\let\lst@fmt\@empty
-\gdef\lst@gfmt@list{\lst@fmt\lst@gfmt}\global\let\lst@gfmt\@empty
-\gdef\lst@gfmt@wp{%
-    \begingroup \let\lst@UM\@empty
-    \let\lst@PrintToken\@empty
-    \csname\@lst @fmt$\the\lst@token\endcsname
-    \endgroup}
-\gdef\lst@fmtIdentifier#1#2#3#4{%
-    \lst@DefOther\lst@fmta{#2}\edef\lst@fmt{\lst@fmt,\lst@fmta}%
-    \@namedef{\@lst @fmt$\lst@fmta}{#3#4}}
-\lst@EndAspect
-\lst@BeginAspect{labels}
-\lst@Key{numbers}{none}{%
-    \let\lst@PlaceNumber\@empty
-    \lstKV@SwitchCases{#1}%
-    {none&\\%
-     left&\def\lst@PlaceNumber{\llap{\normalfont
-                \lst@numberstyle{\thelstnumber}\kern\lst@numbersep}}\\%
-     right&\def\lst@PlaceNumber{\rlap{\normalfont
-                \kern\linewidth \kern\lst@numbersep
-                \lst@numberstyle{\thelstnumber}}}%
-    }{\PackageError{Listings}{Numbers #1 unknown}\@ehc}}
-\lst@Key{numberstyle}{}{\def\lst@numberstyle{#1}}
-\lst@Key{numbersep}{10pt}{\def\lst@numbersep{#1}}
-\lst@Key{stepnumber}{1}{\def\lst@stepnumber{#1\relax}}
-\lst@AddToHook{EmptyStyle}{\let\lst@stepnumber\@ne}
-\lst@Key{numberblanklines}{true}[t]
-    {\lstKV@SetIf{#1}\lst@ifnumberblanklines}
-\lst@Key{numberfirstline}{f}[t]{\lstKV@SetIf{#1}\lst@ifnumberfirstline}
-\gdef\lst@numberfirstlinefalse{\let\lst@ifnumberfirstline\iffalse}
-\lst@Key{firstnumber}{auto}{%
-    \lstKV@SwitchCases{#1}%
-    {auto&\let\lst@firstnumber\@undefined\\%
-     last&\let\lst@firstnumber\c@lstnumber
-    }{\def\lst@firstnumber{#1\relax}}}
-\lst@AddToHook{PreSet}{\let\lst@advancenumber\z@}
-\lst@AddToHook{PreInit}
-    {\ifx\lst@firstnumber\@undefined
-         \def\lst@firstnumber{\lst@lineno}%
-     \fi}
-\gdef\lst@SetFirstNumber{%
-    \ifx\lst@firstnumber\@undefined
-        \@tempcnta 0\csname\@lst no@\lst@intname\endcsname\relax
-        \ifnum\@tempcnta=\z@ \@tempcnta\lst@firstline
-                       \else \lst@nololtrue \fi
-        \advance\@tempcnta\lst@advancenumber
-        \edef\lst@firstnumber{\the\@tempcnta\relax}%
-    \fi}
-\gdef\lst@SaveFirstNumber{%
-    \expandafter\xdef
-        \csname\@lst no\ifx\lst@intname\@empty @ \else @\lst@intname\fi
-        \endcsname{\the\c@lstnumber}}
-\newcounter{lstnumber}% \global
-\global\c@lstnumber\@ne % init
-\renewcommand*\thelstnumber{\@arabic\c@lstnumber}
-\lst@AddToHook{EveryPar}
-    {\global\advance\c@lstnumber\lst@advancelstnum
-     \global\advance\c@lstnumber\m@ne \refstepcounter{lstnumber}%
-     \lst@SkipOrPrintLabel}%
-\global\let\lst@advancelstnum\@ne
-\lst@AddToHook{Init}{\def\@currentlabel{\thelstnumber}}
-\lst@AddToHook{InitVars}
-    {\global\c@lstnumber\lst@firstnumber
-     \global\advance\c@lstnumber\lst@advancenumber
-     \global\advance\c@lstnumber-\lst@advancelstnum}
-\lst@AddToHook{ExitVars}
-    {\global\advance\c@lstnumber\lst@advancelstnum}
-\AtBeginDocument{%
-    \def\theHlstnumber{\ifx\lst@@caption\@empty \lst@neglisting
-                                          \else \thelstlisting \fi
-                       .\thelstnumber}}
-\newcount\lst@skipnumbers % \global
-\lst@AddToHook{Init}
-    {\ifnum \z@>\lst@stepnumber
-         \let\lst@advancelstnum\m@ne
-         \edef\lst@stepnumber{-\lst@stepnumber}%
-     \fi
-     \ifnum \z@<\lst@stepnumber
-         \global\lst@skipnumbers\lst@firstnumber
-         \global\divide\lst@skipnumbers\lst@stepnumber
-         \global\multiply\lst@skipnumbers-\lst@stepnumber
-         \global\advance\lst@skipnumbers\lst@firstnumber
-         \ifnum\lst@skipnumbers>\z@
-             \global\advance\lst@skipnumbers -\lst@stepnumber
-         \fi
-     \else
-         \let\lst@SkipOrPrintLabel\relax
-     \fi}
-\gdef\lst@SkipOrPrintLabel{%
-    \ifnum\lst@skipnumbers=\z@
-        \global\advance\lst@skipnumbers-\lst@stepnumber\relax
-        \lst@PlaceNumber
-        \lst@numberfirstlinefalse
-    \else
-        \lst@ifnumberfirstline
-            \lst@PlaceNumber
-            \lst@numberfirstlinefalse
-        \fi
-    \fi
-    \global\advance\lst@skipnumbers\@ne}%
-\lst@AddToHook{OnEmptyLine}{%
-    \lst@ifnumberblanklines\else \ifnum\lst@skipnumbers=\z@
-        \global\advance\lst@skipnumbers-\lst@stepnumber\relax
-    \fi\fi}
-\lst@EndAspect
-\lst@BeginAspect{lineshape}
-\lst@Key{xleftmargin}{\z@}{\def\lst@xleftmargin{#1}}
-\lst@Key{xrightmargin}{\z@}{\def\lst@xrightmargin{#1}}
-\lst@Key{resetmargins}{false}[t]{\lstKV@SetIf{#1}\lst@ifresetmargins}
-\lst@AddToHook{BoxUnsafe}{\let\lst@xleftmargin\z@
-                          \let\lst@xrightmargin\z@}
-\lst@AddToHook{TextStyle}{%
-    \let\lst@xleftmargin\z@ \let\lst@xrightmargin\z@
-    \let\lst@ifresetmargins\iftrue}
-\lst@Key{linewidth}\linewidth{\def\lst@linewidth{#1}}
-\lst@AddToHook{PreInit}{\linewidth\lst@linewidth\relax}
-\gdef\lst@parshape{%
-    \parshape\@ne \@totalleftmargin \linewidth}
-\lst@AddToHook{Init}
-    {\lst@ifresetmargins
-         \advance\linewidth\@totalleftmargin
-         \advance\linewidth\rightmargin
-         \@totalleftmargin\z@
-     \fi
-     \advance\linewidth-\lst@xleftmargin
-     \advance\linewidth-\lst@xrightmargin
-     \advance\@totalleftmargin\lst@xleftmargin\relax}
-\lst@Key{lineskip}{\z@}{\def\lst@lineskip{#1\relax}}
-\lst@AddToHook{Init}
-    {\parskip\z@
-     \ifdim\z@=\lst@lineskip\else
-         \@tempdima\baselineskip
-         \advance\@tempdima\lst@lineskip
-         \multiply\@tempdima\@cclvi
-         \divide\@tempdima\baselineskip\relax
-         \multiply\@tempdima\@cclvi
-         \edef\baselinestretch{\strip@pt\@tempdima}%
-         \selectfont
-     \fi}
-\lst@Key{breaklines}{false}[t]{\lstKV@SetIf{#1}\lst@ifbreaklines}
-\lst@Key{breakindent}{20pt}{\def\lst@breakindent{#1}}
-\lst@Key{breakautoindent}{t}[t]{\lstKV@SetIf{#1}\lst@ifbreakautoindent}
-\lst@Key{breakatwhitespace}{false}[t]%
-    {\lstKV@SetIf{#1}\lst@ifbreakatwhitespace}
-\lst@Key{prebreak}{}{\def\lst@prebreak{#1}}
-\lst@Key{postbreak}{}{\def\lst@postbreak{#1}}
-\lst@AddToHook{Init}
-    {\lst@ifbreaklines
-         \hbadness\@M \pretolerance\@M
-         \@rightskip\@flushglue \rightskip\@rightskip % \raggedright
-         \leftskip\z@skip \parindent\z@
-         \def\lst@parshape{\parshape\tw@ \@totalleftmargin\linewidth
-                           \lst@breakshape}%
-     \else
-         \let\lst@discretionary\@empty
-     \fi}
-\lst@AddToHook{OnNewLine}
-    {\lst@ifbreaklines \lst@breakNewLine \fi}
-\gdef\lst@discretionary{%
-    \lst@ifbreakatwhitespace
-        \lst@ifwhitespace \lst@@discretionary \fi
-    \else
-        \lst@@discretionary
-    \fi}%
-\gdef\lst@@discretionary{%
-    \discretionary{\let\space\lst@spacekern\lst@prebreak}%
-                  {\llap{\lsthk@EveryLine
-                   \kern\lst@breakcurrindent \kern-\@totalleftmargin}%
-                   \let\space\lst@spacekern\lst@postbreak}{}}
-\lst@AddToHook{PostOutput}{\lst@discretionary}
-\gdef\lst@spacekern{\kern\lst@width}
-\gdef\lst@breakNewLine{%
-    \@tempdima\lst@breakindent\relax
-    \lst@ifbreakautoindent \advance\@tempdima\lst@lostspace \fi
-    \@tempdimc-\@tempdima \advance\@tempdimc\linewidth
-                          \advance\@tempdima\@totalleftmargin
-    \xdef\lst@breakshape{\noexpand\lst@breakcurrindent \the\@tempdimc}%
-    \xdef\lst@breakcurrindent{\the\@tempdima}}
-\global\let\lst@breakcurrindent\z@ % init
-\gdef\lst@breakshape{\@totalleftmargin \linewidth}
-\gdef\lst@breakProcessOther#1{\lst@ProcessOther#1\lst@OutputOther}
-\lst@AddToHook{SelectCharTable}
-    {\lst@ifbreaklines \lst@Def{`)}{\lst@breakProcessOther)}\fi}
-\lst@EndAspect
-\lst@BeginAspect[lineshape]{frames}
-\lst@Key{framexleftmargin}{\z@}{\def\lst@framexleftmargin{#1}}
-\lst@Key{framexrightmargin}{\z@}{\def\lst@framexrightmargin{#1}}
-\lst@Key{framextopmargin}{\z@}{\def\lst@framextopmargin{#1}}
-\lst@Key{framexbottommargin}{\z@}{\def\lst@framexbottommargin{#1}}
-\lst@Key{backgroundcolor}{}{\def\lst@bkgcolor{#1}}
-\lst@Key{fillcolor}{}{\def\lst@fillcolor{#1}}
-\lst@Key{rulecolor}{}{\def\lst@rulecolor{#1}}
-\lst@Key{rulesepcolor}{}{\def\lst@rulesepcolor{#1}}
-\lst@AddToHook{Init}{%
-    \ifx\lst@fillcolor\@empty
-        \let\lst@fillcolor\lst@bkgcolor
-    \fi
-    \ifx\lst@rulesepcolor\@empty
-        \let\lst@rulesepcolor\lst@fillcolor
-    \fi}
-\lst@Key{rulesep}{2pt}{\def\lst@rulesep{#1}}
-\lst@Key{framerule}{.4pt}{\def\lst@framerulewidth{#1}}
-\lst@Key{framesep}{3pt}{\def\lst@frametextsep{#1}}
-\lst@Key{frameshape}{}{%
-    \let\lst@xrulecolor\@empty
-    \lstKV@FourArg{#1}%
-    {\uppercase{\def\lst@frametshape{##1}}%
-     \uppercase{\def\lst@framelshape{##2}}%
-     \uppercase{\def\lst@framershape{##3}}%
-     \uppercase{\def\lst@framebshape{##4}}%
-     \let\lst@ifframeround\iffalse
-     \lst@IfSubstring R\lst@frametshape{\let\lst@ifframeround\iftrue}{}%
-     \lst@IfSubstring R\lst@framebshape{\let\lst@ifframeround\iftrue}{}%
-     \def\lst@frame{##1##2##3##4}}}
-\lst@Key{frameround}\relax
-    {\uppercase{\def\lst@frameround{#1}}%
-     \expandafter\lstframe@\lst@frameround ffff\relax}
-\global\let\lst@frameround\@empty
-\lst@Key{frame}\relax{%
-    \let\lst@xrulecolor\@empty
-    \lstKV@SwitchCases{#1}%
-    {none&\let\lst@frame\@empty\\%
-     leftline&\def\lst@frame{l}\\%
-     topline&\def\lst@frame{t}\\%
-     bottomline&\def\lst@frame{b}\\%
-     lines&\def\lst@frame{tb}\\%
-     single&\def\lst@frame{trbl}\\%
-     shadowbox&\def\lst@frame{tRBl}%
-            \def\lst@xrulecolor{\lst@rulesepcolor}%
-            \def\lst@rulesep{\lst@frametextsep}%
-    }{\def\lst@frame{#1}}%
-    \expandafter\lstframe@\lst@frameround ffff\relax}
-\gdef\lstframe@#1#2#3#4#5\relax{%
-    \lst@IfSubstring T\lst@frame{\edef\lst@frame{t\lst@frame}}{}%
-    \lst@IfSubstring R\lst@frame{\edef\lst@frame{r\lst@frame}}{}%
-    \lst@IfSubstring B\lst@frame{\edef\lst@frame{b\lst@frame}}{}%
-    \lst@IfSubstring L\lst@frame{\edef\lst@frame{l\lst@frame}}{}%
-    \let\lst@frametshape\@empty \let\lst@framebshape\@empty
-    \lst@frameCheck
-        ltr\lst@framelshape\lst@frametshape\lst@framershape #4#1%
-    \lst@frameCheck
-        LTR\lst@framelshape\lst@frametshape\lst@framershape #4#1%
-    \lst@frameCheck
-        lbr\lst@framelshape\lst@framebshape\lst@framershape #3#2%
-    \lst@frameCheck
-        LBR\lst@framelshape\lst@framebshape\lst@framershape #3#2%
-    \let\lst@ifframeround\iffalse
-    \lst@IfSubstring R\lst@frametshape{\let\lst@ifframeround\iftrue}{}%
-    \lst@IfSubstring R\lst@framebshape{\let\lst@ifframeround\iftrue}{}%
-    \let\lst@framelshape\@empty \let\lst@framershape\@empty
-    \lst@IfSubstring L\lst@frame
-        {\def\lst@framelshape{YY}}%
-        {\lst@IfSubstring l\lst@frame{\def\lst@framelshape{Y}}{}}%
-    \lst@IfSubstring R\lst@frame
-        {\def\lst@framershape{YY}}%
-        {\lst@IfSubstring r\lst@frame{\def\lst@framershape{Y}}{}}}
-\gdef\lst@frameCheck#1#2#3#4#5#6#7#8{%
-    \lst@IfSubstring #1\lst@frame
-        {\if #7T\def#4{R}\else \def#4{Y}\fi}%
-        {\def#4{N}}%
-    \lst@IfSubstring #3\lst@frame
-        {\if #8T\def#6{R}\else \def#6{Y}\fi}%
-        {\def#6{N}}%
-    \lst@IfSubstring #2\lst@frame{\edef#5{#5#4Y#6}}{}}
-\lst@AddToHook{TextStyle}
-   {\let\lst@frame\@empty
-    \let\lst@frametshape\@empty
-    \let\lst@framershape\@empty
-    \let\lst@framebshape\@empty
-    \let\lst@framelshape\@empty
-    \let\lst@bkgcolor\@empty}
-\gdef\lst@frameMakeBoxV#1#2#3{%
-    \setbox#1\hbox{%
-      \color@begingroup \lst@rulecolor
-      \ifx\lst@framelshape\@empty
-      \else
-            \llap{%
-                \lst@frameBlock\lst@fillcolor\lst@frametextsep{#2}{#3}%
-                \kern\lst@framexleftmargin}%
-      \fi
-      \llap{\setbox\z@\hbox{\vrule\@width\z@\@height#2\@depth#3%
-                            \lst@frameL}%
-            \rlap{\lst@frameBlock\lst@rulesepcolor{\wd\z@}%
-                                                  {\ht\z@}{\dp\z@}}%
-            \box\z@
-            \kern\lst@frametextsep\relax
-            \kern\lst@framexleftmargin}%
-      \rlap{\kern-\lst@framexleftmargin
-                    \@tempdima\linewidth
-            \advance\@tempdima\lst@framexleftmargin
-            \advance\@tempdima\lst@framexrightmargin
-            \lst@frameBlock\lst@bkgcolor\@tempdima{#2}{#3}%
-            \ifx\lst@framershape\@empty
-                \kern\lst@frametextsep\relax
-            \else
-                \lst@frameBlock\lst@fillcolor\lst@frametextsep{#2}{#3}%
-            \fi
-            \setbox\z@\hbox{\vrule\@width\z@\@height#2\@depth#3%
-                            \lst@frameR}%
-            \rlap{\lst@frameBlock\lst@rulesepcolor{\wd\z@}%
-                                                  {\ht\z@}{\dp\z@}}%
-            \box\z@}%
-      \color@endgroup}}
-\gdef\lst@frameBlock#1#2#3#4{%
-    \color@begingroup
-      #1%
-      \setbox\z@\hbox{\vrule\@height#3\@depth#4%
-                      \ifx#1\@empty \@width\z@ \kern#2\relax
-                              \else \@width#2\relax \fi}%
-      \box\z@
-    \color@endgroup}
-\gdef\lst@frameR{%
-    \expandafter\lst@frameR@\lst@framershape\relax
-    \kern-\lst@rulesep}
-\gdef\lst@frameR@#1{%
-    \ifx\relax#1\@empty\else
-        \if #1Y\lst@framevrule \else \kern\lst@framerulewidth \fi
-        \kern\lst@rulesep
-        \expandafter\lst@frameR@b
-    \fi}
-\gdef\lst@frameR@b#1{%
-    \ifx\relax#1\@empty
-    \else
-        \if #1Y\color@begingroup
-               \lst@xrulecolor
-               \lst@framevrule
-               \color@endgroup
-        \else
-               \kern\lst@framerulewidth
-        \fi
-        \kern\lst@rulesep
-        \expandafter\lst@frameR@
-    \fi}
-\gdef\lst@frameL{%
-    \kern-\lst@rulesep
-    \expandafter\lst@frameL@\lst@framelshape\relax}
-\gdef\lst@frameL@#1{%
-    \ifx\relax#1\@empty\else
-        \kern\lst@rulesep
-        \if#1Y\lst@framevrule \else \kern\lst@framerulewidth \fi
-        \expandafter\lst@frameL@
-    \fi}
-\gdef\lst@frameH#1#2{%
-    \global\let\lst@framediml\z@ \global\let\lst@framedimr\z@
-    \setbox\z@\hbox{}\@tempcntb\z@
-    \expandafter\lst@frameH@\expandafter#1#2\relax\relax\relax
-            \@tempdimb\lst@frametextsep\relax
-    \advance\@tempdimb\lst@framerulewidth\relax
-            \@tempdimc-\@tempdimb
-    \advance\@tempdimc\ht\z@
-    \advance\@tempdimc\dp\z@
-    \setbox\z@=\hbox{%
-      \lst@frameHBkg\lst@fillcolor\@tempdimb\@firstoftwo
-      \if#1T\rlap{\raise\dp\@tempboxa\box\@tempboxa}%
-       \else\rlap{\lower\ht\@tempboxa\box\@tempboxa}\fi
-      \lst@frameHBkg\lst@rulesepcolor\@tempdimc\@secondoftwo
-      \advance\@tempdimb\ht\@tempboxa
-      \if#1T\rlap{\raise\lst@frametextsep\box\@tempboxa}%
-       \else\rlap{\lower\@tempdimb\box\@tempboxa}\fi
-      \rlap{\box\z@}%
-    }}
-\gdef\lst@frameH@#1#2#3#4{%
-    \ifx\relax#4\@empty\else
-        \lst@frameh \@tempcntb#1#2#3#4%
-        \advance\@tempcntb\@ne
-        \expandafter\lst@frameH@\expandafter#1%
-    \fi}
-\gdef\lst@frameHBkg#1#2#3{%
-    \setbox\@tempboxa\hbox{%
-        \kern-\lst@framexleftmargin
-        #3{\kern-\lst@framediml\relax}{\@tempdima\z@}%
-        \ifdim\lst@framediml>\@tempdimb
-            #3{\@tempdima\lst@framediml \advance\@tempdima-\@tempdimb
-               \lst@frameBlock\lst@rulesepcolor\@tempdima\@tempdimb\z@}%
-              {\kern-\lst@framediml
-               \advance\@tempdima\lst@framediml\relax}%
-        \fi
-        #3{\@tempdima\z@
-           \ifx\lst@framelshape\@empty\else
-               \advance\@tempdima\@tempdimb
-           \fi
-           \ifx\lst@framershape\@empty\else
-               \advance\@tempdima\@tempdimb
-           \fi}%
-          {\ifdim\lst@framedimr>\@tempdimb
-              \advance\@tempdima\lst@framedimr\relax
-           \fi}%
-        \advance\@tempdima\linewidth
-        \advance\@tempdima\lst@framexleftmargin
-        \advance\@tempdima\lst@framexrightmargin
-        \lst@frameBlock#1\@tempdima#2\z@
-        #3{\ifdim\lst@framedimr>\@tempdimb
-               \@tempdima-\@tempdimb
-               \advance\@tempdima\lst@framedimr\relax
-               \lst@frameBlock\lst@rulesepcolor\@tempdima\@tempdimb\z@
-           \fi}{}%
-        }}
-\gdef\lst@frameh#1#2#3#4#5{%
-    \lst@frameCalcDimA#1%
-    \lst@ifframeround \@getcirc\@tempdima \fi
-    \setbox\z@\hbox{%
-      \begingroup
-      \setbox\z@\hbox{%
-        \kern-\lst@framexleftmargin
-        \color@begingroup
-        \ifnum#1=\z@ \lst@rulecolor \else \lst@xrulecolor \fi
-        \lst@frameCornerX\llap{#2L}#3#1%
-        \ifdim\lst@framediml<\@tempdimb
-            \xdef\lst@framediml{\the\@tempdimb}%
-        \fi
-        \begingroup
-        \if#4Y\else \let\lst@framerulewidth\z@ \fi
-                \@tempdima\lst@framexleftmargin
-        \advance\@tempdima\lst@framexrightmargin
-        \advance\@tempdima\linewidth
-        \vrule\@width\@tempdima\@height\lst@framerulewidth \@depth\z@
-        \endgroup
-        \lst@frameCornerX\rlap{#2R}#5#1%
-        \ifdim\lst@framedimr<\@tempdimb
-            \xdef\lst@framedimr{\the\@tempdimb}%
-        \fi
-        \color@endgroup}%
-      \if#2T\rlap{\raise\dp\z@\box\z@}%
-       \else\rlap{\lower\ht\z@\box\z@}\fi
-      \endgroup
-      \box\z@}}
-\gdef\lst@frameCornerX#1#2#3#4{%
-    \setbox\@tempboxa\hbox{\csname\@lst @frame\if#3RR\fi #2\endcsname}%
-    \@tempdimb\wd\@tempboxa
-    \if #3R%
-        #1{\box\@tempboxa}%
-    \else
-        \if #3Y\expandafter#1\else
-               \@tempdimb\z@ \expandafter\vphantom \fi
-        {\box\@tempboxa}%
-    \fi}
-\gdef\lst@frameCalcDimA#1{%
-            \@tempdima\lst@rulesep
-    \advance\@tempdima\lst@framerulewidth
-    \multiply\@tempdima#1\relax
-    \advance\@tempdima\lst@frametextsep
-    \advance\@tempdima\lst@framerulewidth
-    \multiply\@tempdima\tw@}
-\lst@AddToHook{Init}{\lst@frameInit}
-\newbox\lst@framebox
-\gdef\lst@frameInit{%
-    \ifx\lst@framelshape\@empty \let\lst@frameL\@empty \fi
-    \ifx\lst@framershape\@empty \let\lst@frameR\@empty \fi
-    \def\lst@framevrule{\vrule\@width\lst@framerulewidth\relax}%
-    \lst@ifframeround
-        \lst@frameCalcDimA\z@ \@getcirc\@tempdima
-        \@tempdimb\@tempdima \divide\@tempdimb\tw@
-        \advance\@tempdimb -\@wholewidth
-        \edef\lst@frametextsep{\the\@tempdimb}%
-        \edef\lst@framerulewidth{\the\@wholewidth}%
-        \lst@frameCalcDimA\@ne \@getcirc\@tempdima
-        \@tempdimb\@tempdima \divide\@tempdimb\tw@
-        \advance\@tempdimb -\tw@\@wholewidth
-        \advance\@tempdimb -\lst@frametextsep
-        \edef\lst@rulesep{\the\@tempdimb}%
-    \fi
-    \lst@frameMakeBoxV\lst@framebox{\ht\strutbox}{\dp\strutbox}%
-    \def\lst@framelr{\copy\lst@framebox}%
-    \ifx\lst@frametshape\@empty\else
-        \lst@frameH T\lst@frametshape
-        \ifvoid\z@\else
-            \par\lst@parshape
-            \@tempdima-\baselineskip \advance\@tempdima\ht\z@
-            \ifdim\prevdepth<\@cclvi\p@\else
-                \advance\@tempdima\prevdepth
-            \fi
-            \ifdim\@tempdima<\z@
-                \vskip\@tempdima\vskip\lineskip
-            \fi
-            \noindent\box\z@\par
-            \lineskiplimit\maxdimen \lineskip\z@
-        \fi
-        \lst@frameSpreadV\lst@framextopmargin
-    \fi}
-\lst@AddToHook{EveryLine}{\lst@framelr}
-\global\let\lst@framelr\@empty
-\lst@AddToHook{DeInit}
-    {\ifx\lst@framebshape\@empty\else \lst@frameExit \fi}
-\gdef\lst@frameExit{%
-    \lst@frameSpreadV\lst@framexbottommargin
-    \lst@frameH B\lst@framebshape
-    \ifvoid\z@\else
-        \everypar{}\par\lst@parshape\nointerlineskip\noindent\box\z@
-    \fi}
-\gdef\lst@frameSpreadV#1{%
-    \ifdim\z@=#1\else
-        \everypar{}\par\lst@parshape\nointerlineskip\noindent
-        \lst@frameMakeBoxV\z@{#1}{\z@}%
-        \box\z@
-    \fi}
-\gdef\lst@frameTR{%
-    \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@
-    \kern-\lst@framerulewidth
-    \raise\lst@framerulewidth\hbox{%
-        \vrule\@width\lst@framerulewidth\@height\z@\@depth.5\@tempdima}}
-\gdef\lst@frameBR{%
-    \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@
-    \kern-\lst@framerulewidth
-    \vrule\@width\lst@framerulewidth\@height.5\@tempdima\@depth\z@}
-\gdef\lst@frameBL{%
-    \vrule\@width\lst@framerulewidth\@height.5\@tempdima\@depth\z@
-    \kern-\lst@framerulewidth
-    \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@}
-\gdef\lst@frameTL{%
-    \raise\lst@framerulewidth\hbox{%
-        \vrule\@width\lst@framerulewidth\@height\z@\@depth.5\@tempdima}%
-    \kern-\lst@framerulewidth
-    \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@}
-\gdef\lst@frameRoundT{%
-    \setbox\@tempboxa\hbox{\@circlefnt\char\@tempcnta}%
-    \ht\@tempboxa\lst@framerulewidth
-    \box\@tempboxa}
-\gdef\lst@frameRoundB{%
-    \setbox\@tempboxa\hbox{\@circlefnt\char\@tempcnta}%
-    \dp\@tempboxa\z@
-    \box\@tempboxa}
-\gdef\lst@frameRTR{%
-    \hb@xt@.5\@tempdima{\kern-\lst@framerulewidth
-                           \kern.5\@tempdima \lst@frameRoundT \hss}}
-\gdef\lst@frameRBR{%
-    \hb@xt@.5\@tempdima{\kern-\lst@framerulewidth
-    \advance\@tempcnta\@ne \kern.5\@tempdima \lst@frameRoundB \hss}}
-\gdef\lst@frameRBL{%
-    \advance\@tempcnta\tw@ \lst@frameRoundB
-    \kern-.5\@tempdima}
-\gdef\lst@frameRTL{%
-    \advance\@tempcnta\thr@@\lst@frameRoundT
-    \kern-.5\@tempdima}
-\lst@EndAspect
-\lst@BeginAspect[keywords]{make}
-\lst@NewMode\lst@makemode
-\lst@AddToHook{Output}{%
-    \ifnum\lst@mode=\lst@makemode
-        \ifx\lst@thestyle\lst@gkeywords@sty
-            \lst@makekeytrue
-        \fi
-    \fi}
-\gdef\lst@makekeytrue{\let\lst@ifmakekey\iftrue}
-\gdef\lst@makekeyfalse{\let\lst@ifmakekey\iffalse}
-\global\lst@makekeyfalse % init
-\lst@Key{makemacrouse}f[t]{\lstKV@SetIf{#1}\lst@ifmakemacrouse}
-\gdef\lst@MakeSCT{%
-    \lst@ifmakemacrouse
-        \lst@ReplaceInput{$(}{%
-            \lst@PrintToken
-            \lst@EnterMode\lst@makemode{\lst@makekeyfalse}%
-            \lst@Merge{\lst@ProcessOther\$\lst@ProcessOther(}}%
-        \lst@ReplaceInput{)}{%
-            \ifnum\lst@mode=\lst@makemode
-                \lst@PrintToken
-                \begingroup
-                    \lst@ProcessOther)%
-                    \lst@ifmakekey
-                        \let\lst@currstyle\lst@gkeywords@sty
-                    \fi
-                    \lst@OutputOther
-                \endgroup
-                \lst@LeaveMode
-            \else
-                \expandafter\lst@ProcessOther\expandafter)%
-            \fi}%
-    \else
-        \lst@ReplaceInput{$(}{\lst@ProcessOther\$\lst@ProcessOther(}%
-    \fi}
-\lst@EndAspect
-\lst@BeginAspect{0.21}
-\lst@Key{labelstyle}{}{\def\lst@numberstyle{#1}}
-\lst@Key{labelsep}{10pt}{\def\lst@numbersep{#1}}
-\lst@Key{labelstep}{0}{%
-    \ifnum #1=\z@ \KV@lst@numbers{none}%
-            \else \KV@lst@numbers{left}\fi
-    \def\lst@stepnumber{#1\relax}}
-\lst@Key{firstlabel}\relax{\def\lst@firstnumber{#1\relax}}
-\lst@Key{advancelabel}\relax{\def\lst@advancenumber{#1\relax}}
-\let\c@lstlabel\c@lstnumber
-\lst@AddToHook{Init}{\def\thelstnumber{\thelstlabel}}
-\newcommand*\thelstlabel{\@arabic\c@lstlabel}
-\lst@Key{first}\relax{\def\lst@firstline{#1\relax}}
-\lst@Key{last}\relax{\def\lst@lastline{#1\relax}}
-\lst@Key{framerulewidth}{.4pt}{\def\lst@framerulewidth{#1}}
-\lst@Key{framerulesep}{2pt}{\def\lst@rulesep{#1}}
-\lst@Key{frametextsep}{3pt}{\def\lst@frametextsep{#1}}
-\lst@Key{framerulecolor}{}{\lstKV@OptArg[]{#1}%
-    {\ifx\@empty##2\@empty
-         \let\lst@rulecolor\@empty
-     \else
-         \ifx\@empty##1\@empty
-             \def\lst@rulecolor{\color{##2}}%
-         \else
-             \def\lst@rulecolor{\color[##1]{##2}}%
-         \fi
-     \fi}}
-\lst@Key{backgroundcolor}{}{\lstKV@OptArg[]{#1}%
-    {\ifx\@empty##2\@empty
-         \let\lst@bkgcolor\@empty
-     \else
-         \ifx\@empty##1\@empty
-             \def\lst@bkgcolor{\color{##2}}%
-         \else
-             \def\lst@bkgcolor{\color[##1]{##2}}%
-         \fi
-     \fi}}
-\lst@Key{framespread}{\z@}{\def\lst@framespread{#1}}
-\lst@AddToHook{PreInit}
-    {\@tempdima\lst@framespread\relax \divide\@tempdima\tw@
-     \edef\lst@framextopmargin{\the\@tempdima}%
-     \let\lst@framexrightmargin\lst@framextopmargin
-     \let\lst@framexbottommargin\lst@framextopmargin
-     \advance\@tempdima\lst@xleftmargin\relax
-     \edef\lst@framexleftmargin{\the\@tempdima}}
-\newdimen\lst@innerspread \newdimen\lst@outerspread
-\lst@Key{spread}{\z@,\z@}{\lstKV@CSTwoArg{#1}%
-    {\lst@innerspread##1\relax
-     \ifx\@empty##2\@empty
-         \divide\lst@innerspread\tw@\relax
-         \lst@outerspread\lst@innerspread
-     \else
-         \lst@outerspread##2\relax
-     \fi}}
-\lst@AddToHook{BoxUnsafe}{\lst@outerspread\z@ \lst@innerspread\z@}
-\lst@Key{wholeline}{false}[t]{\lstKV@SetIf{#1}\lst@ifresetmargins}
-\lst@Key{indent}{\z@}{\def\lst@xleftmargin{#1}}
-\lst@AddToHook{PreInit}
-    {\lst@innerspread=-\lst@innerspread
-     \lst@outerspread=-\lst@outerspread
-     \ifodd\c@page \advance\lst@innerspread\lst@xleftmargin
-             \else \advance\lst@outerspread\lst@xleftmargin \fi
-     \ifodd\c@page
-         \edef\lst@xleftmargin{\the\lst@innerspread}%
-         \edef\lst@xrightmargin{\the\lst@outerspread}%
-     \else
-         \edef\lst@xleftmargin{\the\lst@outerspread}%
-         \edef\lst@xrightmargin{\the\lst@innerspread}%
-     \fi}
-\lst@Key{defaultclass}\relax{\def\lst@classoffset{#1}}
-\lst@Key{stringtest}\relax{}% dummy
-\lst@Key{outputpos}\relax{\lst@outputpos#1\relax\relax}
-\lst@Key{stringspaces}\relax[t]{\lstKV@SetIf{#1}\lst@ifshowstringspaces}
-\lst@Key{visiblespaces}\relax[t]{\lstKV@SetIf{#1}\lst@ifshowspaces}
-\lst@Key{visibletabs}\relax[t]{\lstKV@SetIf{#1}\lst@ifshowtabs}
-\lst@EndAspect
-\lst@BeginAspect{fancyvrb}
-\@ifundefined{FancyVerbFormatLine}
-    {\typeout{^^J%
-     ***^^J%
-     *** `listings.sty' needs `fancyvrb.sty' right now.^^J%
-     *** Please ensure its availability and try again.^^J%
-     ***^^J}%
-     \batchmode \@@end}{}
-\gdef\lstFV@fancyvrb{%
-    \lst@iffancyvrb
-        \ifx\FancyVerbFormatLine\lstFV@FancyVerbFormatLine\else
-            \let\lstFV@FVFL\FancyVerbFormatLine
-            \let\FancyVerbFormatLine\lstFV@FancyVerbFormatLine
-        \fi
-    \else
-        \ifx\lstFV@FVFL\@undefined\else
-            \let\FancyVerbFormatLine\lstFV@FVFL
-            \let\lstFV@FVFL\@undefined
-        \fi
-    \fi}
-\gdef\lstFV@VerbatimBegin{%
-    \ifx\FancyVerbFormatLine\lstFV@FancyVerbFormatLine
-        \lsthk@TextStyle \lsthk@BoxUnsafe
-        \lsthk@PreSet
-        \lst@activecharsfalse
-        \let\normalbaselines\relax
-\xdef\lstFV@RestoreData{\noexpand\linewidth\the\linewidth\relax}%
-        \lst@Init\relax
-        \lst@ifresetmargins \advance\linewidth-\@totalleftmargin \fi
-\lstFV@RestoreData
-        \everypar{}\global\lst@newlines\z@
-        \lst@mode\lst@nomode \let\lst@entermodes\@empty
-        \lst@InterruptModes
-%% D.G. modification begin - Nov. 25, 1998
-        \let\@noligs\relax
-%% D.G. modification end
-    \fi}
-\gdef\lstFV@VerbatimEnd{%
-    \ifx\FancyVerbFormatLine\lstFV@FancyVerbFormatLine
-        \global\setbox\lstFV@gtempboxa\box\@tempboxa
-        \global\let\@gtempa\FV@ProcessLine
-        \lst@mode\lst@Pmode
-        \lst@DeInit
-        \let\FV@ProcessLine\@gtempa
-        \setbox\@tempboxa\box\lstFV@gtempboxa
-        \par
-    \fi}
-\newbox\lstFV@gtempboxa
-\lst@AddTo\FV@VerbatimBegin\lstFV@VerbatimBegin
-\lst@AddToAtTop\FV@VerbatimEnd\lstFV@VerbatimEnd
-\lst@AddTo\FV@LVerbatimBegin\lstFV@VerbatimBegin
-\lst@AddToAtTop\FV@LVerbatimEnd\lstFV@VerbatimEnd
-\lst@AddTo\FV@BVerbatimBegin\lstFV@VerbatimBegin
-\lst@AddToAtTop\FV@BVerbatimEnd\lstFV@VerbatimEnd
-\gdef\lstFV@FancyVerbFormatLine#1{%
-    \let\lst@arg\@empty \lst@FVConvert#1\@nil
-    \global\lst@newlines\z@
-    \vtop{\noindent\lst@parshape
-          \lst@ReenterModes
-          \lst@arg \lst@PrintToken\lst@EOLUpdate\lsthk@InitVarsBOL
-          \lst@InterruptModes}}
-\lst@Key{fvcmdparams}%
-    {\overlay\@ne}%
-    {\def\lst@FVcmdparams{,#1}}
-\lst@Key{morefvcmdparams}\relax{\lst@lAddTo\lst@FVcmdparams{,#1}}
-\gdef\lst@FVConvert{\@tempcnta\z@ \lst@FVConvertO@}%
-\gdef\lst@FVConvertO@{%
-    \ifcase\@tempcnta
-        \expandafter\futurelet\expandafter\@let@token
-        \expandafter\lst@FVConvert@@
-    \else
-        \expandafter\lst@FVConvertO@a
-    \fi}
-\gdef\lst@FVConvertO@a#1{%
-    \lst@lAddTo\lst@arg{{#1}}\advance\@tempcnta\m@ne
-    \lst@FVConvertO@}%
-\gdef\lst@FVConvert@@{%
-    \ifcat\noexpand\@let@token\bgroup \expandafter\lst@FVConvertArg
-                                \else \expandafter\lst@FVConvert@ \fi}
-\gdef\lst@FVConvertArg#1{%
-    {\let\lst@arg\@empty
-     \lst@FVConvert#1\@nil
-     \global\let\@gtempa\lst@arg}%
-     \lst@lExtend\lst@arg{\expandafter{\@gtempa\lst@PrintToken}}%
-     \lst@FVConvert}
-\gdef\lst@FVConvert@#1{%
-    \ifx \@nil#1\else
-       \if\relax\noexpand#1%
-          \lst@lAddTo\lst@arg{\lst@OutputLostSpace\lst@PrintToken#1}%
-       \else
-          \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
-       \fi
-       \expandafter\lst@FVConvert
-    \fi}
-\gdef\lst@FVConvert@#1{%
-    \ifx \@nil#1\else
-       \if\relax\noexpand#1%
-          \lst@lAddTo\lst@arg{\lst@OutputLostSpace\lst@PrintToken#1}%
-          \def\lst@temp##1,#1##2,##3##4\relax{%
-              \ifx##3\@empty \else \@tempcnta##2\relax \fi}%
-          \expandafter\lst@temp\lst@FVcmdparams,#1\z@,\@empty\relax
-       \else
-          \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
-       \fi
-       \expandafter\lst@FVConvertO@
-    \fi}
-\lst@EndAspect
-\lst@BeginAspect[keywords,comments,strings,language]{lgrind}
-\gdef\lst@LGGetNames#1:#2\relax{%
-    \lst@NormedDef\lstlang@{#1}\lst@ReplaceInArg\lstlang@{|,}%
-    \def\lst@arg{:#2}}
-\gdef\lst@LGGetValue#1{%
-    \lst@false
-    \def\lst@temp##1:#1##2##3\relax{%
-        \ifx\@empty##2\else \lst@LGGetValue@{#1}\fi}
-    \expandafter\lst@temp\lst@arg:#1\@empty\relax}
-\gdef\lst@LGGetValue@#1{%
-    \lst@true
-    \def\lst@temp##1:#1##2:##3\relax{%
-        \@ifnextchar=\lst@LGGetValue@@{\lst@LGGetValue@@=}##2\relax
-        \def\lst@arg{##1:##3}}%
-    \expandafter\lst@temp\lst@arg\relax}
-\gdef\lst@LGGetValue@@=#1\relax{\def\lst@LGvalue{#1}}
-\gdef\lst@LGGetComment#1#2{%
-    \let#2\@empty
-    \lst@LGGetValue{#1b}%
-    \lst@if
-        \let#2\lst@LGvalue
-        \lst@LGGetValue{#1e}%
-        \ifx\lst@LGvalue\lst@LGEOL
-            \edef\lstlang@{\lstlang@,commentline={#2}}%
-            \let#2\@empty
-        \else
-            \edef#2{{#2}{\lst@LGvalue}}%
-        \fi
-    \fi}
-\gdef\lst@LGGetString#1#2{%
-    \lst@LGGetValue{#1b}%
-    \lst@if
-        \let#2\lst@LGvalue
-        \lst@LGGetValue{#1e}%
-        \ifx\lst@LGvalue\lst@LGEOL
-            \edef\lstlang@{\lstlang@,morestringizer=[l]{#2}}%
-        \else
-            \ifx #2\lst@LGvalue
-                \edef\lstlang@{\lstlang@,morestringizer=[d]{#2}}%
-            \else
-                \edef\lst@temp{\lst@LGe#2}%
-                \ifx \lst@temp\lst@LGvalue
-                    \edef\lstlang@{\lstlang@,morestringizer=[b]{#2}}%
-                \else
-                    \PackageWarning{Listings}%
-                    {String #2...\lst@LGvalue\space not supported}%
-                \fi
-            \fi
-        \fi
-    \fi}
-\gdef\lst@LGDefLang{%
-    \lst@LGReplace
-    \let\lstlang@\empty
-    \lst@LGGetValue{kw}%
-    \lst@if
-        \lst@ReplaceInArg\lst@LGvalue{{ },}%
-        \edef\lstlang@{\lstlang@,keywords={\lst@LGvalue}}%
-    \fi
-    \lst@LGGetValue{oc}%
-    \lst@if
-        \edef\lstlang@{\lstlang@,sensitive=f}%
-    \fi
-    \lst@LGGetValue{id}%
-    \lst@if
-        \edef\lstlang@{\lstlang@,alsoletter=\lst@LGvalue}%
-    \fi
-    \lst@LGGetComment a\lst@LGa
-    \lst@LGGetComment c\lst@LGc
-    \ifx\lst@LGa\@empty
-        \ifx\lst@LGc\@empty\else
-            \edef\lstlang@{\lstlang@,singlecomment=\lst@LGc}%
-        \fi
-    \else
-        \ifx\lst@LGc\@empty
-            \edef\lstlang@{\lstlang@,singlecomment=\lst@LGa}%
-        \else
-            \edef\lstlang@{\lstlang@,doublecomment=\lst@LGc\lst@LGa}%
-        \fi
-    \fi
-    \lst@LGGetString s\lst@LGa
-    \lst@LGGetString l\lst@LGa
-    \lst@LGGetValue{tc}%
-    \lst@if
-        \edef\lstlang@{\lstlang@,lgrindef=\lst@LGvalue}%
-    \fi
-    \expandafter\xdef\csname\@lst LGlang@\lst@language@\endcsname
-        {\noexpand\lstset{\lstlang@}}%
-    \lst@ReplaceInArg\lst@arg{{: :}:}\let\lst@LGvalue\@empty
-    \expandafter\lst@LGDroppedCaps\lst@arg\relax\relax
-    \ifx\lst@LGvalue\@empty\else
-        \PackageWarningNoLine{Listings}{Ignored capabilities for
-            \space `\lst@language@' are\MessageBreak\lst@LGvalue}%
-    \fi}
-\gdef\lst@LGDroppedCaps#1:#2#3{%
-    \ifx#2\relax
-        \lst@RemoveCommas\lst@LGvalue
-    \else
-        \edef\lst@LGvalue{\lst@LGvalue,#2#3}%
-        \expandafter\lst@LGDroppedCaps
-    \fi}
-\begingroup
-\catcode`\/=0
-\lccode`\z=`\:\lccode`\y=`\^\lccode`\x=`\$\lccode`\v=`\|
-\catcode`\\=12\relax
-/lowercase{%
-/gdef/lst@LGReplace{/lst@ReplaceInArg/lst@arg
-    {{\:}{z }{\^}{y}{\$}{x}{\|}{v}{ \ }{ }{:\ :}{:}{\ }{ }{\(}({\)})}}
-/gdef/lst@LGe{\e}
-}
-/endgroup
-\gdef\lst@LGRead#1\par{%
-    \lst@LGGetNames#1:\relax
-    \def\lst@temp{endoflanguagedefinitions}%
-    \ifx\lstlang@\lst@temp
-        \let\lst@next\endinput
-    \else
-        \expandafter\lst@IfOneOf\lst@language@\relax\lstlang@
-            {\lst@LGDefLang \let\lst@next\endinput}%
-            {\let\lst@next\lst@LGRead}%
-    \fi
-    \lst@next}
-\lst@Key{lgrindef}\relax{%
-    \lst@NormedDef\lst@language@{#1}%
-    \begingroup
-    \@ifundefined{lstLGlang@\lst@language@}%
-        {\everypar{\lst@LGRead}%
-         \catcode`\\=12\catcode`\{=12\catcode`\}=12\catcode`\%=12%
-         \catcode`\#=14\catcode`\$=12\catcode`\^=12\catcode`\_=12\relax
-         \input{\lstlgrindeffile}%
-        }{}%
-    \endgroup
-    \@ifundefined{lstLGlang@\lst@language@}%
-        {\PackageError{Listings}%
-         {LGrind language \lst@language@\space undefined}%
-         {The language is not loadable. \@ehc}}%
-        {\lsthk@SetLanguage
-         \csname\@lst LGlang@\lst@language@\endcsname}}
-\@ifundefined{lstlgrindeffile}
-    {\lst@UserCommand\lstlgrindeffile{lgrindef.}}{}
-\lst@EndAspect
-\lst@BeginAspect[keywords]{hyper}
-\lst@Key{hyperanchor}\hyper@@anchor{\let\lst@hyperanchor#1}
-\lst@Key{hyperlink}\hyperlink{\let\lst@hyperlink#1}
-\lst@InstallKeywords{h}{hyperref}{}\relax{}
-    {\begingroup
-         \let\lst@UM\@empty \xdef\@gtempa{\the\lst@token}%
-     \endgroup
-     \lst@GetFreeMacro{lstHR@\@gtempa}%
-     \global\expandafter\let\lst@freemacro\@empty
-     \@tempcntb\@tempcnta \advance\@tempcntb\m@ne
-     \edef\lst@alloverstyle##1{%
-         \let\noexpand\lst@alloverstyle\noexpand\@empty
-         \noexpand\smash{\raise\baselineskip\hbox
-             {\noexpand\lst@hyperanchor{lst.\@gtempa\the\@tempcnta}%
-                                       {\relax}}}%
-         \ifnum\@tempcnta=\z@ ##1\else
-             \noexpand\lst@hyperlink{lst.\@gtempa\the\@tempcntb}{##1}%
-         \fi}%
-    }
-    od
-\lst@EndAspect
-\endinput
-%%
-%% End of file `lstmisc.sty'.
