summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/plain/gustlib/map/split.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/plain/gustlib/map/split.tex')
-rw-r--r--Master/texmf-dist/tex/plain/gustlib/map/split.tex63
1 files changed, 63 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/plain/gustlib/map/split.tex b/Master/texmf-dist/tex/plain/gustlib/map/split.tex
new file mode 100644
index 00000000000..252f1d358b1
--- /dev/null
+++ b/Master/texmf-dist/tex/plain/gustlib/map/split.tex
@@ -0,0 +1,63 @@
+% SPLIT.TEX
+
+% Marek Ry\'cko
+
+% Macro \split (and auxiliary macros)
+% for splitting token sequences
+% Macro \hdtl
+
+% version 0.0 24.07.1993
+% version 0.1 31.12.94
+% version 0.2 1.5.1996
+% -- english description
+
+\def\hdtl
+ #1% inp. t.s. (nonempty, poss blanks)
+ #2% outp. -- head
+ #3% outp. -- tail
+ {\let\reshead=#2% synonims for token-register names
+ \let\restail=#3%
+ \expandafter\gethead\the#1\endoftokens}
+\def\gethead
+ {\futurelet\thehead\analysehead}
+\def\analysehead
+ {\ifcat \noexpand\thehead \space
+ \let\followby=\followbyspace
+ \else
+ \let\followby=\followbynospace
+ \fi
+ \followby}
+\def\followbyspace
+ {\reshead={ }% space token
+ \afterassignment\gettail
+ \let\swallow= }% swallowing the head-space
+\def\gettail
+ #1\endoftokens
+ {\restail={#1}}
+\def\followbynospace
+ #1#2\endoftokens
+ {\reshead={#1}%
+ \restail={#2}}
+\def\split
+ #1% input macro name (should expand to nonemty token sequence)
+ #2% macro head (name)
+ #3% macro tail (name)
+ {%
+ % define
+ % #2 as the first token (with nested braces) of #1
+ % #3 as the tail (with nested braces) of #1
+ \expandafter\splithdtl\expandafter{#1}%
+ \expandafter\def\expandafter\splittest\expandafter{\the\splithdtl}%
+ \ifx\splittest\empty
+ \gdef#2{}%
+ \gdef#3{}%
+ \else
+ \hdtl\splithdtl\splithd\splittl
+ \expandafter\gdef\expandafter#2\expandafter{\the\splithd}%
+ \expandafter\gdef\expandafter#3\expandafter{\the\splittl}%
+ \fi
+ }
+\newtoks\splithdtl
+\newtoks\splithd
+\newtoks\splittl
+