blob: 8f065b4a5c2c71156190c48ad8ffe2627099a4bf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
%% Copyright (C) 2011-2012 by Martin Scharrer <martin@scharrer-online.de>
%% -----------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%%
%% The Current Maintainer of this work is Martin Scharrer.
%%
%% This work consists of the files lstautogobble.dtx and lstaddons.ins
%% and the derived filebase lstautogobble.sty.
%%
\ProvidesPackage{lstautogobble}[%
2012/05/03
v0.1
Implements 'autogobble' option for 'listings']
\RequirePackage{listings}
\newcount\lstag@spacecount
\def\lstag@activespace{\lst@ProcessSpace}% Definition of an active space
\def\lstag@tabulator{\lst@ProcessTabulator}% Definition of an tabulator
\begingroup
\catcode`\^^M=\active%
\gdef\lstag@activenl{^^M}% Active CR (ASCII 13) character which is used as line break
\endgroup
\lst@Key{autogobble}{false}[t]{\lstKV@SetIf{#1}\lst@ifautogobble}
\lst@Key{ungobble}{0}{\def\lst@ungobble{#1}}
\lst@AddToHook{Init}{\lst@autogobble}
\def\lst@autogobble{%
\lst@ifautogobble
\ifnum\lst@gobble>0\else
\def\lst@gobble{\lstag@gobble}%
\def\lstag@gobble{0}%
\lstag@spacecount\z@
\def\lstag@spaceaccu{}%
\let\lstag@restofline\empty
\let\lstag@origlstenv@Process\lstenv@Process
\let\lstenv@Process\lstag@countleadingspaces
\fi
\fi
}
\def\lstag@countleadingspaces#1{%
\expandafter\ifx\lstag@activenl#1\relax
\expandafter\lstag@countleadingspaces@
\else
\def\lstag@restofline{Dummy replacement of text after begin of listing to trigger original warning message}%
\expandafter\lstag@countleadingspaces
\fi
}
\def\lstag@countleadingspaces@#1{%
\ifx\lstag@activespace#1\relax
\advance\lstag@spacecount by \@ne
% Accumulate spaces (i.e. their definitions) for later re-insertion:
\expandafter\def\expandafter\lstag@spaceaccu\expandafter{\lstag@spaceaccu\lst@ProcessSpace}%
\let\next\lstag@countleadingspaces@
\else% Character wasn't a space
\ifx\lstag@tabulator#1\relax
\advance\lstag@spacecount by \lst@tabsize\relax
% Accumulate spaces (i.e. their definitions) for later re-insertion:
\@tempcnta=\lst@tabsize\relax
\loop
\ifnum\@tempcnta>\z@
\expandafter\def\expandafter\lstag@spaceaccu\expandafter{\lstag@spaceaccu\lst@ProcessSpace}%
\advance\@tempcnta\m@ne
\repeat
\let\next\lstag@countleadingspaces@
\else% Character wasn't a tabulator either
% Set gobble option (indirect):
\xdef\lstag@gobble{\the\numexpr\lstag@spacecount-\lst@ungobble\relax}%
% Restore original definition of process macro:
\global\let\lstenv@Process\lstag@origlstenv@Process
% Re-insert all collected material or appropriate replacement material:
\edef\next{\noexpand\lstenv@Process\lstag@restofline\expandafter\noexpand\lstag@activenl\expandafter\unexpanded\expandafter{\lstag@spaceaccu}\noexpand#1}%
\fi\fi
\next
}
\endinput
%%
%% End of file `lstautogobble.sty'.
|