Index: doc/LaTeXmacros/common.tex
===================================================================
--- doc/LaTeXmacros/common.tex	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ doc/LaTeXmacros/common.tex	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -11,6 +11,6 @@
 %% Created On       : Sat Apr  9 10:06:17 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Sun Jun 18 20:32:32 2017
-%% Update Count     : 319
+%% Last Modified On : Thu Jul 13 11:44:59 2017
+%% Update Count     : 335
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -36,5 +36,5 @@
 % Names used in the document.
 
-\newcommand{\CFAIcon}{\textrm{C}\raisebox{\depth}{\rotatebox{180}{\textsf{A}}}\xspace} % Cforall symbolic name
+\newcommand{\CFAIcon}{\textsf{C}\raisebox{\depth}{\rotatebox{180}{\textsf{A}}}\xspace} % Cforall symbolic name
 \newcommand{\CFA}{\protect\CFAIcon} % safe for section/caption
 \newcommand{\CFL}{\textrm{Cforall}\xspace} % Cforall symbolic name
@@ -55,9 +55,12 @@
 \setlength{\parindentlnth}{\parindent}
 
+\newcommand{\LstKeywordStyle}[1]{{\lst@basicstyle{\lst@keywordstyle{#1}}}}
+\newcommand{\LstCommentStyle}[1]{{\lst@basicstyle{\lst@commentstyle{#1}}}}
+
 \newlength{\gcolumnposn}				% temporary hack because lstlisting does not handle tabs correctly
 \newlength{\columnposn}
 \setlength{\gcolumnposn}{2.5in}
 \setlength{\columnposn}{\gcolumnposn}
-\newcommand{\C}[2][\@empty]{\ifx#1\@empty\else\global\setlength{\columnposn}{#1}\global\columnposn=\columnposn\fi\hfill\makebox[\textwidth-\columnposn][l]{\lst@commentstyle{#2}}}
+\newcommand{\C}[2][\@empty]{\ifx#1\@empty\else\global\setlength{\columnposn}{#1}\global\columnposn=\columnposn\fi\hfill\makebox[\textwidth-\columnposn][l]{\lst@basicstyle{\LstCommentStyle{#2}}}}
 \newcommand{\CRT}{\global\columnposn=\gcolumnposn}
 
@@ -231,5 +234,5 @@
 basicstyle=\linespread{0.9}\sf,							% reduce line spacing and use sanserif font
 stringstyle=\tt,										% use typewriter font
-tabsize=4,												% 4 space tabbing
+tabsize=6,												% N space tabbing
 xleftmargin=\parindentlnth,								% indent code to paragraph indentation
 extendedchars=true,										% allow ASCII characters in the range 128-255
Index: c/LaTeXmacros/enumitem/README
===================================================================
--- doc/LaTeXmacros/enumitem/README	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/enumitem/enumitem.sty
===================================================================
--- doc/LaTeXmacros/enumitem/enumitem.sty	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/enumitem/enumitem.tex
===================================================================
--- doc/LaTeXmacros/enumitem/enumitem.tex	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/README
===================================================================
--- doc/LaTeXmacros/listings/README	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings-acm.prf
===================================================================
--- doc/LaTeXmacros/listings/listings-acm.prf	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings-bash.prf
===================================================================
--- doc/LaTeXmacros/listings/listings-bash.prf	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings-fortran.prf
===================================================================
--- doc/LaTeXmacros/listings/listings-fortran.prf	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings-lua.prf
===================================================================
--- doc/LaTeXmacros/listings/listings-lua.prf	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings-python.prf
===================================================================
--- doc/LaTeXmacros/listings/listings-python.prf	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings.cfg
===================================================================
--- doc/LaTeXmacros/listings/listings.cfg	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings.dtx
===================================================================
--- doc/LaTeXmacros/listings/listings.dtx	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings.ins
===================================================================
--- doc/LaTeXmacros/listings/listings.ins	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings.log
===================================================================
--- doc/LaTeXmacros/listings/listings.log	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings.sty
===================================================================
--- doc/LaTeXmacros/listings/listings.sty	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/listings.sty.new
===================================================================
--- doc/LaTeXmacros/listings/listings.sty.new	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/lstdoc.sty
===================================================================
--- doc/LaTeXmacros/listings/lstdoc.sty	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/lstdrvrs.dtx
===================================================================
--- doc/LaTeXmacros/listings/lstdrvrs.dtx	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/lstdrvrs.ins
===================================================================
--- doc/LaTeXmacros/listings/lstdrvrs.ins	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/lstlang1.sty
===================================================================
--- doc/LaTeXmacros/listings/lstlang1.sty	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/lstlang2.sty
===================================================================
--- doc/LaTeXmacros/listings/lstlang2.sty	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/lstlang3.sty
===================================================================
--- doc/LaTeXmacros/listings/lstlang3.sty	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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: c/LaTeXmacros/listings/lstmisc.sty
===================================================================
--- doc/LaTeXmacros/listings/lstmisc.sty	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ 	(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'.
Index: doc/LaTeXmacros/lstlang.sty
===================================================================
--- doc/LaTeXmacros/lstlang.sty	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ doc/LaTeXmacros/lstlang.sty	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -8,6 +8,6 @@
 %% Created On       : Sat May 13 16:34:42 2017
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Thu Jun 22 07:40:31 2017
-%% Update Count     : 10
+%% Last Modified On : Wed Jul 12 22:42:09 2017
+%% Update Count     : 12
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -112,5 +112,5 @@
 		finally, forall, ftype, _Generic, _Imaginary, inline, __label__, lvalue, _Noreturn, one_t, 
 		otype, restrict, _Static_assert, throw, throwResume, trait, try, ttype, typeof, __typeof, 
-		__typeof__, zero_t},
+		__typeof__, with, zero_t},
 	morekeywords=[2]{
 		_Atomic, coroutine, is_coroutine, is_monitor, is_thread, monitor, mutex, nomutex, 
@@ -118,4 +118,7 @@
 	moredirectives={defined,include_next}%
 }
+
+% C++ programming language
+\lstdefinelanguage{C++}[ANSI]{C++}{}
 
 % uC++ programming language, based on ANSI C++
Index: doc/bibliography/cfa.bib
===================================================================
--- doc/bibliography/cfa.bib	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ doc/bibliography/cfa.bib	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -2273,5 +2273,5 @@
 @manual{JavaScript,
     keywords	= {JavaScript},
-    contributer	= {pabuhr},
+    contributer	= {pabuhr@plg},
     title	= {ECMAScript 2015 Language Specification {JavaScript}},
     organization= {ECAM International},
@@ -2446,5 +2446,5 @@
 @manual{Erlang,
     keywords	= {Erlang},
-    contributer	= {pabuhr},
+    contributer	= {pabuhr@plg},
     title	= {Erlang Reference Manual User's Guide, Vertion 7.0},
     organization= {Erlang/OTP System Documentation},
@@ -2771,4 +2771,17 @@
     publisher	= {ACM},
     address	= {New York, NY, USA},
+}
+
+@article{Yang95,
+    keywords	= {software solutions, N-thread, mutual exclusions},
+    contributer	= {pabuhr@plg},
+    author	= {Jae-Heon Yang and James H. Anderson},
+    title	= {A Fast, Scalable Mutual Exclusion Algorithm},
+    journal	= {Distributed Computing},
+    publisher	= {Springer-Verlag},
+    volume	= {9},
+    number	= {1},
+    year	= {1995},
+    pages	= {51-60},
 }
 
@@ -5052,9 +5065,9 @@
     contributer	= {pabuhr@plg},
     author	= {Kathleen Jensen and Niklaus Wirth},
-    title	= {{P}ascal User Manual and Report},
+    title	= {{P}ascal User Manual and Report, ISO Pascal Standard},
     publisher	= {Springer--Verlag},
-    year	= 1985,
-    edition	= {3rd},
-    note	= {Revised by Andrew B. Mickel and James F. Miner, ISO Pascal Standard}
+    year	= 1991,
+    edition	= {4th},
+    note	= {Revised by Andrew B. Mickel and James F. Miner}
 }
 
Index: doc/proposals/tagged-struct.txt
===================================================================
--- doc/proposals/tagged-struct.txt	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ doc/proposals/tagged-struct.txt	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -71,4 +71,9 @@
 should be possible to do during linking.
 
+If a generic/polymorphic type is tagged its tagged would then be shared
+between all applications of that generic. Internal tags could be used to
+seperate these structures again, however it seems in most cases simply using
+the existing type parameters should provide the needed information.
+
 
 Traits:
@@ -102,21 +107,57 @@
 To allow for growth each option would have to be a structure itself.
 
-Which brings us to "tagget struct union", ie. a union of tagged structures
+Which brings us to "tagged struct union", ie. a union of tagged structures
 as opposed to tagging the union itself. This extention acts as a constraint.
 If unions are declared tagged instead of creating a new tagged type, all
-possible values of the union must be of that tagged type or a child type.
+possible values of the union must be of that tagged type or a child type. If
+the tagged type is omitted then they must all be tagged but of any tagged
+type.
+
+As a short cut union_instance->type might get the type object of the loaded
+value. It should always be the same operation regardless so it saves
+abritarly picking a branch of the union to get the type object.
 
 
-Custom Type Objects (Extention):
+Type Objects Fields (Extention):
 
-Some method to define type objects used within a tree of types. One option is
-to allow the tree's type object to be specified by the tree root. It would
-then have to be filled in for each type in the tree, including the root.
+Adding fields to the type object allows data to be shared between instances
+of the same type. Such behaviour could be mimiced by creating a lookup
+function on the type object pointer, but this may be cleaner and more
+efficient.
 
-The only required field is the parent field, a pointer to the type object's
-type. (This is also the only required field on the tagged structure itself.)
+The type object fields follow similar rules to the fields on the tagged
+objects themselves, they must be additive. So any fields present on a
+type object will be present (and in the same place) on all of its children.
 
-A further extention could allow expanding type objects, so child types could
-append fields to their parent's feild list. They might need their own type
-objects at that point, or maybe static checks will be enough to see the
-minimum field list.
+This does mean that many type object structure types will have to be auto
+generated, and traversing up the tree might get a little wierd. That could
+be symplified by only allowing the root type to specify fields on the type
+object, so that the type object is consistant throughout that particular tree.
+And hence the type_object pointers would also be consistant as the type they
+point to would never change.
+
+struct Example tagged {
+	tagged char const * const type_name = "Example";
+	int data;
+};
+
+Creates a tagged structure that has no parent, stores an integer and the type
+object also has an extra field that stores a string on the type object.
+This can be accessed by using member access on the type object, as a regular
+structure.
+
+Type object fields will have to allow initialization on their declaration,
+and declarations of children as well, as they are not assotiated with the
+later instances of the tagged structure.
+
+	...
+	tagged void (*dtor)(tagged Example * this);
+	...
+
+Sub-Extention, not sure how it would work but some way to have a "dynamic"
+field that is considered the type of the current tagged struct might be useful
+for things like specifying a deconstructor. In this case, the following code
+will clean up any child type of Example:
+
+Example * ex = get_some_example();
+ex->type->dtor(ex);
Index: doc/user/Makefile
===================================================================
--- doc/user/Makefile	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ doc/user/Makefile	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -1,5 +1,5 @@
 ## Define the appropriate configuration variables.
 
-TeXLIB = .:../LaTeXmacros:../LaTeXmacros/listings:../LaTeXmacros/enumitem:../bibliography/:
+TeXLIB = .:../LaTeXmacros:../bibliography/:
 LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex -halt-on-error
 BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex
Index: doc/user/user.tex
===================================================================
--- doc/user/user.tex	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ doc/user/user.tex	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -11,6 +11,6 @@
 %% Created On       : Wed Apr  6 14:53:29 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Sun Jul  2 09:49:56 2017
-%% Update Count     : 2503
+%% Last Modified On : Thu Jul 13 11:44:57 2017
+%% Update Count     : 2690
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -57,4 +57,8 @@
 \CFAStyle												% use default CFA format-style
 
+\lstnewenvironment{C++}[1][]
+{\lstset{language=C++,moredelim=**[is][\protect\color{red}]{®}{®}#1}}
+{}
+
 % inline code ©...© (copyright symbol) emacs: C-q M-)
 % red highlighting ®...® (registered trademark symbol) emacs: C-q M-.
@@ -137,17 +141,19 @@
 
 \CFA{}\index{cforall@\CFA}\footnote{Pronounced ``\Index*{C-for-all}'', and written \CFA, CFA, or \CFL.} is a modern general-purpose programming-language, designed as an evolutionary step forward for the C programming language.
-The syntax of the \CFA language builds from C, and should look immediately familiar to C/\Index*[C++]{\CC{}} programmers.
+The syntax of \CFA builds from C and should look immediately familiar to C/\Index*[C++]{\CC{}} programmers.
 % Any language feature that is not described here can be assumed to be using the standard \Celeven syntax.
-\CFA adds many modern programming-language features that directly lead to increased \emph{\Index{safety}} and \emph{\Index{productivity}}, while maintaining interoperability with existing C programs and achieving C performance.
-Like C, \CFA is a statically typed, procedural language with a low-overhead runtime, meaning there is no global \Index{garbage-collection}, but \Index{regional garbage-collection}\index{garbage-collection!regional} is possible.
+\CFA adds many modern programming-language features that directly lead to increased \emph{\Index{safety}} and \emph{\Index{productivity}}, while maintaining interoperability with existing C programs and achieving similar performance.
+Like C, \CFA is a statically typed, procedural (non-\Index{object-oriented}) language with a low-overhead runtime, meaning there is no global \Index{garbage-collection}, but \Index{regional garbage-collection}\index{garbage-collection!regional} is possible.
 The primary new features include parametric-polymorphic routines and types, exceptions, concurrency, and modules.
 
-One of the main design philosophies of \CFA is to ``describe not prescribe'', which means \CFA tries to provide a pathway from low-level C programming to high-level \CFA programming, but it does not force programmers to ``do the right thing''.
-Programmers can cautiously add \CFA extensions to their C programs in any order and at any time to incrementally move towards safer, higher-level programming features.
-A programmer is always free to reach back to C from \CFA for any reason, and in many cases, new \CFA features have a fallback to a C mechanism.
-There is no notion or requirement for rewriting a legacy C program in \CFA;
-instead, a programmer evolves an existing C program into \CFA by incrementally incorporating \CFA features.
-New programs can be written in \CFA using a combination of C and \CFA features.
-\Index*[C++]{\CC{}} had a similar goal 30 years ago, but currently has the disadvantages of multiple legacy design-choices that cannot be updated and active divergence of the language model from C, requiring significant effort and training to incrementally add \CC to a C-based project.
+One of the main design philosophies of \CFA is to ``\Index{describe not prescribe}'', which means \CFA tries to provide a pathway from low-level C programming to high-level \CFA programming, but it does not force programmers to ``do the right thing''.
+Programmers can cautiously add \CFA extensions to their C programs in any order and at any time to incrementally move towards safer, higher-level programming.
+A programmer is always free to reach back to C from \CFA, for any reason, and in many cases, new \CFA features can be locally switched back to there C counterpart.
+There is no notion or requirement for \emph{rewriting} a legacy C program in \CFA;
+instead, a programmer evolves a legacy program into \CFA by incrementally incorporating \CFA features.
+As well, new programs can be written in \CFA using a combination of C and \CFA features.
+
+\Index*[C++]{\CC{}} had a similar goal 30 years ago, allowing object-oriented programming to be incrementally added to C.
+However, \CC currently has the disadvantages of a strong object-oriented bias, multiple legacy design-choices that cannot be updated, and active divergence of the language model from C, all of which requires significant effort and training to incrementally add \CC to a C-based project.
 In contrast, \CFA has 30 years of hindsight and a clean starting point.
 
@@ -156,15 +162,6 @@
 \begin{quote2}
 \begin{tabular}{@{}l@{\hspace{1.5em}}l@{\hspace{1.5em}}l@{}}
-\multicolumn{1}{c@{\hspace{1.5em}}}{\textbf{\CFA}}	& \multicolumn{1}{c}{\textbf{C}}	& \multicolumn{1}{c}{\textbf{\CC}}	\\
-\begin{cfa}
-#include <fstream>§\indexc{fstream}§
-
-int main( void ) {
-	int x = 0, y = 1, z = 2;
-	®sout | x | y | z | endl;®
-}
-\end{cfa}
-&
-\begin{lstlisting}
+\multicolumn{1}{c@{\hspace{1.5em}}}{\textbf{C}}	& \multicolumn{1}{c}{\textbf{\CFA}}	& \multicolumn{1}{c}{\textbf{\CC}}	\\
+\begin{cfa}
 #include <stdio.h>§\indexc{stdio.h}§
 
@@ -173,7 +170,16 @@
 	®printf( "%d %d %d\n", x, y, z );®
 }
-\end{lstlisting}
+\end{cfa}
 &
-\begin{lstlisting}
+\begin{cfa}
+#include <fstream>§\indexc{fstream}§
+
+int main( void ) {
+	int x = 0, y = 1, z = 2;
+	®sout | x | y | z | endl;®§\indexc{sout}§
+}
+\end{cfa}
+&
+\begin{cfa}
 #include <iostream>§\indexc{iostream}§
 using namespace std;
@@ -182,14 +188,16 @@
 	®cout<<x<<" "<<y<<" "<<z<<endl;®
 }
-\end{lstlisting}
+\end{cfa}
 \end{tabular}
 \end{quote2}
 While the \CFA I/O looks similar to the \Index*[C++]{\CC{}} output style, there are important differences, such as automatic spacing between variables as in \Index*{Python} (see~\VRef{s:IOLibrary}).
 
+\subsection{Background}
+
 This document is a programmer reference-manual for the \CFA programming language.
 The manual covers the core features of the language and runtime-system, with simple examples illustrating syntax and semantics of each feature.
 The manual does not teach programming, i.e., how to combine the new constructs to build complex programs.
-A reader should already have an intermediate knowledge of control flow, data structures, and concurrency issues to understand the ideas presented as well as some experience programming in C/\CC.
-Implementers may refer to the \CFA Programming Language Specification for details about the language syntax and semantics.
+A reader should already have an intermediate knowledge of control flow, data structures, and concurrency issues to understand the ideas presented, as well as some experience programming in C/\CC.
+Implementers should refer to the \CFA Programming Language Specification for details about the language syntax and semantics.
 Changes to the syntax and additional features are expected to be included in later revisions.
 
@@ -200,5 +208,5 @@
 This installation base and the programmers producing it represent a massive software-engineering investment spanning decades and likely to continue for decades more.
 Even with all its problems, C continues to be popular because it allows writing software at virtually any level in a computer system without restriction.
-For system programming, where direct access to hardware and dealing with real-time issues is a requirement, C is usually the language of choice.
+For system programming, where direct access to hardware, storage management, and real-time issues are a requirement, C is usually the only language of choice.
 The TIOBE index~\cite{TIOBE} for March 2016 showed the following programming-language popularity: \Index*{Java} 20.5\%, C 14.5\%, \Index*[C++]{\CC{}} 6.7\%, \Csharp 4.3\%, \Index*{Python} 4.3\%, where the next 50 languages are less than 3\% each with a long tail.
 As well, for 30 years, C has been the number 1 and 2 most popular programming language:
@@ -216,31 +224,32 @@
 \end{center}
 Hence, C is still an extremely important programming language, with double the usage of \Index*[C++]{\CC{}}; in many cases, \CC is often used solely as a better C.
-Love it or hate it, C has been an important and influential part of computer science for 40 years and sit appeal is not diminishing.
-Unfortunately, C has too many problems and omissions to make it an acceptable programming language for modern needs.
-
-As stated, the goal of the \CFA project is to engineer modern language features into C in an evolutionary rather than revolutionary way.
+Love it or hate it, C has been an important and influential part of computer science for 40 years and its appeal is not diminishing.
+Unfortunately, C has many problems and omissions that make it an unacceptable programming language for modern needs.
+
+As stated, the goal of the \CFA project is to engineer modern language-features into C in an evolutionary rather than revolutionary way.
 \CC~\cite{C++14,C++} is an example of a similar project;
-however, it largely extended the language, and did not address many existing problems.\footnote{%
+however, it largely extended the C language, and did not address most of C's existing problems.\footnote{%
 Two important existing problems addressed were changing the type of character literals from ©int© to ©char© and enumerator from ©int© to the type of its enumerators.}
-\Index*{Fortran}~\cite{Fortran08}, \Index*{Ada}~\cite{Ada12}, and \Index*{Cobol}~\cite{Cobol14} are examples of programming languages that took an evolutionary approach, where modern language features (\eg objects, concurrency) are added and problems fixed within the framework of the existing language.
+\Index*{Fortran}~\cite{Fortran08}, \Index*{Ada}~\cite{Ada12}, and \Index*{Cobol}~\cite{Cobol14} are examples of programming languages that took an evolutionary approach, where modern language-features (\eg objects, concurrency) are added and problems fixed within the framework of the existing language.
 \Index*{Java}~\cite{Java8}, \Index*{Go}~\cite{Go}, \Index*{Rust}~\cite{Rust} and \Index*{D}~\cite{D} are examples of the revolutionary approach for modernizing C/\CC, resulting in a new language rather than an extension of the descendent.
-These languages have different syntax and semantics from C, and do not interoperate directly with C, largely because of garbage collection.
+These languages have different syntax and semantics from C, do not interoperate directly with C, and are not systems languages because of restrictive memory-management or garbage collection.
 As a result, there is a significant learning curve to move to these languages, and C legacy-code must be rewritten.
-These costs can be prohibitive for many companies with a large software base in C/\CC, and a significant number of programmers requiring retraining to a new programming language.
-
-The result of this project is a language that is largely backwards compatible with \Index*[C11]{\Celeven{}}~\cite{C11}, but fixing some of the well known C problems and containing many modern language features.
+These costs can be prohibitive for many companies with a large software-base in C/\CC, and a significant number of programmers require retraining to the new programming language.
+
+The result of this project is a language that is largely backwards compatible with \Index*[C11]{\Celeven{}}~\cite{C11}, but fixes many of the well known C problems while containing modern language-features.
 Without significant extension to the C programming language, it is becoming unable to cope with the needs of modern programming problems and programmers;
 as a result, it will fade into disuse.
 Considering the large body of existing C code and programmers, there is significant impetus to ensure C is transformed into a modern programming language.
-While \Index*[C11]{\Celeven{}} made a few simple extensions to the language, nothing was added to address existing problems in the language or to augment the language with modern language features.
-While some may argue that modern language features may make C complex and inefficient, it is clear a language without modern capabilities is insufficient for the advanced programming problems existing today.
+While \Index*[C11]{\Celeven{}} made a few simple extensions to the language, nothing was added to address existing problems in the language or to augment the language with modern language-features.
+While some may argue that modern language-features may make C complex and inefficient, it is clear a language without modern capabilities is insufficient for the advanced programming problems existing today.
 
 
 \section{History}
 
-The \CFA project started with \Index*{K-W C}~\cite{Buhr94a,Till89}, which extended C with new declaration syntax, multiple return values from routines, and extended assignment capabilities using the notion of tuples.
+The \CFA project started with \Index*{K-W C}~\cite{Buhr94a,Till89}, which extended C with new declaration syntax, multiple return values from routines, and advanced assignment capabilities using the notion of tuples.
 (See~\cite{Werther96} for similar work in \Index*[C++]{\CC{}}.)
-A first \CFA implementation of these extensions was by Esteves~\cite{Esteves04}.
-The signature feature of \CFA is parametric-polymorphic functions~\cite{forceone:impl,Cormack90,Duggan96} with functions generalized using a ©forall© clause (giving the language its name):
+The first \CFA implementation of these extensions was by Esteves~\cite{Esteves04}.
+
+The signature feature of \CFA is \Index{overload}able \Index{parametric-polymorphic} functions~\cite{forceone:impl,Cormack90,Duggan96} with functions generalized using a ©forall© clause (giving the language its name):
 \begin{lstlisting}
 ®forall( otype T )® T identity( T val ) { return val; }
@@ -250,5 +259,5 @@
 \CFA{}\hspace{1pt}'s polymorphism was originally formalized by Ditchfiled~\cite{Ditchfield92}, and first implemented by Bilson~\cite{Bilson03}.
 However, at that time, there was little interesting in extending C, so work did not continue.
-As the saying goes, ``What goes around, comes around.'', and there is now renewed interest in the C programming language because of legacy code-bases, so the \CFA project has been restarted.
+As the saying goes, ``\Index*{What goes around, comes around.}'', and there is now renewed interest in the C programming language because of legacy code-bases, so the \CFA project has been restarted.
 
 
@@ -257,9 +266,9 @@
 
 \CFA is designed to integrate directly with existing C programs and libraries.
-The most important feature of \Index{interoperability} is using the same \Index{calling convention}s, so there is no overhead to call existing C routines.
+The most important feature of \Index{interoperability} is using the same \Index{calling convention}s, so there is no complex interface or overhead to call existing C routines.
 This feature allows \CFA programmers to take advantage of the existing panoply of C libraries to access thousands of external software features.
 Language developers often state that adequate \Index{library support} takes more work than designing and implementing the language itself.
 Fortunately, \CFA, like \Index*[C++]{\CC{}}, starts with immediate access to all exiting C libraries, and in many cases, can easily wrap library routines with simpler and safer interfaces, at very low cost.
-Hence, \CFA begins by leveraging the large repository of C libraries with little cost.
+Hence, \CFA begins by leveraging the large repository of C libraries at little cost.
 
 \begin{comment}
@@ -304,7 +313,7 @@
 \end{comment}
 
-However, it is necessary to differentiate between C and \CFA code because of name overloading, as for \CC.
+However, it is necessary to differentiate between C and \CFA code because of name \Index{overload}ing, as for \CC.
 For example, the C math-library provides the following routines for computing the absolute value of the basic types: ©abs©, ©labs©, ©llabs©, ©fabs©, ©fabsf©, ©fabsl©, ©cabsf©, ©cabs©, and ©cabsl©.
-Whereas, \CFA wraps each of these routines into ones with the common name ©abs©:
+Whereas, \CFA wraps each of these routines into ones with the overloaded name ©abs©:
 \begin{cfa}
 char abs( char );
@@ -326,15 +335,15 @@
 Hence, there is the same need as in \CC, to know if a name is a C or \CFA name, so it can be correctly formed.
 There is no way around this problem, other than C's approach of creating unique names for each pairing of operation and type.
-This example strongly illustrates a core idea in \CFA: \emph{the power of a name}.
+This example strongly illustrates a core idea in \CFA: \emph{the \Index{power of a name}}.
 The name ``©abs©'' evokes the notion of absolute value, and many mathematical types provide the notion of absolute value.
-Hence, knowing the name ©abs© should be sufficient to apply it to any type where it is applicable.
-The time savings and safety of using one name uniformly versus $N$ unique names should not be underestimated.
-
-
-\section[Compiling CFA Program]{Compiling \CFA Program}
+Hence, knowing the name ©abs© is sufficient to apply it to any type where it is applicable.
+The time savings and safety of using one name uniformly versus $N$ unique names cannot be underestimated.
+
+
+\section[Compiling a CFA Program]{Compiling a \CFA Program}
 
 The command ©cfa© is used to compile \CFA program(s), and is based on the GNU \Indexc{gcc} command, \eg:
 \begin{cfa}
-cfa§\indexc{cfa}\index{compilation!cfa@©cfa©}§ [ gcc-options ] C/§\CFA§-files [ assembler/loader-files ]
+cfa§\indexc{cfa}\index{compilation!cfa@©cfa©}§ [ gcc-options ] C/§\CFA{}§-files [ assembler/loader-files ]
 \end{cfa}
 \CFA programs having the following ©gcc© flags turned on:
@@ -359,5 +368,5 @@
 \Indexc{-debug}\index{compilation option!-debug@©-debug©}
 The program is linked with the debugging version of the runtime system.
-The debug version performs runtime checks to help during the debugging phase of a \CFA program, but substantially slows the execution of the program.
+The debug version performs runtime checks to help during the debugging phase of a \CFA program, but can substantially slow program execution.
 The runtime checks should only be removed after the program is completely debugged.
 \textbf{This option is the default.}
@@ -415,5 +424,5 @@
 \end{description}
 These preprocessor variables allow conditional compilation of programs that must work differently in these situations.
-For example, to toggle between C and \CFA extensions, using the following:
+For example, to toggle between C and \CFA extensions, use the following:
 \begin{cfa}
 #ifndef __CFORALL__
@@ -426,7 +435,7 @@
 
 
-\section{Constants Underscores}
-
-Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, \eg:
+\section{Constant Underscores}
+
+Numeric constants are extended to allow \Index{underscore}s\index{constant!underscore}, \eg:
 \begin{cfa}
 2®_®147®_®483®_®648;					§\C{// decimal constant}§
@@ -441,6 +450,6 @@
 L®_®§"\texttt{\textbackslash{x}}§®_®§\texttt{ff}§®_®§\texttt{ee}"§;	§\C{// wide character constant}§
 \end{cfa}
-The rules for placement of underscores is as follows:
-\begin{enumerate}
+The rules for placement of underscores are:
+\begin{enumerate}[topsep=5pt,itemsep=5pt,parsep=0pt]
 \item
 A sequence of underscores is disallowed, \eg ©12__34© is invalid.
@@ -463,5 +472,6 @@
 \label{s:BackquoteIdentifiers}
 
-\CFA accommodates keyword clashes with existing C variable-names by syntactic transformations using the \CFA backquote escape-mechanism:
+\CFA introduces in new keywords (see \VRef{s:CFAKeywords}) that can clash with existing C variable-names in legacy code.
+Keyword clashes are accommodated by syntactic transformations using the \CFA backquote escape-mechanism:
 \begin{cfa}
 int ®`®otype®`® = 3;			§\C{// make keyword an identifier}§
@@ -491,13 +501,14 @@
 
 
-\section{Labelled Continue/Break}
+\section{\texorpdfstring{Labelled \LstKeywordStyle{continue} / \LstKeywordStyle{break}}{Labelled continue / break}}
 
 While C provides ©continue© and ©break© statements for altering control flow, both are restricted to one level of nesting for a particular control structure.
 Unfortunately, this restriction forces programmers to use \Indexc{goto} to achieve the equivalent control-flow for more than one level of nesting.
-To prevent having to switch to the ©goto©, \CFA extends the \Indexc{continue}\index{continue@\lstinline $continue$!labelled}\index{labelled!continue@©continue©} and \Indexc{break}\index{break@\lstinline $break$!labelled}\index{labelled!break@©break©} with a target label to support static multi-level exit\index{multi-level exit}\index{static multi-level exit}~\cite{Buhr85,Java}.
+To prevent having to switch to the ©goto©, \CFA extends the \Indexc{continue}\index{continue@\lstinline $continue$!labelled}\index{labelled!continue@©continue©} and \Indexc{break}\index{break@\lstinline $break$!labelled}\index{labelled!break@©break©} with a target label to support static multi-level exit\index{multi-level exit}\index{static multi-level exit}~\cite{Buhr85}.
 For both ©continue© and ©break©, the target label must be directly associated with a ©for©, ©while© or ©do© statement;
 for ©break©, the target label can also be associated with a ©switch©, ©if© or compound (©{}©) statement.
 \VRef[Figure]{f:MultiLevelResumeTermination} shows the labelled ©continue© and ©break©, specifying which control structure is the target for exit, and the corresponding C program using only ©goto©.
 The innermost loop has 7 exit points, which cause resumption or termination of one or more of the 7 \Index{nested control-structure}s.
+Java supports both labelled ©continue© and ©break© statements.
 
 \begin{figure}
@@ -622,5 +633,5 @@
 
 
-\section{Switch Statement}
+\section{\texorpdfstring{\LstKeywordStyle{switch} Statement}{switch Statement}}
 
 C allows a number of questionable forms for the ©switch© statement:
@@ -663,5 +674,5 @@
 	®// open input file
 ®} else if ( argc == 2 ) {
-	®// open input file
+	®// open input file (duplicate)
 
 ®} else {
@@ -676,9 +687,9 @@
 \begin{cfa}
 switch ( i ) {
-  case 1: case 3: case 5:	// odd values
-	// same action
+  ®case 1: case 3: case 5:®	// odd values
+	// odd action
 	break;
-  case 2: case 4: case 6:	// even values
-	// same action
+  ®case 2: case 4: case 6:®	// even values
+	// even action
 	break;
 }
@@ -686,5 +697,5 @@
 However, this situation is handled in other languages without fall-through by allowing a list of case values.
 While fall-through itself is not a problem, the problem occurs when fall-through is the default, as this semantics is unintuitive to many programmers and is different from virtually all other programming languages with a ©switch© statement.
-Hence, default fall-through semantics results in a large number of programming errors as programmers often forget the ©break© statement at the end of a ©case© clause, resulting in inadvertent fall-through.
+Hence, default fall-through semantics results in a large number of programming errors as programmers often \emph{forget} the ©break© statement at the end of a ©case© clause, resulting in inadvertent fall-through.
 
 \item
@@ -770,5 +781,5 @@
 and there is only a medium amount of fall-through from one ©case© clause to the next, and most of these result from a list of case values executing common code, rather than a sequence of case actions that compound.
 \end{itemize}
-These observations help to put the \CFA changes to the ©switch© into perspective.
+These observations put into perspective the \CFA changes to the ©switch©.
 \begin{enumerate}
 \item
@@ -791,5 +802,5 @@
   case 7:
 	...
-	®break®						§\C{// explicit end of switch}§
+	®break®						§\C{// redundant explicit end of switch}§
   default:
 	j = 3;
@@ -797,6 +808,6 @@
 \end{cfa}
 Like the ©switch© statement, the ©choose© statement retains the fall-through semantics for a list of ©case© clauses;
-the implicit ©break© is applied only at the end of the \emph{statements} following a ©case© clause.
-The explicit ©fallthru© is retained because it is a C-idiom most C programmers expect, and its absence might discourage programmers from using the ©choose© statement.
+An implicit ©break© is applied only at the end of the \emph{statements} following a ©case© clause.
+An explicit ©fallthru© is retained because it is a C-idiom most C programmers expect, and its absence might discourage programmers from using the ©choose© statement.
 As well, allowing an explicit ©break© from the ©choose© is a carry over from the ©switch© statement, and expected by C programmers.
 \item
@@ -827,5 +838,5 @@
 
 
-\section{Case Clause}
+\section{\texorpdfstring{\LstKeywordStyle{case} Clause}{case Clause}}
 
 C restricts the ©case© clause of a ©switch© statement to a single value.
@@ -900,4 +911,79 @@
 \begin{cfa}
 case ®1~5, 12~21, 35~42®:
+\end{cfa}
+
+
+\section{\texorpdfstring{\LstKeywordStyle{with} Clause / Statement}{with Clause / Statement}}
+\label{s:WithClauseStatement}
+
+In \Index{object-oriented} programming, there is an implicit first parameter, often names \textbf{©self©} or \textbf{©this©}, which is elided.
+\begin{C++}
+class C {
+	int i, j;
+	int mem() {		 ®// implicit "this" parameter
+		i = 1;		®// this->i
+®		j = 3;		®// this->j
+®	}
+}
+\end{C++}
+Since CFA is non-object-oriented, the equivalent object-oriented program looks like:
+\begin{cfa}
+struct C {
+	int i, j;
+};
+int mem( C &this ) {	// explicit "this" parameter
+	®this.®i = 1;			  // "this" is not elided
+	®this.®j = 2;
+}
+\end{cfa}
+but it is cumbersome having to write "©this.©" many times in a member.
+\CFA provides a ©with© clause/statement to elided the "©this.©".
+\begin{cfa}
+int mem( C &this ) ®with this® {
+	i = 1;			®// this.i
+®	j = 2;			®// this.j
+®}
+\end{cfa}
+which extends to multiple routine parameters:
+\begin{cfa}
+struct D {
+	double m, n;
+};
+int mem2( C &this1, D &this2 ) ®with this1, this2® {
+	i = 1; j = 2;
+	m = 1.0; n = 2.0;
+}
+\end{cfa}
+The ©with© clause/statement comes from Pascal~\cite[\S~4.F]{Pascal}.
+
+The statement form is used within a block:
+\begin{cfa}
+int foo() {
+	struct S1 { ... } s1;
+	struct S2 { ... } s2;
+	®with s1® {
+		// access fields of s1 without qualification
+		®with s2® {  // nesting
+			// access fields of s2 without qualification
+		}
+	}
+	®with s1, s2® {
+		// access unambiguous fields of s1 and s2 without qualification
+	}
+}
+\end{cfa}
+
+Names clashes when opening multiple structures are ambiguous.
+\begin{cfa}
+struct A { int i; int j; } a, c;
+struct B { int i; int k; } b, c;
+®with a, b® {
+	j + k;						§\C{// unambiguous}§
+	i;							§\C{// ambiguous}§
+	a.i + b.i;					§\C{// unambiguous}§
+}
+®with c® {						§\C{// ambiguous}§
+	// ...
+}
 \end{cfa}
 
@@ -1136,5 +1222,5 @@
 
 
-\section{Pointer/Reference}
+\section{Pointer / Reference}
 
 C provides a \newterm{pointer type};
@@ -2450,9 +2536,9 @@
 \end{cfa}
 \\
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
 1® ®2® ®3
 \end{cfa}
 &
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
 1 2 3
 \end{cfa}
@@ -2461,10 +2547,10 @@
 The \CFA form has half the characters of the \CC form, and is similar to \Index*{Python} I/O with respect to implicit separators.
 Similar simplification occurs for \Index{tuple} I/O, which prints all tuple values separated by ``\lstinline[showspaces=true]@, @''.
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 3, [ 4, 5 ] ];
+\begin{cfa}
+[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 4, [ 5, 6 ] ];
 sout | t1 | t2 | endl;					§\C{// print tuples}§
 \end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,belowskip=0pt]
-1®, ®2®, ®3 3®, ®4®, ®5
+\begin{cfa}[showspaces=true,aboveskip=0pt]
+1®, ®2®, ®3 4®, ®5®, ®6
 \end{cfa}
 Finally, \CFA uses the logical-or operator for I/O as it is the lowest-priority overloadable operator, other than assignment.
@@ -2485,5 +2571,5 @@
 \\
 &
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt]
 3 3 12 0 3 1 2
 \end{cfa}
@@ -2503,5 +2589,5 @@
 sout | 1 | 2 | 3 | endl;
 \end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
 1 2 3
 \end{cfa}
@@ -2570,12 +2656,12 @@
 \subsection{Manipulator}
 
-The following routines and \CC-style \Index{manipulator}s control implicit seperation.
+The following \CC-style \Index{manipulator}s and routines control implicit seperation.
 \begin{enumerate}
 \item
-Routines \Indexc{sepSet}\index{manipulator!sepSet@©sepSet©} and \Indexc{sepGet}\index{manipulator!sepGet@©sepGet©} set and get the separator string.
+Routines \Indexc{sepSet}\index{manipulator!sepSet@©sepSet©} and \Indexc{sep}\index{manipulator!sep@©sep©}/\Indexc{sepGet}\index{manipulator!sepGet@©sepGet©} set and get the separator string.
 The separator string can be at most 16 characters including the ©'\0'© string terminator (15 printable characters).
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[mathescape=off,belowskip=0pt]
 sepSet( sout, ", $" );						§\C{// set separator from " " to ", \$"}§
-sout | 1 | 2 | 3 | " \"" | ®sepGet( sout )® | "\"" | endl;
+sout | 1 | 2 | 3 | " \"" | ®sep® | "\"" | endl;
 \end{cfa}
 %$
@@ -2584,82 +2670,108 @@
 \end{cfa}
 %$
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[belowskip=0pt]
 sepSet( sout, " " );						§\C{// reset separator to " "}§
 sout | 1 | 2 | 3 | " \"" | ®sepGet( sout )® | "\"" | endl;
 \end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt]
 1® ®2® ®3 ®" "®
 \end{cfa}
-
-\item
-Routine \Indexc{sepSetTuple}\index{manipulator!sepSetTuple@©sepSetTuple©} and \Indexc{sepGetTuple}\index{manipulator!sepGetTuple@©sepGetTuple©} get and set the tuple separator-string.
+©sepGet© can be used to store a separator and then restore it:
+\begin{cfa}[belowskip=0pt]
+char store[®sepSize®];						§\C{// sepSize is the maximum separator size}§
+strcpy( store, sepGet( sout ) );
+sepSet( sout, "_" );
+sout | 1 | 2 | 3 | endl;
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+1®_®2®_®3
+\end{cfa}
+\begin{cfa}[belowskip=0pt]
+sepSet( sout, store );
+sout | 1 | 2 | 3 | endl;
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt]
+1® ®2® ®3
+\end{cfa}
+
+\item
+Routine \Indexc{sepSetTuple}\index{manipulator!sepSetTuple@©sepSetTuple©} and \Indexc{sepTuple}\index{manipulator!sepTuple@©sepTuple©}/\Indexc{sepGetTuple}\index{manipulator!sepGetTuple@©sepGetTuple©} get and set the tuple separator-string.
 The tuple separator-string can be at most 16 characters including the ©'\0'© string terminator (15 printable characters).
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[belowskip=0pt]
 sepSetTuple( sout, " " );					§\C{// set tuple separator from ", " to " "}§
-sout | t1 | t2 | " \"" | ®sepGetTuple( sout )® | "\"" | endl;
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt]
-1 2 3 4 ®" "®
-\end{cfa}
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
+sout | t1 | t2 | " \"" | ®sepTuple® | "\"" | endl;
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt]
+1 2 3 4 5 6 ®" "®
+\end{cfa}
+\begin{cfa}[belowskip=0pt]
 sepSetTuple( sout, ", " );					§\C{// reset tuple separator to ", "}§
 sout | t1 | t2 | " \"" | ®sepGetTuple( sout )® | "\"" | endl;
 \end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt]
-1, 2, 3, 4 ®", "®
-\end{cfa}
-
-\item
-Manipulators \Indexc{sepOn}\index{manipulator!sepOn@©sepOn©} and \Indexc{sepOff}\index{manipulator!sepOff@©sepOff©} \emph{locally} toggle printing the separator, \ie the seperator is adjusted only with respect to the next printed item.
-\begin{cfa}[mathescape=off,belowskip=0pt]
-sout | sepOn | 1 | 2 | 3 | sepOn | endl;	§\C{// separator at start/end of line}§
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
-® ®1 2 3® ®
-\end{cfa}
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-sout | 1 | sepOff | 2 | 3 | endl;			§\C{// locally turn off implicit separator}§
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
-12 3
-\end{cfa}
-The tuple separator also responses to being turned on and off.
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-sout | sepOn | t1 | sepOff | t2 | endl;		§\C{// locally turn on/off implicit separation}§
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
-, 1, 23, 4
-\end{cfa}
-Notice a tuple seperator starts the line because the next item is a tuple.
-
-\item
-Manipulators \Indexc{sepDisable}\index{manipulator!sepDisable@©sepDisable©} and \Indexc{sepEnable}\index{manipulator!sepEnable@©sepEnable©} \emph{globally} toggle printing the separator, \ie the seperator is adjusted with respect to all subsequent printed items, unless locally adjusted.
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-sout | sepDisable | 1 | 2 | 3 | endl;		§\C{// globally turn off implicit separation}§
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt]
+1, 2, 3 4, 5, 6 ®", "®
+\end{cfa}
+As for ©sepGet©, ©sepGetTuple© can be use to store a tuple separator and then restore it.
+
+\item
+Manipulators \Indexc{sepDisable}\index{manipulator!sepDisable@©sepDisable©} and \Indexc{sepEnable}\index{manipulator!sepEnable@©sepEnable©} \emph{globally} toggle printing the separator, \ie the seperator is adjusted with respect to all subsequent printed items.
+\begin{cfa}[belowskip=0pt]
+sout | sepDisable | 1 | 2 | 3 | endl;		§\C{// globally turn off implicit separator}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
 123
 \end{cfa}
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-sout | 1 | ®sepOn® | 2 | 3 | endl;			§\C{// locally turn on implicit separator}§
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
-1® ®23
-\end{cfa}
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-sout | sepEnable | 1 | 2 | 3 | endl;		§\C{// globally turn on implicit separation}§
+\begin{cfa}[belowskip=0pt]
+sout | sepEnable | 1 | 2 | 3 | endl;		§\C{// globally turn on implicit separator}§
 \end{cfa}
 \begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
 1 2 3
 \end{cfa}
+
+\item
+Manipulators \Indexc{sepOn}\index{manipulator!sepOn@©sepOn©} and \Indexc{sepOff}\index{manipulator!sepOff@©sepOff©} \emph{locally} toggle printing the separator, \ie the seperator is adjusted only with respect to the next printed item.
+\begin{cfa}[belowskip=0pt]
+sout | 1 | sepOff | 2 | 3 | endl;			§\C{// locally turn off implicit separator}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+12 3
+\end{cfa}
+\begin{cfa}[belowskip=0pt]
+sout | sepDisable | 1 | sepOn | 2 | 3 | endl; §\C{// locally turn on implicit separator}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+1 23
+\end{cfa}
+The tuple separator also responses to being turned on and off.
+\begin{cfa}[belowskip=0pt]
+sout | t1 | sepOff | t2 | endl;				§\C{// locally turn on/off implicit separator}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+1, 2, 34, 5, 6
+\end{cfa}
+©sepOn© \emph{cannot} be used to start/end a line with a separator because separators do not appear at the start/end of a line;
+use ©sep© to accomplish this functionality.
+\begin{cfa}[belowskip=0pt]
+sout | sepOn | 1 | 2 | 3 | sepOn | endl ;	§\C{// sepOn does nothing at start/end of line}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+1 2 3
+\end{cfa}
+\begin{cfa}[belowskip=0pt]
+sout | sep | 1 | 2 | 3 | sep | endl ;		§\C{// use sep to print separator at start/end of line}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+® ®1 2 3® ®
+\end{cfa}
 \end{enumerate}
 
 \begin{comment}
 #include <fstream>
+#include <string.h>										// strcpy
 
 int main( void ) {
 	int x = 1, y = 2, z = 3;
 	sout | x | y | z | endl;
-	[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 3, [ 4, 5 ] ];
+	[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 4, [ 5, 6 ] ];
 	sout | t1 | t2 | endl;						// print tuples
 	sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;
@@ -2675,22 +2787,30 @@
 
 	sepSet( sout, ", $" );						// set separator from " " to ", $"
-	sout | 1 | 2 | 3 | " \"" | sepGet( sout ) | "\"" | endl;
+	sout | 1 | 2 | 3 | " \"" | sep | "\"" | endl;
 	sepSet( sout, " " );						// reset separator to " "
 	sout | 1 | 2 | 3 | " \"" | sepGet( sout ) | "\"" | endl;
 
-	sout | sepOn | 1 | 2 | 3 | sepOn | endl;	// separator at start of line
-	sout | 1 | sepOff | 2 | 3 | endl;			// locally turn off implicit separator
-
-	sout | sepDisable | 1 | 2 | 3 | endl;		// globally turn off implicit separation
-	sout | 1 | sepOn | 2 | 3 | endl;			// locally turn on implicit separator
-	sout | sepEnable | 1 | 2 | 3 | endl;		// globally turn on implicit separation
+	char store[sepSize];
+	strcpy( store, sepGet( sout ) );
+	sepSet( sout, "_" );
+	sout | 1 | 2 | 3 | endl;
+	sepSet( sout, store );
+	sout | 1 | 2 | 3 | endl;
 
 	sepSetTuple( sout, " " );					// set tuple separator from ", " to " "
-	sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
+	sout | t1 | t2 | " \"" | sepTuple | "\"" | endl;
 	sepSetTuple( sout, ", " );					// reset tuple separator to ", "
 	sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
 
-	sout | t1 | t2 | endl;						// print tuple
-	sout | sepOn | t1 | sepOff | t2 | endl;		// locally turn on/off implicit separation
+	sout | sepDisable | 1 | 2 | 3 | endl;		// globally turn off implicit separator
+	sout | sepEnable | 1 | 2 | 3 | endl;		// globally turn on implicit separator
+	
+	sout | 1 | sepOff | 2 | 3 | endl;			// locally turn on implicit separator
+	sout | sepDisable | 1 | sepOn | 2 | 3 | endl; // globally turn off implicit separator
+	sout | sepEnable;
+	sout | t1 | sepOff | t2 | endl;				// locally turn on/off implicit separator
+
+	sout | sepOn | 1 | 2 | 3 | sepOn | endl ;	// sepOn does nothing at start/end of line
+	sout | sep | 1 | 2 | 3 | sep | endl ;		// use sep to print separator at start/end of line
 }
 
@@ -5224,43 +5344,49 @@
 
 
-\section{\CFA Keywords}
+\section{\texorpdfstring{\CFA Keywords}{Cforall Keywords}}
 \label{s:CFAKeywords}
 
+\CFA introduces the following new keywords.
+
 \begin{quote2}
-\begin{tabular}{llll}
+\begin{tabular}{lllll}
 \begin{tabular}{@{}l@{}}
-©_AT©			\\
+©_At©			\\
 ©catch©			\\
 ©catchResume©	\\
 ©choose©		\\
 ©coroutine©		\\
-©disable©		\\
 \end{tabular}
 &
 \begin{tabular}{@{}l@{}}
+©disable©		\\
 ©dtype©			\\
 ©enable©		\\
 ©fallthrough©	\\
 ©fallthru©		\\
-©finally©		\\
-©forall©		\\
 \end{tabular}
 &
 \begin{tabular}{@{}l@{}}
+©finally©		\\
+©forall©		\\
 ©ftype©			\\
 ©lvalue©		\\
 ©monitor©		\\
+\end{tabular}
+&
+\begin{tabular}{@{}l@{}}
 ©mutex©			\\
 ©one_t©			\\
 ©otype©			\\
+©throw©			\\
+©throwResume©	\\
 \end{tabular}
 &
 \begin{tabular}{@{}l@{}}
-©throw©			\\
-©throwResume©	\\
 ©trait©			\\
 ©try©			\\
 ©ttype©			\\
 ©zero_t©		\\
+				\\
 \end{tabular}
 \end{tabular}
@@ -5548,5 +5674,5 @@
 // C unsafe allocation
 extern "C" {
-void * mallac( size_t size );§\indexc{memset}§
+void * malloc( size_t size );§\indexc{memset}§
 void * calloc( size_t dim, size_t size );§\indexc{calloc}§
 void * realloc( void * ptr, size_t size );§\indexc{realloc}§
Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeGen/CodeGenerator.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -14,26 +14,24 @@
 //
 
-#include <algorithm>
-#include <iostream>
-#include <cassert>
-#include <list>
-
-#include "Parser/ParseNode.h"
-
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Initializer.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Type.h"
-#include "SynTree/Attribute.h"
-
-#include "Common/utility.h"
-#include "Common/UnimplementedError.h"
+#include <cassert>                   // for assert, assertf
+#include <list>                      // for _List_iterator, list, list<>::it...
 
 #include "CodeGenerator.h"
-#include "OperatorTable.h"
-#include "GenType.h"
-
-#include "InitTweak/InitTweak.h"
+#include "Common/SemanticError.h"    // for SemanticError
+#include "Common/UniqueName.h"       // for UniqueName
+#include "Common/utility.h"          // for CodeLocation, toString
+#include "GenType.h"                 // for genType
+#include "InitTweak/InitTweak.h"     // for getPointerBase
+#include "OperatorTable.h"           // for OperatorInfo, operatorLookup
+#include "Parser/LinkageSpec.h"      // for Spec, Intrinsic
+#include "SynTree/Attribute.h"       // for Attribute
+#include "SynTree/BaseSyntaxNode.h"  // for BaseSyntaxNode
+#include "SynTree/Constant.h"        // for Constant
+#include "SynTree/Declaration.h"     // for DeclarationWithType, TypeDecl
+#include "SynTree/Expression.h"      // for Expression, UntypedExpr, Applica...
+#include "SynTree/Initializer.h"     // for Initializer, ListInit, Designation
+#include "SynTree/Label.h"           // for Label, operator<<
+#include "SynTree/Statement.h"       // for Statement, AsmStmt, BranchStmt
+#include "SynTree/Type.h"            // for Type, Type::StorageClasses, Func...
 
 using namespace std;
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeGen/CodeGenerator.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,14 +17,11 @@
 #define CODEGENV_H
 
-#include <list>
+#include <list>                   // for list
+#include <ostream>                // for ostream, operator<<
+#include <string>                 // for string
 
-#include "SynTree/Declaration.h"
-#include "SynTree/SynTree.h"
-#include "SynTree/Visitor.h"
-
-#include "SymTab/Indexer.h"
-
-#include "Common/Indenter.h"
-#include "Common/utility.h"
+#include "SynTree/Declaration.h"  // for DeclarationWithType (ptr only), Fun...
+#include "SynTree/Visitor.h"      // for Visitor
+#include "SynTree/SynTree.h"      // for Visitor Nodes
 
 namespace CodeGen {
Index: src/CodeGen/FixMain.cc
===================================================================
--- src/CodeGen/FixMain.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeGen/FixMain.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -5,30 +5,33 @@
 // file "LICENCE" distributed with Cforall.
 //
-// FixMain.cc -- 
+// FixMain.cc --
 //
 // Author           : Thierry Delisle
 // Created On       : Thr Jan 12 14:11:09 2017
-// Last Modified By : 
-// Last Modified On : 
+// Last Modified By :
+// Last Modified On :
 // Update Count     : 0
 //
 
 
-#include "FixMain.h"	
+#include "FixMain.h"
 
-#include <fstream>
-#include <iostream>
+#include <cassert>                 // for assert, assertf
+#include <fstream>                 // for operator<<, basic_ostream::operator<<
+#include <list>                    // for list
+#include <string>                  // for operator<<
 
-#include "Common/SemanticError.h"
-#include "SynTree/Declaration.h"
+#include "Common/SemanticError.h"  // for SemanticError
+#include "SynTree/Declaration.h"   // for FunctionDecl, operator<<
+#include "SynTree/Type.h"          // for FunctionType
 
 namespace CodeGen {
 	bool FixMain::replace_main = false;
 	std::unique_ptr<FunctionDecl> FixMain::main_signature = nullptr;
-	
-	void FixMain::registerMain(FunctionDecl* functionDecl) 
+
+	void FixMain::registerMain(FunctionDecl* functionDecl)
 	{
-		if(main_signature) { 
-			throw SemanticError("Multiple definition of main routine\n", functionDecl); 
+		if(main_signature) {
+			throw SemanticError("Multiple definition of main routine\n", functionDecl);
 		}
 		main_signature.reset( functionDecl->clone() );
Index: src/CodeGen/FixNames.cc
===================================================================
--- src/CodeGen/FixNames.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeGen/FixNames.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -14,13 +14,20 @@
 //
 
-#include <memory>
+#include "FixNames.h"
 
-#include "FixNames.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Visitor.h"
-#include "SymTab/Mangler.h"
-#include "OperatorTable.h"
-#include "FixMain.h"
+#include <memory>                  // for unique_ptr
+#include <string>                  // for string, operator!=, operator==
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "FixMain.h"               // for FixMain
+#include "Parser/LinkageSpec.h"    // for Cforall, isMangled
+#include "SymTab/Mangler.h"        // for Mangler
+#include "SynTree/Constant.h"      // for Constant
+#include "SynTree/Declaration.h"   // for FunctionDecl, ObjectDecl, Declarat...
+#include "SynTree/Expression.h"    // for ConstantExpr
+#include "SynTree/Label.h"         // for Label, noLabels
+#include "SynTree/Statement.h"     // for ReturnStmt, CompoundStmt
+#include "SynTree/Type.h"          // for Type, BasicType, Type::Qualifiers
+#include "SynTree/Visitor.h"       // for Visitor, acceptAll
 
 namespace CodeGen {
@@ -42,5 +49,5 @@
 																   main_type = new FunctionType( Type::Qualifiers(), true ), nullptr )
 				};
-		main_type->get_returnVals().push_back( 
+		main_type->get_returnVals().push_back(
 			new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nullptr )
 		);
@@ -52,18 +59,18 @@
 	std::string mangle_main_args() {
 		FunctionType* main_type;
-		std::unique_ptr<FunctionDecl> mainDecl { new FunctionDecl( "main", Type::StorageClasses(), LinkageSpec::Cforall, 
+		std::unique_ptr<FunctionDecl> mainDecl { new FunctionDecl( "main", Type::StorageClasses(), LinkageSpec::Cforall,
 																   main_type = new FunctionType( Type::Qualifiers(), false ), nullptr )
 				};
-		main_type->get_returnVals().push_back( 
+		main_type->get_returnVals().push_back(
 			new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nullptr )
 		);
 
-		mainDecl->get_functionType()->get_parameters().push_back( 
+		mainDecl->get_functionType()->get_parameters().push_back(
 			new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nullptr )
 		);
 
-		mainDecl->get_functionType()->get_parameters().push_back( 
-			new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, 
-			new PointerType( Type::Qualifiers(), new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::Char ) ) ), 
+		mainDecl->get_functionType()->get_parameters().push_back(
+			new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0,
+			new PointerType( Type::Qualifiers(), new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::Char ) ) ),
 			nullptr )
 		);
@@ -75,6 +82,6 @@
 
 	bool is_main(const std::string& name) {
-		static std::string mains[] = { 
-			mangle_main(), 
+		static std::string mains[] = {
+			mangle_main(),
 			mangle_main_args()
 		};
@@ -112,5 +119,5 @@
 			int nargs = functionDecl->get_functionType()->get_parameters().size();
 			if( !(nargs == 0 || nargs == 2 || nargs == 3) ) {
-				throw SemanticError("Main expected to have 0, 2 or 3 arguments\n", functionDecl); 
+				throw SemanticError("Main expected to have 0, 2 or 3 arguments\n", functionDecl);
 			}
 			functionDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new ConstantExpr( Constant::from_int( 0 ) ) ) );
Index: src/CodeGen/FixNames.h
===================================================================
--- src/CodeGen/FixNames.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeGen/FixNames.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,5 +17,7 @@
 #define FIXNAMES_H
 
-#include "SynTree/SynTree.h"
+#include <list>  // for list
+
+class Declaration;
 
 namespace CodeGen {
Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeGen/GenType.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -14,14 +14,14 @@
 //
 
-#include <sstream>
-#include <cassert>
-
+#include <cassert>                // for assert, assertf
+#include <list>                   // for _List_iterator, _List_const_iterator
+#include <sstream>                // for operator<<, ostringstream, basic_os...
+
+#include "CodeGenerator.h"        // for CodeGenerator
 #include "GenType.h"
-#include "CodeGenerator.h"
-
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Type.h"
-#include "SynTree/Visitor.h"
+#include "SynTree/Declaration.h"  // for DeclarationWithType
+#include "SynTree/Expression.h"   // for Expression
+#include "SynTree/Type.h"         // for PointerType, Type, FunctionType
+#include "SynTree/Visitor.h"      // for Visitor
 
 namespace CodeGen {
Index: src/CodeGen/GenType.h
===================================================================
--- src/CodeGen/GenType.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeGen/GenType.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,6 +17,7 @@
 #define _GENTYPE_H
 
-#include <string>
-#include "SynTree/SynTree.h"
+#include <string>  // for string
+
+class Type;
 
 namespace CodeGen {
Index: src/CodeGen/Generate.cc
===================================================================
--- src/CodeGen/Generate.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeGen/Generate.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -14,17 +14,15 @@
 //
 
-#include <algorithm>
-#include <iostream>
-#include <cassert>
-#include <list>
+#include <iostream>                  // for ostream, endl, operator<<
+#include <list>                      // for list
+#include <string>                    // for operator<<
 
+#include "CodeGenerator.h"           // for CodeGenerator, doSemicolon, oper...
+#include "GenType.h"                 // for genPrettyType
 #include "Generate.h"
-#include "SynTree/Declaration.h"
-#include "CodeGenerator.h"
-#include "GenType.h"
-#include "SynTree/SynTree.h"
-#include "SynTree/Type.h"
-#include "SynTree/BaseSyntaxNode.h"
-// #include "Tuples/Tuples.h"
+#include "Parser/LinkageSpec.h"      // for isBuiltin, isGeneratable
+#include "SynTree/BaseSyntaxNode.h"  // for BaseSyntaxNode
+#include "SynTree/Declaration.h"     // for Declaration
+#include "SynTree/Type.h"            // for Type
 
 using namespace std;
Index: src/CodeGen/Generate.h
===================================================================
--- src/CodeGen/Generate.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeGen/Generate.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,8 +17,9 @@
 #define GENERATE_H
 
-#include <list>
-#include <iostream>
+#include <iostream>  // for ostream
+#include <list>      // for list
 
-#include "SynTree/SynTree.h"
+class BaseSyntaxNode;
+class Declaration;
 
 namespace CodeGen {
Index: src/CodeGen/OperatorTable.cc
===================================================================
--- src/CodeGen/OperatorTable.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeGen/OperatorTable.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -14,5 +14,7 @@
 //
 
-#include <map>
+#include <map>      // for map, _Rb_tree_const_iterator, map<>::const_iterator
+#include <utility>  // for pair
+
 #include "OperatorTable.h"
 
Index: src/CodeTools/DeclStats.cc
===================================================================
--- src/CodeTools/DeclStats.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeTools/DeclStats.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -16,19 +16,23 @@
 #include "DeclStats.h"
 
-#include <iostream>
-#include <map>
-#include <sstream>
-#include <string>
-#include <unordered_map>
-#include <unordered_set>
-
-#include "Common/VectorMap.h"
-#include "GenPoly/GenPoly.h"
-#include "Parser/LinkageSpec.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Visitor.h"
+#include <iostream>                // for operator<<, basic_ostream, cout
+#include <map>                     // for map
+#include <string>                  // for string, operator+, operator<<, cha...
+#include <unordered_map>           // for unordered_map
+#include <unordered_set>           // for unordered_set
+#include <utility>                 // for pair, make_pair
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/VectorMap.h"      // for VectorMap
+#include "GenPoly/GenPoly.h"       // for hasPolyBase
+#include "Parser/LinkageSpec.h"    // for ::NoOfSpecs, Spec
+#include "SynTree/Declaration.h"   // for FunctionDecl, TypeDecl, Declaration
+#include "SynTree/Expression.h"    // for UntypedExpr, Expression
+#include "SynTree/Statement.h"     // for CompoundStmt
+#include "SynTree/Type.h"          // for Type, FunctionType, PointerType
+#include "SynTree/Visitor.h"       // for maybeAccept, Visitor, acceptAll
 
 namespace CodeTools {
-	
+
 	class DeclStats : public Visitor {
 		template<typename T>
@@ -75,9 +79,9 @@
 				sum(n_types, o.n_types);
 				sum(p_new, o.p_new);
-				
+
 				return *this;
 			}
 		};
-		
+
 		struct Stats {
 			unsigned n_decls;     ///< Total number of declarations
@@ -98,5 +102,5 @@
 			/// Stats for the return list
 			ArgPackStats returns;
-			
+
 			/// Count of declarations with each number of assertions
 			std::map<unsigned, unsigned> n_assns;
@@ -105,5 +109,5 @@
 			/// Stats for the assertions' return types
 			ArgPackStats assn_returns;
-			
+
 			Stats() : n_decls(0), n_type_params(), by_name(), basic_type_names(), compound_type_names(), basic_type_decls(), compound_type_decls(), params(), returns(), n_assns(), assn_params(), assn_returns() {}
 
@@ -122,5 +126,5 @@
 				sum( assn_params, o.assn_params );
 				sum( assn_returns, o.assn_returns );
-				
+
 				return *this;
 			}
@@ -144,5 +148,5 @@
 
 				n += dt->size();
-				
+
 				std::stringstream ss;
 				dt->print( ss );
@@ -176,5 +180,5 @@
 			++pstats.n_types.at( types.size() );
 		}
-		
+
 		void analyzeFunc( FunctionType* fnTy, Stats& stats, ArgPackStats& params, ArgPackStats& returns ) {
 			std::unordered_set<std::string> seen;
@@ -186,5 +190,5 @@
 			auto& args = expr->get_args();
 			unsigned fanout = args.size();
-			
+
 			++exprs_by_fanout_at_depth[ std::make_pair(depth, fanout) ];
 			for ( Expression* arg : args ) {
@@ -205,5 +209,5 @@
 				return;
 			}
-			
+
 			Stats& stats = for_linkage[ decl->get_linkage() ];
 
@@ -323,13 +327,13 @@
 		}
 
-		void printPairMap( const std::string& name, 
+		void printPairMap( const std::string& name,
 		                   const std::map<std::pair<unsigned, unsigned>, unsigned>& map ) {
 			for ( const auto& entry : map ) {
 				const auto& key = entry.first;
-				std::cout << "\"" << name << "\"," << key.first << "," << key.second << "," 
+				std::cout << "\"" << name << "\"," << key.first << "," << key.second << ","
 				          << entry.second << std::endl;
 			}
 		}
-		
+
 	public:
 		void print() {
@@ -366,5 +370,5 @@
 		stats.print();
 	}
-	
+
 } // namespace CodeTools
 
Index: src/CodeTools/DeclStats.h
===================================================================
--- src/CodeTools/DeclStats.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeTools/DeclStats.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,5 +17,7 @@
 #define DECLSTATS_H
 
-#include "SynTree/SynTree.h"
+#include <list>  // for list
+
+class Declaration;
 
 namespace CodeTools {
Index: src/CodeTools/TrackLoc.cc
===================================================================
--- src/CodeTools/TrackLoc.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeTools/TrackLoc.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -16,19 +16,20 @@
 #include "TrackLoc.h"
 
-#include <cstdlib>
+#include <cstdlib>                    // for size_t, exit, EXIT_FAILURE
+#include <iostream>                   // for operator<<, ostream, basic_ostream
+#include <iterator>                   // for back_inserter, inserter
+#include <stack>                      // for stack
+#include <string>                     // for operator<<, string
+#include <typeindex>                  // for type_index
 
-#include <iostream>
-#include <sstream>
-#include <stack>
-#include <string>
-#include <typeindex>
+#include "Common/PassVisitor.h"       // for PassVisitor
+#include "Common/PassVisitor.impl.h"  // for acceptAll
+#include "Common/SemanticError.h"     // for SemanticError
+#include "Common/utility.h"           // for CodeLocation
+#include "SynTree/BaseSyntaxNode.h"   // for BaseSyntaxNode
+#include "SynTree/Mutator.h"          // for mutateAll
+#include "SynTree/Visitor.h"          // for acceptAll
 
-#include "Common/utility.h"
-#include "Common/PassVisitor.h"
-#include "Common/VectorMap.h"
-#include "GenPoly/GenPoly.h"
-#include "Parser/LinkageSpec.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Initializer.h"
+class Declaration;
 
 namespace CodeTools {
Index: src/CodeTools/TrackLoc.h
===================================================================
--- src/CodeTools/TrackLoc.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/CodeTools/TrackLoc.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,5 +17,8 @@
 #define TRACKLOC_H
 
-#include "SynTree/SynTree.h"
+#include <cstddef>   // for size_t
+#include <list>      // for list
+
+class Declaration;
 
 namespace CodeTools {
Index: src/Common/Assert.cc
===================================================================
--- src/Common/Assert.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Common/Assert.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -14,8 +14,7 @@
 //
 
-#include <assert.h>
-#include <cstdarg>										// varargs
-#include <cstdio>										// fprintf
-#include <cstdlib>										// abort
+#include <cstdarg>  // for va_end, va_list, va_start
+#include <cstdio>   // for fprintf, stderr, vfprintf
+#include <cstdlib>  // for abort
 
 extern const char * __progname;							// global name of running executable (argv[0])
Index: src/Common/SemanticError.cc
===================================================================
--- src/Common/SemanticError.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Common/SemanticError.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -14,13 +14,12 @@
 //
 
-#include <iostream>
-#include <list>
-#include <string>
-#include <algorithm>
-#include <iterator>
+#include <cstdio>            // for fileno, stderr
+#include <unistd.h>          // for isatty
+#include <iostream>          // for basic_ostream, operator<<, ostream
+#include <list>              // for list, _List_iterator
+#include <string>            // for string, operator<<, operator+, to_string
 
+#include "Common/utility.h"  // for to_string, CodeLocation (ptr only)
 #include "SemanticError.h"
-
-#include <unistd.h>
 
 inline const std::string& error_str() {
Index: src/Common/SemanticError.h
===================================================================
--- src/Common/SemanticError.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Common/SemanticError.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,11 +17,10 @@
 #define SEMANTICERROR_H
 
-#include <exception>
-#include <string>
-#include <sstream>
-#include <list>
-#include <iostream>
+#include <exception>  // for exception
+#include <iostream>   // for ostream
+#include <list>       // for list
+#include <string>     // for string
 
-#include "utility.h"
+#include "utility.h"  // for CodeLocation, toString
 
 struct error {
Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Concurrency/Keywords.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,12 +17,22 @@
 #include "Concurrency/Keywords.h"
 
-#include "InitTweak/InitTweak.h"
-#include "SymTab/AddVisit.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Initializer.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Type.h"
-#include "SynTree/Visitor.h"
+#include <cassert>                 // for assert
+#include <string>                  // for string, operator==
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/utility.h"        // for deleteAll, map_range
+#include "InitTweak/InitTweak.h"   // for isConstructor
+#include "Parser/LinkageSpec.h"    // for Cforall
+#include "SymTab/AddVisit.h"       // for acceptAndAdd
+#include "SynTree/Constant.h"      // for Constant
+#include "SynTree/Declaration.h"   // for StructDecl, FunctionDecl, ObjectDecl
+#include "SynTree/Expression.h"    // for VariableExpr, ConstantExpr, Untype...
+#include "SynTree/Initializer.h"   // for SingleInit, ListInit, Initializer ...
+#include "SynTree/Label.h"         // for Label
+#include "SynTree/Statement.h"     // for CompoundStmt, DeclStmt, ExprStmt
+#include "SynTree/Type.h"          // for StructInstType, Type, PointerType
+#include "SynTree/Visitor.h"       // for Visitor, acceptAll
+
+class Attribute;
 
 namespace Concurrency {
@@ -322,5 +332,5 @@
 		if( needs_main ) {
 			FunctionType * main_type = new FunctionType( noQualifiers, false );
-			
+
 			main_type->get_parameters().push_back( this_decl->clone() );
 
@@ -361,5 +371,5 @@
 	void ConcurrentSueKeyword::addRoutines( ObjectDecl * field, FunctionDecl * func ) {
 		CompoundStmt * statement = new CompoundStmt( noLabels );
-		statement->push_back( 
+		statement->push_back(
 			new ReturnStmt(
 				noLabels,
@@ -386,5 +396,5 @@
 	//=============================================================================================
 	void MutexKeyword::visit(FunctionDecl* decl) {
-		Visitor::visit(decl);		
+		Visitor::visit(decl);
 
 		std::list<DeclarationWithType*> mutexArgs = findMutexArgs( decl );
@@ -510,5 +520,5 @@
 	void ThreadStarter::visit(FunctionDecl * decl) {
 		Visitor::visit(decl);
-		
+
 		if( ! InitTweak::isConstructor(decl->get_name()) ) return;
 
@@ -528,5 +538,5 @@
 		if( ! stmt ) return;
 
-		stmt->push_back( 
+		stmt->push_back(
 			new ExprStmt(
 				noLabels,
Index: src/Concurrency/Keywords.h
===================================================================
--- src/Concurrency/Keywords.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Concurrency/Keywords.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -18,7 +18,7 @@
 #define KEYWORDS_H
 
-#include <list>
+#include <list>  // for list
 
-#include "SynTree/Declaration.h"
+class Declaration;
 
 namespace Concurrency {
Index: src/ControlStruct/ExceptTranslate.cc
===================================================================
--- src/ControlStruct/ExceptTranslate.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/ControlStruct/ExceptTranslate.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
 // Created On       : Wed Jun 14 16:49:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Fri Jun 30 13:30:00 2017
-// Update Count     : 1
+// Last Modified On : Wed Jul 12 15:07:00 2017
+// Update Count     : 3
 //
 
@@ -157,5 +157,5 @@
 	Statement * create_terminate_throw( ThrowStmt *throwStmt ) {
 		// { int NAME = EXPR; __throw_terminate( &NAME ); }
-		return create_given_throw( "__cfaehm__throw_termination", throwStmt );
+		return create_given_throw( "__cfaehm__throw_terminate", throwStmt );
 	}
 	Statement * create_terminate_rethrow( ThrowStmt *throwStmt ) {
@@ -164,5 +164,5 @@
 		Statement * result = new ExprStmt(
 			throwStmt->get_labels(),
-			new UntypedExpr( new NameExpr( "__cfaehm__rethrow_termination" ) )
+			new UntypedExpr( new NameExpr( "__cfaehm__rethrow_terminate" ) )
 			);
 		delete throwStmt;
@@ -171,5 +171,5 @@
 	Statement * create_resume_throw( ThrowStmt *throwStmt ) {
 		// __throw_resume( EXPR );
-		return create_given_throw( "__cfaehm__throw_resumption", throwStmt );
+		return create_given_throw( "__cfaehm__throw_resume", throwStmt );
 	}
 	Statement * create_resume_rethrow( ThrowStmt *throwStmt ) {
@@ -593,7 +593,5 @@
 
 		PassVisitor<ExceptionMutatorCore> translator;
-		for ( Declaration * decl : translationUnit ) {
-			decl->acceptMutator( translator );
-		}
+		mutateAll( translationUnit, translator );
 	}
 }
Index: src/GenPoly/InstantiateGeneric.cc
===================================================================
--- src/GenPoly/InstantiateGeneric.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/GenPoly/InstantiateGeneric.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -171,5 +171,5 @@
 		Type* postmutate( UnionInstType *inst );
 
-		void premutate( FunctionType * ftype ) {
+		void premutate( __attribute__((unused)) FunctionType * ftype ) {
 			GuardValue( inFunctionType );
 			inFunctionType = true;
Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/InitTweak/GenInit.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -71,11 +71,10 @@
 		// that need to be constructed or destructed
 		void previsit( StructDecl *aggregateDecl );
-		void previsit( UnionDecl *aggregateDecl ) { visit_children = false; }
-		void previsit( EnumDecl *aggregateDecl ) { visit_children = false; }
-		void previsit( TraitDecl *aggregateDecl ) { visit_children = false; }
-		void previsit( TypeDecl *typeDecl ) { visit_children = false; }
-		void previsit( TypedefDecl *typeDecl ) { visit_children = false; }
-
-		void previsit( FunctionType *funcType ) { visit_children = false; }
+		void previsit( __attribute__((unused)) UnionDecl    * aggregateDecl ) { visit_children = false; }
+		void previsit( __attribute__((unused)) EnumDecl     * aggregateDecl ) { visit_children = false; }
+		void previsit( __attribute__((unused)) TraitDecl    * aggregateDecl ) { visit_children = false; }
+		void previsit( __attribute__((unused)) TypeDecl     * typeDecl )      { visit_children = false; }
+		void previsit( __attribute__((unused)) TypedefDecl  * typeDecl )      { visit_children = false; }
+		void previsit( __attribute__((unused)) FunctionType * funcType )      { visit_children = false; }
 
 		void previsit( CompoundStmt * compoundStmt );
@@ -336,5 +335,5 @@
 	}
 
-	void CtorDtor::previsit( CompoundStmt * compoundStmt ) {
+	void CtorDtor::previsit( __attribute__((unused)) CompoundStmt * compoundStmt ) {
 		GuardScope( managedTypes );
 	}
Index: src/MakeLibCfa.cc
===================================================================
--- src/MakeLibCfa.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/MakeLibCfa.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -15,12 +15,19 @@
 
 #include "MakeLibCfa.h"
-#include "SynTree/Visitor.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Initializer.h"
-#include "CodeGen/OperatorTable.h"
-#include "Common/UniqueName.h"
+
+#include <cassert>                 // for assert
+#include <string>                   // for operator==, string
+
+#include "CodeGen/OperatorTable.h"  // for OperatorInfo, operatorLookup, Ope...
+#include "Common/SemanticError.h"   // for SemanticError
+#include "Common/UniqueName.h"      // for UniqueName
+#include "Parser/LinkageSpec.h"     // for Spec, Intrinsic, C
+#include "SynTree/Declaration.h"    // for FunctionDecl, ObjectDecl, Declara...
+#include "SynTree/Expression.h"     // for NameExpr, UntypedExpr, VariableExpr
+#include "SynTree/Initializer.h"    // for SingleInit
+#include "SynTree/Label.h"          // for Label
+#include "SynTree/Statement.h"      // for CompoundStmt, ReturnStmt
+#include "SynTree/Type.h"           // for FunctionType
+#include "SynTree/Visitor.h"        // for acceptAll, Visitor
 
 namespace LibCfa {
Index: src/MakeLibCfa.h
===================================================================
--- src/MakeLibCfa.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/MakeLibCfa.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,6 +17,7 @@
 #define LIBCFA_MAKELIBCFA_H
 
-#include <list>
-#include <SynTree/SynTree.h>
+#include <list>  // for list
+
+class Declaration;
 
 namespace LibCfa {
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Makefile.am	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -43,5 +43,5 @@
 driver_cfa_cpp_SOURCES = ${SRC}
 driver_cfa_cpp_LDADD = ${LEXLIB} -ldl			# yywrap
-driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT -O2 -g -std=c++14
+driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -Wextra -DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT -O2 -g -std=c++14
 driver_cfa_cpp_LDFLAGS = -Xlinker -export-dynamic
 
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Makefile.in	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -544,5 +544,5 @@
 driver_cfa_cpp_SOURCES = ${SRC}
 driver_cfa_cpp_LDADD = ${LEXLIB} -ldl			# yywrap
-driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT -O2 -g -std=c++14
+driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -Wextra -DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT -O2 -g -std=c++14
 driver_cfa_cpp_LDFLAGS = -Xlinker -export-dynamic
 all: $(BUILT_SOURCES)
@@ -560,7 +560,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/Makefile
+	  $(AUTOMAKE) --foreign src/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
Index: src/Parser/LinkageSpec.cc
===================================================================
--- src/Parser/LinkageSpec.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Parser/LinkageSpec.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:22:09 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Jun 28 11:51:00 2017
-// Update Count     : 24
+// Last Modified On : Fri Jul  7 11:11:00 2017
+// Update Count     : 25
 //
 
@@ -22,5 +22,8 @@
 #include "Common/SemanticError.h"
 
-LinkageSpec::Spec LinkageSpec::linkageCheck( const string * spec ) {
+namespace LinkageSpec {
+
+Spec linkageCheck( const string * spec ) {
+	assert( spec );
 	unique_ptr<const string> guard( spec );	// allocated by lexer
 	if ( *spec == "\"Cforall\"" ) {
@@ -35,55 +38,40 @@
 }
 
-string LinkageSpec::linkageName( LinkageSpec::Spec linkage ) {
-	assert( 0 <= linkage && linkage < LinkageSpec::NoOfSpecs );
-	static const char *linkageKinds[LinkageSpec::NoOfSpecs] = {
-		"intrinsic", "Cforall", "C", "automatically generated", "compiler built-in", "cfa built-in", "c built-in",
-	};
-	return linkageKinds[linkage];
+Spec linkageUpdate( Spec old_spec, const string * cmd ) {
+	assert( cmd );
+	unique_ptr<const string> guard( cmd ); // allocated by lexer
+	if ( *cmd == "\"Cforall\"" ) {
+		old_spec.is_mangled = true;
+		return old_spec;
+	} else if ( *cmd == "\"C\"" ) {
+		old_spec.is_mangled = false;
+		return old_spec;
+	} else {
+		throw SemanticError( "Invalid linkage specifier " + *cmd );
+	} // if
 }
 
-bool LinkageSpec::isMangled( Spec spec ) {
-	assert( 0 <= spec && spec < LinkageSpec::NoOfSpecs );
-	static bool decoratable[LinkageSpec::NoOfSpecs] = {
-		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler,
-			true,		true,		false,	true,		false,
-		//	Builtin,	BuiltinC,
-			true,		false,
-	};
-	return decoratable[spec];
+std::string linkageName( Spec linkage ) {
+    switch ( linkage ) {
+    case Intrinsic:
+        return "intrinsic";
+    case C:
+        return "C";
+    case Cforall:
+        return "Cforall";
+    case AutoGen:
+        return "autogenerated cfa";
+    case Compiler:
+        return "compiler built-in";
+    case BuiltinCFA:
+        return "cfa built-in";
+    case BuiltinC:
+        return "c built-in";
+    default:
+        return "<unnamed linkage spec>";
+    }
 }
 
-bool LinkageSpec::isGeneratable( Spec spec ) {
-	assert( 0 <= spec && spec < LinkageSpec::NoOfSpecs );
-	static bool generatable[LinkageSpec::NoOfSpecs] = {
-		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler,
-			true,		true,		true,	true,		false,
-		//	Builtin,	BuiltinC,
-			true,		true,
-	};
-	return generatable[spec];
-}
-
-bool LinkageSpec::isOverridable( Spec spec ) {
-	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
-	static bool overridable[LinkageSpec::NoOfSpecs] = {
-		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler,
-			true,		false,		false,	true,		false,
-		//	Builtin,	BuiltinC,
-			false,		false,
-	};
-	return overridable[spec];
-}
-
-bool LinkageSpec::isBuiltin( Spec spec ) {
-	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
-	static bool builtin[LinkageSpec::NoOfSpecs] = {
-		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler,
-			true,		false,		false,	false,		true,
-		//	Builtin,	BuiltinC,
-			true,		true,
-	};
-	return builtin[spec];
-}
+} // LinkageSpec
 
 // Local Variables: //
Index: src/Parser/LinkageSpec.h
===================================================================
--- src/Parser/LinkageSpec.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Parser/LinkageSpec.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -5,11 +5,11 @@
 // file "LICENCE" distributed with Cforall.
 //
-// LinkageSpec.h -- 
+// LinkageSpec.h --
 //
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:24:28 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Jun 28 11:50:00 2017
-// Update Count     : 12
+// Last Modified On : Fri Jul  7 11:03:00 2017
+// Update Count     : 13
 //
 
@@ -19,23 +19,61 @@
 #include <string>
 
-struct LinkageSpec {
-	enum Spec {
-		Intrinsic,										// C built-in defined in prelude
-		Cforall,										// ordinary
-		C,												// not overloadable, not mangled
-		AutoGen,										// built by translator (struct assignment)
-		Compiler,										// gcc internal
-		Builtin,										// mangled builtins
-		BuiltinC,										// non-mangled builtins
-		NoOfSpecs
+namespace LinkageSpec {
+	// All linkage specs are some combination of these flags:
+	enum {
+		Mangle = 1 << 0,
+		Generate = 1 << 1,
+		Overrideable = 1 << 2,
+		Builtin = 1 << 3,
+
+		NoOfSpecs = 1 << 4,
 	};
-  
-	static Spec linkageCheck( const std::string * );
-	static std::string linkageName( Spec );
-  
-	static bool isMangled( Spec );
-	static bool isGeneratable( Spec );
-	static bool isOverridable( Spec );
-	static bool isBuiltin( Spec );
+
+	union Spec {
+		unsigned int val;
+		struct {
+			bool is_mangled : 1;
+			bool is_generatable : 1;
+			bool is_overridable : 1;
+			bool is_builtin : 1;
+		};
+		constexpr Spec( unsigned int val ) : val( val ) {}
+		constexpr Spec( Spec const &other ) : val( other.val ) {}
+		// Operators may go here.
+		// Supports == and !=
+		constexpr operator unsigned int () const { return val; }
+	};
+
+
+	Spec linkageCheck( const std::string * );
+	// Returns the Spec with the given name (limited to C, Cforall & BuiltinC)
+	Spec linkageUpdate( Spec old_spec, const std::string * cmd );
+	/* If cmd = "C" returns a Spec that is old_spec with is_mangled = false
+	 * If cmd = "Cforall" returns old_spec Spec with is_mangled = true
+	 */
+
+	std::string linkageName( Spec );
+
+	// To Update: LinkageSpec::isXyz( cur_spec ) -> cur_spec.is_xyz
+	inline bool isMangled( Spec spec ) { return spec.is_mangled; }
+	inline bool isGeneratable( Spec spec ) { return spec.is_generatable; }
+	inline bool isOverridable( Spec spec ) { return spec.is_overridable; }
+	inline bool isBuiltin( Spec spec ) { return spec.is_builtin; }
+
+	// Pre-defined flag combinations:
+	// C built-in defined in prelude
+	constexpr Spec const Intrinsic = { Mangle | Generate | Overrideable | Builtin };
+	// ordinary
+	constexpr Spec const Cforall = { Mangle | Generate };
+	// not overloadable, not mangled
+	constexpr Spec const C = { Generate };
+	// built by translator (struct assignment)
+	constexpr Spec const AutoGen = { Mangle | Generate | Overrideable };
+	// gcc internal
+	constexpr Spec const Compiler = { Builtin };
+	// mangled builtins
+	constexpr Spec const BuiltinCFA = { Mangle | Generate | Builtin };
+	// non-mangled builtins
+	constexpr Spec const BuiltinC = { Generate | Builtin };
 };
 
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Parser/StatementNode.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun 28 21:08:37 2017
-// Update Count     : 330
+// Last Modified On : Tue Jul 11 21:23:15 2017
+// Update Count     : 331
 //
 
@@ -93,5 +93,5 @@
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( stmt, branches );
-	assert( branches.size() >= 0 );						// size == 0 for switch (...) {}, i.e., no declaration or statements
+	// branches.size() == 0 for switch (...) {}, i.e., no declaration or statements
 	return new SwitchStmt( noLabels, maybeMoveBuild< Expression >(ctl), branches );
 }
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Parser/lex.ll	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Wed Jun 28 21:03:45 2017
- * Update Count     : 529
+ * Last Modified On : Wed Jul 12 18:04:44 2017
+ * Update Count     : 535
  */
 
@@ -59,4 +59,6 @@
 }
 
+// Stop warning due to incorrectly generated flex code.
+#pragma GCC diagnostic ignored "-Wsign-compare"
 %}
 
@@ -272,4 +274,5 @@
 __volatile__	{ KEYWORD_RETURN(VOLATILE); }			// GCC
 while			{ KEYWORD_RETURN(WHILE); }
+with			{ KEYWORD_RETURN(WITH); }				// CFA
 zero_t			{ NUMERIC_RETURN(ZERO_T); }				// CFA
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/Parser/parser.yy	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -9,7 +9,7 @@
 // Author           : Peter A. Buhr
 // Created On       : Sat Sep  1 20:22:55 2001
-// Last Modified By : Andrew Beach
-// Last Modified On : Fri Jun 30 15:38:00 2017
-// Update Count     : 2415
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Jul 12 18:23:36 2017
+// Update Count     : 2426
 //
 
@@ -129,5 +129,5 @@
 %token ATTRIBUTE EXTENSION								// GCC
 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN
-%token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT	// CFA
+%token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH	// CFA
 %token ASM												// C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
 %token ALIGNAS ALIGNOF GENERIC STATICASSERT				// C11
@@ -184,11 +184,12 @@
 // statements
 %type<sn> labeled_statement				compound_statement			expression_statement		selection_statement
-%type<sn> iteration_statement			jump_statement				exception_statement			asm_statement
+%type<sn> iteration_statement			jump_statement
+%type<sn> with_statement				exception_statement			asm_statement
 %type<sn> fall_through_opt				fall_through
 %type<sn> statement						statement_list
 %type<sn> block_item_list				block_item
-%type<sn> case_clause
+%type<sn> with_clause_opt
 %type<en> case_value
-%type<sn> case_value_list				case_label					case_label_list
+%type<sn> case_clause					case_value_list				case_label					case_label_list
 %type<sn> switch_clause_list_opt		switch_clause_list			choose_clause_list_opt		choose_clause_list
 %type<sn> /* handler_list */			handler_clause				finally_clause
@@ -729,4 +730,5 @@
 	| iteration_statement
 	| jump_statement
+	| with_statement
 	| exception_statement
 	| asm_statement
@@ -934,4 +936,9 @@
 	| THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume
 		{ $$ = new StatementNode( build_resume_at( $2, $4 ) ); }
+	;
+
+with_statement:
+	WITH identifier_list compound_statement
+		{ $$ = (StatementNode *)0; }					// FIX ME
 	;
 
@@ -2176,5 +2183,5 @@
 		{
 			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
-			linkage = LinkageSpec::linkageCheck( $2 );
+			linkage = LinkageSpec::linkageUpdate( linkage, $2 );
 		}
 	  '{' external_definition_list_opt '}'
@@ -2212,62 +2219,69 @@
 	;
 
+with_clause_opt:
+	// empty
+		{ $$ = (StatementNode *)0; }					// FIX ME
+	| WITH identifier_list
+		{ $$ = (StatementNode *)0; }					// FIX ME
+	;
+
 function_definition:
-	cfa_function_declaration compound_statement			// CFA
+	cfa_function_declaration with_clause_opt compound_statement	// CFA
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
-			$$ = $1->addFunctionBody( $2 );
-		}
-	| declaration_specifier function_declarator compound_statement
+			$$ = $1->addFunctionBody( $3 );
+		}
+	| declaration_specifier function_declarator with_clause_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
-			$$ = $2->addFunctionBody( $3 )->addType( $1 );
-		}
-	| type_qualifier_list function_declarator compound_statement
+			$$ = $2->addFunctionBody( $4 )->addType( $1 );
+		}
+	| type_qualifier_list function_declarator with_clause_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
-			$$ = $2->addFunctionBody( $3 )->addQualifiers( $1 );
-		}
-	| declaration_qualifier_list function_declarator compound_statement
+			$$ = $2->addFunctionBody( $4 )->addQualifiers( $1 );
+		}
+	| declaration_qualifier_list function_declarator with_clause_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
-			$$ = $2->addFunctionBody( $3 )->addQualifiers( $1 );
-		}
-	| declaration_qualifier_list type_qualifier_list function_declarator compound_statement
+			$$ = $2->addFunctionBody( $4 )->addQualifiers( $1 );
+		}
+	| declaration_qualifier_list type_qualifier_list function_declarator with_clause_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
-			$$ = $3->addFunctionBody( $4 )->addQualifiers( $2 )->addQualifiers( $1 );
+			$$ = $3->addFunctionBody( $5 )->addQualifiers( $2 )->addQualifiers( $1 );
 		}
 
 		// Old-style K&R function definition, OBSOLESCENT (see 4)
-	| declaration_specifier KR_function_declarator push KR_declaration_list_opt compound_statement
+	| declaration_specifier KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
-			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addType( $1 );
-		}
-	| type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
+			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addType( $1 );
+		}
+	| type_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
-			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addQualifiers( $1 );
+			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 );
 		}
 
 		// Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4)
-	| declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
+	| declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
-			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addQualifiers( $1 );
-		}
-	| declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
+			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 );
+		}
+	| declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
-			$$ = $3->addOldDeclList( $5 )->addFunctionBody( $6 )->addQualifiers( $2 )->addQualifiers( $1 );
+			$$ = $3->addOldDeclList( $5 )->addFunctionBody( $7 )->addQualifiers( $2 )->addQualifiers( $1 );
 		}
 	;
@@ -2332,5 +2346,5 @@
 	| TYPEGENname
 	| CONST
-		{ $$ = Token{ new string( "__const__" ) }; }
+		{ $$ = Token{ new string( "__const__" ), { nullptr, -1 } }; }
 	;
 
Index: src/ResolvExpr/CurrentObject.cc
===================================================================
--- src/ResolvExpr/CurrentObject.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/ResolvExpr/CurrentObject.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -114,5 +114,5 @@
 		}
 
-		virtual void print( std::ostream & out, Indenter indent ) const {
+		virtual void print( std::ostream & out, __attribute__((unused)) Indenter indent ) const {
 			out << "SimpleIterator(" << type << ")";
 		}
Index: src/benchmark/CorCtxSwitch.c
===================================================================
--- src/benchmark/CorCtxSwitch.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/benchmark/CorCtxSwitch.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -31,8 +31,4 @@
 
 	StartTime = Time();
-	// for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-	// 	resume( this_coroutine() );
-	// 	// resume( &s );	
-	// }
 	resumer( &s, NoOfTimes );
 	EndTime = Time();
Index: src/benchmark/Makefile.am
===================================================================
--- src/benchmark/Makefile.am	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/benchmark/Makefile.am	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -20,7 +20,7 @@
 CC = @CFA_BINDIR@/@CFA_NAME@
 
-noinst_PROGRAMS = bench ctxswitch-coroutine ctxswitch-thread
+noinst_PROGRAMS = bench$(EXEEXT) ctxswitch-coroutine$(EXEEXT) ctxswitch-thread$(EXEEXT) sched-int$(EXEEXT) monitor$(EXEEXT) csv-data$(EXEEXT)
 
-bench :
+bench$(EXEEXT) :
 	@for ccflags in "-debug" "-nodebug"; do \
 		echo ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -lrt bench.c;\
@@ -30,5 +30,5 @@
 	rm -f ./a.out ;
 
-ctxswitch-coroutine:
+ctxswitch-coroutine$(EXEEXT):
 	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 CorCtxSwitch.c
 	@for number in 1 2 3 4 5 6 7 8 9 10; do \
@@ -37,5 +37,5 @@
 	@rm -f ./a.out
 
-ctxswitch-thread:
+ctxswitch-thread$(EXEEXT):
 	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 ThrdCtxSwitch.c
 	@for number in 1 2 3 4 5 6 7 8 9 10; do \
@@ -44,5 +44,5 @@
 	@rm -f ./a.out
 
-sched-int:
+sched-int$(EXEEXT):
 	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 SchedInt.c
 	@for number in 1 2 3 4 5 6 7 8 9 10; do \
@@ -51,5 +51,5 @@
 	@rm -f ./a.out
 
-monitor:
+monitor$(EXEEXT):
 	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 Monitor.c
 	@for number in 1 2 3 4 5 6 7 8 9 10; do \
@@ -58,5 +58,5 @@
 	@rm -f ./a.out
 
-csv-data:
+csv-data$(EXEEXT):
 	@${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=10000000 csv-data.c
 	@./a.out
Index: src/benchmark/Makefile.in
===================================================================
--- src/benchmark/Makefile.in	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/benchmark/Makefile.in	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -92,6 +92,4 @@
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = bench$(EXEEXT) ctxswitch-coroutine$(EXEEXT) \
-	ctxswitch-thread$(EXEEXT)
 subdir = src/benchmark
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -108,4 +106,7 @@
 bench_OBJECTS = bench.$(OBJEXT)
 bench_LDADD = $(LDADD)
+csv_data_SOURCES = csv-data.c
+csv_data_OBJECTS = csv-data.$(OBJEXT)
+csv_data_LDADD = $(LDADD)
 ctxswitch_coroutine_SOURCES = ctxswitch-coroutine.c
 ctxswitch_coroutine_OBJECTS = ctxswitch-coroutine.$(OBJEXT)
@@ -114,4 +115,10 @@
 ctxswitch_thread_OBJECTS = ctxswitch-thread.$(OBJEXT)
 ctxswitch_thread_LDADD = $(LDADD)
+monitor_SOURCES = monitor.c
+monitor_OBJECTS = monitor.$(OBJEXT)
+monitor_LDADD = $(LDADD)
+sched_int_SOURCES = sched-int.c
+sched_int_OBJECTS = sched-int.$(OBJEXT)
+sched_int_LDADD = $(LDADD)
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -142,6 +149,8 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = bench.c ctxswitch-coroutine.c ctxswitch-thread.c
-DIST_SOURCES = bench.c ctxswitch-coroutine.c ctxswitch-thread.c
+SOURCES = bench.c csv-data.c ctxswitch-coroutine.c ctxswitch-thread.c \
+	monitor.c sched-int.c
+DIST_SOURCES = bench.c csv-data.c ctxswitch-coroutine.c \
+	ctxswitch-thread.c monitor.c sched-int.c
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -293,4 +302,5 @@
 top_srcdir = @top_srcdir@
 AM_CFLAGS = -g -Wall -Wno-unused-function -O2
+noinst_PROGRAMS = bench$(EXEEXT) ctxswitch-coroutine$(EXEEXT) ctxswitch-thread$(EXEEXT) sched-int$(EXEEXT) monitor$(EXEEXT) csv-data$(EXEEXT)
 all: all-am
 
@@ -306,7 +316,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/benchmark/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/benchmark/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/benchmark/Makefile
+	  $(AUTOMAKE) --foreign src/benchmark/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -337,6 +347,9 @@
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bench.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csv-data.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctxswitch-coroutine.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctxswitch-thread.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sched-int.Po@am__quote@
 
 .c.o:
@@ -559,5 +572,5 @@
 
 
-bench :
+bench$(EXEEXT) :
 	@for ccflags in "-debug" "-nodebug"; do \
 		echo ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -lrt bench.c;\
@@ -567,5 +580,5 @@
 	rm -f ./a.out ;
 
-ctxswitch-coroutine:
+ctxswitch-coroutine$(EXEEXT):
 	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 CorCtxSwitch.c
 	@for number in 1 2 3 4 5 6 7 8 9 10; do \
@@ -574,5 +587,5 @@
 	@rm -f ./a.out
 
-ctxswitch-thread:
+ctxswitch-thread$(EXEEXT):
 	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 ThrdCtxSwitch.c
 	@for number in 1 2 3 4 5 6 7 8 9 10; do \
@@ -581,5 +594,5 @@
 	@rm -f ./a.out
 
-sched-int:
+sched-int$(EXEEXT):
 	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 SchedInt.c
 	@for number in 1 2 3 4 5 6 7 8 9 10; do \
@@ -588,5 +601,5 @@
 	@rm -f ./a.out
 
-monitor:
+monitor$(EXEEXT):
 	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 Monitor.c
 	@for number in 1 2 3 4 5 6 7 8 9 10; do \
@@ -595,5 +608,5 @@
 	@rm -f ./a.out
 
-csv-data:
+csv-data$(EXEEXT):
 	@${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=10000000 csv-data.c
 	@./a.out
Index: src/benchmark/bench.h
===================================================================
--- src/benchmark/bench.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/benchmark/bench.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -26,2 +26,6 @@
 #define N 10000000
 #endif
+
+unsigned int default_preemption() {
+	return 0;
+}
Index: src/benchmark/create_pthrd.c
===================================================================
--- src/benchmark/create_pthrd.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/benchmark/create_pthrd.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,13 +17,10 @@
 
 	for (size_t i = 0; i < n; i++) {
-		pthread_attr_t attr;
-		if (pthread_attr_init(&attr) < 0) {
+		pthread_t thread;
+		if (pthread_create(&thread, NULL, foo, NULL) < 0) {
 			return 1;
 		}
-		if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) < 0) {
-			return 1;
-		}
-		pthread_t thread;
-		if (pthread_create(&thread, &attr, foo, NULL) < 0) {
+
+		if (pthread_join( thread, NULL) < 0) {
 			return 1;
 		}
Index: src/benchmark/csv-data.c
===================================================================
--- src/benchmark/csv-data.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/benchmark/csv-data.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -25,8 +25,4 @@
 }
 
-#ifndef N
-#define N 100000000
-#endif
-
 //-----------------------------------------------------------------------------
 // coroutine context switch
@@ -38,8 +34,4 @@
 
 	StartTime = Time();
-	// for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-	// 	resume( this_coroutine() );
-	// 	// resume( &s );
-	// }
 	resumer( &s, NoOfTimes );
 	EndTime = Time();
@@ -104,5 +96,5 @@
 mon_t mon1;
 
-condition cond1a; 
+condition cond1a;
 condition cond1b;
 
@@ -152,5 +144,5 @@
 mon_t mon2;
 
-condition cond2a; 
+condition cond2a;
 condition cond2b;
 
Index: src/benchmark/interrupt_linux.c
===================================================================
--- src/benchmark/interrupt_linux.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
+++ src/benchmark/interrupt_linux.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -0,0 +1,35 @@
+#include <pthread.h>
+#include <stdlib.h>
+#include <signal.h>
+
+#define __CFA_SIGCXT__ ucontext_t *
+#define __CFA_SIGPARMS__ __attribute__((unused)) int sig, __attribute__((unused)) siginfo_t *sfp, __attribute__((unused)) __CFA_SIGCXT__ cxt
+
+void sigHandler( __CFA_SIGPARMS__ ) {
+	sigset_t mask;
+	sigemptyset( &mask );
+	sigaddset( &mask, SIGUSR1 );
+
+	if ( sigprocmask( SIG_UNBLOCK, &mask, NULL ) == -1 ) {
+		abort();
+	} // if
+}
+
+int main() {
+
+	struct sigaction act;
+
+	act.sa_sigaction = (void (*)(int, siginfo_t *, void *))sigHandler;
+	sigemptyset( &act.sa_mask );
+	sigaddset( &act.sa_mask, SIGUSR1 );
+
+	act.sa_flags = SA_SIGINFO;
+
+	if ( sigaction( SIGUSR1, &act, NULL ) == -1 ) {
+		abort();
+	} // if
+
+	for( int i = 0; i < 50000000ul; i++ ) {
+		pthread_kill( pthread_self(), SIGUSR1 );
+	}
+}
Index: src/driver/Makefile.in
===================================================================
--- src/driver/Makefile.in	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/driver/Makefile.in	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -315,7 +315,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/driver/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/driver/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/driver/Makefile
+	  $(AUTOMAKE) --foreign src/driver/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
Index: src/examples/Makefile.in
===================================================================
--- src/examples/Makefile.in	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/examples/Makefile.in	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -319,7 +319,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/examples/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/examples/Makefile
+	  $(AUTOMAKE) --foreign src/examples/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
Index: src/include/assert.h
===================================================================
--- src/include/assert.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/include/assert.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -15,4 +15,6 @@
 
 #pragma once
+// Pragmas for header cleanup tool
+// IWYU pragma: private, include <cassert>
 
 #include_next <assert.h>
Index: src/libcfa/Makefile.am
===================================================================
--- src/libcfa/Makefile.am	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/Makefile.am	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -17,4 +17,5 @@
 # create object files in directory with source files
 AUTOMAKE_OPTIONS = subdir-objects
+ARFLAGS = cr
 
 libdir = ${CFA_LIBDIR}
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/Makefile.in	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -142,5 +142,4 @@
 LIBRARIES = $(lib_LIBRARIES)
 AR = ar
-ARFLAGS = cru
 AM_V_AR = $(am__v_AR_@AM_V@)
 am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
@@ -409,4 +408,5 @@
 # create object files in directory with source files
 AUTOMAKE_OPTIONS = subdir-objects
+ARFLAGS = cr
 lib_LIBRARIES = $(am__append_1) $(am__append_2)
 EXTRA_FLAGS = -g -Wall -Werror -Wno-unused-function -I${abs_top_srcdir}/src/libcfa/libhdr -imacros libcfa-prelude.c @CFA_FLAGS@
@@ -439,7 +439,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libcfa/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libcfa/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/libcfa/Makefile
+	  $(AUTOMAKE) --foreign src/libcfa/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
Index: src/libcfa/concurrency/CtxSwitch-i386.S
===================================================================
--- src/libcfa/concurrency/CtxSwitch-i386.S	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/CtxSwitch-i386.S	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -98,13 +98,4 @@
 	ret
 
-.text
-	.align 2
-.globl	CtxGet
-CtxGet:
-	movl %esp,SP_OFFSET(%eax)
-	movl %ebp,FP_OFFSET(%eax)
-
-	ret
-
 // Local Variables: //
 // compile-command: "make install" //
Index: src/libcfa/concurrency/CtxSwitch-x86_64.S
===================================================================
--- src/libcfa/concurrency/CtxSwitch-x86_64.S	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/CtxSwitch-x86_64.S	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -1,3 +1,3 @@
-//                               -*- Mode: Asm -*- 
+//                               -*- Mode: Asm -*-
 //
 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
@@ -18,13 +18,13 @@
 // Free Software  Foundation; either  version 2.1 of  the License, or  (at your
 // option) any later version.
-// 
+//
 // This library is distributed in the  hope that it will be useful, but WITHOUT
 // ANY  WARRANTY;  without even  the  implied  warranty  of MERCHANTABILITY  or
 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 // for more details.
-// 
+//
 // You should  have received a  copy of the  GNU Lesser General  Public License
 // along  with this library.
-// 
+//
 
 // This context switch routine depends on the fact that the stack of a new
@@ -93,15 +93,6 @@
 .globl	CtxInvokeStub
 CtxInvokeStub:
-	movq %rbx, %rdi 
+	movq %rbx, %rdi
 	jmp *%r12
-
-.text
-	.align 2
-.globl	CtxGet
-CtxGet:
-	movq %rsp,SP_OFFSET(%rdi)
-	movq %rbp,FP_OFFSET(%rdi)
-
-	ret
 
 // Local Variables: //
Index: src/libcfa/concurrency/alarm.c
===================================================================
--- src/libcfa/concurrency/alarm.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/alarm.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -16,7 +16,13 @@
 
 extern "C" {
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
 #include <time.h>
+#include <unistd.h>
 #include <sys/time.h>
 }
+
+#include "libhdr.h"
 
 #include "alarm.h"
@@ -31,8 +37,11 @@
 	timespec curr;
 	clock_gettime( CLOCK_REALTIME, &curr );
-	return ((__cfa_time_t)curr.tv_sec * TIMEGRAN) + curr.tv_nsec;
+	__cfa_time_t curr_time = ((__cfa_time_t)curr.tv_sec * TIMEGRAN) + curr.tv_nsec;
+	// LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO, "Kernel : current time is %lu\n", curr_time );
+	return curr_time;
 }
 
 void __kernel_set_timer( __cfa_time_t alarm ) {
+	LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO, "Kernel : set timer to %lu\n", (__cfa_time_t)alarm );
 	itimerval val;
 	val.it_value.tv_sec = alarm / TIMEGRAN;			// seconds
@@ -71,6 +80,15 @@
 }
 
+LIB_DEBUG_DO( bool validate( alarm_list_t * this ) {
+	alarm_node_t ** it = &this->head;
+	while( (*it) ) {
+		it = &(*it)->next;
+	}
+
+	return it == this->tail;
+})
+
 static inline void insert_at( alarm_list_t * this, alarm_node_t * n, __alarm_it_t p ) {
-	assert( !n->next );
+	verify( !n->next );
 	if( p == this->tail ) {
 		this->tail = &n->next;
@@ -80,4 +98,6 @@
 	}
 	*p = n;
+
+	verify( validate( this ) );
 }
 
@@ -89,4 +109,6 @@
 
 	insert_at( this, n, it );
+
+	verify( validate( this ) );
 }
 
@@ -100,4 +122,5 @@
 		head->next = NULL;
 	}
+	verify( validate( this ) );
 	return head;
 }
@@ -105,43 +128,60 @@
 static inline void remove_at( alarm_list_t * this, alarm_node_t * n, __alarm_it_t it ) {
 	verify( it );
-	verify( (*it)->next == n );
+	verify( (*it) == n );
 
-	(*it)->next = n->next;
+	(*it) = n->next;
 	if( !n-> next ) {
 		this->tail = it;
 	}
 	n->next = NULL;
+
+	verify( validate( this ) );
 }
 
 static inline void remove( alarm_list_t * this, alarm_node_t * n ) {
 	alarm_node_t ** it = &this->head;
-	while( (*it) && (*it)->next != n ) {
+	while( (*it) && (*it) != n ) {
 		it = &(*it)->next;
 	}
 
+	verify( validate( this ) );
+
 	if( *it ) { remove_at( this, n, it ); }
+
+	verify( validate( this ) );
 }
 
 void register_self( alarm_node_t * this ) {
 	disable_interrupts();
-	assert( !systemProcessor->pending_alarm );
-	lock( &systemProcessor->alarm_lock );
+	verify( !systemProcessor->pending_alarm );
+	lock( &systemProcessor->alarm_lock DEBUG_CTX2 );
 	{
+		verify( validate( &systemProcessor->alarms ) );
+		bool first = !systemProcessor->alarms.head;
+
 		insert( &systemProcessor->alarms, this );
 		if( systemProcessor->pending_alarm ) {
 			tick_preemption();
 		}
+		if( first ) {
+			__kernel_set_timer( systemProcessor->alarms.head->alarm - __kernel_get_time() );
+		}
 	}
 	unlock( &systemProcessor->alarm_lock );
 	this->set = true;
-	enable_interrupts();
+	enable_interrupts( DEBUG_CTX );
 }
 
 void unregister_self( alarm_node_t * this ) {
+	// LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO, "Kernel : unregister %p start\n", this );
 	disable_interrupts();
-	lock( &systemProcessor->alarm_lock );
-	remove( &systemProcessor->alarms, this );
+	lock( &systemProcessor->alarm_lock DEBUG_CTX2 );
+	{
+		verify( validate( &systemProcessor->alarms ) );
+		remove( &systemProcessor->alarms, this );
+	}
 	unlock( &systemProcessor->alarm_lock );
-	disable_interrupts();
+	enable_interrupts( DEBUG_CTX );
 	this->set = false;
+	// LIB_DEBUG_PRINT_BUFFER_LOCAL( STDERR_FILENO, "Kernel : unregister %p end\n", this );
 }
Index: src/libcfa/concurrency/coroutine
===================================================================
--- src/libcfa/concurrency/coroutine	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/coroutine	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -63,5 +63,5 @@
 
 // Get current coroutine
-coroutine_desc * this_coroutine(void);
+extern volatile thread_local coroutine_desc * this_coroutine;
 
 // Private wrappers for context switch and stack creation
@@ -71,5 +71,5 @@
 // Suspend implementation inlined for performance
 static inline void suspend() {
-	coroutine_desc * src = this_coroutine();		// optimization
+	coroutine_desc * src = this_coroutine;		// optimization
 
 	assertf( src->last != 0,
@@ -88,5 +88,5 @@
 forall(dtype T | is_coroutine(T))
 static inline void resume(T * cor) {
-	coroutine_desc * src = this_coroutine();		// optimization
+	coroutine_desc * src = this_coroutine;		// optimization
 	coroutine_desc * dst = get_coroutine(cor);
 
@@ -112,5 +112,5 @@
 
 static inline void resume(coroutine_desc * dst) {
-	coroutine_desc * src = this_coroutine();		// optimization
+	coroutine_desc * src = this_coroutine;		// optimization
 
 	// not resuming self ?
Index: src/libcfa/concurrency/coroutine.c
===================================================================
--- src/libcfa/concurrency/coroutine.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/coroutine.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -32,5 +32,5 @@
 #include "invoke.h"
 
-extern thread_local processor * this_processor;
+extern volatile thread_local processor * this_processor;
 
 //-----------------------------------------------------------------------------
@@ -44,5 +44,5 @@
 // Coroutine ctors and dtors
 void ?{}(coStack_t* this) {
-	this->size		= 10240;	// size of stack
+	this->size		= 65000;	// size of stack
 	this->storage	= NULL;	// pointer to stack
 	this->limit		= NULL;	// stack grows towards stack limit
@@ -50,5 +50,5 @@
 	this->context	= NULL;	// address of cfa_context_t
 	this->top		= NULL;	// address of top of storage
-	this->userStack	= false;	
+	this->userStack	= false;
 }
 
@@ -106,12 +106,13 @@
 
 	// set state of current coroutine to inactive
-	src->state = Inactive;
+	src->state = src->state == Halted ? Halted : Inactive;
 
 	// set new coroutine that task is executing
-	this_processor->current_coroutine = dst;
+	this_coroutine = dst;
 
 	// context switch to specified coroutine
+	assert( src->stack.context );
 	CtxSwitch( src->stack.context, dst->stack.context );
-	// when CtxSwitch returns we are back in the src coroutine		
+	// when CtxSwitch returns we are back in the src coroutine
 
 	// set state of new coroutine to active
@@ -131,5 +132,5 @@
 		this->size = libCeiling( storageSize, 16 );
 		// use malloc/memalign because "new" raises an exception for out-of-memory
-		
+
 		// assume malloc has 8 byte alignment so add 8 to allow rounding up to 16 byte alignment
 		LIB_DEBUG_DO( this->storage = memalign( pageSize, cxtSize + this->size + pageSize ) );
Index: src/libcfa/concurrency/invoke.c
===================================================================
--- src/libcfa/concurrency/invoke.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/invoke.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -29,9 +29,11 @@
 
 extern void __suspend_internal(void);
-extern void __leave_monitor_desc( struct monitor_desc * this );
+extern void __leave_thread_monitor( struct thread_desc * this );
+extern void disable_interrupts();
+extern void enable_interrupts( DEBUG_CTX_PARAM );
 
 void CtxInvokeCoroutine(
-      void (*main)(void *), 
-      struct coroutine_desc *(*get_coroutine)(void *), 
+      void (*main)(void *),
+      struct coroutine_desc *(*get_coroutine)(void *),
       void *this
 ) {
@@ -56,23 +58,30 @@
 
 void CtxInvokeThread(
-      void (*dtor)(void *), 
-      void (*main)(void *), 
-      struct thread_desc *(*get_thread)(void *), 
+      void (*dtor)(void *),
+      void (*main)(void *),
+      struct thread_desc *(*get_thread)(void *),
       void *this
 ) {
+      // First suspend, once the thread arrives here,
+      // the function pointer to main can be invalidated without risk
       __suspend_internal();
 
+      // Fetch the thread handle from the user defined thread structure
       struct thread_desc* thrd = get_thread( this );
-      struct coroutine_desc* cor = &thrd->cor;
-      struct monitor_desc* mon = &thrd->mon;
-      cor->state = Active;
 
-      // LIB_DEBUG_PRINTF("Invoke Thread : invoking main %p (args %p)\n", main, this);
+      // Officially start the thread by enabling preemption
+      enable_interrupts( DEBUG_CTX );
+
+      // Call the main of the thread
       main( this );
 
-      __leave_monitor_desc( mon );
-
+      // To exit a thread we must :
+      // 1 - Mark it as halted
+      // 2 - Leave its monitor
+      // 3 - Disable the interupts
+      // 4 - Final suspend
+      // The order of these 4 operations is very important
       //Final suspend, should never return
-      __suspend_internal();
+      __leave_thread_monitor( thrd );
       abortf("Resumed dead thread");
 }
@@ -80,7 +89,7 @@
 
 void CtxStart(
-      void (*main)(void *), 
-      struct coroutine_desc *(*get_coroutine)(void *), 
-      void *this, 
+      void (*main)(void *),
+      struct coroutine_desc *(*get_coroutine)(void *),
+      void *this,
       void (*invoke)(void *)
 ) {
@@ -108,5 +117,5 @@
 	((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->rturn = invoke;
       ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->mxcr = 0x1F80; //Vol. 2A 3-520
-      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F;  //Vol. 1 8-7 
+      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F;  //Vol. 1 8-7
 
 #elif defined( __x86_64__ )
@@ -128,5 +137,5 @@
       ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fixedRegisters[1] = invoke;
       ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->mxcr = 0x1F80; //Vol. 2A 3-520
-      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F;  //Vol. 1 8-7 
+      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F;  //Vol. 1 8-7
 #else
       #error Only __i386__ and __x86_64__ is supported for threads in cfa
Index: src/libcfa/concurrency/invoke.h
===================================================================
--- src/libcfa/concurrency/invoke.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/invoke.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -31,4 +31,8 @@
       struct spinlock {
             volatile int lock;
+            #ifdef __CFA_DEBUG__
+                  const char * prev_name;
+                  void* prev_thrd;
+            #endif
       };
 
@@ -83,5 +87,4 @@
             struct __thread_queue_t entry_queue;      // queue of threads that are blocked waiting for the monitor
             struct __condition_stack_t signal_stack;  // stack of conditions to run next once we exit the monitor
-            struct monitor_desc * stack_owner;        // if bulk acquiring was used we need to synchronize signals with an other monitor
             unsigned int recursion;                   // monitor routines can be called recursively, we need to keep track of that
       };
@@ -99,5 +102,5 @@
 #ifndef _INVOKE_PRIVATE_H_
 #define _INVOKE_PRIVATE_H_
-      
+
       struct machine_context_t {
             void *SP;
@@ -109,5 +112,16 @@
       extern void CtxInvokeStub( void );
       void CtxSwitch( void * from, void * to ) asm ("CtxSwitch");
-      void CtxGet( void * this ) asm ("CtxGet");
+
+      #if   defined( __x86_64__ )
+      #define CtxGet( ctx ) __asm__ ( \
+                  "movq %%rsp,%0\n"   \
+                  "movq %%rbp,%1\n"   \
+            : "=rm" (ctx.SP), "=rm" (ctx.FP) )
+      #elif defined( __i386__ )
+      #define CtxGet( ctx ) __asm__ ( \
+                  "movl %%esp,%0\n"   \
+                  "movl %%ebp,%1\n"   \
+            : "=rm" (ctx.SP), "=rm" (ctx.FP) )
+      #endif
 
 #endif //_INVOKE_PRIVATE_H_
Index: src/libcfa/concurrency/kernel
===================================================================
--- src/libcfa/concurrency/kernel	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/kernel	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -28,19 +28,20 @@
 //-----------------------------------------------------------------------------
 // Locks
-bool try_lock( spinlock * );
-void lock( spinlock * );
-void unlock( spinlock * );
+bool try_lock  ( spinlock * DEBUG_CTX_PARAM2 );
+void lock      ( spinlock * DEBUG_CTX_PARAM2 );
+void lock_yield( spinlock * DEBUG_CTX_PARAM2 );
+void unlock    ( spinlock * );
 
-struct signal_once {
-	volatile bool cond;
-	struct spinlock lock;
-	struct __thread_queue_t blocked;
+struct semaphore {
+	spinlock lock;
+	int count;
+	__thread_queue_t waiting;
 };
 
-void ?{}(signal_once * this);
-void ^?{}(signal_once * this);
+void  ?{}(semaphore * this, int count = 1);
+void ^?{}(semaphore * this);
+void P(semaphore * this);
+void V(semaphore * this);
 
-void wait( signal_once * );
-void signal( signal_once * );
 
 //-----------------------------------------------------------------------------
@@ -68,5 +69,5 @@
 	unsigned short thrd_count;
 };
-static inline void ?{}(FinishAction * this) { 
+static inline void ?{}(FinishAction * this) {
 	this->action_code = No_Action;
 	this->thrd = NULL;
@@ -78,9 +79,7 @@
 	struct processorCtx_t * runner;
 	cluster * cltr;
-	coroutine_desc * current_coroutine;
-	thread_desc * current_thread;
 	pthread_t kernel_thread;
-	
-	signal_once terminated;
+
+	semaphore terminated;
 	volatile bool is_terminated;
 
@@ -90,7 +89,7 @@
 	unsigned int preemption;
 
-	unsigned short disable_preempt_count;
+	bool pending_preemption;
 
-	bool pending_preemption;
+	char * last_enable;
 };
 
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/kernel.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -15,12 +15,5 @@
 //
 
-#include "startup.h"
-
-//Start and stop routine for the kernel, declared first to make sure they run first
-void kernel_startup(void)  __attribute__(( constructor( STARTUP_PRIORITY_KERNEL ) ));
-void kernel_shutdown(void) __attribute__(( destructor ( STARTUP_PRIORITY_KERNEL ) ));
-
-//Header
-#include "kernel_private.h"
+#include "libhdr.h"
 
 //C Includes
@@ -35,6 +28,7 @@
 
 //CFA Includes
-#include "libhdr.h"
+#include "kernel_private.h"
 #include "preemption.h"
+#include "startup.h"
 
 //Private includes
@@ -42,7 +36,11 @@
 #include "invoke.h"
 
+//Start and stop routine for the kernel, declared first to make sure they run first
+void kernel_startup(void)  __attribute__(( constructor( STARTUP_PRIORITY_KERNEL ) ));
+void kernel_shutdown(void) __attribute__(( destructor ( STARTUP_PRIORITY_KERNEL ) ));
+
 //-----------------------------------------------------------------------------
 // Kernel storage
-#define KERNEL_STORAGE(T,X) static char X##_storage[sizeof(T)]
+#define KERNEL_STORAGE(T,X) static char X##Storage[sizeof(T)]
 
 KERNEL_STORAGE(processorCtx_t, systemProcessorCtx);
@@ -50,5 +48,5 @@
 KERNEL_STORAGE(system_proc_t, systemProcessor);
 KERNEL_STORAGE(thread_desc, mainThread);
-KERNEL_STORAGE(machine_context_t, mainThread_context);
+KERNEL_STORAGE(machine_context_t, mainThreadCtx);
 
 cluster * systemCluster;
@@ -59,18 +57,14 @@
 // Global state
 
-thread_local processor * this_processor;
-
-coroutine_desc * this_coroutine(void) {
-	return this_processor->current_coroutine;
-}
-
-thread_desc * this_thread(void) {
-	return this_processor->current_thread;
-}
+volatile thread_local processor * this_processor;
+volatile thread_local coroutine_desc * this_coroutine;
+volatile thread_local thread_desc * this_thread;
+volatile thread_local bool preemption_in_progress = 0;
+volatile thread_local unsigned short disable_preempt_count = 1;
 
 //-----------------------------------------------------------------------------
 // Main thread construction
 struct current_stack_info_t {
-	machine_context_t ctx;	
+	machine_context_t ctx;
 	unsigned int size;		// size of stack
 	void *base;				// base of stack
@@ -82,5 +76,5 @@
 
 void ?{}( current_stack_info_t * this ) {
-	CtxGet( &this->ctx );
+	CtxGet( this->ctx );
 	this->base = this->ctx.FP;
 	this->storage = this->ctx.SP;
@@ -91,5 +85,5 @@
 
 	this->limit = (void *)(((intptr_t)this->base) - this->size);
-	this->context = &mainThread_context_storage;
+	this->context = &mainThreadCtxStorage;
 	this->top = this->base;
 }
@@ -106,5 +100,5 @@
 
 void ?{}( coroutine_desc * this, current_stack_info_t * info) {
-	(&this->stack){ info };	
+	(&this->stack){ info };
 	this->name = "Main Thread";
 	this->errno_ = 0;
@@ -136,11 +130,8 @@
 void ?{}(processor * this, cluster * cltr) {
 	this->cltr = cltr;
-	this->current_coroutine = NULL;
-	this->current_thread = NULL;
-	(&this->terminated){};
+	(&this->terminated){ 0 };
 	this->is_terminated = false;
 	this->preemption_alarm = NULL;
 	this->preemption = default_preemption();
-	this->disable_preempt_count = 1;		//Start with interrupts disabled
 	this->pending_preemption = false;
 
@@ -150,15 +141,17 @@
 void ?{}(processor * this, cluster * cltr, processorCtx_t * runner) {
 	this->cltr = cltr;
-	this->current_coroutine = NULL;
-	this->current_thread = NULL;
-	(&this->terminated){};
+	(&this->terminated){ 0 };
 	this->is_terminated = false;
-	this->disable_preempt_count = 0;
+	this->preemption_alarm = NULL;
+	this->preemption = default_preemption();
 	this->pending_preemption = false;
+	this->kernel_thread = pthread_self();
 
 	this->runner = runner;
-	LIB_DEBUG_PRINT_SAFE("Kernel : constructing processor context %p\n", runner);
+	LIB_DEBUG_PRINT_SAFE("Kernel : constructing system processor context %p\n", runner);
 	runner{ this };
 }
+
+LIB_DEBUG_DO( bool validate( alarm_list_t * this ); )
 
 void ?{}(system_proc_t * this, cluster * cltr, processorCtx_t * runner) {
@@ -168,4 +161,6 @@
 
 	(&this->proc){ cltr, runner };
+
+	verify( validate( &this->alarms ) );
 }
 
@@ -174,5 +169,6 @@
 		LIB_DEBUG_PRINT_SAFE("Kernel : core %p signaling termination\n", this);
 		this->is_terminated = true;
-		wait( &this->terminated );
+		P( &this->terminated );
+		pthread_join( this->kernel_thread, NULL );
 	}
 }
@@ -184,5 +180,5 @@
 
 void ^?{}(cluster * this) {
-	
+
 }
 
@@ -203,5 +199,5 @@
 
 		thread_desc * readyThread = NULL;
-		for( unsigned int spin_count = 0; ! this->is_terminated; spin_count++ ) 
+		for( unsigned int spin_count = 0; ! this->is_terminated; spin_count++ )
 		{
 			readyThread = nextThread( this->cltr );
@@ -209,5 +205,9 @@
 			if(readyThread)
 			{
+				verify( disable_preempt_count > 0 );
+
 				runThread(this, readyThread);
+
+				verify( disable_preempt_count > 0 );
 
 				//Some actions need to be taken from the kernel
@@ -225,19 +225,20 @@
 	}
 
-	signal( &this->terminated );
+	V( &this->terminated );
+
 	LIB_DEBUG_PRINT_SAFE("Kernel : core %p terminated\n", this);
 }
 
-// runThread runs a thread by context switching 
-// from the processor coroutine to the target thread 
+// runThread runs a thread by context switching
+// from the processor coroutine to the target thread
 void runThread(processor * this, thread_desc * dst) {
 	coroutine_desc * proc_cor = get_coroutine(this->runner);
 	coroutine_desc * thrd_cor = get_coroutine(dst);
-	
+
 	//Reset the terminating actions here
 	this->finish.action_code = No_Action;
 
 	//Update global state
-	this->current_thread = dst;
+	this_thread = dst;
 
 	// Context Switch to the thread
@@ -246,5 +247,5 @@
 }
 
-// Once a thread has finished running, some of 
+// Once a thread has finished running, some of
 // its final actions must be executed from the kernel
 void finishRunning(processor * this) {
@@ -256,5 +257,5 @@
 	}
 	else if( this->finish.action_code == Release_Schedule ) {
-		unlock( this->finish.lock );		
+		unlock( this->finish.lock );
 		ScheduleThread( this->finish.thrd );
 	}
@@ -289,7 +290,10 @@
 	processor * proc = (processor *) arg;
 	this_processor = proc;
+	this_coroutine = NULL;
+	this_thread = NULL;
+	disable_preempt_count = 1;
 	// SKULLDUGGERY: We want to create a context for the processor coroutine
 	// which is needed for the 2-step context switch. However, there is no reason
-	// to waste the perfectly valid stack create by pthread. 
+	// to waste the perfectly valid stack create by pthread.
 	current_stack_info_t info;
 	machine_context_t ctx;
@@ -300,13 +304,13 @@
 
 	//Set global state
-	proc->current_coroutine = &proc->runner->__cor;
-	proc->current_thread = NULL;
+	this_coroutine = &proc->runner->__cor;
+	this_thread = NULL;
 
 	//We now have a proper context from which to schedule threads
 	LIB_DEBUG_PRINT_SAFE("Kernel : core %p created (%p, %p)\n", proc, proc->runner, &ctx);
 
-	// SKULLDUGGERY: Since the coroutine doesn't have its own stack, we can't 
-	// resume it to start it like it normally would, it will just context switch 
-	// back to here. Instead directly call the main since we already are on the 
+	// SKULLDUGGERY: Since the coroutine doesn't have its own stack, we can't
+	// resume it to start it like it normally would, it will just context switch
+	// back to here. Instead directly call the main since we already are on the
 	// appropriate stack.
 	proc_cor_storage.__cor.state = Active;
@@ -315,5 +319,5 @@
 
 	// Main routine of the core returned, the core is now fully terminated
-	LIB_DEBUG_PRINT_SAFE("Kernel : core %p main ended (%p)\n", proc, proc->runner);	
+	LIB_DEBUG_PRINT_SAFE("Kernel : core %p main ended (%p)\n", proc, proc->runner);
 
 	return NULL;
@@ -322,8 +326,8 @@
 void start(processor * this) {
 	LIB_DEBUG_PRINT_SAFE("Kernel : Starting core %p\n", this);
-	
+
 	pthread_create( &this->kernel_thread, NULL, CtxInvokeProcessor, (void*)this );
 
-	LIB_DEBUG_PRINT_SAFE("Kernel : core %p started\n", this);	
+	LIB_DEBUG_PRINT_SAFE("Kernel : core %p started\n", this);
 }
 
@@ -331,51 +335,89 @@
 // Scheduler routines
 void ScheduleThread( thread_desc * thrd ) {
-	if( !thrd ) return;
+	// if( !thrd ) return;
+	assert( thrd );
+	assert( thrd->cor.state != Halted );
+
+	verify( disable_preempt_count > 0 );
 
 	verifyf( thrd->next == NULL, "Expected null got %p", thrd->next );
-	
-	lock( &systemProcessor->proc.cltr->lock );
+
+	lock( &systemProcessor->proc.cltr->lock DEBUG_CTX2 );
 	append( &systemProcessor->proc.cltr->ready_queue, thrd );
 	unlock( &systemProcessor->proc.cltr->lock );
+
+	verify( disable_preempt_count > 0 );
 }
 
 thread_desc * nextThread(cluster * this) {
-	lock( &this->lock );
+	verify( disable_preempt_count > 0 );
+	lock( &this->lock DEBUG_CTX2 );
 	thread_desc * head = pop_head( &this->ready_queue );
 	unlock( &this->lock );
+	verify( disable_preempt_count > 0 );
 	return head;
 }
 
-void ScheduleInternal() {
+void BlockInternal() {
+	disable_interrupts();
+	verify( disable_preempt_count > 0 );
 	suspend();
-}
-
-void ScheduleInternal( spinlock * lock ) {
+	verify( disable_preempt_count > 0 );
+	enable_interrupts( DEBUG_CTX );
+}
+
+void BlockInternal( spinlock * lock ) {
+	disable_interrupts();
 	this_processor->finish.action_code = Release;
 	this_processor->finish.lock = lock;
+
+	verify( disable_preempt_count > 0 );
 	suspend();
-}
-
-void ScheduleInternal( thread_desc * thrd ) {
+	verify( disable_preempt_count > 0 );
+
+	enable_interrupts( DEBUG_CTX );
+}
+
+void BlockInternal( thread_desc * thrd ) {
+	disable_interrupts();
+	assert( thrd->cor.state != Halted );
 	this_processor->finish.action_code = Schedule;
 	this_processor->finish.thrd = thrd;
+
+	verify( disable_preempt_count > 0 );
 	suspend();
-}
-
-void ScheduleInternal( spinlock * lock, thread_desc * thrd ) {
+	verify( disable_preempt_count > 0 );
+
+	enable_interrupts( DEBUG_CTX );
+}
+
+void BlockInternal( spinlock * lock, thread_desc * thrd ) {
+	disable_interrupts();
 	this_processor->finish.action_code = Release_Schedule;
 	this_processor->finish.lock = lock;
 	this_processor->finish.thrd = thrd;
+
+	verify( disable_preempt_count > 0 );
 	suspend();
-}
-
-void ScheduleInternal(spinlock ** locks, unsigned short count) {
+	verify( disable_preempt_count > 0 );
+
+	enable_interrupts( DEBUG_CTX );
+}
+
+void BlockInternal(spinlock ** locks, unsigned short count) {
+	disable_interrupts();
 	this_processor->finish.action_code = Release_Multi;
 	this_processor->finish.locks = locks;
 	this_processor->finish.lock_count = count;
+
+	verify( disable_preempt_count > 0 );
 	suspend();
-}
-
-void ScheduleInternal(spinlock ** locks, unsigned short lock_count, thread_desc ** thrds, unsigned short thrd_count) {
+	verify( disable_preempt_count > 0 );
+
+	enable_interrupts( DEBUG_CTX );
+}
+
+void BlockInternal(spinlock ** locks, unsigned short lock_count, thread_desc ** thrds, unsigned short thrd_count) {
+	disable_interrupts();
 	this_processor->finish.action_code = Release_Multi_Schedule;
 	this_processor->finish.locks = locks;
@@ -383,4 +425,18 @@
 	this_processor->finish.thrds = thrds;
 	this_processor->finish.thrd_count = thrd_count;
+
+	verify( disable_preempt_count > 0 );
+	suspend();
+	verify( disable_preempt_count > 0 );
+
+	enable_interrupts( DEBUG_CTX );
+}
+
+void LeaveThread(spinlock * lock, thread_desc * thrd) {
+	verify( disable_preempt_count > 0 );
+	this_processor->finish.action_code = thrd ? Release_Schedule : Release;
+	this_processor->finish.lock = lock;
+	this_processor->finish.thrd = thrd;
+
 	suspend();
 }
@@ -392,10 +448,10 @@
 // Kernel boot procedures
 void kernel_startup(void) {
-	LIB_DEBUG_PRINT_SAFE("Kernel : Starting\n");	
+	LIB_DEBUG_PRINT_SAFE("Kernel : Starting\n");
 
 	// Start by initializing the main thread
-	// SKULLDUGGERY: the mainThread steals the process main thread 
+	// SKULLDUGGERY: the mainThread steals the process main thread
 	// which will then be scheduled by the systemProcessor normally
-	mainThread = (thread_desc *)&mainThread_storage;
+	mainThread = (thread_desc *)&mainThreadStorage;
 	current_stack_info_t info;
 	mainThread{ &info };
@@ -403,30 +459,31 @@
 	LIB_DEBUG_PRINT_SAFE("Kernel : Main thread ready\n");
 
+	// Initialize the system cluster
+	systemCluster = (cluster *)&systemClusterStorage;
+	systemCluster{};
+
+	LIB_DEBUG_PRINT_SAFE("Kernel : System cluster ready\n");
+
+	// Initialize the system processor and the system processor ctx
+	// (the coroutine that contains the processing control flow)
+	systemProcessor = (system_proc_t *)&systemProcessorStorage;
+	systemProcessor{ systemCluster, (processorCtx_t *)&systemProcessorCtxStorage };
+
+	// Add the main thread to the ready queue
+	// once resume is called on systemProcessor->runner the mainThread needs to be scheduled like any normal thread
+	ScheduleThread(mainThread);
+
+	//initialize the global state variables
+	this_processor = &systemProcessor->proc;
+	this_thread = mainThread;
+	this_coroutine = &mainThread->cor;
+	disable_preempt_count = 1;
+
 	// Enable preemption
 	kernel_start_preemption();
 
-	// Initialize the system cluster
-	systemCluster = (cluster *)&systemCluster_storage;
-	systemCluster{};
-
-	LIB_DEBUG_PRINT_SAFE("Kernel : System cluster ready\n");
-
-	// Initialize the system processor and the system processor ctx
-	// (the coroutine that contains the processing control flow)
-	systemProcessor = (system_proc_t *)&systemProcessor_storage;
-	systemProcessor{ systemCluster, (processorCtx_t *)&systemProcessorCtx_storage };
-
-	// Add the main thread to the ready queue 
-	// once resume is called on systemProcessor->runner the mainThread needs to be scheduled like any normal thread
-	ScheduleThread(mainThread);
-
-	//initialize the global state variables
-	this_processor = &systemProcessor->proc;
-	this_processor->current_thread = mainThread;
-	this_processor->current_coroutine = &mainThread->cor;
-
 	// SKULLDUGGERY: Force a context switch to the system processor to set the main thread's context to the current UNIX
 	// context. Hence, the main thread does not begin through CtxInvokeThread, like all other threads. The trick here is that
-	// mainThread is on the ready queue when this call is made. 
+	// mainThread is on the ready queue when this call is made.
 	resume( systemProcessor->proc.runner );
 
@@ -435,8 +492,12 @@
 	// THE SYSTEM IS NOW COMPLETELY RUNNING
 	LIB_DEBUG_PRINT_SAFE("Kernel : Started\n--------------------------------------------------\n\n");
+
+	enable_interrupts( DEBUG_CTX );
 }
 
 void kernel_shutdown(void) {
 	LIB_DEBUG_PRINT_SAFE("\n--------------------------------------------------\nKernel : Shutting down\n");
+
+	disable_interrupts();
 
 	// SKULLDUGGERY: Notify the systemProcessor it needs to terminates.
@@ -448,4 +509,7 @@
 	// THE SYSTEM IS NOW COMPLETELY STOPPED
 
+	// Disable preemption
+	kernel_stop_preemption();
+
 	// Destroy the system processor and its context in reverse order of construction
 	// These were manually constructed so we need manually destroy them
@@ -457,5 +521,5 @@
 	^(mainThread){};
 
-	LIB_DEBUG_PRINT_SAFE("Kernel : Shutdown complete\n");	
+	LIB_DEBUG_PRINT_SAFE("Kernel : Shutdown complete\n");
 }
 
@@ -467,5 +531,5 @@
 	// abort cannot be recursively entered by the same or different processors because all signal handlers return when
 	// the globalAbort flag is true.
-	lock( &kernel_abort_lock );
+	lock( &kernel_abort_lock DEBUG_CTX2 );
 
 	// first task to abort ?
@@ -473,8 +537,8 @@
 		kernel_abort_called = true;
 		unlock( &kernel_abort_lock );
-	} 
+	}
 	else {
 		unlock( &kernel_abort_lock );
-		
+
 		sigset_t mask;
 		sigemptyset( &mask );
@@ -482,8 +546,8 @@
 		sigaddset( &mask, SIGUSR1 );			// block SIGUSR1 signals
 		sigsuspend( &mask );				// block the processor to prevent further damage during abort
-		_exit( EXIT_FAILURE );				// if processor unblocks before it is killed, terminate it		
-	}
-
-	return this_thread();
+		_exit( EXIT_FAILURE );				// if processor unblocks before it is killed, terminate it
+	}
+
+	return this_thread;
 }
 
@@ -494,8 +558,8 @@
 	__lib_debug_write( STDERR_FILENO, abort_text, len );
 
-	if ( thrd != this_coroutine() ) {
-		len = snprintf( abort_text, abort_text_size, " in coroutine %.256s (%p).\n", this_coroutine()->name, this_coroutine() );
+	if ( thrd != this_coroutine ) {
+		len = snprintf( abort_text, abort_text_size, " in coroutine %.256s (%p).\n", this_coroutine->name, this_coroutine );
 		__lib_debug_write( STDERR_FILENO, abort_text, len );
-	} 
+	}
 	else {
 		__lib_debug_write( STDERR_FILENO, ".\n", 2 );
@@ -505,9 +569,9 @@
 extern "C" {
 	void __lib_debug_acquire() {
-		lock(&kernel_debug_lock);
+		lock( &kernel_debug_lock DEBUG_CTX2 );
 	}
 
 	void __lib_debug_release() {
-		unlock(&kernel_debug_lock);
+		unlock( &kernel_debug_lock );
 	}
 }
@@ -525,13 +589,29 @@
 }
 
-bool try_lock( spinlock * this ) {
+bool try_lock( spinlock * this DEBUG_CTX_PARAM2 ) {
 	return this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0;
 }
 
-void lock( spinlock * this ) {
+void lock( spinlock * this DEBUG_CTX_PARAM2 ) {
 	for ( unsigned int i = 1;; i += 1 ) {
-	  	if ( this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0 ) break;
-	}
-}
+		if ( this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0 ) { break; }
+	}
+	LIB_DEBUG_DO(
+		this->prev_name = caller;
+		this->prev_thrd = this_thread;
+	)
+}
+
+void lock_yield( spinlock * this DEBUG_CTX_PARAM2 ) {
+	for ( unsigned int i = 1;; i += 1 ) {
+		if ( this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0 ) { break; }
+		yield();
+	}
+	LIB_DEBUG_DO(
+		this->prev_name = caller;
+		this->prev_thrd = this_thread;
+	)
+}
+
 
 void unlock( spinlock * this ) {
@@ -539,32 +619,39 @@
 }
 
-void ?{}( signal_once * this ) {
-	this->cond = false;
-}
-void ^?{}( signal_once * this ) {
-
-}
-
-void wait( signal_once * this ) {
-	lock( &this->lock );
-	if( !this->cond ) {
-		append( &this->blocked, this_thread() );
-		ScheduleInternal( &this->lock );
-		lock( &this->lock );
-	}
+void  ?{}( semaphore * this, int count = 1 ) {
+	(&this->lock){};
+	this->count = count;
+	(&this->waiting){};
+}
+void ^?{}(semaphore * this) {}
+
+void P(semaphore * this) {
+	lock( &this->lock DEBUG_CTX2 );
+	this->count -= 1;
+	if ( this->count < 0 ) {
+		// queue current task
+		append( &this->waiting, (thread_desc *)this_thread );
+
+		// atomically release spin lock and block
+		BlockInternal( &this->lock );
+	}
+	else {
+	    unlock( &this->lock );
+	}
+}
+
+void V(semaphore * this) {
+	thread_desc * thrd = NULL;
+	lock( &this->lock DEBUG_CTX2 );
+	this->count += 1;
+	if ( this->count <= 0 ) {
+		// remove task at head of waiting list
+		thrd = pop_head( &this->waiting );
+	}
+
 	unlock( &this->lock );
-}
-
-void signal( signal_once * this ) {
-	lock( &this->lock );
-	{
-		this->cond = true;
-
-		thread_desc * it;
-		while( it = pop_head( &this->blocked) ) {
-			ScheduleThread( it );
-		}
-	}
-	unlock( &this->lock );
+
+	// make new owner
+	WakeThread( thrd );
 }
 
@@ -590,5 +677,5 @@
 		}
 		head->next = NULL;
-	}	
+	}
 	return head;
 }
@@ -609,5 +696,5 @@
 		this->top = top->next;
 		top->next = NULL;
-	}	
+	}
 	return top;
 }
Index: src/libcfa/concurrency/kernel_private.h
===================================================================
--- src/libcfa/concurrency/kernel_private.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/kernel_private.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -18,4 +18,6 @@
 #define KERNEL_PRIVATE_H
 
+#include "libhdr.h"
+
 #include "kernel"
 #include "thread"
@@ -23,17 +25,31 @@
 #include "alarm.h"
 
-#include "libhdr.h"
 
 //-----------------------------------------------------------------------------
 // Scheduler
+
+extern "C" {
+	void disable_interrupts();
+	void enable_interrupts_noRF();
+	void enable_interrupts( DEBUG_CTX_PARAM );
+}
+
 void ScheduleThread( thread_desc * );
+static inline void WakeThread( thread_desc * thrd ) {
+	if( !thrd ) return;
+
+	disable_interrupts();
+	ScheduleThread( thrd );
+	enable_interrupts( DEBUG_CTX );
+}
 thread_desc * nextThread(cluster * this);
 
-void ScheduleInternal(void);
-void ScheduleInternal(spinlock * lock);
-void ScheduleInternal(thread_desc * thrd);
-void ScheduleInternal(spinlock * lock, thread_desc * thrd);
-void ScheduleInternal(spinlock ** locks, unsigned short count);
-void ScheduleInternal(spinlock ** locks, unsigned short count, thread_desc ** thrds, unsigned short thrd_count);
+void BlockInternal(void);
+void BlockInternal(spinlock * lock);
+void BlockInternal(thread_desc * thrd);
+void BlockInternal(spinlock * lock, thread_desc * thrd);
+void BlockInternal(spinlock ** locks, unsigned short count);
+void BlockInternal(spinlock ** locks, unsigned short count, thread_desc ** thrds, unsigned short thrd_count);
+void LeaveThread(spinlock * lock, thread_desc * thrd);
 
 //-----------------------------------------------------------------------------
@@ -60,24 +76,9 @@
 extern cluster * systemCluster;
 extern system_proc_t * systemProcessor;
-extern thread_local processor * this_processor;
-
-static inline void disable_interrupts() {
-	__attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, 1, __ATOMIC_SEQ_CST );
-	assert( prev != (unsigned short) -1 );
-}
-
-static inline void enable_interrupts_noRF() {
-	__attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST );
-	verify( prev != (unsigned short) 0 );
-}
-
-static inline void enable_interrupts() {
-	__attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST );
-	verify( prev != (unsigned short) 0 );
-	if( prev == 1 && this_processor->pending_preemption ) {
-		ScheduleInternal( this_processor->current_thread );
-		this_processor->pending_preemption = false;
-	}
-}
+extern volatile thread_local processor * this_processor;
+extern volatile thread_local coroutine_desc * this_coroutine;
+extern volatile thread_local thread_desc * this_thread;
+extern volatile thread_local bool preemption_in_progress;
+extern volatile thread_local unsigned short disable_preempt_count;
 
 //-----------------------------------------------------------------------------
Index: src/libcfa/concurrency/monitor
===================================================================
--- src/libcfa/concurrency/monitor	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/monitor	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -26,5 +26,4 @@
 static inline void ?{}(monitor_desc * this) {
 	this->owner = NULL;
-	this->stack_owner = NULL;
 	this->recursion = 0;
 }
Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/monitor.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -19,6 +19,6 @@
 #include <stdlib>
 
+#include "libhdr.h"
 #include "kernel_private.h"
-#include "libhdr.h"
 
 //-----------------------------------------------------------------------------
@@ -44,9 +44,9 @@
 
 extern "C" {
-	void __enter_monitor_desc(monitor_desc * this) {
-		lock( &this->lock );
-		thread_desc * thrd = this_thread();
-
-		LIB_DEBUG_PRINT_SAFE("%p Entering %p (o: %p, r: %i)\n", thrd, this, this->owner, this->recursion);
+	void __enter_monitor_desc( monitor_desc * this ) {
+		lock_yield( &this->lock DEBUG_CTX2 );
+		thread_desc * thrd = this_thread;
+
+		// LIB_DEBUG_PRINT_SAFE("%p Entering %p (o: %p, r: %i)\n", thrd, this, this->owner, this->recursion);
 
 		if( !this->owner ) {
@@ -62,9 +62,9 @@
 			//Some one else has the monitor, wait in line for it
 			append( &this->entry_queue, thrd );
-			LIB_DEBUG_PRINT_SAFE("%p Blocking on entry\n", thrd);
-			ScheduleInternal( &this->lock );
-
-			//ScheduleInternal will unlock spinlock, no need to unlock ourselves
-			return; 
+			// LIB_DEBUG_PRINT_SAFE("%p Blocking on entry\n", thrd);
+			BlockInternal( &this->lock );
+
+			//BlockInternal will unlock spinlock, no need to unlock ourselves
+			return;
 		}
 
@@ -75,9 +75,9 @@
 	// leave pseudo code :
 	//	TODO
-	void __leave_monitor_desc(monitor_desc * this) {
-		lock( &this->lock );
-
-		LIB_DEBUG_PRINT_SAFE("%p Leaving %p (o: %p, r: %i)\n", thrd, this, this->owner, this->recursion);
-		verifyf( this_thread() == this->owner, "Expected owner to be %p, got %p (r: %i)", this_thread(), this->owner, this->recursion );
+	void __leave_monitor_desc( monitor_desc * this ) {
+		lock_yield( &this->lock DEBUG_CTX2 );
+
+		// LIB_DEBUG_PRINT_SAFE("%p Leaving %p (o: %p, r: %i). ", this_thread, this, this->owner, this->recursion);
+		verifyf( this_thread == this->owner, "Expected owner to be %p, got %p (r: %i)", this_thread, this->owner, this->recursion );
 
 		//Leaving a recursion level, decrement the counter
@@ -96,8 +96,33 @@
 		unlock( &this->lock );
 
-		LIB_DEBUG_PRINT_SAFE("Next owner is %p\n", new_owner);
+		// LIB_DEBUG_PRINT_SAFE("Next owner is %p\n", new_owner);
 
 		//We need to wake-up the thread
-		ScheduleThread( new_owner );
+		WakeThread( new_owner );
+	}
+
+	void __leave_thread_monitor( thread_desc * thrd ) {
+		monitor_desc * this = &thrd->mon;
+		lock_yield( &this->lock DEBUG_CTX2 );
+
+		disable_interrupts();
+
+		thrd->cor.state = Halted;
+
+		verifyf( thrd == this->owner, "Expected owner to be %p, got %p (r: %i)", thrd, this->owner, this->recursion );
+
+		//Leaving a recursion level, decrement the counter
+		this->recursion -= 1;
+
+		//If we haven't left the last level of recursion
+		//it means we don't need to do anything
+		if( this->recursion != 0) {
+			unlock( &this->lock );
+			return;
+		}
+
+		thread_desc * new_owner = next_thread( this );
+
+		LeaveThread( &this->lock, new_owner );
 	}
 }
@@ -121,9 +146,9 @@
 	enter( this->m, this->count );
 
-	this->prev_mntrs = this_thread()->current_monitors;
-	this->prev_count = this_thread()->current_monitor_count;
-
-	this_thread()->current_monitors      = m;
-	this_thread()->current_monitor_count = count;
+	this->prev_mntrs = this_thread->current_monitors;
+	this->prev_count = this_thread->current_monitor_count;
+
+	this_thread->current_monitors      = m;
+	this_thread->current_monitor_count = count;
 }
 
@@ -131,6 +156,6 @@
 	leave( this->m, this->count );
 
-	this_thread()->current_monitors      = this->prev_mntrs;
-	this_thread()->current_monitor_count = this->prev_count;
+	this_thread->current_monitors      = this->prev_mntrs;
+	this_thread->current_monitor_count = this->prev_count;
 }
 
@@ -159,5 +184,5 @@
 // Internal scheduling
 void wait( condition * this, uintptr_t user_info = 0 ) {
-	LIB_DEBUG_PRINT_SAFE("Waiting\n");
+	// LIB_DEBUG_PRINT_SAFE("Waiting\n");
 
 	brand_condition( this );
@@ -170,14 +195,14 @@
 	unsigned short count = this->monitor_count;
 	unsigned int recursions[ count ];		//Save the current recursion levels to restore them later
-	spinlock *   locks     [ count ];		//We need to pass-in an array of locks to ScheduleInternal
-
-	LIB_DEBUG_PRINT_SAFE("count %i\n", count);
-
-	__condition_node_t waiter = { this_thread(), count, user_info };
+	spinlock *   locks     [ count ];		//We need to pass-in an array of locks to BlockInternal
+
+	// LIB_DEBUG_PRINT_SAFE("count %i\n", count);
+
+	__condition_node_t waiter = { (thread_desc*)this_thread, count, user_info };
 
 	__condition_criterion_t criteria[count];
 	for(int i = 0; i < count; i++) {
 		(&criteria[i]){ this->monitors[i], &waiter };
-		LIB_DEBUG_PRINT_SAFE( "Criterion %p\n", &criteria[i] );
+		// LIB_DEBUG_PRINT_SAFE( "Criterion %p\n", &criteria[i] );
 	}
 
@@ -201,12 +226,12 @@
 	}
 
-	LIB_DEBUG_PRINT_SAFE("Will unblock: ");
+	// LIB_DEBUG_PRINT_SAFE("Will unblock: ");
 	for(int i = 0; i < thread_count; i++) {
-		LIB_DEBUG_PRINT_SAFE("%p ", threads[i]);
-	}
-	LIB_DEBUG_PRINT_SAFE("\n");
+		// LIB_DEBUG_PRINT_SAFE("%p ", threads[i]);
+	}
+	// LIB_DEBUG_PRINT_SAFE("\n");
 
 	// Everything is ready to go to sleep
-	ScheduleInternal( locks, count, threads, thread_count );
+	BlockInternal( locks, count, threads, thread_count );
 
 
@@ -222,5 +247,5 @@
 bool signal( condition * this ) {
 	if( is_empty( this ) ) {
-		LIB_DEBUG_PRINT_SAFE("Nothing to signal\n");
+		// LIB_DEBUG_PRINT_SAFE("Nothing to signal\n");
 		return false;
 	}
@@ -231,8 +256,8 @@
 
 	unsigned short count = this->monitor_count;
-	
+
 	//Some more checking in debug
 	LIB_DEBUG_DO(
-		thread_desc * this_thrd = this_thread();
+		thread_desc * this_thrd = this_thread;
 		if ( this->monitor_count != this_thrd->current_monitor_count ) {
 			abortf( "Signal on condition %p made with different number of monitor(s), expected %i got %i", this, this->monitor_count, this_thrd->current_monitor_count );
@@ -248,5 +273,5 @@
 	//Lock all the monitors
 	lock_all( this->monitors, NULL, count );
-	LIB_DEBUG_PRINT_SAFE("Signalling");
+	// LIB_DEBUG_PRINT_SAFE("Signalling");
 
 	//Pop the head of the waiting queue
@@ -256,10 +281,10 @@
 	for(int i = 0; i < count; i++) {
 		__condition_criterion_t * crit = &node->criteria[i];
-		LIB_DEBUG_PRINT_SAFE(" %p", crit->target);
+		// LIB_DEBUG_PRINT_SAFE(" %p", crit->target);
 		assert( !crit->ready );
 		push( &crit->target->signal_stack, crit );
 	}
 
-	LIB_DEBUG_PRINT_SAFE("\n");
+	// LIB_DEBUG_PRINT_SAFE("\n");
 
 	//Release
@@ -281,15 +306,15 @@
 	unsigned short count = this->monitor_count;
 	unsigned int recursions[ count ];		//Save the current recursion levels to restore them later
-	spinlock *   locks     [ count ];		//We need to pass-in an array of locks to ScheduleInternal
+	spinlock *   locks     [ count ];		//We need to pass-in an array of locks to BlockInternal
 
 	lock_all( this->monitors, locks, count );
 
 	//create creteria
-	__condition_node_t waiter = { this_thread(), count, 0 };
+	__condition_node_t waiter = { (thread_desc*)this_thread, count, 0 };
 
 	__condition_criterion_t criteria[count];
 	for(int i = 0; i < count; i++) {
 		(&criteria[i]){ this->monitors[i], &waiter };
-		LIB_DEBUG_PRINT_SAFE( "Criterion %p\n", &criteria[i] );
+		// LIB_DEBUG_PRINT_SAFE( "Criterion %p\n", &criteria[i] );
 		push( &criteria[i].target->signal_stack, &criteria[i] );
 	}
@@ -309,5 +334,5 @@
 
 	//Everything is ready to go to sleep
-	ScheduleInternal( locks, count, &signallee, 1 );
+	BlockInternal( locks, count, &signallee, 1 );
 
 
@@ -325,5 +350,5 @@
 
 uintptr_t front( condition * this ) {
-	verifyf( !is_empty(this), 
+	verifyf( !is_empty(this),
 		"Attempt to access user data on an empty condition.\n"
 		"Possible cause is not checking if the condition is empty before reading stored data."
@@ -335,9 +360,9 @@
 // Internal scheduling
 void __accept_internal( unsigned short count, __acceptable_t * acceptables, void (*func)(void) ) {
-	// thread_desc * this = this_thread();
+	// thread_desc * this = this_thread;
 
 	// unsigned short count = this->current_monitor_count;
 	// unsigned int recursions[ count ];		//Save the current recursion levels to restore them later
-	// spinlock *   locks     [ count ];		//We need to pass-in an array of locks to ScheduleInternal
+	// spinlock *   locks     [ count ];		//We need to pass-in an array of locks to BlockInternal
 
 	// lock_all( this->current_monitors, locks, count );
@@ -348,5 +373,5 @@
 
 	// // // Everything is ready to go to sleep
-	// // ScheduleInternal( locks, count, threads, thread_count );
+	// // BlockInternal( locks, count, threads, thread_count );
 
 
@@ -393,5 +418,5 @@
 static inline void lock_all( spinlock ** locks, unsigned short count ) {
 	for( int i = 0; i < count; i++ ) {
-		lock( locks[i] );
+		lock_yield( locks[i] DEBUG_CTX2 );
 	}
 }
@@ -400,5 +425,5 @@
 	for( int i = 0; i < count; i++ ) {
 		spinlock * l = &source[i]->lock;
-		lock( l );
+		lock_yield( l DEBUG_CTX2 );
 		if(locks) locks[i] = l;
 	}
@@ -443,8 +468,8 @@
 	for(	int i = 0; i < count; i++ ) {
 
-		LIB_DEBUG_PRINT_SAFE( "Checking %p for %p\n", &criteria[i], target );
+		// LIB_DEBUG_PRINT_SAFE( "Checking %p for %p\n", &criteria[i], target );
 		if( &criteria[i] == target ) {
 			criteria[i].ready = true;
-			LIB_DEBUG_PRINT_SAFE( "True\n" );
+			// LIB_DEBUG_PRINT_SAFE( "True\n" );
 		}
 
@@ -452,12 +477,12 @@
 	}
 
-	LIB_DEBUG_PRINT_SAFE( "Runing %i\n", ready2run );
+	// LIB_DEBUG_PRINT_SAFE( "Runing %i\n", ready2run );
 	return ready2run ? node->waiting_thread : NULL;
 }
 
 static inline void brand_condition( condition * this ) {
-	thread_desc * thrd = this_thread();
+	thread_desc * thrd = this_thread;
 	if( !this->monitors ) {
-		LIB_DEBUG_PRINT_SAFE("Branding\n");
+		// LIB_DEBUG_PRINT_SAFE("Branding\n");
 		assertf( thrd->current_monitors != NULL, "No current monitor to brand condition", thrd->current_monitors );
 		this->monitor_count = thrd->current_monitor_count;
Index: src/libcfa/concurrency/preemption.c
===================================================================
--- src/libcfa/concurrency/preemption.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/preemption.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -15,11 +15,24 @@
 //
 
+#include "libhdr.h"
 #include "preemption.h"
 
 extern "C" {
+#include <errno.h>
+#include <execinfo.h>
+#define __USE_GNU
 #include <signal.h>
-}
-
-#define __CFA_DEFAULT_PREEMPTION__ 10
+#undef __USE_GNU
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+}
+
+
+#ifdef __USE_STREAM__
+#include "fstream"
+#endif
+
+#define __CFA_DEFAULT_PREEMPTION__ 10000
 
 __attribute__((weak)) unsigned int default_preemption() {
@@ -27,20 +40,38 @@
 }
 
+#define __CFA_SIGCXT__ ucontext_t *
+#define __CFA_SIGPARMS__ __attribute__((unused)) int sig, __attribute__((unused)) siginfo_t *sfp, __attribute__((unused)) __CFA_SIGCXT__ cxt
+
 static void preempt( processor   * this );
 static void timeout( thread_desc * this );
 
+void sigHandler_ctxSwitch( __CFA_SIGPARMS__ );
+void sigHandler_alarm    ( __CFA_SIGPARMS__ );
+void sigHandler_segv     ( __CFA_SIGPARMS__ );
+void sigHandler_abort    ( __CFA_SIGPARMS__ );
+
+static void __kernel_sigaction( int sig, void (*handler)(__CFA_SIGPARMS__), int flags );
+LIB_DEBUG_DO( bool validate( alarm_list_t * this ); )
+
+#ifdef __x86_64__
+#define CFA_REG_IP REG_RIP
+#else
+#define CFA_REG_IP REG_EIP
+#endif
+
+
 //=============================================================================================
 // Kernel Preemption logic
 //=============================================================================================
 
-void kernel_start_preemption() {
-
-}
-
 void tick_preemption() {
+	// LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO, "Ticking preemption\n" );
+
 	alarm_list_t * alarms = &systemProcessor->alarms;
 	__cfa_time_t currtime = __kernel_get_time();
 	while( alarms->head && alarms->head->alarm < currtime ) {
 		alarm_node_t * node = pop(alarms);
+		// LIB_DEBUG_PRINT_BUFFER_LOCAL( STDERR_FILENO, "Ticking %p\n", node );
+
 		if( node->kernel_alarm ) {
 			preempt( node->proc );
@@ -50,6 +81,8 @@
 		}
 
+		verify( validate( alarms ) );
+
 		if( node->period > 0 ) {
-			node->alarm += node->period;
+			node->alarm = currtime + node->period;
 			insert( alarms, node );
 		}
@@ -62,9 +95,14 @@
 		__kernel_set_timer( alarms->head->alarm - currtime );
 	}
+
+	verify( validate( alarms ) );
+	// LIB_DEBUG_PRINT_BUFFER_LOCAL( STDERR_FILENO, "Ticking preemption done\n" );
 }
 
 void update_preemption( processor * this, __cfa_time_t duration ) {
-	//     assert( THREAD_GETMEM( disableInt ) && THREAD_GETMEM( disableIntCnt ) == 1 );
+	LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO, "Processor : %p updating preemption to %lu\n", this, duration );
+
 	alarm_node_t * alarm = this->preemption_alarm;
+	duration *= 1000;
 
 	// Alarms need to be enabled
@@ -89,4 +127,107 @@
 }
 
+//=============================================================================================
+// Kernel Signal Tools
+//=============================================================================================
+
+LIB_DEBUG_DO( static thread_local void * last_interrupt = 0; )
+
+extern "C" {
+	void disable_interrupts() {
+		__attribute__((unused)) unsigned short new_val = __atomic_add_fetch_2( &disable_preempt_count, 1, __ATOMIC_SEQ_CST );
+		verify( new_val < (unsigned short)65_000 );
+		verify( new_val != (unsigned short) 0 );
+	}
+
+	void enable_interrupts_noRF() {
+		__attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &disable_preempt_count, -1, __ATOMIC_SEQ_CST );
+		verify( prev != (unsigned short) 0 );
+	}
+
+	void enable_interrupts( DEBUG_CTX_PARAM ) {
+		processor * proc   = this_processor;
+		thread_desc * thrd = this_thread;
+		unsigned short prev = __atomic_fetch_add_2( &disable_preempt_count, -1, __ATOMIC_SEQ_CST );
+		verify( prev != (unsigned short) 0 );
+		if( prev == 1 && proc->pending_preemption ) {
+			proc->pending_preemption = false;
+			BlockInternal( thrd );
+		}
+
+		LIB_DEBUG_DO( proc->last_enable = caller; )
+	}
+}
+
+static inline void signal_unblock( int sig ) {
+	sigset_t mask;
+	sigemptyset( &mask );
+	sigaddset( &mask, sig );
+
+	if ( pthread_sigmask( SIG_UNBLOCK, &mask, NULL ) == -1 ) {
+	    abortf( "internal error, pthread_sigmask" );
+	}
+}
+
+static inline void signal_block( int sig ) {
+	sigset_t mask;
+	sigemptyset( &mask );
+	sigaddset( &mask, sig );
+
+	if ( pthread_sigmask( SIG_BLOCK, &mask, NULL ) == -1 ) {
+	    abortf( "internal error, pthread_sigmask" );
+	}
+}
+
+static inline bool preemption_ready() {
+	return disable_preempt_count == 0 && !preemption_in_progress;
+}
+
+static inline void defer_ctxSwitch() {
+	this_processor->pending_preemption = true;
+}
+
+static inline void defer_alarm() {
+	systemProcessor->pending_alarm = true;
+}
+
+static void preempt( processor * this ) {
+	pthread_kill( this->kernel_thread, SIGUSR1 );
+}
+
+static void timeout( thread_desc * this ) {
+	//TODO : implement waking threads
+}
+
+//=============================================================================================
+// Kernel Signal Startup/Shutdown logic
+//=============================================================================================
+
+static pthread_t alarm_thread;
+void * alarm_loop( __attribute__((unused)) void * args );
+
+void kernel_start_preemption() {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Starting preemption\n");
+	__kernel_sigaction( SIGUSR1, sigHandler_ctxSwitch, SA_SIGINFO );
+	// __kernel_sigaction( SIGSEGV, sigHandler_segv     , SA_SIGINFO );
+	// __kernel_sigaction( SIGBUS , sigHandler_segv     , SA_SIGINFO );
+
+	signal_block( SIGALRM );
+
+	pthread_create( &alarm_thread, NULL, alarm_loop, NULL );
+}
+
+void kernel_stop_preemption() {
+	LIB_DEBUG_PRINT_SAFE("Kernel : Preemption stopping\n");
+
+	sigset_t mask;
+	sigfillset( &mask );
+	sigprocmask( SIG_BLOCK, &mask, NULL );
+
+	sigval val = { 1 };
+	pthread_sigqueue( alarm_thread, SIGALRM, val );
+	pthread_join( alarm_thread, NULL );
+	LIB_DEBUG_PRINT_SAFE("Kernel : Preemption stopped\n");
+}
+
 void ?{}( preemption_scope * this, processor * proc ) {
 	(&this->alarm){ proc };
@@ -97,26 +238,21 @@
 
 void ^?{}( preemption_scope * this ) {
+	disable_interrupts();
+
 	update_preemption( this->proc, 0 );
 }
 
 //=============================================================================================
-// Kernel Signal logic
-//=============================================================================================
-
-static inline bool preemption_ready() {
-	return this_processor->disable_preempt_count == 0;
-}
-
-static inline void defer_ctxSwitch() {
-	this_processor->pending_preemption = true;
-}
-
-static inline void defer_alarm() {
-	systemProcessor->pending_alarm = true;
-}
-
-void sigHandler_ctxSwitch( __attribute__((unused)) int sig ) {
+// Kernel Signal Handlers
+//=============================================================================================
+
+void sigHandler_ctxSwitch( __CFA_SIGPARMS__ ) {
+	LIB_DEBUG_DO( last_interrupt = (void *)(cxt->uc_mcontext.gregs[CFA_REG_IP]); )
 	if( preemption_ready() ) {
-		ScheduleInternal( this_processor->current_thread );
+		preemption_in_progress = true;
+		signal_unblock( SIGUSR1 );
+		this_processor->pending_preemption = false;
+		preemption_in_progress = false;
+		BlockInternal( (thread_desc*)this_thread );
 	}
 	else {
@@ -125,19 +261,170 @@
 }
 
-void sigHandler_alarm( __attribute__((unused)) int sig ) {
-	if( try_lock( &systemProcessor->alarm_lock ) ) {
-		tick_preemption();
-		unlock( &systemProcessor->alarm_lock );
-	}
-	else {
-		defer_alarm();
-	}
-}
-
-static void preempt( processor * this ) {
-	pthread_kill( this->kernel_thread, SIGUSR1 );
-}
-
-static void timeout( thread_desc * this ) {
-	//TODO : implement waking threads
-}
+void * alarm_loop( __attribute__((unused)) void * args ) {
+	sigset_t mask;
+	sigemptyset( &mask );
+	sigaddset( &mask, SIGALRM );
+
+	if ( pthread_sigmask( SIG_BLOCK, &mask, NULL ) == -1 ) {
+	    abortf( "internal error, pthread_sigmask" );
+	}
+
+	while( true ) {
+		siginfo_t info;
+		int sig = sigwaitinfo( &mask, &info );
+		if( sig < 0 ) {
+			abortf( "internal error, sigwait" );
+		}
+		else if( sig == SIGALRM )
+		{
+			LIB_DEBUG_PRINT_SAFE("Kernel : Caught signal %d (%d)\n", sig, info.si_value.sival_int );
+			if( info.si_value.sival_int == 0 )
+			{
+				LIB_DEBUG_PRINT_SAFE("Kernel : Preemption thread tick\n");
+				lock( &systemProcessor->alarm_lock DEBUG_CTX2 );
+				tick_preemption();
+				unlock( &systemProcessor->alarm_lock );
+			}
+			else if( info.si_value.sival_int == 1 )
+			{
+				break;
+			}
+		}
+		else
+		{
+			LIB_DEBUG_PRINT_SAFE("Kernel : Unexpected signal %d (%d)\n", sig, info.si_value.sival_int);
+		}
+	}
+
+	LIB_DEBUG_PRINT_SAFE("Kernel : Preemption thread stopping\n");
+	return NULL;
+}
+
+static void __kernel_sigaction( int sig, void (*handler)(__CFA_SIGPARMS__), int flags ) {
+	struct sigaction act;
+
+	act.sa_sigaction = (void (*)(int, siginfo_t *, void *))handler;
+	act.sa_flags = flags;
+
+	if ( sigaction( sig, &act, NULL ) == -1 ) {
+		LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO,
+			" __kernel_sigaction( sig:%d, handler:%p, flags:%d ), problem installing signal handler, error(%d) %s.\n",
+			sig, handler, flags, errno, strerror( errno )
+		);
+		_exit( EXIT_FAILURE );
+	}
+}
+
+typedef void (*sa_handler_t)(int);
+
+static void __kernel_sigdefault( int sig ) {
+	struct sigaction act;
+
+	// act.sa_handler = SIG_DFL;
+	act.sa_flags = 0;
+	sigemptyset( &act.sa_mask );
+
+	if ( sigaction( sig, &act, NULL ) == -1 ) {
+		LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO,
+			" __kernel_sigdefault( sig:%d ), problem reseting signal handler, error(%d) %s.\n",
+			sig, errno, strerror( errno )
+		);
+		_exit( EXIT_FAILURE );
+	}
+}
+
+//=============================================================================================
+// Terminating Signals logic
+//=============================================================================================
+
+LIB_DEBUG_DO(
+	static void __kernel_backtrace( int start ) {
+		// skip first N stack frames
+
+		enum { Frames = 50 };
+		void * array[Frames];
+		int size = backtrace( array, Frames );
+		char ** messages = backtrace_symbols( array, size );
+
+		// find executable name
+		*index( messages[0], '(' ) = '\0';
+		#ifdef __USE_STREAM__
+		serr | "Stack back trace for:" | messages[0] | endl;
+		#else
+		fprintf( stderr, "Stack back trace for: %s\n", messages[0]);
+		#endif
+
+		// skip last 2 stack frames after main
+		for ( int i = start; i < size && messages != NULL; i += 1 ) {
+			char * name = NULL;
+			char * offset_begin = NULL;
+			char * offset_end = NULL;
+
+			for ( char *p = messages[i]; *p; ++p ) {
+				// find parantheses and +offset
+				if ( *p == '(' ) {
+					name = p;
+				}
+				else if ( *p == '+' ) {
+					offset_begin = p;
+				}
+				else if ( *p == ')' ) {
+					offset_end = p;
+					break;
+				}
+			}
+
+			// if line contains symbol print it
+			int frameNo = i - start;
+			if ( name && offset_begin && offset_end && name < offset_begin ) {
+				// delimit strings
+				*name++ = '\0';
+				*offset_begin++ = '\0';
+				*offset_end++ = '\0';
+
+				#ifdef __USE_STREAM__
+				serr 	| "("  | frameNo | ")" | messages[i] | ":"
+					| name | "+" | offset_begin | offset_end | endl;
+				#else
+				fprintf( stderr, "(%i) %s : %s + %s %s\n", frameNo, messages[i], name, offset_begin, offset_end);
+				#endif
+			}
+			// otherwise, print the whole line
+			else {
+				#ifdef __USE_STREAM__
+				serr | "(" | frameNo | ")" | messages[i] | endl;
+				#else
+				fprintf( stderr, "(%i) %s\n", frameNo, messages[i] );
+				#endif
+			}
+		}
+
+		free( messages );
+	}
+)
+
+// void sigHandler_segv( __CFA_SIGPARMS__ ) {
+// 	LIB_DEBUG_DO(
+// 		#ifdef __USE_STREAM__
+// 		serr 	| "*CFA runtime error* program cfa-cpp terminated with"
+// 			| (sig == SIGSEGV ? "segment fault." : "bus error.")
+// 			| endl;
+// 		#else
+// 		fprintf( stderr, "*CFA runtime error* program cfa-cpp terminated with %s\n", sig == SIGSEGV ? "segment fault." : "bus error." );
+// 		#endif
+
+// 		// skip first 2 stack frames
+// 		__kernel_backtrace( 1 );
+// 	)
+// 	exit( EXIT_FAILURE );
+// }
+
+// void sigHandler_abort( __CFA_SIGPARMS__ ) {
+// 	// skip first 6 stack frames
+// 	LIB_DEBUG_DO( __kernel_backtrace( 6 ); )
+
+// 	// reset default signal handler
+// 	__kernel_sigdefault( SIGABRT );
+
+// 	raise( SIGABRT );
+// }
Index: src/libcfa/concurrency/thread
===================================================================
--- src/libcfa/concurrency/thread	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/thread	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -54,5 +54,5 @@
 }
 
-thread_desc * this_thread(void);
+extern volatile thread_local thread_desc * this_thread;
 
 forall( dtype T | is_thread(T) )
Index: src/libcfa/concurrency/thread.c
===================================================================
--- src/libcfa/concurrency/thread.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/concurrency/thread.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -28,5 +28,5 @@
 }
 
-extern thread_local processor * this_processor;
+extern volatile thread_local processor * this_processor;
 
 //-----------------------------------------------------------------------------
@@ -71,18 +71,21 @@
 	coroutine_desc* thrd_c = get_coroutine(this);
 	thread_desc*  thrd_h = get_thread   (this);
-	thrd_c->last = this_coroutine();
-	this_processor->current_coroutine = thrd_c;
+	thrd_c->last = this_coroutine;
 
-	LIB_DEBUG_PRINT_SAFE("Thread start : %p (t %p, c %p)\n", this, thrd_c, thrd_h);
+	// LIB_DEBUG_PRINT_SAFE("Thread start : %p (t %p, c %p)\n", this, thrd_c, thrd_h);
 
+	disable_interrupts();
 	create_stack(&thrd_c->stack, thrd_c->stack.size);
+	this_coroutine = thrd_c;
 	CtxStart(this, CtxInvokeThread);
+	assert( thrd_c->last->stack.context );
 	CtxSwitch( thrd_c->last->stack.context, thrd_c->stack.context );
 
 	ScheduleThread(thrd_h);
+	enable_interrupts( DEBUG_CTX );
 }
 
 void yield( void ) {
-	ScheduleInternal( this_processor->current_thread );
+	BlockInternal( (thread_desc *)this_thread );
 }
 
@@ -95,5 +98,5 @@
 void ThreadCtxSwitch(coroutine_desc* src, coroutine_desc* dst) {
 	// set state of current coroutine to inactive
-	src->state = Inactive;
+	src->state = src->state == Halted ? Halted : Inactive;
 	dst->state = Active;
 
@@ -103,10 +106,11 @@
 	// set new coroutine that the processor is executing
 	// and context switch to it
-	this_processor->current_coroutine = dst;
+	this_coroutine = dst;
+	assert( src->stack.context );
 	CtxSwitch( src->stack.context, dst->stack.context );
-	this_processor->current_coroutine = src;
+	this_coroutine = src;
 
 	// set state of new coroutine to active
-	dst->state = Inactive;
+	dst->state = dst->state == Halted ? Halted : Inactive;
 	src->state = Active;
 }
Index: src/libcfa/exception.c
===================================================================
--- src/libcfa/exception.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/exception.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jun 26 15:13:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Mon Nov 26 15:11:00 2017
-// Update Count     : 0
+// Last Modified On : Tus Jul 11 16:36:00 2017
+// Update Count     : 1
 //
 
@@ -44,5 +44,5 @@
 // RESUMPTION ================================================================
 
-void __cfaehm__throw_resumption(exception * except) {
+void __cfaehm__throw_resume(exception * except) {
 
 	// DEBUG
@@ -65,5 +65,5 @@
 
 	// Fall back to termination:
-	__cfaehm__throw_termination(except);
+	__cfaehm__throw_terminate(except);
 	// TODO: Default handler for resumption.
 }
@@ -111,5 +111,5 @@
 }
 
-void __cfaehm__throw_termination( exception * val ) {
+void __cfaehm__throw_terminate( exception * val ) {
 	// Store the current exception
 	shared_stack.current_exception = *val;
@@ -147,9 +147,9 @@
 
 // Nesting this the other way would probably be faster.
-void __cfaehm__rethrow_termination(void) {
+void __cfaehm__rethrow_terminate(void) {
 	// DEBUG
 	printf("Rethrowing termination exception\n");
 
-	__cfaehm__throw_termination(&shared_stack.current_exception);
+	__cfaehm__throw_terminate(&shared_stack.current_exception);
 }
 
Index: src/libcfa/exception.h
===================================================================
--- src/libcfa/exception.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/exception.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jun 26 15:11:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Mon Nov 26 15:11:00 2017
-// Update Count     : 0
+// Last Modified On : Tus Jul 11 16:31:00 2017
+// Update Count     : 2
 //
 
@@ -22,11 +22,11 @@
 
 #ifdef __CFORALL__
-extern "BuiltinC" {
+extern "C" {
 #endif
 
 // Used in throw statement translation.
-void __cfaehm__throw_termination(exception * except) __attribute__((noreturn));
-void __cfaehm__rethrow_termination() __attribute__((noreturn));
-void __cfaehm__throw_resumption(exception * except);
+void __cfaehm__throw_terminate(exception * except) __attribute__((noreturn));
+void __cfaehm__rethrow_terminate() __attribute__((noreturn));
+void __cfaehm__throw_resume(exception * except);
 
 // Function catches termination exceptions.
Index: src/libcfa/fstream
===================================================================
--- src/libcfa/fstream	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/fstream	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,22 +10,21 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul  1 16:37:53 2017
-// Update Count     : 112
+// Last Modified On : Fri Jul  7 08:32:38 2017
+// Update Count     : 117
 //
 
-#ifndef __FSTREAM_H__
-#define __FSTREAM_H__
+#pragma once
 
 #include "iostream"
 
-enum { separateSize = 16 };
+enum { sepSize = 16 };
 struct ofstream {
 	void * file;
 	_Bool sepDefault;
 	_Bool sepOnOff;
-	_Bool lastSepOn;
+	_Bool sawNL;
 	const char * sepCur;
-	char separator[separateSize];
-	char tupleSeparator[separateSize];
+	char separator[sepSize];
+	char tupleSeparator[sepSize];
 }; // ofstream
 
@@ -36,5 +35,6 @@
 const char * sepGetCur( ofstream * );
 void sepSetCur( ofstream *, const char * );
-_Bool lastSepOn( ofstream * );
+_Bool getNL( ofstream * );
+void setNL( ofstream *, _Bool );
 
 // public
@@ -75,6 +75,4 @@
 extern ifstream * sin;
 
-#endif // __FSTREAM_H__
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/fstream.c
===================================================================
--- src/libcfa/fstream.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/fstream.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul  1 16:37:54 2017
-// Update Count     : 242
+// Last Modified On : Thu Jul  6 18:38:25 2017
+// Update Count     : 251
 //
 
@@ -33,5 +33,4 @@
 	this->sepDefault = sepDefault;
 	this->sepOnOff = sepOnOff;
-	this->lastSepOn = false;
 	sepSet( this, separator );
 	sepSetCur( this, sepGet( this ) );
@@ -40,19 +39,19 @@
 
 // private
-_Bool lastSepOn( ofstream * os ) { return os->lastSepOn; }
-_Bool sepPrt( ofstream * os ) { os->lastSepOn = false; return os->sepOnOff; }
+_Bool sepPrt( ofstream * os ) { setNL( os, false ); return os->sepOnOff; }
 void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; }
 void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; }
 const char * sepGetCur( ofstream * os ) { return os->sepCur; }
 void sepSetCur( ofstream * os, const char * sepCur ) { os->sepCur = sepCur; }
+_Bool getNL( ofstream * os ) { return os->sawNL; }
+void setNL( ofstream * os, _Bool state ) { os->sawNL = state; }
 
 // public
-void sepOn( ofstream * os ) { os->lastSepOn = true; os->sepOnOff = true; }
-void sepOff( ofstream * os ) { os->lastSepOn = false; os->sepOnOff = 0; }
+void sepOn( ofstream * os ) { os->sepOnOff = ! getNL( os ); }
+void sepOff( ofstream * os ) { os->sepOnOff = false; }
 
 _Bool sepDisable( ofstream *os ) {
 	_Bool temp = os->sepDefault;
 	os->sepDefault = false;
-	os->lastSepOn = false;
 	sepReset( os );
 	return temp;
@@ -69,6 +68,6 @@
 void sepSet( ofstream * os, const char * s ) {
 	assert( s );
-	strncpy( os->separator, s, separateSize - 1 );
-	os->separator[separateSize - 1] = '\0';
+	strncpy( os->separator, s, sepSize - 1 );
+	os->separator[sepSize - 1] = '\0';
 } // sepSet
 
@@ -76,6 +75,6 @@
 void sepSetTuple( ofstream * os, const char * s ) {
 	assert( s );
-	strncpy( os->tupleSeparator, s, separateSize - 1 );
-	os->tupleSeparator[separateSize - 1] = '\0';
+	strncpy( os->tupleSeparator, s, sepSize - 1 );
+	os->tupleSeparator[sepSize - 1] = '\0';
 } // sepSet
 
@@ -153,11 +152,11 @@
 
 void open( ifstream * is, const char * name, const char * mode ) {
-	FILE *t = fopen( name, mode );
-	if ( t == 0 ) {										// do not change unless successful
+	FILE *file = fopen( name, mode );
+	if ( file == 0 ) {									// do not change unless successful
 		fprintf( stderr, IO_MSG "open input file \"%s\", ", name );
 		perror( 0 );
 		exit( EXIT_FAILURE );
 	} // if
-	is->file = t;
+	is->file = file;
 } // open
 
Index: src/libcfa/gmp
===================================================================
--- src/libcfa/gmp	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/gmp	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,9 +10,11 @@
 // Created On       : Tue Apr 19 08:43:43 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May 27 09:55:51 2017
-// Update Count     : 14
+// Last Modified On : Fri Jul  7 09:33:20 2017
+// Update Count     : 15
 // 
 
 // https://gmplib.org/gmp-man-6.1.1.pdf
+
+#pragma once
 
 #include <gmp.h>										// GNU multi-precise integers
Index: src/libcfa/iostream
===================================================================
--- src/libcfa/iostream	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/iostream	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,10 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul  2 08:42:56 2017
-// Update Count     : 110
+// Last Modified On : Fri Jul  7 08:35:59 2017
+// Update Count     : 118
 //
 
-#ifndef __IOSTREAM_H__
-#define __IOSTREAM_H__
+#pragma once
 
 #include "iterator"
@@ -26,5 +25,6 @@
 	const char * sepGetCur( ostype * );					// get current separator string
 	void sepSetCur( ostype *, const char * );			// set current separator string
-	_Bool lastSepOn( ostype * );						// last manipulator is setOn (context sensitive)
+	_Bool getNL( ostype * );							// check newline
+	void setNL( ostype *, _Bool );						// saw newline
 	// public
 	void sepOn( ostype * );								// turn separator state on
@@ -82,4 +82,6 @@
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
 forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
+forall( dtype ostype | ostream( ostype ) ) ostype * sep( ostype * );
+forall( dtype ostype | ostream( ostype ) ) ostype * sepTuple( ostype * );
 forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
 forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
@@ -137,6 +139,4 @@
 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC );
 
-#endif // __IOSTREAM_H
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/iostream.c
===================================================================
--- src/libcfa/iostream.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/iostream.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul  2 08:54:02 2017
-// Update Count     : 375
+// Last Modified On : Thu Jul  6 18:14:17 2017
+// Update Count     : 396
 //
 
@@ -18,4 +18,5 @@
 extern "C" {
 #include <stdio.h>
+#include <stdbool.h>									// true/false
 #include <string.h>										// strlen
 #include <float.h>										// DBL_DIG, LDBL_DIG
@@ -24,6 +25,7 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, char c ) {
-	fmt( os, "%c", c );
+ostype * ?|?( ostype * os, char ch ) {
+	fmt( os, "%c", ch );
+	if ( ch == '\n' ) setNL( os, true );
 	sepOff( os );
 	return os;
@@ -180,6 +182,6 @@
 
 	// last character IS spacing or opening punctuation => turn off separator for next item
-	unsigned int len = strlen( cp ), posn = len - 1;
-	ch = cp[posn];										// must make unsigned
+	size_t len = strlen( cp );
+	ch = cp[len - 1];									// must make unsigned
 	if ( sepPrt( os ) && mask[ ch ] != Open && mask[ ch ] != OpenClose ) {
 		sepOn( os );
@@ -187,4 +189,5 @@
 		sepOff( os );
 	} // if
+	if ( ch == '\n' ) setNL( os, true );				// check *AFTER* sepPrt call above as it resets NL flag
 	return write( os, cp, len );
 } // ?|?
@@ -216,7 +219,19 @@
 
 forall( dtype ostype | ostream( ostype ) )
+ostype * sep( ostype * os ) {
+	os | sepGet( os );
+	return os;
+} // sep
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * sepTuple( ostype * os ) {
+	os | sepGetTuple( os );
+	return os;
+} // sepTuple
+
+forall( dtype ostype | ostream( ostype ) )
 ostype * endl( ostype * os ) {
-	if ( lastSepOn( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	os | '\n';
+	setNL( os, true );
 	flush( os );
 	sepOff( os );										// prepare for next line
Index: src/libcfa/iterator
===================================================================
--- src/libcfa/iterator	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/iterator	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,10 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar  2 18:06:05 2016
-// Update Count     : 9
+// Last Modified On : Fri Jul  7 08:37:25 2017
+// Update Count     : 10
 //
 
-#ifndef ITERATOR_H
-#define ITERATOR_H
+#pragma once
 
 // An iterator can be used to traverse a data structure.
@@ -39,10 +38,8 @@
 
 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
-void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
+void for_each( iterator_type begin, iterator_type end, void (* func)( elt_type ) );
 
 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
-void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
-
-#endif // ITERATOR_H
+void for_each_reverse( iterator_type begin, iterator_type end, void (* func)( elt_type ) );
 
 // Local Variables: //
Index: src/libcfa/iterator.c
===================================================================
--- src/libcfa/iterator.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/iterator.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar  2 18:08:11 2016
-// Update Count     : 27
+// Last Modified On : Fri Jul  7 08:38:23 2017
+// Update Count     : 28
 //
 
@@ -17,17 +17,17 @@
 
 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
-void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
+void for_each( iterator_type begin, iterator_type end, void (* func)( elt_type ) ) {
 	for ( iterator_type i = begin; i != end; ++i ) {
 		func( *i );
-	}
-}
+	} // for
+} // for_each
 
 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
-void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
+void for_each_reverse( iterator_type begin, iterator_type end, void (* func)( elt_type ) ) {
 	for ( iterator_type i = end; i != begin; ) {
 		--i;
 		func( *i );
-	}
-}
+	} // for
+} // for_each_reverse
 
 // Local Variables: //
Index: src/libcfa/libhdr/libalign.h
===================================================================
--- src/libcfa/libhdr/libalign.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/libhdr/libalign.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -1,3 +1,3 @@
-//                              -*- Mode: C++ -*- 
+//                              -*- Mode: C++ -*-
 //
 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
@@ -18,13 +18,13 @@
 // Free Software  Foundation; either  version 2.1 of  the License, or  (at your
 // option) any later version.
-// 
+//
 // This library is distributed in the  hope that it will be useful, but WITHOUT
 // ANY  WARRANTY;  without even  the  implied  warranty  of MERCHANTABILITY  or
 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 // for more details.
-// 
+//
 // You should  have received a  copy of the  GNU Lesser General  Public License
 // along  with this library.
-// 
+//
 
 
@@ -33,6 +33,7 @@
 
 #include "assert"
+#include <stdbool.h>
 
-// Minimum size used to align memory boundaries for memory allocations. 
+// Minimum size used to align memory boundaries for memory allocations.
 #define libAlign() (sizeof(double))
 
Index: src/libcfa/libhdr/libdebug.h
===================================================================
--- src/libcfa/libhdr/libdebug.h	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/libhdr/libdebug.h	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -18,9 +18,17 @@
 
 #ifdef __CFA_DEBUG__
-	#define LIB_DEBUG_DO(x) x
-	#define LIB_NO_DEBUG_DO(x) ((void)0)
+	#define LIB_DEBUG_DO(...) __VA_ARGS__
+	#define LIB_NO_DEBUG_DO(...)
+	#define DEBUG_CTX __PRETTY_FUNCTION__
+	#define DEBUG_CTX2 , __PRETTY_FUNCTION__
+	#define DEBUG_CTX_PARAM const char * caller
+	#define DEBUG_CTX_PARAM2 , const char * caller
 #else
-	#define LIB_DEBUG_DO(x) ((void)0)
-	#define LIB_NO_DEBUG_DO(x) x      
+	#define LIB_DEBUG_DO(...)
+	#define LIB_NO_DEBUG_DO(...) __VA_ARGS__
+	#define DEBUG_CTX
+	#define DEBUG_CTX2
+	#define DEBUG_CTX_PARAM
+	#define DEBUG_CTX_PARAM2
 #endif
 
@@ -51,17 +59,21 @@
 
 #ifdef __CFA_DEBUG_PRINT__
-      #define LIB_DEBUG_WRITE( fd, buffer, len )  __lib_debug_write( fd, buffer, len )
-      #define LIB_DEBUG_ACQUIRE()                 __lib_debug_acquire()
-      #define LIB_DEBUG_RELEASE()                 __lib_debug_release()
-      #define LIB_DEBUG_PRINT_SAFE(...)           __lib_debug_print_safe   (__VA_ARGS__)
-      #define LIB_DEBUG_PRINT_NOLOCK(...)         __lib_debug_print_nolock (__VA_ARGS__)
-      #define LIB_DEBUG_PRINT_BUFFER(...)         __lib_debug_print_buffer (__VA_ARGS__)
+	#define LIB_DEBUG_WRITE( fd, buffer, len )     __lib_debug_write( fd, buffer, len )
+	#define LIB_DEBUG_ACQUIRE()                    __lib_debug_acquire()
+	#define LIB_DEBUG_RELEASE()                    __lib_debug_release()
+	#define LIB_DEBUG_PRINT_SAFE(...)              __lib_debug_print_safe   (__VA_ARGS__)
+	#define LIB_DEBUG_PRINT_NOLOCK(...)            __lib_debug_print_nolock (__VA_ARGS__)
+	#define LIB_DEBUG_PRINT_BUFFER(...)            __lib_debug_print_buffer (__VA_ARGS__)
+	#define LIB_DEBUG_PRINT_BUFFER_DECL(fd, ...)   char text[256]; int len = snprintf( text, 256, __VA_ARGS__ ); __lib_debug_write( fd, text, len );
+	#define LIB_DEBUG_PRINT_BUFFER_LOCAL(fd, ...)  len = snprintf( text, 256, __VA_ARGS__ ); __lib_debug_write( fd, text, len );
 #else
-      #define LIB_DEBUG_WRITE(...)          ((void)0)
-      #define LIB_DEBUG_ACQUIRE()           ((void)0)
-      #define LIB_DEBUG_RELEASE()           ((void)0)
-      #define LIB_DEBUG_PRINT_SAFE(...)     ((void)0)
-      #define LIB_DEBUG_PRINT_NOLOCK(...)   ((void)0)
-      #define LIB_DEBUG_PRINT_BUFFER(...)   ((void)0)
+	#define LIB_DEBUG_WRITE(...)               ((void)0)
+	#define LIB_DEBUG_ACQUIRE()                ((void)0)
+	#define LIB_DEBUG_RELEASE()                ((void)0)
+	#define LIB_DEBUG_PRINT_SAFE(...)          ((void)0)
+	#define LIB_DEBUG_PRINT_NOLOCK(...)        ((void)0)
+	#define LIB_DEBUG_PRINT_BUFFER(...)        ((void)0)
+	#define LIB_DEBUG_PRINT_BUFFER_DECL(...)   ((void)0)
+	#define LIB_DEBUG_PRINT_BUFFER_LOCAL(...)  ((void)0)
 #endif
 
Index: src/libcfa/limits
===================================================================
--- src/libcfa/limits	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/limits	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,10 +10,9 @@
 // Created On       : Wed Apr  6 18:06:52 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Apr  6 21:08:16 2016
-// Update Count     : 6
+// Last Modified On : Fri Jul  7 09:33:57 2017
+// Update Count     : 7
 //
 
-#ifndef LIMITS_H
-#define LIMITS_H
+#pragma once
 
 // Integral Constants
@@ -110,6 +109,4 @@
 extern const long _Complex _1_SQRT_2;					// 1 / sqrt(2)
 
-#endif // LIMITS_H
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/math
===================================================================
--- src/libcfa/math	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/math	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,10 +10,9 @@
 // Created On       : Mon Apr 18 23:37:04 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 24 17:40:39 2017
-// Update Count     : 60
-//
-
-#ifndef MATH_H
-#define MATH_H
+// Last Modified On : Fri Jul  7 09:34:15 2017
+// Update Count     : 61
+//
+
+#pragma once
 
 extern "C" {
@@ -345,6 +344,4 @@
 long double scalbln( long double, long int );
 
-#endif // MATH_H
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/rational
===================================================================
--- src/libcfa/rational	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/rational	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -12,10 +12,9 @@
 // Created On       : Wed Apr  6 17:56:25 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 15 21:30:12 2017
-// Update Count     : 90
+// Last Modified On : Fri Jul  7 09:34:33 2017
+// Update Count     : 93
 //
 
-#ifndef RATIONAL_H
-#define RATIONAL_H
+#pragma once
 
 #include "iostream"
@@ -47,5 +46,5 @@
 // implementation
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 struct Rational {
 	RationalImpl numerator, denominator;				// invariant: denominator > 0
@@ -54,93 +53,92 @@
 // constructors
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, RationalImpl n );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, RationalImpl n, RationalImpl d );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, zero_t );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, one_t );
 
-// getter for numerator/denominator
+// numerator/denominator getter
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl numerator( Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl denominator( Rational(RationalImpl) r );
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 [ RationalImpl, RationalImpl ] ?=?( * [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src );
 
-// setter for numerator/denominator
+// numerator/denominator setter
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d );
 
 // comparison
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
 // arithmetic
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) +?( Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) -?( Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
 // conversion
-forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )
+forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )
 double widen( Rational(RationalImpl) r );
-forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl );  RationalImpl convert( double );} )
+forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl );  RationalImpl convert( double );} )
 Rational(RationalImpl) narrow( double f, RationalImpl md );
 
 // I/O
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 forall( dtype istype | istream( istype ) | { istype * ?|?( istype *, RationalImpl * ); } )
 istype * ?|?( istype *, Rational(RationalImpl) * );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 forall( dtype ostype | ostream( ostype ) | { ostype * ?|?( ostype *, RationalImpl ); } )
 ostype * ?|?( ostype *, Rational(RationalImpl ) );
-
-#endif // RATIONAL_H
 
 // Local Variables: //
Index: src/libcfa/rational.c
===================================================================
--- src/libcfa/rational.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/rational.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
 // Created On       : Wed Apr  6 17:54:28 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 15 21:29:23 2017
-// Update Count     : 149
+// Last Modified On : Tue May 16 18:35:36 2017
+// Update Count     : 150
 // 
 
@@ -22,5 +22,5 @@
 // Calculate greatest common denominator of two numbers, the first of which may be negative. Used to reduce rationals.
 // alternative: https://en.wikipedia.org/wiki/Binary_GCD_algorithm
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 static RationalImpl gcd( RationalImpl a, RationalImpl b ) {
 	for ( ;; ) {										// Euclid's algorithm
@@ -33,5 +33,5 @@
 } // gcd
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 static RationalImpl simplify( RationalImpl * n, RationalImpl * d ) {
 	if ( *d == (RationalImpl){0} ) {
@@ -46,15 +46,15 @@
 // constructors
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r ) {
 	r{ (RationalImpl){0}, (RationalImpl){1} };
 } // rational
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, RationalImpl n ) {
 	r{ n, (RationalImpl){1} };
 } // rational
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, RationalImpl n, RationalImpl d ) {
 	RationalImpl t = simplify( &n, &d );				// simplify
@@ -66,15 +66,15 @@
 // getter for numerator/denominator
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl numerator( Rational(RationalImpl) r ) {
 	return r.numerator;
 } // numerator
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl denominator( Rational(RationalImpl) r ) {
 	return r.denominator;
 } // denominator
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 [ RationalImpl, RationalImpl ] ?=?( * [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src ) {
 	return *dest = src.[ numerator, denominator ];
@@ -83,5 +83,5 @@
 // setter for numerator/denominator
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n ) {
 	RationalImpl prev = r.numerator;
@@ -92,5 +92,5 @@
 } // numerator
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d ) {
 	RationalImpl prev = r.denominator;
@@ -104,30 +104,30 @@
 // comparison
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return l.numerator * r.denominator == l.denominator * r.numerator;
 } // ?==?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return ! ( l == r );
 } // ?!=?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return l.numerator * r.denominator < l.denominator * r.numerator;
 } // ?<?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return l.numerator * r.denominator <= l.denominator * r.numerator;
 } // ?<=?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return ! ( l <= r );
 } // ?>?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return ! ( l < r );
@@ -137,5 +137,5 @@
 // arithmetic
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) +?( Rational(RationalImpl) r ) {
 	Rational(RationalImpl) t = { r.numerator, r.denominator };
@@ -143,5 +143,5 @@
 } // +?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) -?( Rational(RationalImpl) r ) {
 	Rational(RationalImpl) t = { -r.numerator, r.denominator };
@@ -149,5 +149,5 @@
 } // -?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	if ( l.denominator == r.denominator ) {				// special case
@@ -160,5 +160,5 @@
 } // ?+?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	if ( l.denominator == r.denominator ) {				// special case
@@ -171,5 +171,5 @@
 } // ?-?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	Rational(RationalImpl) t = { l.numerator * r.numerator, l.denominator * r.denominator };
@@ -177,5 +177,5 @@
 } // ?*?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	if ( r.numerator < (RationalImpl){0} ) {
@@ -190,5 +190,5 @@
 // conversion
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )
+forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )
 double widen( Rational(RationalImpl) r ) {
  	return convert( r.numerator ) / convert( r.denominator );
@@ -196,5 +196,5 @@
 
 // http://www.ics.uci.edu/~eppstein/numth/frap.c
-forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); RationalImpl convert( double ); } )
+forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); RationalImpl convert( double ); } )
 Rational(RationalImpl) narrow( double f, RationalImpl md ) {
 	if ( md <= (RationalImpl){1} ) {					// maximum fractional digits too small?
@@ -227,5 +227,5 @@
 // I/O
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 forall( dtype istype | istream( istype ) | { istype * ?|?( istype *, RationalImpl * ); } )
 istype * ?|?( istype * is, Rational(RationalImpl) * r ) {
@@ -238,5 +238,5 @@
 } // ?|?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 forall( dtype ostype | ostream( ostype ) | { ostype * ?|?( ostype *, RationalImpl ); } )
 ostype * ?|?( ostype * os, Rational(RationalImpl ) r ) {
Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/libcfa/stdlib	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,10 +10,9 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun  2 15:51:03 2017
-// Update Count     : 218
-//
-
-#ifndef STDLIB_H
-#define STDLIB_H
+// Last Modified On : Fri Jul  7 09:34:49 2017
+// Update Count     : 219
+//
+
+#pragma once
 
 //---------------------------------------
@@ -232,6 +231,4 @@
 void swap( T * t1, T * t2 );
 
-#endif // STDLIB_H
-
 // Local Variables: //
 // mode: c //
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/main.cc	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,43 +10,52 @@
 // Author           : Richard C. Bilson
 // Created On       : Fri May 15 23:12:02 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 29 12:46:50 2017
-// Update Count     : 441
+// Last Modified By : Andrew Beach
+// Last Modified On : Fri Jul  7 11:13:00 2017
+// Update Count     : 442
 //
 
-#include <iostream>
-#include <fstream>
-#include <signal.h>										// signal
-#include <getopt.h>										// getopt
-#include <execinfo.h>									// backtrace, backtrace_symbols
-#include <cxxabi.h>										// __cxa_demangle
-#include <cstring>										// index
-
-using namespace std;
-
-#include "Parser/ParserTypes.h"
-#include "Parser/TypedefTable.h"
-#include "GenPoly/Lvalue.h"
-#include "GenPoly/Specialize.h"
-#include "GenPoly/Box.h"
-#include "GenPoly/CopyParams.h"
-#include "GenPoly/InstantiateGeneric.h"
-#include "Concurrency/Keywords.h"
-#include "CodeGen/Generate.h"
-#include "CodeGen/FixNames.h"
-#include "CodeGen/FixMain.h"
-#include "CodeTools/DeclStats.h"
-#include "CodeTools/TrackLoc.h"
-#include "ControlStruct/Mutate.h"
-#include "ControlStruct/ExceptTranslate.h"
-#include "SymTab/Validate.h"
-#include "ResolvExpr/AlternativePrinter.h"
-#include "ResolvExpr/Resolver.h"
-#include "MakeLibCfa.h"
-#include "InitTweak/GenInit.h"
-#include "InitTweak/FixInit.h"
-#include "Common/UnimplementedError.h"
-#include "../config.h"
-#include "Tuples/Tuples.h"
+#include <cassert>                          // for assertf
+#include <cxxabi.h>                         // for __cxa_demangle
+#include <execinfo.h>                       // for backtrace, backtrace_symbols
+#include <getopt.h>                         // for no_argument, optind, geto...
+#include <signal.h>                         // for signal, SIGABRT, SIGSEGV
+#include <cstdio>                           // for fopen, FILE, fclose, stdin
+#include <cstdlib>                          // for exit, free, abort, EXIT_F...
+#include <cstring>                          // for index
+#include <fstream>                          // for ofstream
+#include <iostream>                         // for operator<<, basic_ostream
+#include <iterator>                         // for back_inserter
+#include <list>                             // for list
+#include <string>                           // for operator<<, allocator
+
+#include "../config.h"                      // for CFA_LIBDIR
+#include "CodeGen/FixMain.h"                // for FixMain
+#include "CodeGen/FixNames.h"               // for fixNames
+#include "CodeGen/Generate.h"               // for generate
+#include "CodeTools/DeclStats.h"            // for printDeclStats
+#include "CodeTools/TrackLoc.h"             // for fillLocations
+#include "Common/CompilerError.h"           // for CompilerError
+#include "Common/SemanticError.h"           // for SemanticError
+#include "Common/UnimplementedError.h"      // for UnimplementedError
+#include "Common/utility.h"                 // for deleteAll, filter, printAll
+#include "ControlStruct/ExceptTranslate.h"  // for translateEHM
+#include "ControlStruct/Mutate.h"           // for mutate
+#include "GenPoly/Box.h"                    // for box
+#include "GenPoly/CopyParams.h"             // for copyParams
+#include "GenPoly/InstantiateGeneric.h"     // for instantiateGeneric
+#include "GenPoly/Lvalue.h"                 // for convertLvalue
+#include "GenPoly/Specialize.h"             // for convertSpecializations
+#include "InitTweak/FixInit.h"              // for fix
+#include "InitTweak/GenInit.h"              // for genInit
+#include "MakeLibCfa.h"                     // for makeLibCfa
+#include "Parser/LinkageSpec.h"             // for Spec, Cforall, Intrinsic
+#include "Parser/ParseNode.h"               // for DeclarationNode, buildList
+#include "Parser/TypedefTable.h"            // for TypedefTable
+#include "ResolvExpr/AlternativePrinter.h"  // for AlternativePrinter
+#include "ResolvExpr/Resolver.h"            // for resolve
+#include "SymTab/Validate.h"                // for validate
+#include "SynTree/Declaration.h"            // for Declaration
+#include "SynTree/Visitor.h"                // for acceptAll
+#include "Tuples/Tuples.h"                  // for expandMemberTuples, expan...
 
 using namespace std;
@@ -206,5 +215,5 @@
 				FILE * builtins = fopen( libcfap | treep ? "../prelude/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
 				assertf( builtins, "cannot open builtins.cf\n" );
-				parse( builtins, LinkageSpec::Builtin );
+				parse( builtins, LinkageSpec::BuiltinCFA );
 			} // if
 		} // if
Index: src/prelude/Makefile.in
===================================================================
--- src/prelude/Makefile.in	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/prelude/Makefile.in	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -294,7 +294,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/prelude/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/prelude/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/prelude/Makefile
+	  $(AUTOMAKE) --foreign src/prelude/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
Index: src/tests/.expect/32/math.txt
===================================================================
--- src/tests/.expect/32/math.txt	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/.expect/32/math.txt	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -22,5 +22,5 @@
 cos:0.540302 0.54030230586814 0.540302305868139717 0.83373-0.988898i 0.833730025131149-0.988897705762865i 0.833730025131149049-0.988897705762865096i
 tan:1.55741 1.5574077246549 1.55740772465490223 0.271753+1.08392i 0.271752585319512+1.08392332733869i 0.271752585319511717+1.08392332733869454i
-asin:1.5708 1.5707963267949 1.57079632679489662 0.66624+1.06128i 0.666239432492515+1.06127506190504i 0.666239432492515255+1.06127506190503565i
+asin:1.5708 1.5707963267949 1.57079632679489662 0.666239+1.06128i 0.666239432492515+1.06127506190504i 0.666239432492515255+1.06127506190503565i
 acos:0 0 0 0.904557-1.06128i 0.904556894302381-1.06127506190504i 0.904556894302381364-1.06127506190503565i
 atan:0.785398 0.785398163397448 0.78539816339744831 1.01722+0.402359i 1.01722196789785+0.402359478108525i 1.01722196789785137+0.402359478108525094i
Index: src/tests/.expect/concurrent/preempt.txt
===================================================================
--- src/tests/.expect/concurrent/preempt.txt	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
+++ src/tests/.expect/concurrent/preempt.txt	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -0,0 +1,10 @@
+100
+200
+300
+400
+500
+600
+700
+800
+900
+1000
Index: src/tests/.expect/concurrent/sched-int-disjoint.txt
===================================================================
--- src/tests/.expect/concurrent/sched-int-disjoint.txt	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/.expect/concurrent/sched-int-disjoint.txt	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -9,93 +9,3 @@
 9000
 10000
-11000
-12000
-13000
-14000
-15000
-16000
-17000
-18000
-19000
-20000
-21000
-22000
-23000
-24000
-25000
-26000
-27000
-28000
-29000
-30000
-31000
-32000
-33000
-34000
-35000
-36000
-37000
-38000
-39000
-40000
-41000
-42000
-43000
-44000
-45000
-46000
-47000
-48000
-49000
-50000
-51000
-52000
-53000
-54000
-55000
-56000
-57000
-58000
-59000
-60000
-61000
-62000
-63000
-64000
-65000
-66000
-67000
-68000
-69000
-70000
-71000
-72000
-73000
-74000
-75000
-76000
-77000
-78000
-79000
-80000
-81000
-82000
-83000
-84000
-85000
-86000
-87000
-88000
-89000
-90000
-91000
-92000
-93000
-94000
-95000
-96000
-97000
-98000
-99000
-100000
 All waiter done
Index: src/tests/.expect/io.txt
===================================================================
--- src/tests/.expect/io.txt	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/.expect/io.txt	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -4,11 +4,11 @@
 123
 
-opening delimiters 
+opening delimiters
 x (1 x [2 x {3 x =4 x $5 x £6 x ¥7 x ¡8 x ¿9 x «10
 
-closing delimiters 
-1, x 2. x 3; x 4! x 5? x 6% x 7¢ x 8» x 9) x 10] x 11} x 
+closing delimiters
+1, x 2. x 3; x 4! x 5? x 6% x 7¢ x 8» x 9) x 10] x 11} x
 
-opening/closing delimiters 
+opening/closing delimiters
 x`1`x'2'x"3"x:4:x 5 x	6	x
 7
@@ -19,12 +19,12 @@
 x
 10
-x 
+x
 
-override opening/closing delimiters 
+override opening/closing delimiters
 x ( 1 ) x 2 , x 3 :x: 4
 
-input bacis types 
+input bacis types
 
-output basic types 
+output basic types
 A 
 1 2 3 4 5 6 7 8
@@ -32,32 +32,38 @@
 1.1+2.3i 1.1-2.3i 1.1-2.3i
 
-tuples 
-1, 2, 3 3, 4, 5
+tuples
+1, 2, 3 4, 5, 6
 
-toggle separator 
+toggle separator
 1.11.21.3
 1.1+2.3i1.1-2.3i1.1-2.3i
- abcxyz 
-abcxyz 
+1.1+2.3i 1.1-2.3i1.1-2.3i
+1.1+2.3i 1.1-2.3i 1.1-2.3i
+1.1+2.3i1.1-2.3i 1.1-2.3i
+abcxyz
+abcxyz
 
-change separator 
-from "  "to " , $"
+change separator
+from " " to ", $"
 1.1, $1.2, $1.3
 1.1+2.3i, $1.1-2.3i, $1.1-2.3i
-abc, $xyz, $
-1, 2, 3, $3, 4, 5
+abc, $xyz
+1, 2, 3, $4, 5, 6
 
-from ", $"to " "
+from ", $" to " "
 1.1 1.2 1.3
 1.1+2.3i 1.1-2.3i 1.1-2.3i
-abc xyz 
-1, 2, 3 3, 4, 5
+abc xyz
+1, 2, 3 4, 5, 6
 
- 1 2 3 
+check sepOn/sepOff
+1 2 3
 12 3
- 1 2 3
 1 2 3
- 1 2 3
+1 2 3
 
+1 2 3
+
+check enable/disable
 123
 1 23
@@ -65,14 +71,14 @@
 123
 1 2 3
-123 
+123
 1 2 3
 
-1 2 3 3 4 5 " "
-1, 2, 3 3, 4, 5 ", "
-1, 2, 3 3, 4, 5
+1 2 3 4 5 6 " "
+1, 2, 3 4, 5, 6 " "
+1, 2, 3 4, 5, 6
 
 3, 4, a, 7.2
 3, 4, a, 7.2
 3 4 a 7.2
- 3 4 a 7.234a7.23 4 a 7.2
+3 4 a 7.234a7.23 4 a 7.2
 3-4-a-7.2^3^4^3-4-a-7.2
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/Makefile.am	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -29,6 +29,17 @@
 
 # applies to both programs
-EXTRA_FLAGS =
-BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ ${EXTRA_FLAGS}
+DEBUG_FLAGS =
+
+BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@
+if !BUILD_DEBUG
+BUILD_FLAGS += -nodebug
+else
+if !BUILD_RELEASE
+BUILD_FLAGS += -debug
+else
+BUILD_FLAGS += ${DEBUG_FLAGS}
+endif
+endif
+
 TEST_FLAGS = $(if $(test), 2> .err/${@}.log, )
 AM_CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS}
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/Makefile.in	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -92,4 +92,7 @@
 host_triplet = @host@
 @BUILD_CONCURRENCY_TRUE@am__append_1 = coroutine thread monitor
+@BUILD_DEBUG_FALSE@am__append_2 = -nodebug
+@BUILD_DEBUG_TRUE@@BUILD_RELEASE_FALSE@am__append_3 = -debug
+@BUILD_DEBUG_TRUE@@BUILD_RELEASE_TRUE@am__append_4 = ${DEBUG_FLAGS}
 EXTRA_PROGRAMS = fstream_test$(EXEEXT) vector_test$(EXEEXT) \
 	avl_test$(EXEEXT)
@@ -320,6 +323,7 @@
 
 # applies to both programs
-EXTRA_FLAGS = 
-BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ ${EXTRA_FLAGS}
+DEBUG_FLAGS = 
+BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ \
+	$(am__append_2) $(am__append_3) $(am__append_4)
 TEST_FLAGS = $(if $(test), 2> .err/${@}.log, )
 AM_CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS}
@@ -343,7 +347,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tests/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/tests/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/tests/Makefile
+	  $(AUTOMAKE) --foreign src/tests/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
Index: src/tests/io.c
===================================================================
--- src/tests/io.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/io.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar  2 16:56:02 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul  2 09:40:58 2017
-// Update Count     : 68
+// Last Modified On : Thu Jul  6 23:26:12 2017
+// Update Count     : 78
 // 
 
@@ -104,5 +104,5 @@
 
 	sout | "tuples" | endl;
-	[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 3, [ 4, 5 ] ];
+	[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 4, [ 5, 6 ] ];
 	sout | t1 | t2 | endl;								// print tuple
 	sout | endl;
@@ -110,13 +110,16 @@
 	sout | "toggle separator" | endl;
 	sout | f | "" | d | "" | ld | endl					// floating point without separator
-		| sepDisable | fc | dc | ldc | sepEnable | endl	// complex without separator
-		| sepOn | s1 | sepOff | s2 | endl				// local separator removal
-		| s1 | "" | s2 | endl;							// C string without separator
+		| sepDisable | fc | dc | ldc | endl				// complex without separator
+		| fc | sepOn | dc | ldc | endl					// local separator add
+		| sepEnable | fc | dc | ldc | endl				// complex with separator
+		| fc | sepOff | dc | ldc | endl					// local separator removal
+		| s1 | sepOff | s2 | endl						// local separator removal
+		| s1 | "" | s2 | endl;							// local separator removal
 	sout | endl;
 
 	sout | "change separator" | endl;
-	sout | "from \" " | sepGet( sout ) | "\"";
+	sout | "from \"" | sep | "\"";
 	sepSet( sout, ", $" );								// change separator, maximum of 15 characters
-	sout | "to \" " | sepGet( sout ) | "\"" | endl;
+	sout | " to \"" | sep | "\"" | endl;
 	sout | f | d | ld | endl
 		| fc | dc | ldc | endl
@@ -124,7 +127,7 @@
 		| t1 | t2 | endl;								// print tuple
 	sout | endl;
-	sout | "from \"" | sepGet( sout ) | "\"";
+	sout | "from \"" | sep | "\" ";
 	sepSet( sout, " " );								// restore separator
-	sout | "to \"" | sepGet( sout ) | "\"" | endl;
+	sout | "to \"" | sep | "\"" | endl;
 	sout | f | d | ld | endl
 		| fc | dc | ldc | endl
@@ -133,11 +136,13 @@
 	sout | endl;
 
-	sout | sepOn | 1 | 2 | 3 | sepOn | endl;			// separator at start/end of line
+	sout | "check sepOn/sepOff" | endl;
+	sout | sepOn | 1 | 2 | 3 | sepOn | endl;			// no separator at start/end of line
 	sout | 1 | sepOff | 2 | 3 | endl;					// locally turn off implicit separator
-	sout | sepOn | 1 | 2 | 3 | sepOn | sepOff | endl;	// separator at start of line
-	sout | 1 | 2 | 3 | endl | sepOn;					// separator at start of next line
+	sout | sepOn | sepOn | 1 | 2 | 3 | sepOn | sepOff | sepOn | '\n'; // no separator at start/end of line
+	sout | 1 | 2 | 3 | "\n\n" | sepOn;					// no separator at start of next line
 	sout | 1 | 2 | 3 | endl;
 	sout | endl;
 
+	sout | "check enable/disable" | endl;
 	sout | sepDisable | 1 | 2 | 3 | endl;				// globally turn off implicit separation
 	sout | 1 | sepOn | 2 | 3 | endl;					// locally turn on implicit separator
@@ -149,8 +154,11 @@
 	sout | endl;
 
+//	sout | fmt( d, "%8.3f" ) || endl;
+//	sout | endl;
+
 	sepSetTuple( sout, " " );							// set tuple separator from ", " to " "
-	sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
+	sout | t1 | t2 | " \"" | sep | "\"" | endl;
 	sepSetTuple( sout, ", " );							// reset tuple separator to ", "
-	sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
+	sout | t1 | t2 | " \"" | sep | "\"" | endl;
 	sout | t1 | t2 | endl;								// print tuple
 	sout | endl;
Index: src/tests/preempt.c
===================================================================
--- src/tests/preempt.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
+++ src/tests/preempt.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -0,0 +1,42 @@
+#include <kernel>
+#include <thread>
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10_000ul
+#endif
+
+unsigned int default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+static volatile int counter = 0;
+
+thread worker_t {
+	int value;
+};
+
+void ?{}( worker_t * this, int value ) {
+	this->value = value;
+}
+
+void main(worker_t * this) {
+	while(counter < 1000) {
+		if( (counter % 7) == this->value ) {
+			int next = __atomic_add_fetch_4(&counter, 1, __ATOMIC_SEQ_CST);
+			if( (next % 100) == 0 ) printf("%d\n", next);
+		}
+	}
+}
+
+int main(int argc, char* argv[]) {
+	processor p;
+	{
+		worker_t w0 = 0;
+		worker_t w1 = 1;
+		worker_t w2 = 2;
+		worker_t w3 = 3;
+		worker_t w4 = 4;
+		worker_t w5 = 5;
+		worker_t w6 = 6;
+	}
+}
Index: src/tests/preempt_longrun/Makefile.am
===================================================================
--- src/tests/preempt_longrun/Makefile.am	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/preempt_longrun/Makefile.am	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,12 +10,12 @@
 ## Author           : Thierry Delisle
 ## Created On       : Fri Jun 16 10:57:34 2017
-## Last Modified By : 
-## Last Modified On : 
+## Last Modified By :
+## Last Modified On :
 ## Update Count     : 0
 ###############################################################################
 
 repeats=10
-max_time=30
-preempt=10_000ul
+max_time=600
+preempt=1_000ul
 
 REPEAT = ${abs_top_srcdir}/tools/repeat -s
@@ -25,5 +25,5 @@
 CC = @CFA_BINDIR@/@CFA_NAME@
 
-TESTS = barge block create disjoint processor stack wait yield
+TESTS = barge block create disjoint enter enter3 processor stack wait yield
 
 .INTERMEDIATE: ${TESTS}
Index: src/tests/preempt_longrun/Makefile.in
===================================================================
--- src/tests/preempt_longrun/Makefile.in	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/preempt_longrun/Makefile.in	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -449,9 +449,9 @@
 top_srcdir = @top_srcdir@
 repeats = 10
-max_time = 30
-preempt = 10_000ul
+max_time = 600
+preempt = 1_000ul
 REPEAT = ${abs_top_srcdir}/tools/repeat -s
 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -DPREEMPTION_RATE=${preempt}
-TESTS = barge block create disjoint processor stack wait yield
+TESTS = barge block create disjoint enter enter3 processor stack wait yield
 all: all-am
 
@@ -467,7 +467,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tests/preempt_longrun/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/tests/preempt_longrun/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/tests/preempt_longrun/Makefile
+	  $(AUTOMAKE) --foreign src/tests/preempt_longrun/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -663,4 +663,18 @@
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+enter.log: enter
+	@p='enter'; \
+	b='enter'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+enter3.log: enter3
+	@p='enter3'; \
+	b='enter3'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 processor.log: processor
 	@p='processor'; \
Index: src/tests/preempt_longrun/create.c
===================================================================
--- src/tests/preempt_longrun/create.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/preempt_longrun/create.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,11 +10,12 @@
 }
 
-thread Worker {};
+thread worker_t {};
 
-void main(Worker * this) {}
+void main(worker_t * this) {}
 
 int main(int argc, char* argv[]) {
-	for(int i = 0; i < 100_000ul; i++) {
-		Worker w;
+	processor p;
+	for(int i = 0; i < 10_000ul; i++) {
+		worker_t w[7];
 	}
 }
Index: src/tests/preempt_longrun/enter.c
===================================================================
--- src/tests/preempt_longrun/enter.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
+++ src/tests/preempt_longrun/enter.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -0,0 +1,40 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+
+#undef N
+static const unsigned long N  = 70_000ul;
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10_000ul
+#endif
+
+unsigned int default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+monitor mon_t {};
+
+mon_t mon;
+
+void foo( mon_t * mutex this ) {}
+
+thread worker_t {};
+
+void main( worker_t * this ) {
+	for( unsigned long i = 0; i < N; i++ ) {
+		foo( &mon );
+	}
+}
+
+extern "C" {
+static worker_t * workers;
+}
+
+int main(int argc, char * argv[] ) {
+	processor p;
+	{
+		worker_t w[7];
+		workers = w;
+	}
+}
Index: src/tests/preempt_longrun/enter3.c
===================================================================
--- src/tests/preempt_longrun/enter3.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
+++ src/tests/preempt_longrun/enter3.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -0,0 +1,40 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+
+#undef N
+static const unsigned long N  = 50_000ul;
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10_000ul
+#endif
+
+unsigned int default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+monitor mon_t {};
+
+mon_t mon1, mon2, mon3;
+
+void foo( mon_t * mutex a, mon_t * mutex b, mon_t * mutex c ) {}
+
+thread worker_t {};
+
+void main( worker_t * this ) {
+	for( unsigned long i = 0; i < N; i++ ) {
+		foo( &mon1, &mon2, &mon3 );
+	}
+}
+
+extern "C" {
+static worker_t * workers;
+}
+
+int main(int argc, char * argv[] ) {
+	processor p;
+	{
+		worker_t w[7];
+		workers = w;
+	}
+}
Index: src/tests/preempt_longrun/processor.c
===================================================================
--- src/tests/preempt_longrun/processor.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/preempt_longrun/processor.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,10 +10,10 @@
 }
 
-thread Worker {};
+thread worker_t {};
 
-void main(Worker * this) {}
+void main(worker_t * this) {}
 
 int main(int argc, char* argv[]) {
-	for(int i = 0; i < 100_000ul; i++) {
+	for(int i = 0; i < 10_000ul; i++) {
 		processor p;
 	}
Index: src/tests/preempt_longrun/stack.c
===================================================================
--- src/tests/preempt_longrun/stack.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/preempt_longrun/stack.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -12,15 +12,15 @@
 }
 
-thread Worker {};
+thread worker_t {};
 
-void main(Worker * this) {
+void main(worker_t * this) {
 	volatile long p = 5_021_609ul;
 	volatile long a = 326_417ul;
 	volatile long n = 1l;
-	for (volatile long i = 0; i < p; i++) { 
-		n *= a; 
-		n %= p; 
+	for (volatile long i = 0; i < p; i++) {
+		n *= a;
+		n %= p;
 	}
-		
+
 	if( n != a ) {
 		abort();
@@ -28,8 +28,13 @@
 }
 
+extern "C" {
+static worker_t * workers;
+}
+
 int main(int argc, char* argv[]) {
 	processor p;
 	{
-		Worker w[7];
+		worker_t w[7];
+		workers = w;
 	}
 }
Index: src/tests/preempt_longrun/yield.c
===================================================================
--- src/tests/preempt_longrun/yield.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/preempt_longrun/yield.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -10,10 +10,14 @@
 }
 
-thread Worker {};
+thread worker_t {};
 
-void main(Worker * this) {
-	for(int i = 0; i < 100_000ul; i++) {
+void main(worker_t * this) {
+	for(int i = 0; i < 325_000ul; i++) {
 		yield();
 	}
+}
+
+extern "C" {
+static worker_t * workers;
 }
 
@@ -21,5 +25,6 @@
 	processor p;
 	{
-		Worker w[7];
+		worker_t w[7];
+		workers = w;
 	}
 }
Index: src/tests/sched-int-block.c
===================================================================
--- src/tests/sched-int-block.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/sched-int-block.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -6,5 +6,5 @@
 
 #ifndef N
-#define N 100_000
+#define N 10_000
 #endif
 
@@ -31,5 +31,5 @@
 //------------------------------------------------------------------------------
 void wait_op( global_data_t * mutex a, global_data_t * mutex b, unsigned i ) {
-	wait( &cond, (uintptr_t)this_thread() );
+	wait( &cond, (uintptr_t)this_thread );
 
 	yield( ((unsigned)rand48()) % 10 );
@@ -40,5 +40,5 @@
 	}
 
-	a->last_thread = b->last_thread = this_thread();
+	a->last_thread = b->last_thread = this_thread;
 
 	yield( ((unsigned)rand48()) % 10 );
@@ -56,5 +56,5 @@
 	yield( ((unsigned)rand48()) % 10 );
 
-	a->last_thread = b->last_thread = a->last_signaller = b->last_signaller = this_thread();
+	a->last_thread = b->last_thread = a->last_signaller = b->last_signaller = this_thread;
 
 	if( !is_empty( &cond ) ) {
@@ -86,5 +86,5 @@
 //------------------------------------------------------------------------------
 void barge_op( global_data_t * mutex a ) {
-	a->last_thread = this_thread();
+	a->last_thread = this_thread;
 }
 
Index: src/tests/sched-int-disjoint.c
===================================================================
--- src/tests/sched-int-disjoint.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/sched-int-disjoint.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -5,5 +5,5 @@
 
 #ifndef N
-#define N 100_000
+#define N 10_000
 #endif
 
@@ -42,7 +42,7 @@
 
 void main( Barger * this ) {
-	while( !all_done ) { 
+	while( !all_done ) {
 		barge( &data );
-		yield(); 
+		yield();
 	}
 }
@@ -53,5 +53,5 @@
 	wait( &cond );
 	if( d->state != SIGNAL ) {
-		sout | "ERROR barging!" | endl; 
+		sout | "ERROR barging!" | endl;
 	}
 
@@ -85,5 +85,5 @@
 	bool running = data.counter < N && data.counter > 0;
 	if( data.state != SIGNAL && running ) {
-		sout | "ERROR Eager signal" | data.state | endl; 
+		sout | "ERROR Eager signal" | data.state | endl;
 	}
 }
@@ -92,7 +92,7 @@
 
 void main( Signaller * this ) {
-	while( !all_done ) { 
+	while( !all_done ) {
 		logic( &mut );
-		yield(); 
+		yield();
 	}
 }
@@ -111,4 +111,4 @@
 		sout | "All waiter done" | endl;
 		all_done = true;
-	}	
+	}
 }
Index: src/tests/sched-int-wait.c
===================================================================
--- src/tests/sched-int-wait.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/sched-int-wait.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -50,14 +50,14 @@
 		unsigned action = (unsigned)rand48() % 4;
 		switch( action ) {
-			case 0: 
+			case 0:
 				signal( &condABC, &globalA, &globalB, &globalC );
 				break;
-			case 1: 
+			case 1:
 				signal( &condAB , &globalA, &globalB );
 				break;
-			case 2: 
+			case 2:
 				signal( &condBC , &globalB, &globalC );
 				break;
-			case 3: 
+			case 3:
 				signal( &condAC , &globalA, &globalC );
 				break;
@@ -67,5 +67,5 @@
 		}
 		yield();
-	}	
+	}
 }
 
Index: src/tests/test.py
===================================================================
--- src/tests/test.py	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/test.py	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -166,5 +166,5 @@
 
 	# build, skipping to next test on error
-	make_ret, _ = sh("""%s test=yes EXTRA_FLAGS="%s" %s 2> %s 1> /dev/null""" % (make_cmd, options, test.name, out_file), dry_run)
+	make_ret, _ = sh("""%s test=yes DEBUG_FLAGS="%s" %s 2> %s 1> /dev/null""" % (make_cmd, options, test.name, out_file), dry_run)
 
 	retcode = 0
@@ -202,5 +202,5 @@
 			error = myfile.read()
 
-		
+
 	# clean the executable
 	sh("rm -f %s > /dev/null 2>&1" % test.name, dry_run)
Index: src/tests/thread.c
===================================================================
--- src/tests/thread.c	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ src/tests/thread.c	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -4,15 +4,9 @@
 #include <thread>
 
-// thread First;
-// void main(First* this);
+thread First  { semaphore* lock; };
+thread Second { semaphore* lock; };
 
-// thread Second;
-// void main(Second* this);
-
-thread First  { signal_once* lock; };
-thread Second { signal_once* lock; };
-
-void ?{}( First * this, signal_once* lock ) { this->lock = lock; }
-void ?{}( Second * this, signal_once* lock ) { this->lock = lock; }
+void ?{}( First * this, semaphore* lock ) { this->lock = lock; }
+void ?{}( Second * this, semaphore* lock ) { this->lock = lock; }
 
 void main(First* this) {
@@ -21,9 +15,9 @@
 		yield();
 	}
-	signal(this->lock);
+	V(this->lock);
 }
 
 void main(Second* this) {
-	wait(this->lock);
+	P(this->lock);
 	for(int i = 0; i < 10; i++) {
 		sout | "Second : Suspend No." | i + 1 | endl;
@@ -34,5 +28,5 @@
 
 int main(int argc, char* argv[]) {
-	signal_once lock;
+	semaphore lock = { 0 };
 	sout | "User main begin" | endl;
 	{
Index: tools/prettyprinter/Makefile.in
===================================================================
--- tools/prettyprinter/Makefile.in	(revision 55a68c3dc9290e2bb34da101039e435d02bc9dea)
+++ tools/prettyprinter/Makefile.in	(revision 3d4b23fa9ef416e3543e652102009137f340d4e5)
@@ -350,7 +350,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/prettyprinter/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tools/prettyprinter/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu tools/prettyprinter/Makefile
+	  $(AUTOMAKE) --foreign tools/prettyprinter/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
