annotate nonDefaultPackage/lstpatch.sty @ 0:f2fa5b673868

*** empty log message ***
author kent
date Sun, 15 Jun 2008 10:40:55 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
1 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
2 %% This is file `lstpatch.sty', generated manually.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
3 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
4 %% (w)(c) 2004 Carsten Heinz
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
5 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
6 %% This file may be distributed under the terms of the LaTeX Project Public
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
7 %% License from CTAN archives in directory macros/latex/base/lppl.txt.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
8 %% Either version 1.0 or, at your option, any later version.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
9 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
10 %% Send comments and ideas on the package, error reports and additional
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
11 %% programming languages to <cheinz@gmx.de>.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
12 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
13 %% This patch file will remove the following bugs from the listings package.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
14 %% Each item contains the bug finder with date of report and first bug fix
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
15 %% version, a short description of the problem, and the reason for the bug
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
16 %% in parenthesis.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
17 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
18 %% 1) Frank Atanassow, 2004/10/07, 1.3b
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
19 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
20 %% space after mathescape is not preserved
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
21 %% (\lst@newlines>0)
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
22 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
23 %% 2) Benjamin Lings, 2004/10/15, 1.3b (2004/10/17)
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
24 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
25 %% \usepackage{xy,listings} yields:
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
26 %% "Forbidden control sequence found while scanning use of \lst@lExtend"
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
27 %% (xy-pic correctly resets catcode of ^^L (to active), which is \outer)
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
28 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
29 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
30 %% The following features are added to the base package.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
31 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
32 %% 1.3a (2004/09/07)
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
33 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
34 %% a) H I G H L Y E X P E R I M E N T A L
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
35 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
36 %% Use the options
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
37 %% rangeprefix=<prefix for begin and end of range>
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
38 %% rangesuffix=<suffix for begin and end of range>
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
39 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
40 %% rangebeginprefix=<prefix for begin of range>
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
41 %% rangebeginsuffix=<suffix for begin of range>
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
42 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
43 %% rangeendprefix=<prefix for end of range>
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
44 %% rangeendsuffix=<suffix for end of range>
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
45 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
46 %% includerangemarker=true|false
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
47 %% together with
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
48 %% firstline=<begin marker>
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
49 %% lastline=<end marker>
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
50 %% or
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
51 %% linerange={<begin marker 1>-<end marker 1>,
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
52 %% <begin marker 2>-<end marker 2>, ...}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
53 %% The according markers in the source code are
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
54 %% <prefix><marker><suffix>
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
55 %% for begin respectively end of range. Moreover, one can use
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
56 %% includerangemarker=true|false
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
57 %% to show or hide the range markers in the output.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
58 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
59 %% 1.3b (2004/10/17)
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
60 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
61 %% b) multicols=<number> (requires loaded multicol package)
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
62 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
63 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
64 \lst@CheckVersion{1.3}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
65 {\typeout{^^J%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
66 ***^^J%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
67 *** This is a patch for listings 1.3, but you're using^^J%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
68 *** version \lst@version.^^J%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
69 ***^^J
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
70 *** Patch file not loaded.^^J%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
71 ***^^J}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
72 \endinput
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
73 }
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
74 \def\fileversion{1.3b}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
75 \def\filedate{2004/10/17}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
76 \ProvidesFile{lstpatch.sty}[\filedate\space\fileversion\space (Carsten Heinz)]
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
77 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
78 % 0) Insert % after #1.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
79 \def\@@xbitor #1{\@tempcntb \count#1%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
80 \ifnum \@tempcnta =\z@
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
81 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
82 \divide\@tempcntb\@tempcnta
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
83 \ifodd\@tempcntb \@testtrue\fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
84 \fi}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
85 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
86 % 1) Reset \lst@newlines at end of escape.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
87 \def\lstpatch@escape{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
88 \gdef\lst@Escape##1##2##3##4{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
89 \lst@CArgX ##1\relax\lst@CDefX
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
90 {}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
91 {\lst@ifdropinput\else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
92 \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
93 \lst@InterruptModes
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
94 \lst@EnterMode{\lst@TeXmode}{\lst@modetrue}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
95 \ifx\^^M##2%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
96 \lst@CArg ##2\relax\lst@ActiveCDefX
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
97 {}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
98 {\lst@escapeend ##4\lst@LeaveAllModes\lst@ReenterModes}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
99 {\lst@MProcessListing}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
100 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
101 \lst@CArg ##2\relax\lst@ActiveCDefX
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
102 {}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
103 {\lst@escapeend ##4\lst@LeaveAllModes\lst@ReenterModes
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
104 \lst@newlines\z@ \lst@whitespacefalse}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
105 {}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
106 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
107 ##3\lst@escapebegin
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
108 \fi}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
109 {}}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
110 }
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
111 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
112 % 2) Deactivate \outer definition of ^^L temporarily (inside and outside
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
113 % of \lst@ScanChars) and restore \catcode at end of package.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
114 \begingroup \catcode12=\active\let^^L\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
115 \gdef\lst@ScanChars{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
116 \let\lsts@ssL^^L%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
117 \def^^L{\par}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
118 \lst@GetChars\lst@RestoreOrigCatcodes\@ne {128}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
119 \let^^L\lsts@ssL
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
120 \lst@GetChars\lst@RestoreOrigExtendedCatcodes{128}{256}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
121 \endgroup
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
122 \lst@lAddTo\lst@RestoreCatcodes{\catcode12\active}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
123 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
124 % a) Let's start with the options:
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
125 \lst@Key{rangeprefix}\relax{\def\lst@rangebeginprefix{#1}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
126 \def\lst@rangeendprefix{#1}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
127 \lst@Key{rangesuffix}\relax{\def\lst@rangebeginsuffix{#1}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
128 \def\lst@rangeendsuffix{#1}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
129 \lst@Key{rangebeginprefix}{}{\def\lst@rangebeginprefix{#1}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
130 \lst@Key{rangebeginsuffix}{}{\def\lst@rangebeginsuffix{#1}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
131 \lst@Key{rangeendprefix}{}{\def\lst@rangeendprefix{#1}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
132 \lst@Key{rangeendsuffix}{}{\def\lst@rangeendsuffix{#1}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
133 \lst@Key{includerangemarker}{true}[t]{\lstKV@SetIf{#1}\lst@ifincluderangemarker}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
134 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
135 % The key is a redefinition of \lst@GLI@ checking for numbers.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
136 \def\lst@GLI@#1-#2-#3\@nil{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
137 \lst@IfNumber{#1}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
138 {\ifx\@empty#1\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
139 \let\lst@firstline\@ne
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
140 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
141 \def\lst@firstline{#1\relax}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
142 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
143 \ifx\@empty#3\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
144 \def\lst@lastline{9999999\relax}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
145 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
146 \ifx\@empty#2\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
147 \let\lst@lastline\lst@firstline
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
148 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
149 \def\lst@lastline{#2\relax}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
150 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
151 \fi}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
152 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
153 % If we've found a general marker, we set firstline and lastline to 9999999.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
154 % This prevents (almost) anything to be printed for now.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
155 {\def\lst@firstline{9999999\relax}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
156 \let\lst@lastline\lst@firstline
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
157 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
158 % We add the prefixes and suffixes to the markers.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
159 \let\lst@rangebegin\lst@rangebeginprefix
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
160 \lst@AddTo\lst@rangebegin{#1}\lst@Extend\lst@rangebegin\lst@rangebeginsuffix
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
161 \ifx\@empty#3\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
162 \let\lst@rangeend\lst@rangeendprefix
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
163 \lst@AddTo\lst@rangeend{#1}\lst@Extend\lst@rangeend\lst@rangeendsuffix
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
164 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
165 \ifx\@empty#2\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
166 \let\lst@rangeend\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
167 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
168 \let\lst@rangeend\lst@rangeendprefix
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
169 \lst@AddTo\lst@rangeend{#2}\lst@Extend\lst@rangeend\lst@rangeendsuffix
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
170 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
171 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
172 % The following definition will be executed in the SelectCharTable hook
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
173 % and here right now if we are already processing a listing.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
174 \global\def\lst@DefRange{\expandafter\lst@CArgX\lst@rangebegin\relax\lst@DefRangeB}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
175 \ifnum\lst@mode=\lst@Pmode \expandafter\lst@DefRange \fi}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
176 % \lst@DefRange is not inserted via a hook anymore. Instead it is now called
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
177 % directly from \lst@SelectCharTable. This was necessary to get rid of an
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
178 % interference with the escape-to-LaTeX-feature. The bug was reported by
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
179 % \lsthelper{Michael~Bachmann}{2004/07/21}{Keine label-Referenzierung
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
180 % m\"oglich...}. Another chance is due to the same bug: \lst@DefRange is
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
181 % redefined globally when the begin of code is found, see below. The bug was
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
182 % reported by \lsthelper{Tobias~Rapp}{2004/04/06}{undetected end of range if
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
183 % listing crosses page break} \lsthelper{Markus~Luisser}{2004/08/13}{Bug mit
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
184 % 'linerangemarker' in umgebrochenen listings}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
185 %\lst@AddToHook{SelectCharTable}{\lst@DefRange}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
186 \lst@AddToHookExe{DeInit}{\global\let\lst@DefRange\@empty}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
187 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
188 % Actually defining the marker (via \lst@GLI@, \lst@DefRange, \lst@CArgX as
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
189 % seen above) is similar to \lst@DefDelimB---except that we unfold the first
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
190 % parameter and use different <execute>, <pre>, and <post> statements.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
191 \def\lst@DefRangeB#1#2{\lst@DefRangeB@#1#2}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
192 \def\lst@DefRangeB@#1#2#3#4{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
193 \lst@CDef{#1{#2}{#3}}#4{}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
194 {\lst@ifincluderangemarker
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
195 \lst@LeaveMode
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
196 \let#1#4%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
197 \lst@DefRangeEnd
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
198 \lst@InitLstNumber
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
199 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
200 \@tempcnta\lst@lineno \advance\@tempcnta\@ne
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
201 \edef\lst@firstline{\the\@tempcnta\relax}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
202 \gdef\lst@OnceAtEOL{\let#1#4\lst@DefRangeEnd}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
203 \lst@InitLstNumber
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
204 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
205 \global\let\lst@DefRange\lst@DefRangeEnd
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
206 \lst@CArgEmpty}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
207 \@empty}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
208 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
209 % Modify labels and define |\lst@InitLstNumber| used above.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
210 % \lsthelper{Omair-Inam~Abdul-Matin}{2004/05/10}{experimental linerange
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
211 % feature does not work with firstnumber}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
212 \def\lstpatch@labels{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
213 \gdef\lst@SetFirstNumber{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
214 \ifx\lst@firstnumber\@undefined
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
215 \@tempcnta 0\csname\@lst no@\lst@intname\endcsname\relax
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
216 \ifnum\@tempcnta=\z@ \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
217 \lst@nololtrue
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
218 \advance\@tempcnta\lst@advancenumber
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
219 \edef\lst@firstnumber{\the\@tempcnta\relax}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
220 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
221 \fi}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
222 }
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
223 \lst@AddToAtTop\lsthk@PreInit
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
224 {\ifx\lst@firstnumber\@undefined
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
225 \def\lst@firstnumber{\lst@lineno}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
226 \fi}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
227 \def\lst@InitLstNumber{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
228 \global\c@lstnumber\lst@firstnumber
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
229 \global\advance\c@lstnumber\lst@advancenumber
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
230 \global\advance\c@lstnumber-\lst@advancelstnum
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
231 \ifx \lst@firstnumber\c@lstnumber
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
232 \global\advance\c@lstnumber-\lst@advancelstnum
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
233 \fi}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
234 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
235 % The end-marker is defined if and only if it's not empty. The definition is
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
236 % similar to \lst@DefDelimE---with the above exceptions and except that we
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
237 % define the re-entry point \lst@DefRangeE@@ as it is defined in the new
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
238 % version of \lst@MProcessListing above.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
239 \def\lst@DefRangeEnd{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
240 \ifx\lst@rangeend\@empty\else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
241 \expandafter\lst@CArgX\lst@rangeend\relax\lst@DefRangeE
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
242 \fi}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
243 \def\lst@DefRangeE#1#2{\lst@DefRangeE@#1#2}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
244 \def\lst@DefRangeE@#1#2#3#4{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
245 \lst@CDef{#1#2{#3}}#4{}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
246 {\let#1#4%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
247 \edef\lst@lastline{\the\lst@lineno\relax}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
248 \lst@DefRangeE@@}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
249 \@empty}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
250 \def\lst@DefRangeE@@#1\@empty{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
251 \lst@ifincluderangemarker
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
252 #1\lst@XPrintToken
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
253 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
254 \lst@LeaveModeToPmode
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
255 \lst@BeginDropInput{\lst@Pmode}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
256 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
257 \def\lst@LeaveModeToPmode{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
258 \ifnum\lst@mode=\lst@Pmode
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
259 \expandafter\lsthk@EndGroup
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
260 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
261 \expandafter\egroup\expandafter\lst@LeaveModeToPmode
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
262 \fi}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
263 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
264 % Eventually we shouldn't forget to install \lst@OnceAtEOL, which must
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
265 % also be called in \lst@MSkipToFirst.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
266 \lst@AddToHook{EOL}{\lst@OnceAtEOL\global\let\lst@OnceAtEOL\@empty}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
267 \gdef\lst@OnceAtEOL{}% Init
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
268 \def\lst@MSkipToFirst{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
269 \global\advance\lst@lineno\@ne
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
270 \ifnum \lst@lineno=\lst@firstline
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
271 \def\lst@next{\lst@LeaveMode \global\lst@newlines\z@
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
272 \lst@OnceAtEOL \global\let\lst@OnceAtEOL\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
273 \lst@InitLstNumber % Added to work with modified \lsthk@PreInit.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
274 \lsthk@InitVarsBOL
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
275 \lst@BOLGobble}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
276 \expandafter\lst@next
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
277 \fi}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
278 \def\lst@SkipToFirst{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
279 \ifnum \lst@lineno<\lst@firstline
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
280 \def\lst@next{\lst@BeginDropInput\lst@Pmode
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
281 \lst@Let{13}\lst@MSkipToFirst
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
282 \lst@Let{10}\lst@MSkipToFirst}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
283 \expandafter\lst@next
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
284 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
285 \expandafter\lst@BOLGobble
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
286 \fi}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
287 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
288 % Finally the service macro \lst@IfNumber:
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
289 \def\lst@IfNumber#1{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
290 \ifx\@empty#1\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
291 \let\lst@next\@firstoftwo
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
292 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
293 \lst@IfNumber@#1\@nil
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
294 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
295 \lst@next}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
296 \def\lst@IfNumber@#1#2\@nil{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
297 \let\lst@next\@secondoftwo
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
298 \ifnum`#1>47\relax \ifnum`#1>57\relax\else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
299 \let\lst@next\@firstoftwo
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
300 \fi\fi}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
301 %
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
302 % b) The following is known to fail with some keys.
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
303 \lst@Key{multicols}{}{\@tempcnta=0#1\relax\def\lst@multicols{#1}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
304 \def\lst@Init#1{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
305 \begingroup
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
306 \ifx\lst@float\relax\else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
307 \edef\@tempa{\noexpand\lst@beginfloat{lstlisting}[\lst@float]}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
308 \expandafter\@tempa
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
309 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
310 % chmod begin
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
311 \ifx\lst@multicols\@empty\else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
312 \edef\lst@next{\noexpand\multicols{\lst@multicols}}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
313 \expandafter\lst@next
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
314 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
315 % chmod end
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
316 \ifhmode\ifinner \lst@boxtrue \fi\fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
317 \lst@ifbox
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
318 \lsthk@BoxUnsafe
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
319 \hbox to\z@\bgroup
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
320 $\if t\lst@boxpos \vtop
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
321 \else \if b\lst@boxpos \vbox
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
322 \else \vcenter \fi\fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
323 \bgroup \par\noindent
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
324 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
325 \lst@ifdisplaystyle
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
326 \lst@EveryDisplay
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
327 \par\penalty-50\relax
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
328 \vspace\lst@aboveskip
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
329 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
330 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
331 \normalbaselines
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
332 \abovecaptionskip\lst@abovecaption\relax
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
333 \belowcaptionskip\lst@belowcaption\relax
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
334 \lst@MakeCaption t%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
335 \lsthk@PreInit \lsthk@Init
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
336 \lst@ifdisplaystyle
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
337 \global\let\lst@ltxlabel\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
338 \if@inlabel
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
339 \lst@ifresetmargins
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
340 \leavevmode
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
341 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
342 \xdef\lst@ltxlabel{\the\everypar}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
343 \lst@AddTo\lst@ltxlabel{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
344 \global\let\lst@ltxlabel\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
345 \everypar{\lsthk@EveryLine\lsthk@EveryPar}}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
346 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
347 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
348 \everypar\expandafter{\lst@ltxlabel
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
349 \lsthk@EveryLine\lsthk@EveryPar}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
350 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
351 \everypar{}\let\lst@NewLine\@empty
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
352 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
353 \lsthk@InitVars \lsthk@InitVarsBOL
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
354 \lst@Let{13}\lst@MProcessListing
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
355 \let\lst@Backslash#1%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
356 \lst@EnterMode{\lst@Pmode}{\lst@SelectCharTable}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
357 \lst@InitFinalize}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
358 \def\lst@DeInit{%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
359 \lst@XPrintToken \lst@EOLUpdate
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
360 \global\advance\lst@newlines\m@ne
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
361 \lst@ifshowlines
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
362 \lst@DoNewLines
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
363 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
364 \setbox\@tempboxa\vbox{\lst@DoNewLines}%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
365 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
366 \lst@ifdisplaystyle \par\removelastskip \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
367 \lsthk@ExitVars\everypar{}\lsthk@DeInit\normalbaselines\normalcolor
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
368 \lst@MakeCaption b%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
369 \lst@ifbox
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
370 \egroup $\hss \egroup
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
371 \vrule\@width\lst@maxwidth\@height\z@\@depth\z@
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
372 \else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
373 \lst@ifdisplaystyle
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
374 \par\penalty-50\vspace\lst@belowskip
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
375 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
376 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
377 % chmod begin
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
378 \ifx\lst@multicols\@empty\else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
379 \def\lst@next{\global\let\@checkend\@gobble
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
380 \endmulticols
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
381 \global\let\@checkend\lst@@checkend}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
382 \expandafter\lst@next
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
383 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
384 % chmod end
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
385 \ifx\lst@float\relax\else
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
386 \expandafter\lst@endfloat
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
387 \fi
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
388 \endgroup}
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
389 \let\lst@@checkend\@checkend
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
390 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
391 \endinput
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
392 %%
f2fa5b673868 *** empty log message ***
kent
parents:
diff changeset
393 %% End of file `lstpatch.sty'.