From ec47c1b7880fd4f626f8aa8377e576e03d72c24f Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 25 Oct 2010 23:10:59 +0000 Subject: new latex package parselines (25oct10) git-svn-id: svn://tug.org/texlive/trunk@20205 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/parselines/parselines.sty | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/parselines/parselines.sty (limited to 'Master/texmf-dist/tex/latex/parselines') diff --git a/Master/texmf-dist/tex/latex/parselines/parselines.sty b/Master/texmf-dist/tex/latex/parselines/parselines.sty new file mode 100644 index 00000000000..62ae077860e --- /dev/null +++ b/Master/texmf-dist/tex/latex/parselines/parselines.sty @@ -0,0 +1,116 @@ +%% +%% This is file `parselines.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% parselines.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% parselines : 2010/06/20 v1.0 - parselines : catch file between delimiters or tags +%% +%% 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 +%% +%% This work consists of the main source file parselines.dtx +%% and the derived files +%% parselines.sty, parselines.pdf, parselines.ins +%% +%% parselines : a simple line parser for TeX +%% Copyright (C) 2010 by Florent Chervet +%% +\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) + [2005/12/01]% LaTeX must be 2005/12/01 or younger +\ProvidesPackage{parselines} + [2010/08/13 v1.0 - a simple line parser for TeX] +\ifdefined\globtoks \globtoks\parselin@tk +\else \newtoks\parselin@tk +\fi +\newcommand\CollectEnvir{} +\protected\def\CollectEnvir#1{% + \gdef\parselin@Finish{#1% + \expandafter{\the\parselin@tk}% + \global\let\parselin@Finish\@undefined}% + \ifx\parselin@tk#1\else + \expandafter\def\expandafter\parselin@Finish + \expandafter{\parselin@Finish\parselin@tk{}}% + \if \relax + \expandafter\expandafter\expandafter\parselin@isatoken + \expandafter\meaning\expandafter#1\string\toks + \relax + \expandafter\gdef\expandafter\parselin@Finish + \expandafter{\expandafter\expandafter + \expandafter\def\expandafter\expandafter + \parselin@Finish}% + \fi\fi + \parselin@tk{}\def\parselin@stack{b}\parselin@Collect@Body +}% \CollectEnvir +\long\def\parselin@Collect@Body#1\end#2{% + \edef\parselin@stack{\parselin@PushBegins#1\begin\end\expandafter\@gobble\parselin@stack}% + \ifx\parselin@stack\@empty + \global\parselin@tk\expandafter{\the\parselin@tk#1}% + \aftergroup\parselin@Finish + \end{#2}% + \else + \parselin@tk\expandafter{\the\parselin@tk#1\end#2}% + \expandafter\parselin@Collect@Body % recurse + \fi +}% \parselin@Collect@Body +\long\def\parselin@PushBegins#1\begin#2{\ifx\end#2\else b\expandafter\parselin@PushBegins\fi} +\expandafter\def\expandafter\parselin@isatoken + \expandafter#\expandafter1\string\toks#2\relax{\detokenize{#2}\relax}% +\newenvironment{parse lines}[2][] +{% + #1% + \count@\z@\def\row{\number\count@}% + \def\parselin@ProcessLine##1{\advance\count@\@ne #2}% + \parselin@endlinechar{% + \def~##1~{% + \ifx\parselin@@@@@@##1\relax + \else \parselin@ProcessLine{##1}\expandafter~% + \fi}% + }% + \catcode\endlinechar\active + \CollectEnvir\parselin@tk +} +{% + \parselin@endlinechar{% + \parselin@tk\expandafter{\the\parselin@tk\parselin@@@@@@~}% + }\the\parselin@tk +}% +\long\def\parselin@endlinechar#1{\begingroup + \lccode`\~\endlinechar \lowercase{\endgroup#1}% +}% \parselin@endlinechar +\def\parselin@@@@@@{\parselin@@@@@@} +\newread\parselin@read +\newrobustcmd*\dofilebyline{\let\parselin@Finish\@empty + \@ifstar + \parselin@dobyline + {\edef\parselin@Finish{\endlinechar\the\endlinechar\relax}% + \endlinechar\m@ne + \parselin@dobyline}% +}% \dofilebyline +\newrobustcmd\parselin@dobyline[1]{% #1 = file name + \IfFileExists{#1} + \parselin@do@byline + {\PackageError{parselines} + {No file #1 found ! + \MessageBreak Your command \string\dobyline\space was ignored}\@eha + }% +}% \parselin@dobyline +\def\parselin@do@byline{% + \openin\parselin@read=\@filef@und% + \loop + \ifeof\parselin@read\else + \read\parselin@read to\@tempa + \expandafter\do\expandafter{\@tempa}% + \repeat + \parselin@Finish +}% \parselin@do@byline +\endinput +%% +%% End of file `parselines.sty'. -- cgit v1.2.3