From e7d22f9c3388947b1b1e5e8c8519c9ae0684a96f Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Wed, 28 Feb 2007 22:32:28 +0000
Subject: listings update (28feb07)

git-svn-id: svn://tug.org/texlive/trunk@4002 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/listings/listings.sty | 318 +++++++++++++++++++---
 1 file changed, 276 insertions(+), 42 deletions(-)

(limited to 'Master/texmf-dist/tex/latex/listings/listings.sty')

diff --git a/Master/texmf-dist/tex/latex/listings/listings.sty b/Master/texmf-dist/tex/latex/listings/listings.sty
index 8d96f36b944..ccde8611888 100644
--- a/Master/texmf-dist/tex/latex/listings/listings.sty
+++ b/Master/texmf-dist/tex/latex/listings/listings.sty
@@ -4,7 +4,7 @@
 %%
 %% The original source files were:
 %%
-%% listings-1.3.dtx  (with options: `kernel')
+%% listings.dtx  (with options: `kernel')
 %% 
 %% Please read the software license in listings-1.3.dtx or listings-1.3.pdf.
 %%
@@ -39,7 +39,8 @@
     \fi}
 \edef\lst@RestoreCatcodes{%
     \noexpand\lccode`\noexpand\/`\noexpand\/%
-    \lst@RestoreCatcodes\"\^^I\^^M\~\^^@\relax}
+    \lst@RestoreCatcodes\"\^^I\^^M\~\^^@\relax
+    \catcode12\active}
 \lst@InputCatcodes
 \AtEndOfPackage{\lst@RestoreCatcodes}
 \def\@lst{lst}
@@ -118,9 +119,14 @@
         \def\lst@next{#2}%
     \fi \lst@next #3}
 \def\lst@for#1\do#2{%
-    \def\lst@forbody##1{#2}%
-    \@for\lst@forvar:=#1\do
-    {\expandafter\lst@forbody\expandafter{\lst@forvar}}}
+  \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}
@@ -640,6 +646,19 @@
     \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
@@ -820,8 +839,8 @@
 \def\lst@keepspacestrue{\let\lst@ifkeepspaces\iftrue}
 \def\lst@ProcessSpace{%
     \lst@ifkeepspaces
-        \lst@whitespacetrue
         \lst@PrintToken
+        \lst@whitespacetrue
         \lst@AppendOther\lst@outputspace
         \lst@PrintToken
     \else \ifnum\lst@newlines=\z@
@@ -841,8 +860,8 @@
         \global\advance\lst@pos\m@ne
         \lst@gobbledwhitespacetrue
     \else
-        \lst@whitespacetrue
         \lst@PrintToken
+        \lst@whitespacetrue
         \lst@AppendOther\lst@outputspace
         \lst@PrintToken
     \fi}
@@ -1016,7 +1035,7 @@
     \@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{\ifcase#10 0\or 1\else 2\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
@@ -1050,9 +1069,14 @@
         \fi
         \advance\@tempcnta\@ne
     \repeat}
-\def\lst@ScanChars{%
+\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{%
@@ -1365,6 +1389,7 @@
 \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}
@@ -1377,6 +1402,15 @@
     {\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}
@@ -1387,20 +1421,130 @@
 \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{%
-    \ifx\@empty#1\@empty
-        \let\lst@firstline\@ne
-    \else
-        \def\lst@firstline{#1\relax}%
+    \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}
+\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
-    \ifx\@empty#2\@empty
-        \def\lst@lastline{9999999\relax}%
+    \lst@LeaveModeToPmode
+    \lst@BeginDropInput{\lst@Pmode}}
+\def\lst@LeaveModeToPmode{%
+    \ifnum\lst@mode=\lst@Pmode
+        \expandafter\lsthk@EndGroup
     \else
-        \ifx -#2%
-            \let\lst@lastline\lst@firstline
-        \else
-            \def\lst@lastline{#2\relax}%
-        \fi
+        \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
@@ -1415,13 +1559,18 @@
 \lst@AddToHookExe{TextStyle}
     {\let\lst@caption\@empty \let\lst@@caption\@empty
      \let\lst@title\@empty \let\lst@label\@empty}
-\@ifundefined{thechapter}
-    {\newcounter{lstlisting}
-     \renewcommand\thelstlisting{\@arabic\c@lstlisting}}
-    {\newcounter{lstlisting}[chapter]
-     \renewcommand\thelstlisting
-         {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@lstlisting}}
+\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}{}
@@ -1471,7 +1620,7 @@
              \par\@parboxrestore\normalsize\normalfont % \noindent (AS)
              \ifx #1t\allowbreak \fi
              \ifx\lst@title\@empty
-                 \lst@makecaption\fnum@lstlisting\lst@caption % (AS)
+                 \lst@makecaption\fnum@lstlisting{\ignorespaces \lst@caption}
              \else
                  \lst@maketitle\lst@title % (AS)
              \fi
@@ -1550,6 +1699,10 @@
         \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
@@ -1618,10 +1771,17 @@
             \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}
@@ -1691,21 +1851,33 @@
     \let\contentsname\lstlistlistingname
     \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
     \tableofcontents \egroup}
-\@ifpackageloaded{scrlfile}
-{\newcommand*\lol@heading{\float@listhead{\lstlistlistingname}}
- \renewcommand*\lstlistoflistings{%
-   \begingroup%
-     \if@twocolumn
-       \@restonecoltrue\onecolumn
-     \else
-       \@restonecolfalse
-     \fi
-     \lol@heading%
-     \@parskipfalse\@parskip@indent%
-     \@starttoc{lol}%
-     \if@restonecol\twocolumn\fi
-   \endgroup}%
-}{}
+\@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}%
@@ -1753,6 +1925,68 @@
 \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/{%
-- 
cgit v1.2.3

