|
|
% MAP.TEX
|
|
|
|
|
|
% Marek Ry\'cko
|
|
|
|
|
|
% Macro \map
|
|
|
% for applying operations to token sequences
|
|
|
|
|
|
% uses SPLIT.TEX
|
|
|
|
|
|
% version 0.0 24.07.1993
|
|
|
% version 0.1 1.5.1996
|
|
|
% -- english description
|
|
|
|
|
|
\def\map
|
|
|
% for each element E of the token list #2
|
|
|
% ``execute'' the token list #1
|
|
|
% possibly making use of the following macros:
|
|
|
% \mappre the token list before E (without E)
|
|
|
% \mapcur the token E
|
|
|
% \mappost the token list after E (without E)
|
|
|
% \mapupto the token list from the beginning till and including E
|
|
|
% \mapfrom the token list from and including E till the end
|
|
|
% \mapent the entire token list
|
|
|
%
|
|
|
% -------------\mapent----------------
|
|
|
% ---\mapfrom---------
|
|
|
% ----\mapupto-----
|
|
|
% ................E...................
|
|
|
% ----\mappre----- ---\mappost--------
|
|
|
%
|
|
|
% |
|
|
|
% |
|
|
|
% \mapcur
|
|
|
%
|
|
|
#1% operation
|
|
|
#2% token list
|
|
|
{{%
|
|
|
\def\mapent{#2}%
|
|
|
\def\mappre{}%
|
|
|
\let\mapfrom\mapent
|
|
|
% \mappre contains already processed sequence
|
|
|
% \mapfrom contains the sequence to be processed
|
|
|
% while nonempty \mapfrom do:
|
|
|
\ifx\empty\mapfrom \mapcontfalse \else \mapconttrue \fi
|
|
|
\loop \ifmapcont
|
|
|
% \mapfrom nonempty, so it can be split:
|
|
|
% split \mapfrom to head and tail:
|
|
|
\split\mapfrom\mapcur\mappost
|
|
|
% set \mapupto as the concatenation of \mappre and \mapcur:
|
|
|
\expandafter\expandafter\expandafter
|
|
|
\def\expandafter\expandafter\expandafter
|
|
|
\mapupto\expandafter\expandafter\expandafter
|
|
|
{\expandafter\mappre\mapcur}%
|
|
|
% execute operation(s):
|
|
|
#1%
|
|
|
% define new values of \mappre and \mapfrom
|
|
|
\expandafter\def\expandafter\mappre\expandafter{\mapupto}%
|
|
|
\expandafter\def\expandafter\mapfrom\expandafter{\mappost}%
|
|
|
% \mappre contains already processed sequence
|
|
|
% \mapfrom contains the sequence to be processed
|
|
|
\ifx\empty\mapfrom \mapcontfalse \else \mapconttrue \fi
|
|
|
\repeat}}%
|
|
|
\newif\ifmapcont
|
|
|
|