| 1 |
mmeineke |
1122 |
%% |
| 2 |
|
|
%% This is file `lstdoc.sty', |
| 3 |
|
|
%% generated with the docstrip utility. |
| 4 |
|
|
%% |
| 5 |
|
|
%% The original source files were: |
| 6 |
|
|
%% |
| 7 |
|
|
%% listings.dtx (with options: `doc') |
| 8 |
|
|
%% |
| 9 |
|
|
%% Please read the software license in listings.dtx or listings.pdf. |
| 10 |
|
|
%% |
| 11 |
|
|
%% (w)(c) 1996 -- 2003 Carsten Heinz and/or any other author |
| 12 |
|
|
%% listed elsewhere in this file. |
| 13 |
|
|
%% |
| 14 |
|
|
%% This file is distributed under the terms of the LaTeX Project Public |
| 15 |
|
|
%% License from CTAN archives in directory macros/latex/base/lppl.txt. |
| 16 |
|
|
%% Either version 1.0 or, at your option, any later version. |
| 17 |
|
|
%% |
| 18 |
|
|
%% Permission is granted to modify this file. If your changes are of |
| 19 |
|
|
%% general interest, please contact the address below. |
| 20 |
|
|
%% |
| 21 |
|
|
%% Send comments and ideas on the package, error reports and additional |
| 22 |
|
|
%% programming languages to <cheinz@gmx.de>. |
| 23 |
|
|
%% |
| 24 |
|
|
\def\filedate{2003/06/21} |
| 25 |
|
|
\def\fileversion{1.1} |
| 26 |
|
|
\ProvidesPackage{lstdoc} |
| 27 |
|
|
[\filedate\space\fileversion\space(Carsten Heinz)] |
| 28 |
|
|
\let\lstdoc@currversion\fileversion |
| 29 |
|
|
\RequirePackage[writefile]{listings}[2002/04/01] |
| 30 |
|
|
\newif\iffancyvrb \IfFileExists{fancyvrb.sty}{\fancyvrbtrue}{} |
| 31 |
|
|
\newif\ifcolor \IfFileExists{color.sty}{\colortrue}{} |
| 32 |
|
|
\newif\ifhyper \@ifundefined{pdfoutput}{} |
| 33 |
|
|
{\IfFileExists{hyperref.sty}{\hypertrue}{}} |
| 34 |
|
|
\newif\ifalgorithmic \IfFileExists{algorithmic.sty}{\algorithmictrue}{} |
| 35 |
|
|
\newif\iflgrind \IfFileExists{lgrind.sty}{\lgrindtrue}{} |
| 36 |
|
|
\iffancyvrb \RequirePackage{fancyvrb}\fi |
| 37 |
|
|
\ifhyper \RequirePackage[colorlinks]{hyperref}\else |
| 38 |
|
|
\def\href#1{\texttt}\fi |
| 39 |
|
|
\ifcolor \RequirePackage{color}\fi |
| 40 |
|
|
\ifalgorithmic \RequirePackage{algorithmic}\fi |
| 41 |
|
|
\iflgrind \RequirePackage{lgrind}\fi |
| 42 |
|
|
\RequirePackage{nameref} |
| 43 |
|
|
\renewcommand\ref{\protect\T@ref} |
| 44 |
|
|
\renewcommand\pageref{\protect\T@pageref} |
| 45 |
|
|
\def\lst@BeginRemark#1{% |
| 46 |
|
|
\begin{quote}\topsep0pt\let\small\footnotesize\small#1:} |
| 47 |
|
|
\def\lst@EndRemark{\end{quote}} |
| 48 |
|
|
\newenvironment{TODO} |
| 49 |
|
|
{\lst@BeginRemark{To do}}{\lst@EndRemark} |
| 50 |
|
|
\newenvironment{ALTERNATIVE} |
| 51 |
|
|
{\lst@BeginRemark{Alternative}}{\lst@EndRemark} |
| 52 |
|
|
\newenvironment{REMOVED} |
| 53 |
|
|
{\lst@BeginRemark{Removed}}{\lst@EndRemark} |
| 54 |
|
|
\newenvironment{OLDDEF} |
| 55 |
|
|
{\lst@BeginRemark{Old definition}}{\lst@EndRemark} |
| 56 |
|
|
\def\advise{\par\list\labeladvise |
| 57 |
|
|
{\advance\linewidth\@totalleftmargin |
| 58 |
|
|
\@totalleftmargin\z@ |
| 59 |
|
|
\@listi |
| 60 |
|
|
\let\small\footnotesize \small\sffamily |
| 61 |
|
|
\parsep \z@ \@plus\z@ \@minus\z@ |
| 62 |
|
|
\topsep6\p@ \@plus1\p@\@minus2\p@ |
| 63 |
|
|
\def\makelabel##1{\hss\llap{##1}}}} |
| 64 |
|
|
\let\endadvise\endlist |
| 65 |
|
|
\def\advisespace{\hbox{}\qquad} |
| 66 |
|
|
\def\labeladvise{$\to$} |
| 67 |
|
|
\newenvironment{syntax} |
| 68 |
|
|
{\list{}{\itemindent-\leftmargin |
| 69 |
|
|
\def\makelabel##1{\hss\lst@syntaxlabel##1,,,,\relax}}} |
| 70 |
|
|
{\endlist} |
| 71 |
|
|
\def\lst@syntaxlabel#1,#2,#3,#4\relax{% |
| 72 |
|
|
\llap{\scriptsize\itshape#3}% |
| 73 |
|
|
\def\lst@temp{#2}% |
| 74 |
|
|
\expandafter\lst@syntaxlabel@\meaning\lst@temp\relax |
| 75 |
|
|
\rlap{\hskip-\itemindent\hskip\itemsep\hskip\linewidth |
| 76 |
|
|
\llap{\ttfamily\lst@temp}\hskip\labelwidth |
| 77 |
|
|
\def\lst@temp{#1}% |
| 78 |
|
|
\ifx\lst@temp\lstdoc@currversion#1\fi}} |
| 79 |
|
|
\def\lst@syntaxlabel@#1>#2\relax |
| 80 |
|
|
{\edef\lst@temp{\zap@space#2 \@empty}} |
| 81 |
|
|
\newcommand*\syntaxnewline{\newline\hbox{}\kern\labelwidth} |
| 82 |
|
|
\newcommand*\syntaxor{\qquad or\qquad} |
| 83 |
|
|
\newcommand*\syntaxbreak |
| 84 |
|
|
{\hfill\kern0pt\discretionary{}{\kern\labelwidth}{}} |
| 85 |
|
|
\let\syntaxfill\hfill |
| 86 |
|
|
\def\alternative#1{\lst@true \alternative@#1,\relax,} |
| 87 |
|
|
\def\alternative@#1,{% |
| 88 |
|
|
\ifx\relax#1\@empty |
| 89 |
|
|
\expandafter\@gobble |
| 90 |
|
|
\else |
| 91 |
|
|
\ifx\@empty#1\@empty\else |
| 92 |
|
|
\lst@if \lst@false \else $\vert$\fi |
| 93 |
|
|
\textup{\texttt{#1}}% |
| 94 |
|
|
\fi |
| 95 |
|
|
\fi |
| 96 |
|
|
\alternative@} |
| 97 |
|
|
\long\def\m@cro@#1#2#3{\endgroup \topsep\MacroTopsep \trivlist |
| 98 |
|
|
\edef\saved@macroname{\string#3}% |
| 99 |
|
|
\def\makelabel##1{\llap{##1}}% |
| 100 |
|
|
\if@inlabel |
| 101 |
|
|
\let\@tempa\@empty \count@\macro@cnt |
| 102 |
|
|
\loop \ifnum\count@>\z@ |
| 103 |
|
|
\edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat |
| 104 |
|
|
\edef\makelabel##1{\llap{\vtop to\baselineskip |
| 105 |
|
|
{\@tempa\hbox{##1}\vss}}}% |
| 106 |
|
|
\advance \macro@cnt \@ne |
| 107 |
|
|
\else \macro@cnt\@ne \fi |
| 108 |
|
|
\edef\@tempa{\noexpand\item[% |
| 109 |
|
|
#1% |
| 110 |
|
|
\noexpand\PrintMacroName |
| 111 |
|
|
\else |
| 112 |
|
|
\expandafter\noexpand\csname Print#2Name\endcsname % MODIFIED |
| 113 |
|
|
\fi |
| 114 |
|
|
{\string#3}]}% |
| 115 |
|
|
\@tempa |
| 116 |
|
|
\global\advance\c@CodelineNo\@ne |
| 117 |
|
|
#1% |
| 118 |
|
|
\SpecialMainIndex{#3}\nobreak |
| 119 |
|
|
\DoNotIndex{#3}% |
| 120 |
|
|
\else |
| 121 |
|
|
\csname SpecialMain#2Index\endcsname{#3}\nobreak % MODIFIED |
| 122 |
|
|
\fi |
| 123 |
|
|
\global\advance\c@CodelineNo\m@ne |
| 124 |
|
|
\ignorespaces} |
| 125 |
|
|
\def\macro{\begingroup |
| 126 |
|
|
\catcode`\\12 |
| 127 |
|
|
\MakePrivateLetters \m@cro@ \iftrue {Macro}}% MODIFIED |
| 128 |
|
|
\def\environment{\begingroup |
| 129 |
|
|
\catcode`\\12 |
| 130 |
|
|
\MakePrivateLetters \m@cro@ \iffalse {Env}}% MODIFIED |
| 131 |
|
|
\def\newdocenvironment#1#2#3#4{% |
| 132 |
|
|
\@namedef{#1}{#3\begingroup \catcode`\\12\relax |
| 133 |
|
|
\MakePrivateLetters \m@cro@ \iffalse {#2}}% |
| 134 |
|
|
\@namedef{end#1}{#4\endmacro}% |
| 135 |
|
|
\@ifundefined{Print#2Name}{\expandafter |
| 136 |
|
|
\let\csname Print#2Name\endcsname\PrintMacroName}{}% |
| 137 |
|
|
\@ifundefined{SpecialMain#2Index}{\expandafter |
| 138 |
|
|
\let\csname SpecialMain#2Index\endcsname\SpecialMainIndex}{}} |
| 139 |
|
|
\newdocenvironment{aspect}{Aspect}{}{} |
| 140 |
|
|
\def\PrintAspectName#1{} |
| 141 |
|
|
\def\SpecialMainAspectIndex#1{% |
| 142 |
|
|
\@bsphack |
| 143 |
|
|
\index{aspects:\levelchar\protect\aspectname{#1}\encapchar main}% |
| 144 |
|
|
\@esphack} |
| 145 |
|
|
\newdocenvironment{lstkey}{Key}{}{} |
| 146 |
|
|
\def\PrintKeyName#1{\strut\keyname{#1}\ } |
| 147 |
|
|
\def\SpecialMainKeyIndex#1{% |
| 148 |
|
|
\@bsphack |
| 149 |
|
|
\index{keys\levelchar\protect\keyname{#1}\encapchar main}% |
| 150 |
|
|
\@esphack} |
| 151 |
|
|
\newcounter{argcount} |
| 152 |
|
|
\def\labelargcount{\texttt{\#\arabic{argcount}}\hskip\labelsep$=$} |
| 153 |
|
|
\def\macroargs{\list\labelargcount |
| 154 |
|
|
{\usecounter{argcount}\leftmargin=2\leftmargin |
| 155 |
|
|
\parsep \z@ \@plus\z@ \@minus\z@ |
| 156 |
|
|
\topsep4\p@ \@plus\p@ \@minus2\p@ |
| 157 |
|
|
\itemsep\z@ \@plus\z@ \@minus\z@ |
| 158 |
|
|
\def\makelabel##1{\hss\llap{##1}}}} |
| 159 |
|
|
\def\endmacroargs{\endlist\@endparenv} |
| 160 |
|
|
\lst@RequireAspects{writefile} |
| 161 |
|
|
\newbox\lst@samplebox |
| 162 |
|
|
\lstnewenvironment{lstsample}[3][] |
| 163 |
|
|
{\global\let\lst@intname\@empty |
| 164 |
|
|
\gdef\lst@sample{#2}% |
| 165 |
|
|
\setbox\lst@samplebox=\hbox\bgroup |
| 166 |
|
|
\setkeys{lst}{language={},style={},tabsize=4,gobble=5,% |
| 167 |
|
|
basicstyle=\small\ttfamily,basewidth=0.51em,point={#1}} |
| 168 |
|
|
#3% |
| 169 |
|
|
\lst@BeginAlsoWriteFile{\jobname.tmp}} |
| 170 |
|
|
{\lst@EndWriteFile\egroup |
| 171 |
|
|
\ifdim \wd\lst@samplebox>.5\linewidth |
| 172 |
|
|
\begin{center}% |
| 173 |
|
|
\hbox to\linewidth{\box\lst@samplebox\hss}% |
| 174 |
|
|
\end{center}% |
| 175 |
|
|
\lst@sampleInput |
| 176 |
|
|
\else |
| 177 |
|
|
\begin{center}% |
| 178 |
|
|
\begin{minipage}{0.45\linewidth}\lst@sampleInput\end{minipage}% |
| 179 |
|
|
\qquad |
| 180 |
|
|
\begin{minipage}{0.45\linewidth}% |
| 181 |
|
|
\hbox to\linewidth{\box\lst@samplebox\hss}% |
| 182 |
|
|
\end{minipage}% |
| 183 |
|
|
\end{center}% |
| 184 |
|
|
\fi} |
| 185 |
|
|
\lst@InstallKeywords{p}{point}{pointstyle}\relax{keywordstyle}{}ld |
| 186 |
|
|
\lstnewenvironment{lstxsample}[1][] |
| 187 |
|
|
{\begingroup |
| 188 |
|
|
\setkeys{lst}{belowskip=-\medskipamount,language={},style={},% |
| 189 |
|
|
tabsize=4,gobble=5,basicstyle=\small\ttfamily,% |
| 190 |
|
|
basewidth=0.51em,point={#1}} |
| 191 |
|
|
\lst@BeginAlsoWriteFile{\jobname.tmp}} |
| 192 |
|
|
{\endgroup |
| 193 |
|
|
\endgroup} |
| 194 |
|
|
\def\lst@sampleInput{% |
| 195 |
|
|
\MakePercentComment\catcode`\^^M=10\relax |
| 196 |
|
|
\small\lst@sample |
| 197 |
|
|
{\setkeys{lst}{SelectCharTable=\lst@ReplaceInput{\^\^I}% |
| 198 |
|
|
{\lst@ProcessTabulator}}% |
| 199 |
|
|
\leavevmode \input{\jobname.tmp}}\MakePercentIgnore} |
| 200 |
|
|
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% |
| 201 |
|
|
{1.25ex \@plus1ex \@minus.2ex}% |
| 202 |
|
|
{-1em}% |
| 203 |
|
|
{\normalfont\normalsize\bfseries}} |
| 204 |
|
|
\def\lstref#1{\emph{\ref{#1} \nameref{#1}}} |
| 205 |
|
|
\def\@part[#1]#2{\addcontentsline{toc}{part}{#1}% |
| 206 |
|
|
{\parindent\z@ \raggedright \interlinepenalty\@M |
| 207 |
|
|
\normalfont \huge \bfseries #2\markboth{}{}\par}% |
| 208 |
|
|
\nobreak\vskip 3ex\@afterheading} |
| 209 |
|
|
\renewcommand*\l@section[2]{% |
| 210 |
|
|
\addpenalty\@secpenalty |
| 211 |
|
|
\addvspace{.25em \@plus\p@}% |
| 212 |
|
|
\setlength\@tempdima{1.5em}% |
| 213 |
|
|
\begingroup |
| 214 |
|
|
\parindent \z@ \rightskip \@pnumwidth |
| 215 |
|
|
\parfillskip -\@pnumwidth |
| 216 |
|
|
\leavevmode |
| 217 |
|
|
\advance\leftskip\@tempdima |
| 218 |
|
|
\hskip -\leftskip |
| 219 |
|
|
#1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par |
| 220 |
|
|
\endgroup} |
| 221 |
|
|
\renewcommand*\l@subsection{\@dottedtocline{2}{0pt}{2.3em}} |
| 222 |
|
|
\renewcommand*\l@subsubsection{\@dottedtocline{3}{0pt}{3.2em}} |
| 223 |
|
|
\newcommand\ikeyname[1]{% |
| 224 |
|
|
\lstkeyindex{#1}{}% |
| 225 |
|
|
\lstaspectindex{#1}{}% |
| 226 |
|
|
\keyname{#1}} |
| 227 |
|
|
\newcommand\ekeyname[1]{% |
| 228 |
|
|
\@bsphack |
| 229 |
|
|
\lstkeyindex{#1}{\encapchar usage}% |
| 230 |
|
|
\lstaspectindex{#1}{\encapchar usage}% |
| 231 |
|
|
\@esphack} |
| 232 |
|
|
\newcommand\rkeyname[1]{% |
| 233 |
|
|
\@bsphack |
| 234 |
|
|
\lstkeyindex{#1}{\encapchar main}% |
| 235 |
|
|
\lstaspectindex{#1}{\encapchar main}% |
| 236 |
|
|
\@esphack{\rstyle\keyname{#1}}} |
| 237 |
|
|
\newcommand\icmdname[1]{% |
| 238 |
|
|
\@bsphack |
| 239 |
|
|
\lstaspectindex{#1}{}% |
| 240 |
|
|
\@esphack\texttt{\string#1}} |
| 241 |
|
|
\newcommand\rcmdname[1]{% |
| 242 |
|
|
\@bsphack |
| 243 |
|
|
\lstaspectindex{#1}{\encapchar main}% |
| 244 |
|
|
\@esphack\texttt{\rstyle\string#1}} |
| 245 |
|
|
\def\lstaspectindex#1#2{% |
| 246 |
|
|
\global\@namedef{lstkandc@\string#1}{}% |
| 247 |
|
|
\@ifundefined{lstisaspect@\string#1} |
| 248 |
|
|
{\index{unknown\levelchar |
| 249 |
|
|
\protect\texttt{\protect\string\string#1}#2}}% |
| 250 |
|
|
{\index{\@nameuse{lstisaspect@\string#1}\levelchar |
| 251 |
|
|
\protect\texttt{\protect\string\string#1}#2}}% |
| 252 |
|
|
} |
| 253 |
|
|
\def\lstkeyindex#1#2{% |
| 254 |
|
|
} |
| 255 |
|
|
\def\lstisaspect[#1]#2{% |
| 256 |
|
|
\global\@namedef{lstaspect@#1}{#2}% |
| 257 |
|
|
\lst@AddTo\lst@allkeysandcmds{,#2}% |
| 258 |
|
|
\@for\lst@temp:=#2\do |
| 259 |
|
|
{\ifx\@empty\lst@temp\else |
| 260 |
|
|
\global\@namedef{lstisaspect@\lst@temp}{#1}% |
| 261 |
|
|
\fi}} |
| 262 |
|
|
\gdef\lst@allkeysandcmds{} |
| 263 |
|
|
\def\lstprintaspectkeysandcmds#1{% |
| 264 |
|
|
\lst@true |
| 265 |
|
|
\expandafter\@for\expandafter\lst@temp |
| 266 |
|
|
\expandafter:\expandafter=\csname lstaspect@#1\endcsname\do |
| 267 |
|
|
{\lst@if\lst@false\else, \fi \texttt{\lst@temp}}} |
| 268 |
|
|
\def\lstcheckreference{% |
| 269 |
|
|
\@for\lst@temp:=\lst@allkeysandcmds\do |
| 270 |
|
|
{\ifx\lst@temp\@empty\else |
| 271 |
|
|
\@ifundefined{lstkandc@\lst@temp} |
| 272 |
|
|
{\typeout{\lst@temp\space not in reference guide?}}{}% |
| 273 |
|
|
\fi}} |
| 274 |
|
|
\newcommand*\lst{\texttt{lst}} |
| 275 |
|
|
\newcommand*\Cpp{C\texttt{++}} |
| 276 |
|
|
\let\keyname\texttt |
| 277 |
|
|
\let\keyvalue\texttt |
| 278 |
|
|
\let\hookname\texttt |
| 279 |
|
|
\newcommand*\aspectname[1]{{\normalfont\sffamily#1}} |
| 280 |
|
|
\DeclareRobustCommand\packagename[1]{% |
| 281 |
|
|
{\leavevmode\text@command{#1}% |
| 282 |
|
|
\switchfontfamily\sfdefault\rmdefault |
| 283 |
|
|
\check@icl #1\check@icr |
| 284 |
|
|
\expandafter}}% |
| 285 |
|
|
\renewcommand\packagename[1]{{\normalfont\sffamily#1}} |
| 286 |
|
|
\def\switchfontfamily#1#2{% |
| 287 |
|
|
\begingroup\xdef\@gtempa{#1}\endgroup |
| 288 |
|
|
\ifx\f@family\@gtempa\fontfamily#2% |
| 289 |
|
|
\else\fontfamily#1\fi |
| 290 |
|
|
\selectfont} |
| 291 |
|
|
\ifcolor |
| 292 |
|
|
\definecolor{darkgreen}{rgb}{0,0.5,0} |
| 293 |
|
|
\def\rstyle{\color{darkgreen}} |
| 294 |
|
|
\else |
| 295 |
|
|
\let\rstyle\empty |
| 296 |
|
|
\fi |
| 297 |
|
|
\gdef\lst@emails{} |
| 298 |
|
|
\newcommand*\lstthanks[2] |
| 299 |
|
|
{#1\lst@AddTo\lst@emails{,#1,<#2>}% |
| 300 |
|
|
\ifx\@empty#2\@empty\typeout{Missing email for #1}\fi} |
| 301 |
|
|
\newcommand*\lsthelper[3] |
| 302 |
|
|
{{\let~\ #1}% |
| 303 |
|
|
\lst@IfOneOf#1\relax\lst@emails |
| 304 |
|
|
{}{\typeout{^^JWarning: Unknown helper #1.^^J}}} |
| 305 |
|
|
\lstdefinelanguage[doc]{Pascal}{% |
| 306 |
|
|
morekeywords={alfa,and,array,begin,boolean,byte,case,char,const,div,% |
| 307 |
|
|
do,downto,else,end,false,file,for,function,get,goto,if,in,% |
| 308 |
|
|
integer,label,maxint,mod,new,not,of,or,pack,packed,page,program,% |
| 309 |
|
|
procedure,put,read,readln,real,record,repeat,reset,rewrite,set,% |
| 310 |
|
|
text,then,to,true,type,unpack,until,var,while,with,write,writeln},% |
| 311 |
|
|
sensitive=false,% |
| 312 |
|
|
morecomment=[s]{(*}{*)},% |
| 313 |
|
|
morecomment=[s]{\{}{\}},% |
| 314 |
|
|
morestring=[d]{'}} |
| 315 |
|
|
\lstdefinestyle{} |
| 316 |
|
|
{basicstyle={},% |
| 317 |
|
|
keywordstyle=\bfseries,identifierstyle={},% |
| 318 |
|
|
commentstyle=\itshape,stringstyle={},% |
| 319 |
|
|
numberstyle={},stepnumber=1,% |
| 320 |
|
|
pointstyle=\pointstyle} |
| 321 |
|
|
\def\pointstyle{% |
| 322 |
|
|
{\let\lst@um\@empty \xdef\@gtempa{\the\lst@token}}% |
| 323 |
|
|
\expandafter\lstkeyindex\expandafter{\@gtempa}{}% |
| 324 |
|
|
\expandafter\lstaspectindex\expandafter{\@gtempa}{}% |
| 325 |
|
|
\rstyle} |
| 326 |
|
|
\lstset{defaultdialect=[doc]Pascal,language=Pascal,style={}} |
| 327 |
|
|
\def\lstscanlanguages#1#2#3{% |
| 328 |
|
|
\begingroup |
| 329 |
|
|
\def\lst@DefDriver@##1##2##3##4[##5]##6{% |
| 330 |
|
|
\lst@false |
| 331 |
|
|
\lst@lAddTo\lst@scan{##6(##5),}% |
| 332 |
|
|
\begingroup |
| 333 |
|
|
\@ifnextchar[{\lst@XDefDriver{##1}##3}{\lst@DefDriver@@##3}}% |
| 334 |
|
|
\def\lst@XXDefDriver[##1]{}% |
| 335 |
|
|
\lst@InputCatcodes |
| 336 |
|
|
\def\lst@dontinput{#3}% |
| 337 |
|
|
\let\lst@scan\@empty |
| 338 |
|
|
\lst@for{#2}\do{% |
| 339 |
|
|
\lst@IfOneOf##1\relax\lst@dontinput |
| 340 |
|
|
{}% |
| 341 |
|
|
{\InputIfFileExists{##1}{}{}}}% |
| 342 |
|
|
\global\let\@gtempa\lst@scan |
| 343 |
|
|
\endgroup |
| 344 |
|
|
\let#1\@gtempa} |
| 345 |
|
|
\def\lstprintlanguages#1{% |
| 346 |
|
|
\def\do##1{\setbox\@tempboxa\hbox{##1\space\space}% |
| 347 |
|
|
\ifdim\wd\@tempboxa<.5\linewidth \wd\@tempboxa.5\linewidth |
| 348 |
|
|
\else \wd\@tempboxa\linewidth \fi |
| 349 |
|
|
\box\@tempboxa\allowbreak}% |
| 350 |
|
|
\begin{quote} |
| 351 |
|
|
\par\noindent |
| 352 |
|
|
\hyphenpenalty=\@M \rightskip=\z@\@plus\linewidth\relax |
| 353 |
|
|
\lst@BubbleSort#1% |
| 354 |
|
|
\expandafter\lst@NextLanguage#1\relax(\relax),% |
| 355 |
|
|
\end{quote}} |
| 356 |
|
|
\def\lst@NextLanguage#1(#2),{% |
| 357 |
|
|
\ifx\relax#1\else |
| 358 |
|
|
\def\lst@language{#1}\def\lst@dialects{(#2),}% |
| 359 |
|
|
\expandafter\lst@NextLanguage@ |
| 360 |
|
|
\fi} |
| 361 |
|
|
\def\lst@NextLanguage@#1(#2),{% |
| 362 |
|
|
\def\lst@temp{#1}% |
| 363 |
|
|
\ifx\lst@temp\lst@language |
| 364 |
|
|
\lst@lAddTo\lst@dialects{(#2),}% |
| 365 |
|
|
\expandafter\lst@NextLanguage@ |
| 366 |
|
|
\else |
| 367 |
|
|
\do{\lst@language |
| 368 |
|
|
\ifx\lst@dialects\lst@emptydialect\else |
| 369 |
|
|
\expandafter\lst@NormedDef\expandafter\lst@language |
| 370 |
|
|
\expandafter{\lst@language}% |
| 371 |
|
|
\space(% |
| 372 |
|
|
\lst@BubbleSort\lst@dialects |
| 373 |
|
|
\expandafter\lst@PrintDialects\lst@dialects(\relax),% |
| 374 |
|
|
)% |
| 375 |
|
|
\fi}% |
| 376 |
|
|
\def\lst@next{\lst@NextLanguage#1(#2),}% |
| 377 |
|
|
\expandafter\lst@next |
| 378 |
|
|
\fi} |
| 379 |
|
|
\def\lst@emptydialect{(),} |
| 380 |
|
|
\def\lst@PrintDialects(#1),{% |
| 381 |
|
|
\ifx\@empty#1\@empty empty\else |
| 382 |
|
|
\lst@PrintDialect{#1}% |
| 383 |
|
|
\fi |
| 384 |
|
|
\lst@PrintDialects@} |
| 385 |
|
|
\def\lst@PrintDialects@(#1),{% |
| 386 |
|
|
\ifx\relax#1\else |
| 387 |
|
|
, \lst@PrintDialect{#1}% |
| 388 |
|
|
\expandafter\lst@PrintDialects@ |
| 389 |
|
|
\fi} |
| 390 |
|
|
\def\lst@PrintDialect#1{% |
| 391 |
|
|
\lst@NormedDef\lst@temp{#1}% |
| 392 |
|
|
\expandafter\ifx\csname\@lst dd@\lst@language\endcsname\lst@temp |
| 393 |
|
|
\texttt{\underbar{#1}}% |
| 394 |
|
|
\else |
| 395 |
|
|
\texttt{#1}% |
| 396 |
|
|
\fi} |
| 397 |
|
|
\def\lst@IfLE#1#2\@empty#3#4\@empty{% |
| 398 |
|
|
\ifx #1\relax |
| 399 |
|
|
\let\lst@next\@firstoftwo |
| 400 |
|
|
\else \ifx #3\relax |
| 401 |
|
|
\let\lst@next\@secondoftwo |
| 402 |
|
|
\else |
| 403 |
|
|
\lowercase{\ifx#1#3}% |
| 404 |
|
|
\def\lst@next{\lst@IfLE#2\@empty#4\@empty}% |
| 405 |
|
|
\else |
| 406 |
|
|
\lowercase{\ifnum`#1<`#3}\relax |
| 407 |
|
|
\let\lst@next\@firstoftwo |
| 408 |
|
|
\else |
| 409 |
|
|
\let\lst@next\@secondoftwo |
| 410 |
|
|
\fi |
| 411 |
|
|
\fi |
| 412 |
|
|
\fi \fi |
| 413 |
|
|
\lst@next} |
| 414 |
|
|
\def\lst@BubbleSort#1{% |
| 415 |
|
|
\ifx\@empty#1\else |
| 416 |
|
|
\lst@false |
| 417 |
|
|
\expandafter\lst@BubbleSort@#1\relax,\relax,% |
| 418 |
|
|
\expandafter\lst@BubbleSort@\expandafter,\lst@sorted |
| 419 |
|
|
\relax,\relax,% |
| 420 |
|
|
\let#1\lst@sorted |
| 421 |
|
|
\lst@if |
| 422 |
|
|
\def\lst@next{\lst@BubbleSort#1}% |
| 423 |
|
|
\expandafter\expandafter\expandafter\lst@next |
| 424 |
|
|
\fi |
| 425 |
|
|
\fi} |
| 426 |
|
|
\def\lst@BubbleSort@#1,#2,{% |
| 427 |
|
|
\ifx\@empty#1\@empty |
| 428 |
|
|
\def\lst@sorted{#2,}% |
| 429 |
|
|
\def\lst@next{\lst@BubbleSort@@}% |
| 430 |
|
|
\else |
| 431 |
|
|
\let\lst@sorted\@empty |
| 432 |
|
|
\def\lst@next{\lst@BubbleSort@@#1,#2,}% |
| 433 |
|
|
\fi |
| 434 |
|
|
\lst@next} |
| 435 |
|
|
\def\lst@BubbleSort@@#1,#2,{% |
| 436 |
|
|
\ifx\relax#1\else |
| 437 |
|
|
\ifx\relax#2% |
| 438 |
|
|
\lst@lAddTo\lst@sorted{#1,}% |
| 439 |
|
|
\expandafter\expandafter\expandafter\lst@BubbleSort@@@ |
| 440 |
|
|
\else |
| 441 |
|
|
\lst@IfLE #1\relax\@empty #2\relax\@empty |
| 442 |
|
|
{\lst@lAddTo\lst@sorted{#1,#2,}}% |
| 443 |
|
|
{\lst@true \lst@lAddTo\lst@sorted{#2,#1,}}% |
| 444 |
|
|
\expandafter\expandafter\expandafter\lst@BubbleSort@@ |
| 445 |
|
|
\fi |
| 446 |
|
|
\fi} |
| 447 |
|
|
\def\lst@BubbleSort@@@#1\relax,{} |
| 448 |
|
|
\endinput |
| 449 |
|
|
%% |
| 450 |
|
|
%% End of file `lstdoc.sty'. |