%% Copyright (C) 2011-2012 by Martin Scharrer %% ----------------------------------------------------------------------- %% 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'.