summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/listings/listings.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-02-28 03:02:32 +0000
committerNorbert Preining <norbert@preining.info>2023-02-28 03:02:32 +0000
commited106ad4cb2e3cb0269bdc9f721ff75df77532cf (patch)
tree4cbe8c477935516497526c9a01ed2ab240c782bb /macros/latex/contrib/listings/listings.dtx
parent86d5a04282aa958addab4585c4df899ec9a92e50 (diff)
CTAN sync 202302280302
Diffstat (limited to 'macros/latex/contrib/listings/listings.dtx')
-rw-r--r--macros/latex/contrib/listings/listings.dtx385
1 files changed, 260 insertions, 125 deletions
diff --git a/macros/latex/contrib/listings/listings.dtx b/macros/latex/contrib/listings/listings.dtx
index 1874a17849..c507ab5fc1 100644
--- a/macros/latex/contrib/listings/listings.dtx
+++ b/macros/latex/contrib/listings/listings.dtx
@@ -133,7 +133,7 @@
% Hoffmann became the maintainer of the \packagename{listings}
% package in 2013; see the Preface for details.}~ %
% \textless\lstemail\textgreater}
-% \date{2020/03/24\enspace\enspace Version 1.8d\ \box\abstractbox}
+% \date{2023/02/27\enspace\enspace Version 1.9\ \box\abstractbox}
% \def\lstemail{\href{mailto:j.hoffmann@fh-aachen.de}{\texttt{j.hoffmann(at)fh-aachen.de}}}
% \ifhyper
% \hypersetup{pdftitle=The Listings Package,
@@ -921,8 +921,12 @@
% 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:
+% \url{https://en.wikipedia.org/wiki/Vienna_Development_Method}^^A
+% \footnote{\lsthelper{Vladimir Nikishkin}{2019/11/15}%
+% {bug report in the listings package documentation} informed that the
+% previous mentioned URL \url{http://www.vdmportal.org} doesn't point
+% to a VDM specific page anymore.}) 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.
@@ -938,7 +942,7 @@
% |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
+% So if a 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}|
@@ -1257,9 +1261,13 @@
%
% \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:
+% (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:\footnote{You should keep in mind that according to
+% \cite{Mittelbach:companion} \ldots{} if the caption's text fits on one
+% line, the text is centered; if the text does not fit on a single line, it
+% will be typeset as a paragraph with a width equal to the line width.}
% \begin{lstsample}[caption,label]{\lstset{xleftmargin=.05\linewidth}}{}
% \begin{lstlisting}[caption={Useless code},label=useless]
% for i:=maxint to 0 do
@@ -1788,7 +1796,7 @@
% \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
+% some implicitly defined styles have no separate 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}.
%
@@ -1985,7 +1993,7 @@
% \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{Ulrike~Fischer}{news3@nililand.de},
% \lstthanks{Robert~Frank}{rf7@ukc.ac.uk},
% \lstthanks{Michael~Franke}{-},
% \lstthanks{Ignacio~Fern\'andez~Galv\'an}{-},
@@ -2337,7 +2345,7 @@
% can be used on individual listings only. They determine the physical
% input lines used to print displayed listings.
%
-% \item[1.2]
+% \item[1.2;1.9]
% \rkeyname{linerange}|={|\meta{first1}\texttt-\meta{last1}\texttt,^^A
% \meta{first2}\texttt-\meta{last2}\texttt, and so
% on|}|\label{uoption:linerange}
@@ -2346,6 +2354,14 @@
% listing are displayed. The intervals must be sorted and must not
% intersect.
%
+% In fact each part of the triplet \meta{first}\texttt-\meta{last} may
+% be omitted. Omitting \meta{first} or \meta{last} means, that the
+% range begins at line no. 1 and ends at \meta{last} or begins at
+% \meta{first} ends at the last line of the file, a single number
+% means, that the range begins and ends at the line given by the
+% number, whereas omitting \meta{first} or \meta{last} means the range
+% begins at line no. 1 and ends at the last line of the file.
+%
% \item[1.8, true]
% \rkeyname{consecutivenumbers}|=|\meta{\alternative{true,false}}^^A
% \syntaxor\rkeyname{consecutivenumbers}\label{uoption:consecutivenumbers}
@@ -3590,7 +3606,7 @@
% example, but the examples apply to \keyname{comment} and
% \keyname{deletecomment} as well.
%
-% \item[0.13] \keyname{morecomment}|=[l]|\meta{delimiter}
+% \item[0.13] \rkeyname{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 |//|
@@ -3598,7 +3614,7 @@
% |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}
+% \item[0.13] \rkeyname{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
@@ -3607,14 +3623,14 @@
% |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}
+% \item[0.13] \rkeyname{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
+% \item[0.18] \rkeyname{morecomment}|=[f]|\meta{delimiter}
+% \item[0.18] \rkeyname{morecomment}|=[f][commentstyle]|\oarg{n=preceding
% columns}\meta{delimiter}
%
% The delimiter starts a comment line if and only if it appears on a
@@ -4487,6 +4503,11 @@
% Robin Fairbairns.
% \newblock{The \textsf{moreverb} package}, 2011.
%
+% \bibitem[Mi04]{Mittelbach:companion}
+% Frank Mittelbach, Michel Goossens, Johannes Braams,
+% David P. Carlisle, and Chris Rowley.
+% \newblock{The \LaTeX-Companion}, 2004.
+%
% \bibitem[Som11]{Sommerfeldt:captions}
% Axel Sommerfeldt.
% \newblock{Customizing captions of floating environments}, 2011.
@@ -5216,7 +5237,7 @@
% 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
+% Moreover, the argument can be \emph{arbitrary}; sometimes 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
@@ -5909,7 +5930,7 @@
% \part{Implementation}
%
%
-% \CheckSum{12394}
+% \CheckSum{12388}
%^^A
%^^A Don't index TeX-primitives.
%^^A
@@ -6053,8 +6074,8 @@
% All files will have same date and version.
% \begin{macrocode}
%<*kernel|misc|doc>
-\def\filedate{2020/03/24}
-\def\fileversion{1.8d}
+\def\filedate{2023/02/27}
+\def\fileversion{1.9}
%</kernel|misc|doc>
% \end{macrocode}
% What we need and who we are.
@@ -8570,10 +8591,19 @@
%
% \begin{macro}{\lst@outputspace}
% \begin{macro}{\lst@visiblespace}
-% The first macro is a default definition, \ldots
+% \lsthelper{Denis Bitouz\'e}{2020/09/12}{`lst@visiblespace:
+% `verbvisiblespace instead of `textvisiblespace} pointed out, that,
+% with Lua\LaTeX{} and some monospaced font which doesn't have an
+% appropriate glyph in slot 32, `showspaces' hasn't any effect by using
+% |\textvisiblespace|. So now we're using |\verbvisiblespace| as a default
+% definition for the first macro, the test for the fontfamily
+% |\lst@ttfamily| is deleted, because in most of the cases it lead to
+% the (wrong) output of |\char32|. The definition of |\verbvisible|
+% from latex.ltx takes the different behaviour of the modern \TeX{}
+% engines into account and defines a valid |\verbvisiblespace|
% \begin{macrocode}
\def\lst@outputspace{\ }
-\def\lst@visiblespace{\lst@ttfamily{\char32}\textvisiblespace}
+\def\lst@visiblespace{\verbvisiblespace}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -11876,6 +11906,7 @@
\lst@procnamefalse
\fi}
% \end{macrocode}
+% And these are the two implemented keys:
% \begin{macrocode}
\lst@Key{procnamestyle}{}{\def\lst@procnamestyle{#1}}
\lst@Key{indexprocnames}{false}[t]{\lstKV@SetIf{#1}\lst@ifindexproc}
@@ -12622,7 +12653,7 @@
}{\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|,
+% |\lst@firstnumber| is 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}
@@ -13690,8 +13721,7 @@
% \begin{lstkey}{print}
% \begin{lstkey}{firstline}
% \begin{lstkey}{lastline}
-% \begin{lstkey}{linerange}
-% The `current line' counter and three keys.
+% The `current line' counter and three option keys.
% \begin{macrocode}
\newcount\lst@lineno % \global
\lst@AddToHook{InitVars}{\global\lst@lineno\@ne}
@@ -13701,12 +13731,19 @@
\lst@Key{firstline}\relax{\def\lst@firstline{#1\relax}}
\lst@Key{lastline}\relax{\def\lst@lastline{#1\relax}}
% \end{macrocode}
+% Initialize the linerange with reasonable values
% \begin{macrocode}
\lst@AddToHook{PreSet}
- {\let\lst@firstline\@ne \def\lst@lastline{9999999\relax}}
+{%
+ \def\lst@firstline{1\relax}
+ \def\lst@lastline{9999999\relax}
+ \let\lst@linerange\@empty
+}
% \end{macrocode}
% \end{lstkey}
-% \end{lstkey}\end{lstkey}\end{lstkey}\end{macro}
+% \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. It uses some more keys:
@@ -13724,8 +13761,11 @@
% \begin{macrocode}
\lst@Key{linerange}\relax{\lstKV@OptArg[]{#1}{%
\def\lst@interrange{##1}\def\lst@linerange{##2,}}}
+\lst@Key{consecutivenumbers}{true}[t]{%
+ \lstKV@SetIf{#1}\lst@ifconsecutivenumbers}
% \end{macrocode}
-%
+% The next options are needed for an easy description of arbitrary linerange
+% markers:
% \begin{macrocode}
\lst@Key{rangeprefix}\relax{\def\lst@rangebeginprefix{#1}%
\def\lst@rangeendprefix{#1}}
@@ -13735,67 +13775,127 @@
\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@Key{includerangemarker}{true}[t]{\lstKV@SetIf{#1}%
+ \lst@ifincluderangemarker}
+% \end{macrocode}
+% The line range is known---it is set either explicitly (by numbers or by
+% arbitrary linerange markers) or implicitly from the default values (1 and
+% 999999). |\lst@GetLineInterval| parses the known line range recursively,
+% because there may be a comma separated list of pairs.
+% \begin{macrocode}
\lst@AddToHook{Init}
- {\ifx\lst@linerange\@empty
- \edef\lst@linerange{{\lst@firstline}-{\lst@lastline},}%
- \fi%
- \lst@GetLineInterval}%
+{%
+ \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}
+% \end{macrocode}
+% Splitting the comma separated list of pairs is done by
+% \begin{macrocode}
+\def\lst@GLI#1,#2\@nil{%
+% \end{macrocode}
+% The list is split into two parts: the first element (\#1) of the list and
+% the rest of the list (\#2) which is stored in |\lst@linerange| to be
+% processed later.
+% \begin{macrocode}
+ \def\lst@linerange{#2}\lst@GLI@#1--\@nil%
+}
+% \end{macrocode}
+% Further parsing is done by |lst@GLI@|, the argument is |#1--\@nil| that
+% is the first element of the list augmented by a sentinel. This
+% argument is parsed with the template |#1-#2-#3\@nil|. A linerange given
+% as e.\,g. `|12-21|' leads to the argument |12-21--\@nil|, so it is parsed
+% as \#1\(\leftarrow\) |12|, \#2\(\leftarrow\)|21|, and \#3\(\leftarrow\)|-|.
+% \begin{macrocode}
\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.
+% First we test, if the linerange starts with a number (consisting of -, 1,
+% 2, 3, \ldots) or an arbitrary linerange marker. If a linerange starts
+% erroneously with a `|-|' character, the argument \#1 isn't set and so the
+% range starts with 1, so giving a perhaps expected result, but the
+% definition of a linerange must always consist at least of the three parts
+% \meta{first}, `|-|', and \meta{last}.
+% \begin{macrocode}
+ \lst@IfNumber{#1}%
+ {%
+ \ifx\@empty#1\@empty
+ \let\lst@firstline\@ne
+ \else
+ \def\lst@firstline{#1\relax}%
+ \fi
+% \end{macrocode}
+% Now we know the starting number of the linerange. \#3 isn't set with a
+% linerange consisting of a single number, in all other cases \#2 defines
+% the last line (explicitly or implicitly).
+% \begin{macrocode}
+ \ifx\@empty#3\@empty%
+ \def\lst@lastline{9999999\relax}%
+ \ifx\@empty#2\@empty
+ \let\lst@lastline\lst@firstline%
+ \fi
+ \else%
+ \ifx\@empty#2\@empty
+ \def\lst@lastline{9999999\relax}
+ \else % doesn't happen(?)
+ \def\lst@lastline{#2\relax}%
+ \fi
+ \fi
+ }%
+% \end{macrocode}
+% If we've found an arbitrary linerange 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
+ {%
+ \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
+ \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
% \hookname{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}}
+ \global\def\lst@DefRange{%
+ \expandafter\lst@CArgX\lst@rangebegin\relax\lst@DefRangeB}%
+ \ifnum\lst@mode=\lst@Pmode \expandafter\lst@DefRange \fi%
+ }%
+}
% \end{macrocode}
+% \end{lstkey}
+% \end{lstkey}
+% \end{lstkey}
+% \end{lstkey}
+% \end{lstkey}
+% \end{lstkey}
+% \end{lstkey}
+% \end{lstkey}
+% \end{lstkey}
+%
+% \begin{macro}{\lst@DefRange}
% |\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
+% m\"oglich...}. Another change 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} and \lsthelper{Markus~Luisser}{2004/08/13}{Bug mit
@@ -13803,9 +13903,6 @@
% \begin{macrocode}
\lst@AddToHookExe{DeInit}{\global\let\lst@DefRange\@empty}
% \end{macrocode}
-% \end{lstkey}\end{lstkey}\end{lstkey}
-% \end{lstkey}\end{lstkey}\end{lstkey}
-% \end{lstkey}\end{lstkey}\end{lstkey}
%
% Actually defining the marker (via |\lst@GLI@|, |\lst@DefRange|,
% |\lst@CArgX| as seen above) is similar to |\lst@DefDelimB|---except that
@@ -13830,6 +13927,7 @@
\lst@CArgEmpty}%
\@empty}
% \end{macrocode}
+% \end{macro}
%
% Modify labels and define |\lst@InitLstNumber| used above according to an
% error reported by
@@ -13896,11 +13994,31 @@
\fi}
% \end{macrocode}
%
+% Sometimes it is good to have two or more excerpts of one program numbered
+% consecutively, i.\,e. 1--11 instead of 3--5, 12--17, 20--21. So we
+% introduce |\lst@DisplayConsecutiveNumbersOrNot|, which corrects the
+% displayed line numbers to be always equal to the input line numbers
+% \begin{macrocode}
+\def\lst@DisplayConsecutiveNumbersOrNot{%
+ \lst@ifconsecutivenumbers\else%
+ \c@lstnumber=\numexpr-1+\lst@lineno
+ \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
+% \end{macrocode}
+% The following code was introduced in listings version 1.4. The code
+% resembles the lines 14031--14061 of version 1.3c, but contains loops:
+% \newline|\def\lst@next{...}\expandafter\lst@next|.\newline
+% In fact that code will never be expanded, because there are two analoguous
+% definitions in section \ref{iTheInputCommand} below, so they override
+% these two commands.
+% \begin{macrocode}
\def\lst@MSkipToFirst{%
\global\advance\lst@lineno\@ne
\ifnum \lst@lineno=\lst@firstline
@@ -13959,10 +14077,13 @@
% 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}}
+\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}.
+% \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}
@@ -14009,7 +14130,8 @@
\lst@UserCommand\lstlistingnamestyle{}
% \end{macrocode}
% \begin{macrocode}
-\lst@Key{numberbychapter}{true}[t]{\lstKV@SetIf{#1}\lst@ifnumberbychapter}
+\lst@Key{numberbychapter}{true}[t]{%
+ \lstKV@SetIf{#1}\lst@ifnumberbychapter}
% \end{macrocode}
% \end{lstkey}
% \end{macro}
@@ -14030,19 +14152,20 @@
% 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
+\@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}
@@ -14050,13 +14173,14 @@
% 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}. \lsthelper{Karl Berry}{bold "listings
-% 1"?} asked for the ability of customizing the label. So
+% zwischen caption und listings}. \lsthelper{Karl Berry}{2019/08/18}{bold
+% "listings 1"?} asked for the ability of customizing the label. So
% |\lstlistingnamestyle| was introduced in front of |\lstlistingname|.
% \begin{macrocode}
\def\fnum@lstlisting{%
{\lstlistingnamestyle\lstlistingname
- \ifx\lst@@caption\@empty\else~\thelstlisting\fi}}%
+ \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}
@@ -14070,7 +14194,7 @@
% \begin{macrocode}
\def\lst@MakeCaption#1{%
\lst@ifdisplaystyle
- \ifx #1t%
+ \ifx #1t \allowbreak%
\ifx\lst@@caption\@empty\expandafter\lst@HRefStepCounter \else
\expandafter\refstepcounter
\fi {lstlisting}%
@@ -14098,8 +14222,8 @@
\addcontentsline{lol}{lstlisting}%
{\protect\numberline{\thelstlisting}\lst@@caption}%
\fi
- \fi
- \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
@@ -14121,9 +14245,10 @@
\def\vskip{\afterassignment\lst@vskip \@tempskipa}%
\def\lst@vskip{\nobreak\@@vskip\@tempskipa\nobreak}%
\par\@parboxrestore\normalsize\normalfont % \noindent (AS)
- \ifx #1t\allowbreak \fi
+ %%\ifx #1t\allowbreak \fi
\ifx\lst@title\@empty
- \lst@makecaption\fnum@lstlisting{\ignorespaces \lst@caption}
+ \lst@makecaption\fnum@lstlisting{%
+ \ignorespaces \lst@caption}
\else
\lst@maketitle\lst@title % (AS)
\fi
@@ -14836,7 +14961,8 @@
% |\lst@ShortInlineOldCatcode\|\meta{c}.
% \begin{macrocode}
\expandafter
- \xdef\csname lst@ShortInlineOldCatcode\string#1\endcsname{\the\catcode`#1}%
+ \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.
@@ -14850,7 +14976,8 @@
% \begin{macrocode}
\global\expandafter\let
\csname lst@ShortInlineOldMeaning\string#1\endcsname~%
- \expandafter\gdef\expandafter~\expandafter{\lst@shortinlinedef#1}}%
+ \expandafter\gdef\expandafter~\expandafter{%
+ \lst@shortinlinedef#1}}%
\endgroup
% \end{macrocode}
% Finally the character is made active.
@@ -14873,7 +15000,8 @@
% \begin{macro}{\lstDeleteShortInline}
% \begin{macrocode}
\def\lstDeleteShortInline#1{%
- \expandafter\ifx\csname lst@ShortInlineOldCatcode\string#1\endcsname\relax
+ \expandafter\ifx%
+ \csname lst@ShortInlineOldCatcode\string#1\endcsname\relax%
\PackageError{Listings}%
{#1 is not a short reference for \string\lstinline}%
{Use \string\lstMakeShortInline first.}%
@@ -15103,15 +15231,6 @@
% 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}
- \lst@Key{consecutivenumbers}{true}[t]{\lstKV@SetIf{#1}\lst@ifconsecutivenumbers}
- \def\lst@DisplayConsecutiveNumbersOrNot{%
- \lst@ifconsecutivenumbers\typeout{consecutive:}\else%
- \typeout{non-consecutive:}
- \c@lstnumber=\numexpr-1+\lst@lineno %\relax % this enforces the
- %displayed line numbers to always be the
- %input line numbers
- \fi%
-}
\def\lst@MSkipToFirst{%
\global\advance\lst@lineno\@ne
\ifnum \lst@lineno=\lst@firstline
@@ -15875,23 +15994,22 @@
% \end{macrocode}
%
% \paragraph{Indexing}
-% The `user' commands. |\rstyle| is defined below.
+% The `user' commands. There are two different ways to mark up a
+% key. |\ikeyname| is the commmand for keys which are used \textit{i}nline,
+% |\rkeyname| defines the \textit{r}eference of a key---displayed green---,
+% |\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}
+% The same rules apply to |\icmdname| and |\rcmdname|:
% \begin{macrocode}
\newcommand\icmdname[1]{%
\@bsphack
@@ -15950,6 +16068,7 @@
\fi}}
% \end{macrocode}
%
+%
% \paragraph{Unique styles}
% \begin{macrocode}
\newcommand*\lst{\texttt{lst}}
@@ -15972,7 +16091,8 @@
\else\fontfamily#1\fi
\selectfont}
% \end{macrocode}
-% The color mainly for keys and commands in the reference guide.
+% The color mainly for keys and commands in the reference
+% guide---\textit{r} means reference.
% \begin{macrocode}
\ifcolor
\definecolor{darkgreen}{rgb}{0,0.5,0}
@@ -16948,8 +17068,13 @@
\lst@UseHook{SetStyle}\lst@UseHook{EmptyStyle}
\lst@UseHook{SetLanguage}\lst@UseHook{EmptyLanguage}
% \end{macrocode}
-% Finally we load the configuration files.
+% Finally we load the configuration files. \lsthelper{Ulrike~Fischer}{2020/11/13}
+% {.cfg-file is read with wrong catcode} pointed out that this must happen
+% with the correct catcode. At the moment the catcode of |^^M| is 9, which
+% is wrong. So we reset the catcodes to the correct values before loading
+% the files:
% \begin{macrocode}
+\lst@RestoreCatcodes%
\InputIfFileExists{listings.cfg}{}{}
\InputIfFileExists{lstlocal.cfg}{}{}
%<info>\lst@ReportAllocs
@@ -17059,16 +17184,26 @@
% \item[1.5] 2013/06/27
% \item new maintainership
% \item[1.6] 2015/05/05
-% \item add discussion about using |\lstinline|\oarg{key=value list}\marg{source code}.
+% \item add discussion about using |\lstinline|\oarg{key=value list}\marg{source code}
% \item add section ``Bugs and workarounds''.
% \item[1.7] 2018/09/02
-% \item some new or updated language definitions.
-% \item several error corrections.
+% \item some new or updated language definitions
+% \item several error corrections
% \item[1.8] from 2019/02/27 on
-% \item corrected and activated the option |inputpath|.
-% \item some new or updated language definitions.
-% \item several error corrections.
-% \item introduced |\lstlistingnamestyle|.
+% \item corrected and activated the option |inputpath|
+% \item some new or updated language definitions
+% \item several error corrections
+% \item introduced |\lstlistingnamestyle|
+% \item[1.9] from 2023/02/27 on
+% \item hopefully corrected the long outstanding wrong behaviour of
+% displaying visible spaces
+% \item generalized the use of |linerange|
+% \item introduced key |consecutivenumbers|
+% \item a pagebreak between a (top) caption and source code isn't allowed
+% anymore
+% \item the configuration files |listings.cfg| and |lstlocal.cfg| are read
+% with the correct catcode
+% \item some documentation and layout enhancements.
% \end{itemize}
% \endgroup
%