[latex3-commits] [git/LaTeX3-latex3-latex2e] lthooks: use l3docstrip for the moment (to be reverted) (105180ad)

Frank Mittelbach frank.mittelbach at latex-project.org
Tue Jul 7 19:39:06 CEST 2020


Repository : https://github.com/latex3/latex2e
On branch  : lthooks
Link       : https://github.com/latex3/latex2e/commit/105180ad44e1d08dd5ea42829f6855fbf5d4bcb0

>---------------------------------------------------------------

commit 105180ad44e1d08dd5ea42829f6855fbf5d4bcb0
Author: Frank Mittelbach <frank.mittelbach at latex-project.org>
Date:   Tue Jul 7 19:39:06 2020 +0200

    use l3docstrip for the moment (to be reverted)


>---------------------------------------------------------------

105180ad44e1d08dd5ea42829f6855fbf5d4bcb0
 base/build.lua         |    1 +
 base/unpack.ins        |    2 +-
 support/l3docstrip.tex | 1187 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 1189 insertions(+), 1 deletion(-)

diff --git a/base/build.lua b/base/build.lua
index ecc9e4cf..72667179 100644
--- a/base/build.lua
+++ b/base/build.lua
@@ -124,6 +124,7 @@ unpacksuppfiles =
     "t1lmtt.fd",
     "ts1lmr.fd",
     "pdflatex.ini",
+    "l3docstrip.tex",
     "pdftexconfig.tex"
   }
 
diff --git a/base/unpack.ins b/base/unpack.ins
index b03dd5c6..978ed098 100644
--- a/base/unpack.ins
+++ b/base/unpack.ins
@@ -40,7 +40,7 @@
 %%  LaTeX 2e installation script (concurrent version)
 \let\documentclass\undefined
 \input ltdirchk.dtx
