summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/nicetext/fifinddo.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/nicetext/fifinddo.sty')
-rw-r--r--Master/texmf-dist/tex/latex/nicetext/fifinddo.sty266
1 files changed, 224 insertions, 42 deletions
diff --git a/Master/texmf-dist/tex/latex/nicetext/fifinddo.sty b/Master/texmf-dist/tex/latex/nicetext/fifinddo.sty
index 3bdd7c4ff3b..2652ff75ac6 100644
--- a/Master/texmf-dist/tex/latex/nicetext/fifinddo.sty
+++ b/Master/texmf-dist/tex/latex/nicetext/fifinddo.sty
@@ -1,15 +1,15 @@
%% Macro package `fifinddo.sty' for LaTeX2e, %% FIDO, FIND!
-%% copyright (C) 2009 2010 Uwe L\"uck,
+%% copyright (C) 2009-2011 Uwe L\"uck,
%% http://www.contact-ednotes.sty.de.vu
%% -- author-maintained in the sense of LPPL below --
%% for processing tex(t) files
%% (checking, filtering, converting, substituting, expanding, ...)
-\def\fileversion{0.4a} \def\filedate{2010/04/04}
+\def\fileversion{0.42} \def\filedate{2011/01/25}
%% This file can be redistributed and/or modified under
%% the terms of the LaTeX Project Public License; either
-%% version 1.3a of the License, or any later version.
+%% version 1.3c of the License, or any later version.
%% The latest version of this license is in
%%
%% http://www.latex-project.org/lppl.txt
@@ -57,19 +57,49 @@
%% Therefore neither `\dospecials' nor `\@sanitize' are
%% used. Curly braces remain untouched as default delimiters in setup
%% macros. For matching them, you must use `\MakeOther\{' and
-%% `\MakeOther' in your `\PatternCodes', or |\Delimiters| to introduce
+%% `\MakeOther\}' %% corr. 2010/11/09
+%% in your `\PatternCodes', or |\Delimiters| to introduce
%% new ones at the same time, e.g., `\Delimiters\[\]':
\newcommand*{\Delimiters}[2]{%
- \MakeOther\{\MakeOther\}\catcode`#1=1\catcode`#2=2\relax}
+ \MakeOther\{\MakeOther\}\catcode`#1\@ne \catcode`#2=\tw@}
%%
%% For replacing strings or for defining other strings of ``other"
%% characters by `\edef', you can use some \LaTeX\ constructs---here
%% are copies |\PercentChar| and |\BackslashChar| of them
%% (do you need more?):
\newcommand*{\PercentChar}{} \let\PercentChar\@percentchar
-\newcommand*{\BackslashChar}{} \let\BackslashChar\@backslashcar
+\newcommand*{\BackslashChar}{} \let\BackslashChar\@backslashchar
+%% %% <- corr. typo 2010/11/25
+%%
+%% |\BasicNormalCatcodes| restores Plain~\TeX's
+%% \textbf{macro parsing} and comment character:
+\newcommand*{\BasicNormalCatCodes}{%
+ \catcode`\\\z@ \Delimiters\{\}%
+% \restorecr !?
+ \catcode`\ =10 \catcode`\%=14}
+%% However, reading files \emph{line by line} makes parsing of
+%% macro parameters somewhat difficult
+%% when the parameter code spans code lines.
+%% A line must not end with a curly brace when a macro requires
+%% another parameter; instead, it must contain the curly left
+%% brace for the next parameter.
+%%
+%% |\MakeActiveDef\<char>{<expand-to>}| makes <char> an active
+%% character expanding to <expand-to>
+\newcommand*{\MakeActiveDef}[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax \lowercase{\endgroup \def~}}
+%% (cf. `\@sverb'/`\do@noligs' in \LaTeX's 'doc.sty').
+%% This even allows defining active characters with parameters
+%% (suggested by Heiko Oberdiek LATEX-LIST 2010/09/18,
+%% may be nice for UTF-8).
+%% The macro has been used for conversion of text encodings.
+%% %% <- TODO atari.fdf
%%
+%%
%% == File handling ==
+%% \label{sec:files} %% 2010/11/10
\newwrite\result_file %% or write to \@mainaux!?
%% |\ResultFile{<output>}| opens (and empties) a file
%% <output> to be written into.
@@ -88,13 +118,35 @@
\string\ProvidesFile{\result_file_name}%
[\the\year/\two@digits\month/\two@digits\day\space
automatically generated with fifinddo.sty]}}%
-%% |\ProcessFileWith{<input>}{<loop-body>}| opens a file <input>
+%% %% opt arg 2010/04/06:
+%% |\ProcessFileWith[<changes>]{<input>}{<loop-body>}|
+%% opens a file <input>
%% and runs a loop on its lines the main body of which is <loop-body>.
%% When the <loop> starts, a new line of <input> is stored as macro
-%% %% <- the <loop> 2010/03/10
-%% |\fdInputLine|.
-\newcommand*{\ProcessFileWith}[2]{%
- \openin\@inputcheck=#1%
+%% |\fdInputLine|. The optional argument <changes> may change
+%% category codes used in reading <input>. It may be useful to
+%% read macros with arguments and active characters expanding
+%% in writing to the output file. Even these expansions may be
+%% defined here (local to the group like everything else
+%% happening here, unless ...).
+%% Macros |\BasicNormalCatcodes| and |\MakeActiveDef|
+%% have been created for this purpose (see previous section TODO).
+%% (It may be better to store
+%% these <changes> in another macro <macro> and to call
+%% `\ProcessFileWith[<macro>]{<input>}{<loop-body>}').
+%% More possible uses of some usual \TeX\ category codes may be
+%% (some of)
+%% \begin{itemize}
+%% \item avoiding matching substrings of control words,
+%% \item skipping blank spaces as \TeX\ does it usually,
+%% %% <- macro parsing + ...!?
+%% \item catching \emph{balanced} input pieces,
+%% \item ignoring comments,
+%% \item ignoring certain characters.
+%% \end{itemize}
+\newcommand*{\ProcessFileWith}[3][]{%
+ \typeout{`fifinddo' processing `#2'}%% 2010/04/15
+ \openin\@inputcheck=#2%
% \ifeof\@inputcheck %% bad `exists?' test
% \PackageError{fifinddo}{File `#1' not here}%
% {Mistyped?}%
@@ -108,32 +160,76 @@
%% <- cf. TeXbook "extended keyboards" up-/downarrow
%% -> "math specials", cf. "space specials"
\MakeOther\^^I% ASCII horizontal tab -- guessed!? ^^L!?
-%% With v3.1, we support non-ASCII:
+%% With v0.31, we support non-ASCII:
\count@=128
\loop
\ifnum\count@<\@cclvi
\catcode\count@=12
\advance\count@\@ne
\repeat
+ #1%
\loop \ifeof\@inputcheck \else
\read\@inputcheck to \fdInputLine
- \ignorespaces #2%
+ \ignorespaces #3%
+%% v0.42 supports |\IfFDpreviousInputEmpty|,
+%% cf. section \ref{sec:tails}:
+ \expandafter \let
+ \expandafter \IfFDpreviousInputEmpty
+ \ifx\fdInputLine\@empty \@firstoftwo
+ \else \@secondoftwo \fi
\repeat
\endgroup
% \fi
\closein\@inputcheck}
-%% |\CloseResultFile| closes <output>.
-\newcommand*{\CloseResultFile}{\immediate\closeout\result_file}
-%%
%% TODO: write EOF for debugging!?---%% 2010/03/18
%% Peter Wilson's \ctanpkgref{newfile}
%% provides more powerful file handling.
%% % <- TODO relevant? 2009/04/12
%%
-%% %% \pagebreak %% removed 2010/03/24
-%% TODO move theory to fifinddo.tex 2009/04/12
+%% |\CopyFile[<changes>]{<file>}|
+%% is an application of `\ProcessFileWith'
+%% that ``copies" the content of file <file>
+%% into the file specified by `\WriteResult'.
+%% However, optional <changes> allows some
+%% ``modifications" while ``copying"---especially,
+%% conversion of text encodings by active characters
+%% and expanding macros for generating HTML
+%% or other code. The ``starred" variant
+%% |\CopyFile*| copies one empty line only
+%% when one empty line in the input file is followed
+%% by more of them.
+\newcommand*{\CopyFile}{%
+ \@ifstar{\let\FD@copy@style\FD@compress@voids \FD@copyfile}%
+ {\let\FD@copy@style\CopyLine \FD@copyfile}}
+\newcommand*{\FD@copyfile}[2][]{%
+ \ProcessFileWith[#1]{#2}{\FD@copy@style\message{.}}}
+%% % <- message 2010/11/13
+%% |\CopyLine|
+\newcommand*{\CopyLine}{\WriteResult\fdInputLine}
+%% (... added `\space' without success with macro arguments
+%% 2010/04/26 --- `\BlogCodes' has used a better solution
+%% later).
+\newcommand*{\FD@compress@voids}{%
+ \IfFDinputEmpty{\IfFDpreviousInputEmpty\relax\CopyLine}%
+ \CopyLine}
+%% Another difference to some \ctanpkgref{verbatimcopy}
+%% is that `\CopyFile' really was meant to
+%% be used for creating a HTML file from some \emph{number} of
+%% sources, especially for shared head sections (however,
+%% I have used macros for this purpose so far), a navigation column,
+%% the main varying ``blog-like" content, and finally a shared
+%% footer section.
+%% In the meantime, however, I have chosen another variant
+%% for generating HTML that
+%% replaces an empty line by a line consisting of \verb+<p>+.
+%%
+%% |\CloseResultFile| closes <output>.
+\newcommand*{\CloseResultFile}{\immediate\closeout\result_file}
+%%
+%% \pagebreak
%% == Basic handling of substring conditionals ==
%% \label{sec:theory}
+%% %% TODO move theory to fifinddo.tex 2009/04/12
%% === ``Substring Theory" ===
%% \begin{flushright}\it
%% I wished I could study string theory,\\
@@ -161,10 +257,16 @@
%% We can test #1 and #2 on being empty by `\ifx$#1$' and `\ifx$#2$'.
%% If #2 is empty, <pattern> is \emph{not} in <target>.
%% If #1 is empty at the same time, <target> is empty.
-%% If #1 is empty and #2 is not, <pattern> \emph{starts} <target>!
+%% If #1 is empty and #2 is not, <pattern> \emph{starts}
+%% <target>!\footnote{%% 2011/01/25:
+%% This is just as wrong as the next claim.}
%% This can be used to implement
%% Wikipedia-like lists %% TODO 2009/04/11
-%% and to distinguish package code from comments in 'makedoc'.
+%% and to distinguish package code from comments in
+%% 'makedoc'.\footnote{%% 2011/01/25:
+%% Due to the special substrings to test in this
+%% application, this is true although the
+%% surrounding claims are wrong.}
%%
%% If #2 is \emph{not} empty, <pattern> occurs in <target>---or this once
%% was \emph{thought}, some time in developping the present package,
@@ -212,7 +314,8 @@
%% <pattern> has a \emph{period} $p$---less than its length---in the sense of that
%% the $p$th token to the right or left of each token in <pattern>
%% is the \emph{same} token.
-%% `AMSTERDAM' has a period 8, `day after day' 10, `bonbon' 3, `bonobo' 4.
+%% `AMSTERDAM' has a period 7, %% was 8 2011/01/20
+%% `day after day' 10, `bonbon' 3, `bonobo' 4.
%% There is a counterexample <target> of length $p$ iff
%% <pattern> has period $p$, namely the first substring of <pattern>
%% having length $p$. If the length of <pattern> exceeds a multiple
@@ -321,7 +424,19 @@
%% This really is not \LaTeX. We are starting defining a macro
%% `\substr_cond:<id>' in primitive \TeX\ with `\def' in the form
%% \[`\def\substr_cond:<id>#1<pattern>#2&'\]
-%% where `\csname' etc. render \lq`:<id>'\rq\ part of the macro name.
+%% where `\csname' etc. render \lq`:<id>'\rq\ part of the macro
+%% name.\footnote{%% 2010/11/27:
+%% Loosely speaking of ``the parser" <parser> around
+%% here somehow refers to this macro---but rather to
+%% its ``parameter text" only,
+%% according to \TeX book p.~203. Such a macro,
+%% however, won't ``parse" only, but it will also
+%% execute some job on the results of parsing.
+%% Or: a ``mere parsing" macro might be macro that
+%% transforms a ``weird" Plain \TeX\ parameter text
+%% into a ``simple" parameter text of another macro,
+%% consisting of hash marks and digits only. E.g.:
+%% &\def&\Foo#1<pattern>#2&&{&\foo{#1}{#2}}.}
%% The user or programmer macro produces the part of the definition
%% until the delimiter `&' to match the sandbox. You have to add
%% (maybe) #3 etc. and the `{<definition text>}'
@@ -367,7 +482,8 @@
%% `setup_substr_cond' is the name space for macros that build
%% sandboxes and initialize arguments for conditional macros.
\def\setup_substr_cond{setup_substr_cond:}
-%% \[|\MakeSetupSubstringCondition{<id>}[<changes>]{<pattern>}{<more-args>}|\]
+%% |\MakeSetupSubstringCondition{<id>}[<changes>]{<pattern>}{<more-args>}|\\
+%% [\topsep] %% 2010/11/25
%% % <- TODO allow `%' and ` ' for breaking code lines.
%% ---same <id>, <changes>, <pattern> as for
%% `\MakeSubstringConditional' (this is bad, there may be
@@ -419,8 +535,8 @@
\expandafter #1\expandafter {\RemoveDummyPattern #2}}
%% |\RemoveTilde| is used to remove the tilde that separated
%% the dummy pattern from <split1>.
-% %% An alternative policy is to pass
-% %% <target> (as an argument) to the parsing macro.
+%% %% An alternative policy is to pass %% TODO 2011/01/25
+%% %% <target> (as an argument) to the parsing macro.
\newcommand{\RemoveTilde}{} \def\RemoveTilde#1~{#1}
%% |\RemoveTildeArg<macro>{<arg>}| executes `\RemoveTilde'
%% in the next argument:
@@ -428,7 +544,7 @@
\expandafter #1\expandafter {\RemoveTilde #2}}
%%
%% === Calling conditionals ===
-%% |\ProcessStringWith{<target-string>}{<id>}| builds the sandbox
+%% |\ProcessStringWith{<target-string>}{<id>}| \ builds the sandbox
%% to search <target-string> for the <pattern> associated with the
%% parser-conditional that is identified by <id>, the sandbox then
%% calls the parser.
@@ -439,16 +555,20 @@
\newcommand*{\ProcessStringWith}[2]{%
\csname \setup_substr_cond #2\endcsname{#1}}
%% |\ProcessExpandedWith{<string-macro>}{<id>}| does the same but with
-%% a \emph{macro} (like `\fdInputLine' or `\OutputString') in which
-%% the string to be tested is stored.
-%% %% TODO or \the<tok-reg> 2010/03/25
+%% %% changed, intro toks 2010/04/06:
+%% a \emph{macro} <string-macro>
+%% (like `\fdInputLine' or `\OutputString')
+%% that stores the string to be tested.
+%% |\ProcessExpandedWith{\the<toks>}{<id>}| with a token list
+%% parameter or register <toks> may be used as well.
\newcommand*{\ProcessExpandedWith}[2]{%
\csname \setup_substr_cond #2\expandafter \endcsname
\expandafter{#1}}
%% I would have preferred the reversed order of arguments which seems
-%% to be more natural, but the present is more efficient.
+%% to be more natural, but the present one is more efficient.
%% Macros with reversed order are currently stored after `\endinput'
-%% in section~\ref{sec:pondered}, may be they once return.
+%% in section~\ref{sec:pondered}, maybe they once return.
+%% %% <- minor corr.s 2010/11/27
%%
%% Anyway, most desired will be |\ProcessInputWith{<id>}| just
%% applying to `\fdInputLine':
@@ -501,7 +621,7 @@
%% starts a line or the line is empty altogether (this must be
%% decided by another test).
%%
-%% |\IfFDempty{<arg>}{<when-empty>}{<when-not-empty>}|
+%% |\IfFDempty{<arg>}{<when-empty>}{<when-not-empty>}| \
%% is used to test <arg> on emptyness (without expanding it):
\newcommand*{\IfFDempty}[1]{%
\ifx$#1$\expandafter \@firstoftwo \else
@@ -512,7 +632,8 @@
\newcommand*{\IfFDinputEmpty}{%
\ifx\fdInputLine\@empty \expandafter \@firstoftwo \else
\expandafter \@secondoftwo \fi}
-%% |\IfFDdollar{<arg>}{<when-empty>}{<when-not-empty>}|
+%% |\IfFDdollar{<arg>}{<when-dollar>}{<when-not-dollar>}|
+%% %% <- dollar<-empty
%% is another variant, testing <split2> for being `$',
%% main indicator of there is a match anywhere in <target>
%% (as opposed to starting or ending match):
@@ -535,6 +656,21 @@
%% \emph{one} test of emptiness per input line should suffice---it
%% may be left open whether this should be the first of all tests
%% \dots
+%%
+%% |\IfFDpreviousInputEmpty{<when-empty>}{<when-not-empty>}|
+%% (v0.42)
+%% is a companion of `\IfFDpreviousInputEmpty' referring to
+%% `\fdInputLine' as of the \emph{previous} run of the loop
+%% in `\ProcessFileWith', cf. section~\ref{sec:files},
+%% where its choice among its two arguments is determined.
+%% It is initialized as follows:
+\newcommand*{\IfFDpreviousInputEmpty}[2]{#2}
+%% ---which is same as
+\let\IfFDpreviousInputEmpty\@secondoftwo
+%% ... working like `false', somewhat.
+%% Together with `\IfFDinputEmpty', it can be used to compress
+%% multiple adjacent empty lines into a single one
+%% when copying a file.
%%
%% === Line counter ===
%% A \LaTeX\ counter |fdInputLine| may be useful for screen or log
@@ -553,7 +689,7 @@
%% be used to issue commands ``from outside" at a place where
%% executing the command is safe or appropriate.
\newcounter{fdInputLine}
-%% You then must insert |\CountInputLines| in the second argument
+%% You then must insert \ |\CountInputLines| \ in the second argument
%% of `\ProcessFileWith' (or in a macro called from there)
%% so that the counter is stepped. %% TODO!? 2009/04/07
\newcommand*{\CountInputLines}{\global\advance\c@fdInputLine\@ne}
@@ -580,7 +716,7 @@
\csname \setup_substr_cond LEAVE\endcsname \@firstofone
%% I.e., `\ProcessStringWith{<string>}{LEAVE}' expands to <string>
%% ... \ProcessStringWith{(Indeed!)}{LEAVE}
-
+%%
%% == Setup for expandable chains of replacements ==
%% \label{sec:replchain}%% TODO makedoc: provide less visible label/ref 2009/04/11
%% By the following means, you can create macros
@@ -589,7 +725,7 @@
%% the result of applying a chain (sequence) of stringwise replacements
%% to <string>.
%% You can even write a transformed input <string> to a file
-%% without defining anything anything after `\read to'\,.\,.\,.
+%% without defining anything after `\read to'\,.\,.\,. %% corr. 2010/11/24
%% In this case however, you don't get any statistical message
%% about what happened or not. With `\edef\OutputString' you can at
%% least issue some `changed!' or `left!' (maybe `\message{!}' vs.\
@@ -597,6 +733,7 @@
%% There is an application in 'makedoc' for ``typographical upgrading"
%% from plain text to \TeX\ input.
%%
+%% === The backbone macro ===
%% |\repl_all_chain_expandable| will be the backbone of the
%% replacements. It is called by some parsing macro <parser>
%% and receives from the latter <split1>~=~#1 and <split2>~=~#2.
@@ -605,7 +742,8 @@
%% #1, #2 splits, #3 past, #4 substitute,
%% #5 repeat parser, #6 pass to
% \ifx~#2\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
-%% The previous line would be somewhat faster, but let us exemplify
+%% The previous line (or something similar!?) %% add. 2010/11/24
+%% would be somewhat faster, but let us exemplify
%% `\IfFDdollar' from section~\ref{sec:tails} instead:
\IfFDdollar{#2}%
%% If #2 starts with `$'---with category code 3, ``math shift"!,
@@ -636,9 +774,11 @@
%% Finally, #5 and #6 again ``recall" <parser> and the sandbox
%% builder to which to change in case of no other match.
%%
-%% \pagebreak[3] %% 2010/03/22
%% % TODO move following up!? 2009/04/11
-%% \[|\MakeExpandableAllReplacer{<id>}[<chng>]{<find>}{<replace>}{<id-next>}|\]
+%% === The basic setup interface macro ===
+%% |\MakeExpandableAllReplacer{<id>}[<chng>]{<find>}{<replace>}{<id-next>}|\\
+%% [\topsep]
+%% %% \[|\MakeExpandableAllReplacer{<id>}[<chng>]{<find>}{<replace>}{<id-next>}|\]
%% creates sandbox and parser with common identifier <id> and search
%% pattern <find>. Each occurrence of <find> will be replaced by
%% <replace>. When <find> is not found, the sandbox builder for
@@ -676,7 +816,10 @@
\repl_all_chain_expandable{##1}{##2}}}
%% The final command is the one that we explained first. %% TODO 2009/04/11
%%
-%% \[|\PrependExpandableAllReplacer{<id>}[<cat>]{<find>}{<replace>}|\]
+%% === Half-automatic chaining ===
+%% |\PrependExpandableAllReplacer{<id>}[<cat>]{<find>}{<replace>}| %%\\
+%% %% [\topsep]
+%% %% \[|\PrependExpandableAllReplacer{<id>}[<cat>]{<find>}{<replace>}|\]
%% is hoped to be a slight relief in composing replacement chains.
%% It does something like invoking `\MakeExpandableAllReplacer'
%% with <prev-setup-id> for the last <next-id> argument
@@ -690,13 +833,29 @@
%% `\PrependExpandableAllReplacer{<id-2>}{<find-2>}{<subst-2>}'
%% \end{quote}
%% and call <id-2>, it will call <id-1>, and the latter will call
-%% <id-0>. So you can reorder the chain my moving `\Prepend'... lines.
+%% <id-0>. So you can reorder the chain by moving `\Prepend'... lines.
\newcommand*{\PrependExpandableAllReplacer}{%
\let\fdParserId_before\fdParserId
\StartFDsetup\prep_xpdbl_all_repl}
\newcommand*{\prep_xpdbl_all_repl}[2]{%
\mk_setup_xpdbl_all_repl{#1}{#2}{\fdParserId_before}}%
-%%
+%% |\StartPrependingChain| makes `\MakeExpandableReplacer'
+%% superfluous, in the sense that
+%% the above chain setup can be achieved as well like this:
+%% \begin{quote}
+%% `\StartPrependingChain'\\
+%% `\PrependExpandableAllReplacer{<id-0>}{<find-0>}{<subst-0>}'\\
+%% `\PrependExpandableAllReplacer{<id-1>}{<find-1>}{<subst-1>}'\\
+%% `\PrependExpandableAllReplacer{<id-2>}{<find-2>}{<subst-2>}'
+%% \end{quote}
+%% This adds a code line, but this way you can choose
+%% the final ``real" job more easily. So you can think of
+%% `\StartPrependingChain' as ``initializing a chain of
+%% prependments."
+\newcommand*{\StartPrependingChain}{\def\fdParserId{LEAVE}}
+%% Use automatic ids another time ... TODO %% 2010/11/24
+%%
+%% === `CorrectHook' launching the replacement chain ===
%% %% 2010/03/29:
%% |\MakeDocCorrectHook{<string>}| belongs to 'makedoc',
%% but in the meantime ('nicetext' release 0.3)
@@ -802,6 +961,29 @@ v0.4 2010/03/24 removed \pagebreak before "substrings";
<relation> with \HardNVerb;
don't mention \begingroup with
\mk_setup_substr_cond; renamed v0.4
+belonged to nicetext RELEASE 0.4
v0.4a 2010/04/04 copyright 2010
+belonged to nicetext RELEASE 0.41
+
+v0.41 2010/04/06 more on \ProcessExpanded...;
+ \ProcessFile... gets opt arg
+ 2010/04/13 \ProcessFile{<file>}... shows <file>
+used by blog.sty v0.1, v0.2
+v0.42 2010/11/09 typo corr.
+ 2010/11/10 \IfFDpreviousInputEmpty
+ 2010/11/11 \BasicNormalCatcodes from blog.sty,
+ \CopyFile*, \CopyLine; v3. -> v0.3;
+ LPPL v1.3c
+ 2010/11/12 \CatCode replaced (implemented in niceverb only)
+ 2010/11/13 \CopyFile with \message{.}
+ 2010/11/24 reworked doc. of replacement setup;
+ \StartPrependingChain
+ 2010/11/25 corr. typo \@backslash...; doc. changes;
+ \CopyLine indeed, not \fdCopyLine
+ 2010/11/27 footnote on "parser", other doc. corr.s
+ 2011/01/20 corr. "period" AMSTERDAM
+ 2011/01/25 updated (C); footnotes to `substring theory';
+ TODO with \RemoveTilde; some manual line spacings
+ (adding `\ ')
TODO: cleveref 2010/03/18