diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/lstaddons/lstautogobble.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/lstaddons/lstautogobble.sty | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/lstaddons/lstautogobble.sty b/Master/texmf-dist/tex/latex/lstaddons/lstautogobble.sty new file mode 100644 index 00000000000..8f065b4a5c2 --- /dev/null +++ b/Master/texmf-dist/tex/latex/lstaddons/lstautogobble.sty @@ -0,0 +1,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'. |