-\input docstrip.dtx
+\input ../local/l3docstrip.tex
 
 {
 \def\ProvidesFile#1\end#2{}
diff --git a/support/l3docstrip.tex b/support/l3docstrip.tex
new file mode 100644
index 00000000..08dd7ad6
--- /dev/null
+++ b/support/l3docstrip.tex
@@ -0,0 +1,1187 @@
+%%
+%% This is file `l3docstrip.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3docstrip.dtx  (with options: `program')
+%% 
+%% Copyright (C) 1990-2020 The LaTeX3 Project
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File l3dosctrip.dtx
+%%
+%% This is file `docstrip.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% docstrip.dtx  (with options: `initex,program,stats')
+%% 
+%% This is a generated file.
+%% 
+%% The source is maintained by the LaTeX Project team and bug
+%% reports for it can be opened at https://latex-project.org/bugs.html
+%% (but please observe conditions on bug reports sent to that address!)
+%% 
+%% 
+%% Copyright (C) 1993-2020
+%% The LaTeX3 Project and any individual authors listed elsewhere
+%% in this file.
+%% 
+%% This file was generated from file(s) of the LaTeX base system.
+%% --------------------------------------------------------------
+%% 
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%% 
+%% This file has the LPPL maintenance status "maintained".
+%% 
+%% This file may only be distributed together with a copy of the LaTeX
+%% base system. You may however distribute the LaTeX base system without
+%% such generated files.
+%% 
+%% The list of all files belonging to the LaTeX base distribution is
+%% given in the file `manifest.txt'. See also `legal.txt' for additional
+%% information.
+%% 
+%% The list of derived (unpacked) files belonging to the distribution
+%% and covered by LPPL is defined by the unpacking scripts (with
+%% extension .ins) which are part of the distribution.
+\catcode`\{=1
+\catcode`\}=2
+\def\filename{docstrip.dtx}
+\def\fileversion{2.5g}
+\def\filedate{2018/05/03}
+\def\docdate {2018/05/03}
+%%
+%% The docstrip program for use with TeX.
+%% Copyright (C) 1989-1991 Frank Mittelbach
+%% Copyright (C) 1992-1995 Johannes Braams, Denys Duchier,
+%%                         Frank Mittelbach
+%% Copyright (C) 1995 Marcin Woli\'nski
+%% Copyright (C) 1996-1997 Mark Wooding, Marcin Woli\'nski
+%% Copyright (C) 1998-2003 LaTeX3 project and the above authors
+%% All rights are reserved.
+%%
+\catcode`\Z=\catcode`\%
+\ifnum13=\catcode`\~{\egroup\else
+  \catcode`\Z=9
+Z
+Z  \catcode`\{=1  \catcode`\}=2
+Z  \catcode`\#=6  \catcode`\^=7
+Z  \catcode`\@=11 \catcode`\^^L=13
+Z  \let\bgroup={  \let\egroup=}
+Z
+Z  \dimendef\z@=10 \z@=0pt \chardef\@ne=1 \countdef\m at ne=22 \m at ne=-1
+Z  \countdef\count@=255
+Z
+Z  \def\wlog{\immediate\write\m at ne} \def\space{ }
+Z
+Z  \count10=22 % allocates \count registers 23, 24, ...
+Z  \count15=9 % allocates \toks registers 10, 11, ...
+Z  \count16=-1 % allocates input streams 0, 1, ...
+Z  \count17=-1 % allocates output streams 0, 1, ...
+Z
+Z  \def\alloc@#1#2#3{\advance\count1#1\@ne#2#3\count1#1\relax}
+Z
+Z  \def\newcount{\alloc at 0\countdef} \def\newtoks{\alloc at 5\toksdef}
+Z  \def\newread{\alloc at 6\chardef}   \def\newwrite{\alloc at 7\chardef}
+Z
+Z \def\newif#1{%
+Z   \count@\escapechar \escapechar\m at ne
+Z     \let#1\iffalse
+Z     \@if#1\iftrue
+Z     \@if#1\iffalse
+Z   \escapechar\count@}
+Z \def\@if#1#2{%
+Z   \expandafter\def\csname\expandafter\@gobbletwo\string#1%
+Z                     \expandafter\@gobbletwo\string#2\endcsname
+Z                        {\let#1#2}}
+Z
+Z  \def\@gobbletwo#1#2{}
+Z  \def\@gobblethree#1#2#3{}
+Z
+Z  \def\loop#1\repeat{\def\body{#1}\iterate}
+Z  \def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next}
+Z  \let\repeat\fi
+Z
+Z  \def\empty{}
+Z
+Z  \def\tracingall{\tracingcommands2 \tracingstats2
+Z    \tracingpages1 \tracingoutput1 \tracinglostchars1
+Z    \tracingmacros2 \tracingparagraphs1 \tracingrestores1
+Z    \showboxbreadth 10000 \showboxdepth 10000 \errorstopmode
+Z    \errorcontextlines 10000 \tracingonline1 }
+Z
+\bgroup}\fi\catcode`\Z=11
+\let\bgroup={  \let\egroup=}
+\catcode`\@=11
+\newlinechar=`\^^J
+\count@=128\relax
+\loop
+  \catcode\count@ 12\relax
+\ifnum\count@ <255\relax
+    \advance\count@\@ne
+\repeat
+\newif\ifGenerate
+\newif\ifContinue
+\newif\ifForlist
+\newif\ifDefault
+\newif\ifMoreFiles \MoreFilestrue
+\newif\ifaskforoverwrite \askforoverwritetrue
+\newcount\blockLevel \blockLevel\z@
+\newcount\emptyLines \emptyLines \z@
+\newcount\processedLines   \processedLines  \z@
+\newcount\commentsRemoved  \commentsRemoved \z@
+\newcount\commentsPassed   \commentsPassed  \z@
+\newcount\codeLinesPassed  \codeLinesPassed \z@
+\newcount\TotalprocessedLines   \TotalprocessedLines  \z@
+\newcount\TotalcommentsRemoved  \TotalcommentsRemoved \z@
+\newcount\TotalcommentsPassed   \TotalcommentsPassed  \z@
+\newcount\TotalcodeLinesPassed  \TotalcodeLinesPassed \z@
+\newcount\NumberOfFiles \NumberOfFiles\z@
+\newread\inFile
+\chardef\ttyin16
+\chardef\ttyout16
+\newread\inputcheck
+\newif\iftopbatchfile \topbatchfiletrue
+\def\ifToplevel{\relax\iftopbatchfile
+   \expandafter\iden \else \expandafter\@gobble\fi}
+\ifx\undefined\@@input \let\@@input\input\fi
+\def\batchinput#1{%
+   \begingroup
+     \def\batchfile{#1}%
+     \topbatchfilefalse
+     \Defaultfalse
+     \usepreamble\org at preamble
+     \usepostamble\org at postamble
+     \let\destdir\WriteToDir
+     \processbatchFile
+   \endgroup
+}
+\def\skip at input#1 {}
+\let\input\skip at input
+\def\guardStack{}
+\def\blockHead{}
+\def\yes{yes}
+\def\y{y}
+\def\n{n}
+\def\DefaultbatchFile{docstrip.cmd}
+{\catcode`\%=12
+ \gdef\perCent{%}
+ \gdef\DoubleperCent{%%}
+}
+\let\MetaPrefix\DoubleperCent
+\def^^L{ }
+\def\Name#1#2{\expandafter#1\csname#2\endcsname}
+\def\@stripstring{\expandafter\@gobble\string}
+\def\eltStart{}
+\def\eltEnd{}
+\def\qStop{\qStop}
+\def\pop#1#2{%
+  \ifx#1\empty
+    \Msg{Warning: Found end guard without matching begin}%
+    \let#2\empty
+  \else
+    \def\tmp{\expandafter\popX #1\qStop #1#2}%
+    \expandafter\tmp\fi}
+\def\popX\eltStart #1\eltEnd #2\qStop #3#4{\def#3{#2}\def#4{#1}}
+\def\push#1#2{\expandafter\pushX #1\qStop #1{\eltStart #2\eltEnd}}
+\def\pushX #1\qStop #2#3{\def #2{#3#1}}
+\def\forlist#1:=#2\do#3\od{%
+    \edef\ListCondition{#2}%
+    \Forlisttrue
+    \loop
+      \edef#1{\expandafter\FirstElt\ListCondition,\empty.}%
+      \edef\ListCondition{\expandafter\OtherElts\ListCondition,\empty.}%
+      \ifx#1\empty \Forlistfalse \else#3\fi
+      \ifForlist
+    \repeat}
+\def\FirstElt#1,#2.{#1}
+\def\OtherElts#1,#2.{#2}
+\def\whileswitch#1\fi#2{#1\loop#2#1\repeat\fi}
+\ifx\@tempcnta\undefined \newcount\@tempcnta \fi
+\@tempcnta=0
+\loop
+\Name\chardef{s@\number\@tempcnta}=0
+\csname newcount\expandafter\endcsname%
+  \csname off@\number\@tempcnta\endcsname
+\advance\@tempcnta1
+\ifnum\@tempcnta<16\repeat
+\let\s at do\relax
+\edef\@outputstreams{%
+  \s at do\Name\noexpand{s at 0}\s at do\Name\noexpand{s at 1}%
+  \s at do\Name\noexpand{s at 2}\s at do\Name\noexpand{s at 3}%
+  \s at do\Name\noexpand{s at 4}\s at do\Name\noexpand{s at 5}%
+  \s at do\Name\noexpand{s at 6}\s at do\Name\noexpand{s at 7}%
+  \s at do\Name\noexpand{s at 8}\s at do\Name\noexpand{s at 9}%
+  \s at do\Name\noexpand{s at 10}\s at do\Name\noexpand{s at 11}%
+  \s at do\Name\noexpand{s at 12}\s at do\Name\noexpand{s at 13}%
+  \s at do\Name\noexpand{s at 14}\s at do\Name\noexpand{s at 15}%
+  \noexpand\@nostreamerror
+  }
+\def\@nostreamerror{\errmessage{No more output streams!}}
+\def\@streamfound#1\@nostreamerror{\fi}
+\bgroup\edef\x{\egroup
+ \def\noexpand\@stripstr\string\s@{}}
+\x
+\chardef\stream at closed=16
+\def\StreamOpen#1{%
+  \chardef#1=\stream at closed
+  \def\s at do##1{\ifnum##1=0
+    \chardef#1=\expandafter\@stripstr\string##1 %
+    \global\chardef##1=1 %
+    \immediate\openout#1=\csname pth@\@stripstring#1\endcsname %
+    \@streamfound
+    \fi}
+  \@outputstreams
+  }
+\def\StreamClose#1{%
+  \immediate\closeout#1%
+  \def\s at do##1{\ifnum#1=\expandafter\@stripstr\string##1 %
+    \global\chardef##1=0 %
+    \@streamfound
+    \fi}
+  \@outputstreams
+  \chardef#1=\stream at closed
+  }
+\def\StreamPut{\immediate\write}
+\def\showprogress{\let\maybeMsg\message}
+\def\keepsilent{\let\maybeMsg\@gobble}
+\showprogress
+\def\Msg{\immediate\write\ttyout}
+\def\iden#1{#1}
+\def\strip#1#2 \@gobble{\def #1{#2}}
+\def\@defpar{\par}
+\def\Ask#1#2{%
+    \message{#2}\read\ttyin to #1\ifx#1\@defpar\def#1{}\else
+    \iden{\expandafter\strip
+       \expandafter#1#1\@gobble\@gobble} \@gobble\fi}
+\let\OriginalAsk=\Ask
+\def\askonceonly{%
+  \def\Ask##1##2{%
+    \OriginalAsk{##1}{##2}%
+    \global\let\Ask\OriginalAsk
+    \Ask\noprompt{%
+      By default you will be asked this question for every file.^^J%
+      If you enter `y' now,^^J%
+      I will assume `y' for all future questions^^J%
+      without prompting.}%
+    \ifx\y\noprompt\let\noprompt\yes\fi
+    \ifx\yes\noprompt\gdef\Ask####1####2{\def####1{y}}\fi}}
+\def\@gobble#1{}
+\edef\Endinput{\expandafter\@gobble\string\\endinput}
+\def\makeOther#1{\catcode`#1=12\relax}
+\ifx\undefined\@@end\else\let\end\@@end\fi
+\ifx\@temptokena\undefined \csname newtoks\endcsname\@temptokena\fi
+\def\@addto#1#2{%
+  \@temptokena\expandafter{#1}%
+  \edef#1{\the\@temptokena#2}}
+\def\@ifpresent#1#2#3#4{%
+  \def\tmp##1#1##2\qStop{\ifx!##2!}%
+  \expandafter\tmp#2#1\qStop #4\else #3\fi
+  }
+\def\tospaces#1{%
+  \ifx#1\secapsot\secapsot\fi\space\tospaces}
+\def\secapsot\fi\space\tospaces{\fi}
+\def\@spaces{\space\space\space\space\space}
+\def\uptospace#1 #2\qStop{#1}
+\def\afterfi#1#2\fi{\fi#1}
+\def\@ifnextchar#1#2#3{\bgroup
+  \def\reserved at a{\ifx\reserved at c #1 \aftergroup\@firstoftwo
+    \else \aftergroup\@secondoftwo\fi\egroup
+    {#2}{#3}}%
+  \futurelet\reserved at c\@ifnch
+  }
+\def\@ifnch{\ifx \reserved at c \@sptoken \expandafter\@xifnch
+      \else \expandafter\reserved at a
+      \fi}
+\def\@firstoftwo#1#2{#1}
+\def\@secondoftwo#1#2{#2}
+\iden{\let\@sptoken= } %
+\iden{\def\@xifnch} {\futurelet\reserved at c\@ifnch}
+\let\kernel at ifnextchar\@ifnextchar
+\def\Terminal#1#2#3{%
+  \expandafter\ifx\csname eT@#3\endcsname\relax
+    \afterfi{\Terminal{#1}{#2#3}}\else
+    \afterfi{\TerminalX{#1}{#2}#3}\fi
+  }
+\Name\let{eT@>}=1
+\Name\let{eT@&}=1 \Name\let{eT@!}=1
+\Name\let{eT@|}=1 \Name\let{eT@,}=1
+\Name\let{eT@(}=1 \Name\let{eT@)}=1
+\def\TerminalX#1#2{%
+  \ifx>#2> \errmessage{Error in expression: empty terminal}\fi
+  \Name\def{t@#2}##1,#2,##2\qStop{\ifx>##2>0\else1\fi}%
+  #1{\Name\noexpand{t@#2},##1,#2,\noexpand\qStop}%
+  }
+\def\Primary#1#2{%
+  \ifcase \ifx!#20\else\ifx(#21\else2\fi\fi\space
+  \afterfi{\Primary{\NPrimary{#1}}}\or
+  \afterfi{\Expression{\PExpression{#1}}}\or
+  \afterfi{\Terminal{#1}{}#2}\fi
+  }
+\def\NPrimary#1#2{%
+  #1{\noexpand\if1#20\noexpand\else1\noexpand\fi}%
+  }
+\def\PExpression#1#2#3{%
+  \ifx)#3\else
+    \errmessage{Error in expression: expected right parenthesis}\fi
+  #1{#2}}
+\def\Secondary#1{%
+  \Primary{\SecondaryX{#1}}}
+\bgroup\catcode`\&=12
+\gdef\SecondaryX#1#2#3{%
+  \ifx&#3%
+  \afterfi{\Secondary{\SecondaryXX{#1}{#2}}}\else
+  \afterfi{#1{#2}#3}\fi
+  }
+\egroup
+\def\SecondaryXX#1#2#3{%
+  #1{\noexpand\if0#20\noexpand\else#3\noexpand\fi}}
+\def\Expression#1{%
+  \Secondary{\ExpressionX{#1}}}
+\def\ExpressionX#1#2#3{%
+  \if0\ifx|#31\else\ifx,#31\fi\fi0
+  \afterfi{#1{#2}#3}\else
+  \afterfi{\Expression{\ExpressionXX{#1}{#2}}}\fi
+  }
+\def\ExpressionXX#1#2#3{%
+  #1{\noexpand\if1#21\noexpand\else#3\noexpand\fi}}
+\def\StopParse#1#2{%
+  \ifx>#2 \else\errmessage{Error in expression: spurious #2}\fi
+  \edef\Expr##1{#1}}
+\def\Evaluate#1{%
+  \Expression\StopParse#1>}
+\def\normalLine#1\endLine{%
+  \advance\codeLinesPassed\@ne
+  \maybeMsg{.}%
+  \def\inLine{#1}%
+  \let\do\putline at do
+  \activefiles
+  }
+\def\putline at do#1#2#3{%
+  \StreamPut#1{\inLine}}
+\def\removeComment#1\endLine{%
+    \advance\commentsRemoved\@ne
+    \maybeMsg{\perCent}}
+\bgroup\catcode`\%=12
+\iden{\egroup
+\def\putMetaComment%}#1\endLine{%
+  \advance\commentsPassed\@ne
+  \edef\inLine{\MetaPrefix#1}%
+  \let\do\putline at do
+  \activefiles
+  }
+\begingroup
+\catcode`\%=12 \catcode`\*=14
+\gdef\processLine#1{*
+  \advance\processedLines\@ne
+  \ifx%#1
+    \expandafter\processLineX
+  \else
+    \expandafter\normalLine
+  \fi
+  #1}
+\endgroup
+\begingroup
+\catcode`\%=12 \catcode`\*=14
+\gdef\processLineX%#1{*
+  \ifcase\ifx%#10\else
+         \ifx<#11\else 2\fi\fi\relax
+    \expandafter\putMetaComment\or
+    \expandafter\checkOption\or
+    \expandafter\removeComment\fi
+  #1}
+\endgroup
+\def\checkOption<#1{%
+  \ifcase
+    \ifx*#10\else \ifx/#11\else
+    \ifx+#12\else \ifx-#13\else
+    \ifx<#14\else 5\fi\fi\fi\fi\fi\relax
+  \expandafter\starOption\or
+  \expandafter\slashOption\or
+  \expandafter\plusOption\or
+  \expandafter\minusOption\or
+  \expandafter\verbOption\or
+  \expandafter\doOption\fi
+  #1}
+\def\doOption#1>#2\endLine{%
+  \maybeMsg{<#1 . >}%
+  \Evaluate{#1}%
+  \def\do##1##2##3{%
+    \if1\Expr{##2}\StreamPut##1{#2}\fi
+    }%
+  \activefiles
+  }
+\def\plusOption+#1>#2\endLine{%
+  \maybeMsg{<+#1 . >}%
+  \Evaluate{#1}%
+  \def\do##1##2##3{%
+    \if1\Expr{##2}\StreamPut##1{#2}\fi
+    }%
+  \activefiles
+  }
+\def\minusOption-#1>#2\endLine{%
+  \maybeMsg{<-#1 . >}%
+  \Evaluate{#1}%
+  \def\do##1##2##3{%
+    \if1\Expr{##2}\else \StreamPut##1{#2}\fi
+    }%
+  \activefiles
+  }
+\def\starOption*#1>#2\endLine{%
+  \maybeMsg{<*#1}%
+  \expandafter\push\expandafter\guardStack\expandafter{\blockHead}%
+  \advance\blockLevel\@ne
+  \def\blockHead{#1}%
+  \Evaluate{#1}%
+  \let\do\checkguard at do
+  \outputfiles
+  \let\do\findactive at do
+  \edef\activefiles{\activefiles}
+  }
+\def\checkguard at do#1#2#3{%
+  \ifnum#3>0
+    \advance#3\@ne
+  \else
+    \if1\Expr{#2}\else
+      \advance#3\@ne\fi
+  \fi}
+\def\findactive at do#1#2#3{%
+  \ifnum#3=0
+    \noexpand\do#1{#2}#3\fi}
+\def\slashOption/#1>#2\endLine{%
+  \def\tmp{#1}%
+  \ifnum\blockLevel<\@ne
+    \errmessage{Spurious end block </\tmp> ignored}%
+  \else
+    \ifx\tmp\blockHead
+      \pop\guardStack\blockHead
+    \else
+      \errmessage{Found </\tmp> instead of </\blockHead>}%
+    \fi
+    \maybeMsg{>}%
+    \advance\blockLevel\m at ne
+  \let\do\closeguard at do
+  \outputfiles
+  \let\do\findactive at do
+  \edef\activefiles{\outputfiles}
+  \fi
+  }
+\def\closeguard at do#1#2#3{%
+  \ifnum#3>0
+    \advance#3\m at ne
+  \fi}
+\def\verbOption<#1\endLine{{%
+  \edef\verbStop{\perCent#1}\maybeMsg{<<<}%
+  \let\do\putline at do
+  \loop
+    \ifeof\inFile\errmessage{Source file ended while in verbatim
+                             mode!}\fi
+    \read\inFile to \inLine
+  \if 1\ifx\inLine\verbStop 0\fi 1% if not inLine==verbStop
+    \activefiles
+    \maybeMsg{.}%
+  \repeat
+  \maybeMsg{>}%
+  }}
+\def\generate#1{\begingroup
+  \let\inputfiles\empty \let\filestogenerate\empty
+  \let\file\@file
+  #1
+  \ifx\filestogenerate\empty\else
+  \Msg{^^JGenerating file(s) \filestogenerate}\fi
+  \def\inFileName{\csname in@\outFileName\endcsname}%
+  \def\ReferenceLines{\csname ref@\outFileName\endcsname}%
+  \processinputfiles
+  \endgroup}
+\def\processinputfiles{%
+  \let\newinputfiles\empty
+  \inputfiles
+  \let\inputfiles\newinputfiles
+  \ifx\inputfiles\empty\else
+    \expandafter\processinputfiles
+  \fi
+  }
+\def\file#1#2{\errmessage{Command `\string\file' only allowed in
+                          argument to `\string\generate'}}
+\def\@file#1{%
+  \Generatetrue
+  \makepathname{#1}%
+  \ifaskforoverwrite
+    \immediate\openin\inFile\@pathname\relax
+    \ifeof\inFile\else
+      \Ask\answer{File \@pathname\space already exists
+                  \ifx\empty\destdir somewhere \fi
+                  on the system.^^J%
+                  Overwrite it%
+                  \ifx\empty\destdir\space if necessary\fi
+                  ? [y/n]}%
+      \ifx\y  \answer \else
+      \ifx\yes\answer \else
+                      \Generatefalse\fi\fi\fi
+    \closein\inFile
+  \fi
+  \ifGenerate
+  \Name\let{pth@#1}\@pathname
+  \@addto\filestogenerate{\@pathname\space}%
+  \Name\@fileX{#1\expandafter}%
+  \else
+    \Msg{Not generating file \@pathname^^J}%
+  \expandafter\@gobble
+  \fi
+  }
+\def\@fileX#1#2{%
+  \chardef#1=\stream at closed
+  \def\curout{#1}%
+  \let\curinfiles\empty
+  \let\curinnames\empty
+  \def\curref{\MetaPrefix ^^J%
+              \MetaPrefix\space The original source files were:^^J%
+              \MetaPrefix ^^J}%
+  \let\from\@from \let\needed\@needed
+  #2%
+  \let\from\err at from \let\needed\err at needed
+  \checkorder
+  \Name\@addto{e@\curin}{\noexpand\closeoutput{#1}}%
+  \Name\let{pre@\@stripstring#1\expandafter}\currentpreamble
+  \Name\let{post@\@stripstring#1\expandafter}\currentpostamble
+  \Name\edef{in@\@stripstring#1}{\expandafter\iden\curinnames}
+  \Name\edef{ref@\@stripstring#1}{\curref}
+  }
+\def\checkorder{%
+  \expandafter\expandafter\expandafter
+  \checkorderX\expandafter\curinfiles
+  \expandafter\qStop\inputfiles\qStop
+  }
+\def\checkorderX(#1)#2\qStop#3\qStop{%
+  \def\tmp##1\readsource(#1)##2\qStop{%
+    \ifx!##2! \order at error
+    \else\ifx!#2!\else
+       \checkorderXX##2%
+    \fi\fi}%
+  \def\checkorderXX##1\readsource(#1)\fi\fi{\fi\fi
+    \checkorderX#2\qStop##1\qStop}%
+  \tmp#3\readsource(#1)\qStop
+  }
+\def\order at error#1\fi\fi{\fi
+  \errmessage{DOCSTRIP error: Incompatible order of input
+              files specified for file
+              `\iden{\expandafter\uptospace\curin} \qStop'.^^J
+              Read DOCSTRIP documentation for explanation.^^J
+              This is a serious problem, I'm exiting}\end
+  }
+\def\needed#1{\errmessage{\string\needed\space can only be used in
+               argument to \string\file}}
+\let\err at needed\needed
+\def\@needed#1{%
+  \edef\reserved at a{#1}%
+  \expandafter\@need at d\expandafter{\reserved at a}}
+\def\@need at d#1{%
+  \@ifpresent{(#1)}\curinfiles
+    {\@need at d{#1 }}%
+    {\@ifpresent{\readsource(#1)}\inputfiles
+       {}{\@addto\inputfiles{\noexpand\readsource(#1)}%
+       \Name\let{b@#1}\empty
+       \Name\let{o@#1}\empty
+       \Name\let{e@#1}\empty}%
+     \@addto\curinfiles{(#1)}%
+     \def\curin{#1}}%
+  }
+\def\from#1#2{\errmessage{Command `\string\from' only allowed in
+                          argument to `\string\file'}}
+\let\err at from\from
+\def\@from#1#2{%
+  \@addto\curref{\MetaPrefix\space #1 \if>#2>\else
+                              \space (with options: `#2')\fi^^J}%
+  \needed{#1}%
+  \ifx\curinnames\empty
+     \Name\@addto{b@\curin}{\noexpand\openoutput\curout}%
+  \fi
+  \@addto\curinnames{ #1}%
+  \Name\@addto{o@\curin}{\noexpand\do\curout{#2}}%
+  }
+\def\readsource(#1){%
+  \immediate\openin\inFile\uptospace#1 \qStop\relax
+  \ifeof\inFile
+    \errmessage{Cannot find file \uptospace#1 \qStop}%
+  \else
+    \processedLines\z@
+    \commentsRemoved\z@
+    \commentsPassed\z@
+    \codeLinesPassed\z@
+    \let\refusedfiles\empty
+    \csname b@#1\endcsname
+    \Name\let{b@#1}\refusedfiles
+    \Msg{} \def\@msg{Processing file \uptospace#1 \qStop}
+    \def\change at msg{%
+      \edef\@msg{\@spaces\@spaces\@spaces\space
+        \expandafter\tospaces\uptospace#1 \qStop\secapsot}
+      \let\change at msg\relax}
+    \let\do\showfiles at do
+    \let\refusedfiles\empty
+    \csname o@#1\endcsname
+    \ifx\refusedfiles\empty\else
+      \@addto\newinputfiles{\noexpand\readsource(#1)}
+    \fi
+    \let\do\makeoutlist at do
+    \edef\outputfiles{\csname o@#1\endcsname}%
+    \let\activefiles\outputfiles
+    \Name\let{o@#1}\refusedfiles
+    \makeOther\ \makeOther\\\makeOther\$%
+    \makeOther\#\makeOther\^\makeOther\^^K%
+    \makeOther\_\makeOther\^^A\makeOther\%%
+    \makeOther\~\makeOther\{\makeOther\}\makeOther\&%
+    \endlinechar-1\relax
+    \@tempcnta=128\relax
+    \loop
+    \catcode\@tempcnta 12\relax
+    \ifnum\@tempcnta <255\relax
+    \advance\@tempcnta\@ne
+    \repeat
+    \loop
+      \read\inFile to\inLine
+      \ifx\inLine\Endinput
+        \Msg{File #1 ended by \string\endinput.}%
+        \Continuefalse
+      \else
+       \ifeof\inFile
+         \Continuefalse
+       \else
+         \Continuetrue
+         \ifx\inLine\empty
+            \advance\emptyLines\@ne
+          \else
+            \emptyLines\z@
+          \fi
+          \ifnum \emptyLines<2
+            \expandafter\processLine\inLine\endLine
+          \else
+            \maybeMsg{/}%
+          \fi
+       \fi
+      \fi
+    \ifContinue
+    \repeat
+    \closein\inFile
+  \csname e@#1\endcsname
+    \Msg{Lines \space processed: \the\processedLines^^J%
+         Comments removed: \the\commentsRemoved^^J%
+         Comments \space passed: \the\commentsPassed^^J%
+         Codelines passed: \the\codeLinesPassed^^J}%
+      \global\advance\TotalprocessedLines  by \processedLines
+      \global\advance\TotalcommentsRemoved by \commentsRemoved
+      \global\advance\TotalcommentsPassed  by \commentsPassed
+      \global\advance\TotalcodeLinesPassed by \codeLinesPassed
+      \global\advance\NumberOfFiles by \@ne
+    \fi}
+\def\showfiles at do#1#2{%
+  \ifnum#1=\stream at closed
+    \@addto\refusedfiles{\noexpand\do#1{#2}}%
+  \else
+    \Msg{\@msg
+         \ifx>#2>\else\space(#2)\fi
+         \space -> \@stripstring#1}
+    \change at msg
+  \csname off@\number#1\endcsname=\z@
+  \fi
+}
+\def\makeoutlist at do#1#2{%
+  \ifnum#1=\stream at closed\else
+    \noexpand\do#1{#2}\csname off@\number#1\endcsname
+  \fi}
+\def\openoutput#1{%
+  \if 1\ifnum\@maxfiles=\z@ 0\fi
+       \ifnum\@maxoutfiles=\z@ 0\fi1%
+    \advance\@maxfiles\m at ne
+    \advance\@maxoutfiles\m at ne
+    \StreamOpen#1%
+    \WritePreamble#1%
+  \else
+     \@addto\refusedfiles{\noexpand\openoutput#1}%
+  \fi
+  }
+\def\closeoutput#1{%
+  \ifnum#1=\stream at closed\else
+    \WritePostamble#1%
+    \StreamClose#1%
+    \advance\@maxfiles\@ne
+    \advance\@maxoutfiles\@ne
+  \fi}
+\def\ds at heading{%
+  \MetaPrefix ^^J%
+  \MetaPrefix\space This is file `\outFileName',^^J%
+  \MetaPrefix\space  generated with the docstrip utility.^^J%
+  }
+\def\AddGenerationDate{%
+  \def\ds at heading{%
+    \MetaPrefix ^^J%
+    \MetaPrefix\space This is file `\outFileName', generated %
+           on <\the\year/\the\month/\the\day> ^^J%
+    \MetaPrefix\space with the docstrip utility (\fileversion).^^J%
+ }}
+\let\inFileName\relax
+\let\outFileName\relax
+\let\ReferenceLines\relax
+\def\declarepreamble{\begingroup
+\catcode`\^^M=13 \catcode`\ =12 %
+\declarepreambleX}
+{\catcode`\^^M=13 %
+\gdef\declarepreambleX#1#2
+\endpreamble{\endgroup%
+  \def^^M{^^J\MetaPrefix\space}%
+  \edef#1{\ds at heading%
+          \ReferenceLines%
+          \MetaPrefix\space\checkeoln#2\empty}}%
+\gdef\checkeoln#1{\ifx^^M#1\else\expandafter#1\fi}%
+}
+\def\declarepostamble{\begingroup
+\catcode`\ =12 \catcode`\^^M=13
+\declarepostambleX}
+{\catcode`\^^M=13 %
+\gdef\declarepostambleX#1#2
+\endpostamble{\endgroup%
+  \def^^M{^^J\MetaPrefix\space}%
+  \edef#1{\MetaPrefix\space\checkeoln#2\empty^^J%
+          \MetaPrefix ^^J%
+          \MetaPrefix\space End of file `\outFileName'.%
+  }}%
+}
+\def\usepreamble#1{\def\currentpreamble{#1}}
+\def\usepostamble#1{\def\currentpostamble{#1}}
+\def\nopreamble{\usepreamble\empty}
+\def\nopostamble{\usepostamble\empty}
+\def\preamble{\usepreamble\defaultpreamble
+  \declarepreamble\defaultpreamble}
+\def\postamble{\usepostamble\defaultpostamble
+  \declarepostamble\defaultpostamble}
+\declarepreamble\org at preamble
+
+IMPORTANT NOTICE:
+
+For the copyright see the source file.
+
+Any modified versions of this file must be renamed
+with new filenames distinct from \outFileName.
+
+For distribution of the original source see the terms
+for copying and modification in the file \inFileName.
+
+This generated file may be distributed as long as the
+original source files, as listed above, are part of the
+same distribution. (The sources need not necessarily be
+in the same archive or directory.)
+\endpreamble
+\edef\org at postamble{\string\endinput^^J%
+  \MetaPrefix ^^J%
+  \MetaPrefix\space End of file `\outFileName'.%
+  }
+\let\defaultpreamble\org at preamble
+\let\defaultpostamble\org at postamble
+\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble
+\declarepreamble\originaldefault
+
+IMPORTANT NOTICE:
+
+For the copyright see the source file.
+
+You are *not* allowed to modify this file.
+
+You are *not* allowed to distribute this file.
+For distribution of the original source see the terms
+for copying and modification in the file \inFileName.
+
+\endpreamble
+\def\WritePreamble#1{%
+  \expandafter\ifx\csname pre@\@stripstring#1\endcsname\empty
+  \else
+    \edef\outFileName{\@stripstring#1}%
+    \StreamPut#1{\csname pre@\@stripstring#1\endcsname}%
+  \fi}
+\def\WritePostamble#1{%
+  \expandafter\ifx\csname post@\@stripstring#1\endcsname\empty
+  \else
+    \edef\outFileName{\@stripstring#1}%
+    \StreamPut#1{\csname post@\@stripstring#1\endcsname}%
+  \fi}
+\def\usedir#1{\edef\destdir{\WriteToDir}}
+\def\showdirectory#1{\WriteToDir}
+\def\BaseDirectory#1{%
+  \@setwritetodir
+  \let\usedir\alt at usedir
+  \let\showdirectory\showalt at directory
+  \edef\basedir{#1\dirsep}}
+\def\convsep#1/#2\qStop{%
+  #1\ifx\qStop#2\qStop \pesvnoc\fi\convsep\dirsep#2\qStop}
+\def\pesvnoc#1\qStop{\fi}
+\def\alt at usedir#1{%
+  \Name\ifx{dir@#1}\relax
+    \undefined at directory{#1}%
+  \else
+    \edef\destdir{\csname dir@#1\endcsname}%
+  \fi}
+\def\showalt at directory#1{%
+  \Name\ifx{dir@#1}\relax
+    \showundef at directory{#1}%
+  \else\csname dir@#1\endcsname\fi}
+\def\undefined at directory#1{%
+  \errhelp{docstrip.cfg should specify a target directory for^^J%
+   #1 using \DeclareDir or \UseTDS.}%
+  \errmessage{You haven't defined the output directory for `#1'.^^J%
+            Subsequent files will be written to the current directory}%
+  \let\destdir\WriteToDir
+  }
+\def\showundef at directory#1{UNDEFINED (label is #1)}
+\def\undefined at TDSdirectory#1{%
+  \edef\destdir{%
+    \basedir\convsep#1/\qStop
+  }}
+\def\showundef at TDSdirectory#1{\basedir\convsep#1/\qStop}
+\def\UseTDS{%
+  \@setwritetodir
+  \let\undefined at directory\undefined at TDSdirectory
+  \let\showundef at directory\showundef at TDSdirectory
+  }
+\def\DeclareDir{\@ifnextchar*{\DeclareDirX}{\DeclareDirX\basedir*}}
+\def\DeclareDirX#1*#2#3{%
+  \@setwritetodir
+  \Name\edef{dir@#2}{#1#3}}
+\def\generateFile#1#2#3{{%
+  \ifx t#2\askforoverwritetrue
+  \else\askforoverwritefalse\fi
+  \generate{\file{#1}{#3}}%
+  }}
+\def\include#1{\def\Options{#1}}
+\def\processFile#1#2#3#4{%
+  \generateFile{#1.#3}{#4}{\from{#1.#2}{\Options}}}
+\def\processfile{\Msg{%
+    ^^Jplease use \string\processFile\space instead of
+       \string\processfile!^^J}%
+    \processFile}
+\def\generatefile{\Msg{%
+    ^^Jplease use \string\generateFile\space instead of
+      \string\generatefile!^^J}%
+    \generateFile}
+\newcount\@maxfiles
+\def\maxfiles#1{%
+  \@maxfiles#1\relax
+  \ifnum\@maxfiles<4
+    \errhelp{I'm not a magician.  I need at least four^^J%
+             streams to be able to work properly, but^^J%
+             you've only let me use \the\@maxfiles.}%
+    \errmessage{\noexpand\maxfiles limit is too strict.}%
+    \@maxfiles4
+  \fi
+}
+\maxfiles{1972} % year of my birth (MW)
+\newcount\@maxoutfiles
+\def\maxoutfiles#1{%
+  \@maxoutfiles=#1\relax
+  \ifnum\@maxoutfiles<1
+    \@maxoutfiles1
+    \errhelp{I'm not a magician.  I need at least one output^^J%
+             stream to be able to do anything useful at all.^^J%
+             Please be reasonable.}%
+    \errmessage{\noexpand\maxoutfiles limit is insane}%
+  \fi
+}
+\maxoutfiles{16}
+\def\checkfilelimit{%
+  \advance\@maxfiles\m at ne
+  \ifnum\@maxfiles<2 %
+    \errhelp{There aren't enough streams left to do any unpacking.^^J%
+             I can't do anything about this, so complain at the^^J%
+             person who made such a complicated installation.}%
+    \errmessage{Too few streams left.}%
+    \end
+  \fi
+}
+\def\strip at meaning#1>{}
+\def\processbatchFile{%
+  \checkfilelimit
+  \let\next\relax
+  \openin\inputcheck \batchfile\relax
+  \ifeof\inputcheck
+    \ifDefault
+    \else
+      \errhelp
+        {A batchfile specified in \batchinput could not be found.}%
+      \errmessage{^^J%
+           **************************************************^^J%
+           * Could not find your \string\batchfile=\batchfile.^^J%
+           **************************************************}%
+    \fi
+  \else
+    \ifDefault
+      \Msg{**************************************************^^J%
+           * Batchfile \DefaultbatchFile\space found Use it? (y/n)?}%
+      \Ask\answer{%
+             **************************************************}%
+    \else
+      \let\answer\y
+    \fi
+    \ifx\answer\y
+      \closein\inputcheck
+      \def\next{\@@input\batchfile\relax}%
+    \fi
+  \fi
+  \next}
+\def\ReportTotals{%
+  \ifnum\NumberOfFiles>\@ne
+    \Msg{Overall statistics:^^J%
+         Files \space processed: \the\NumberOfFiles^^J%
+         Lines \space processed: \the\TotalprocessedLines^^J%
+         Comments removed: \the\TotalcommentsRemoved^^J%
+         Comments \space passed: \the\TotalcommentsPassed^^J%
+         Codelines passed: \the\TotalcodeLinesPassed}%
+  \fi}
+\def\SetFileNames{%
+    \edef\sourceFileName{\MainFileName.\infileext}%
+    \edef\destFileName{\MainFileName.\outfileext}}
+\def\CheckFileNames{%
+    \ifx\sourceFileName\destFileName
+      \Msg{^^J%
+     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
+     ! It is not possible to read from and write to the same file !^^J%
+     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}%
+      \Continuefalse
+    \else
+      \Continuetrue
+      \immediate\openin\inFile \sourceFileName\relax
+      \ifeof\inFile
+        \Msg{^^J%
+              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
+              ! Your input file `\sourceFileName' was not found !^^J%
+              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}%
+        \Continuefalse
+      \else
+        \immediate\closein\inFile
+        \immediate\openin\inFile\destdir \destFileName\relax
+        \ifeof\inFile
+          \Continuetrue
+        \else
+          \Continuefalse
+          \Ask\answer{File \destdir\destFileName\space already
+                      exists
+                      \ifx\empty\destdir somewhere \fi
+                      on the system.^^J%
+                      Overwrite it%
+                      \ifx\empty\destdir\space if necessary\fi
+                      ? [y/n]}%
+          \ifx\y  \answer \Continuetrue \else
+          \ifx\yes\answer \Continuetrue \else
+          \fi\fi
+        \fi
+      \fi
+    \fi
+    \closein\inFile}
+\def\interactive{%
+  \whileswitch\ifMoreFiles\fi%
+   {\begingroup
+      \AskQuestions
+      \forlist\MainFileName:=\filelist
+      \do
+        \SetFileNames
+        \CheckFileNames
+        \ifContinue
+        \generateFile{\destFileName}{f}%
+                     {\from{\sourceFileName}{\Options}}
+        \fi%
+      \od
+    \endgroup
+    \Ask\answer{More files to process (y/n)?}%
+    \ifx\y  \answer\MoreFilestrue \else
+    \ifx\yes\answer\MoreFilestrue \else
+                   \MoreFilesfalse\fi\fi
+   }}
+\def\AskQuestions{%
+    \Msg{^^J%
+         ****************************************************}%
+    \Ask\infileext{%
+         * First type the extension of your input file(s): \space  *}%
+    \Msg{****************************************************^^J^^J%
+         ****************************************************}%
+    \Ask\outfileext{%
+         * Now type the extension of your output file(s) \space: *}%
+    \Msg{****************************************************^^J^^J%
+         ****************************************************}%
+    \Ask\Options{%
+       * Now type the name(s) of option(s) to include \space\space: *}%
+    \Msg{****************************************************^^J^^J%
+         ****************************************************^^J%
+       * Finally give the list of input file(s) without \space\space*}%
+    \Ask\filelist{%
+         * extension separated by commas if necessary %
+                                  \space\space\space\space: *}%
+    \Msg{****************************************************^^J}}%
+\Msg{Utility: `docstrip' \fileversion\space <\filedate>^^J%
+     English documentation \space\space\space <\docdate>}%
+\Msg{^^J%
+     **********************************************************^^J%
+     * This program converts documented macro-files into fast *^^J%
+     * loadable files by stripping off (nearly) all comments! *^^J%
+     **********************************************************^^J}%
+\def\@setwritetodir{%
+  \let\setwritetodir\relax
+  \ifx\WriteToDir\@undefined
+    \ifx\@currdir\@undefined
+      \def\WriteToDir{}%
+    \else
+      \let\WriteToDir\@currdir
+    \fi
+  \fi
+  \let\destdir\WriteToDir
+  \def\tmp{[]}%
+  \ifx\tmp\WriteToDir
+    \ifx\dirsep\@undefined
+      \def\dirsep{.}%
+    \fi
+    \ifx\makepathname\@undefined
+      \def\makepathname##1{%
+        \edef\@pathname{\ifx\WriteToDir\destdir
+          \WriteToDir\else[\destdir]\fi##1}}%
+    \fi
+  \fi
+  \ifx\dirsep\@undefined
+    \def\dirsep{/}%
+    \def\tmp{:}%
+    \ifx\tmp\WriteToDir
+      \def\dirsep{:}%
+    \fi
+  \fi
+  \ifx\makepathname\@undefined
+    \def\makepathname##1{%
+      \edef\@pathname{\destdir\ifx\empty\destdir\else
+           \ifx\WriteToDir\destdir\else\dirsep\fi\fi##1}}%
+  \fi}
+\immediate\openin\inputcheck=docstrip.cfg\relax
+\ifeof\inputcheck
+  \Msg{%
+     ********************************************************^^J%
+     * No Configuration file found, using default settings. *^^J%
+     ********************************************************^^J}%
+\else
+  \Msg{%
+     ******************************************^^J%
+     * Using Configuration file docstrip.cfg. *^^J%
+     ******************************************^^J}%
+  \closein\inputcheck
+  \afterfi{\@@input docstrip.cfg\relax}
+\fi
+\@setwritetodir
+\def\process at first@batchfile{%
+  \processbatchFile
+  \ifnum\NumberOfFiles=\z@
+    \interactive
+  \fi
+  \endbatchfile}
+\def\endbatchfile{%
+  \iftopbatchfile
+    \ReportTotals
+    \expandafter\end
+  \else
+    \endinput
+  \fi}
+\edef\@jobname{\lowercase{\def\noexpand\@jobname{\jobname}}}%
+\@jobname
+\def\@docstrip{docstrip}%
+\edef\@docstrip{\expandafter\strip at meaning\meaning\@docstrip}
+\Defaultfalse
+\ifx\undefined\batchfile
+  \ifx\@jobname\@docstrip
+    \let\batchfile\DefaultbatchFile
+    \Defaulttrue
+  \else
+    \let\process at first@batchfile\relax
+  \fi
+\fi
+\process at first@batchfile
+%\endinput
+%%
+%% End of file `docstrip.tex'.
+
+\def\checkOption<#1{%
+  \ifcase
+    \ifx*#10\else \ifx/#11\else
+    \ifx+#12\else \ifx-#13\else
+    \ifx<#14\else \ifx @#15\else 6\fi\fi\fi\fi\fi\fi\relax
+  \expandafter\starOption\or
+  \expandafter\slashOption\or
+  \expandafter\plusOption\or
+  \expandafter\minusOption\or
+  \expandafter\verbOption\or
+  \expandafter\moduleOption\or
+  \expandafter\doOption\fi
+  #1%
+}
+\def\moduleOption @@=#1>#2\endLine{%
+  \maybeMsg{<@@=#1>}%
+  \prepareActiveModule{#1}%
+}
+\begingroup
+  \catcode`\_ = 12 %
+  \long\gdef\prepareActiveModule#1{%
+    \ifx\relax#1\relax
+       \let\replaceModuleInLine\empty
+    \else
+      \edef\replaceModuleInLine{%
+        \noexpand\replaceAllIn\noexpand\inLine{@@@@}{\string aa}%
+        \noexpand\replaceAllIn\noexpand\inLine{__@@}{__#1}%
+        \noexpand\replaceAllIn\noexpand\inLine{_@@}{__#1}%
+        \noexpand\replaceAllIn\noexpand\inLine{@@}{__#1}%
+        \noexpand\replaceAllIn\noexpand\inLine{\string aa}{@@}%
+      }%
+    \fi
+  }
+\endgroup
+\let\replaceModuleInLine\empty
+\long\def\replaceAllIn#1#2#3{%
+  \long\def\tempa##1##2#2{%
+    ##2\qMark\replaceAllInAuxIII#3##1%
+  }%
+  \edef#1{\expandafter\replaceAllInAuxI#1\qMark#2\qStop}%
+}
+\def\replaceAllInAuxI{%
+  \expandafter\replaceAllInAuxII\tempa\replaceAllInAuxI\empty
+}
+\long\def\replaceAllInAuxII#1\qMark#2{#1}
+\long\def\replaceAllInAuxIII#1\qStop{}
+\def\normalLine#1\endLine{%
+  \maybeMsg{.}%
+  \def\inLine{#1}%
+  \replaceModuleInLine
+  \let\do\putline at do
+  \activefiles
+}
+\def\doOption#1>#2\endLine{%
+  \maybeMsg{<#1 . >}%
+  \Evaluate{#1}%
+  \def\do##1##2##3{%
+    \if1\Expr{##2}%
+      \def\inLine{#2}%
+      \replaceModuleInLine
+      \StreamPut##1{\inLine}%
+    \fi
+  }%
+  \activefiles
+}
+%% 
+%%
+%% End of file `l3docstrip.tex'.





More information about the latex3-commits mailing list.