diff options
author | Karl Berry <karl@freefriends.org> | 2011-08-06 23:43:34 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-08-06 23:43:34 +0000 |
commit | 16695ef7a4b10944b7d2abadabe64dcf89fb4234 (patch) | |
tree | 495404b57007782201c42e198cfffaf48e6a7cf3 /Master/texmf-dist/tex/plain | |
parent | f031f598f31027d1018ef72f912ec392f411bb27 (diff) |
new plain package getoptk (28jun11)
git-svn-id: svn://tug.org/texlive/trunk@23436 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/plain')
-rw-r--r-- | Master/texmf-dist/tex/plain/getoptk/getoptk.tex | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/plain/getoptk/getoptk.tex b/Master/texmf-dist/tex/plain/getoptk/getoptk.tex new file mode 100644 index 00000000000..9c1b6ea3458 --- /dev/null +++ b/Master/texmf-dist/tex/plain/getoptk/getoptk.tex @@ -0,0 +1,285 @@ +\catcode`\@=11 +\def\gobble#1{} +\def\elet#1{% + \expandafter\let\expandafter#1% +} + +\def\csdef#1{% + \expandafter\def\csname #1\endcsname +} + +\def\cslet#1{% + \expandafter\let\csname #1\endcsname +} + +\def\gobble#1{} + +\def\getoptk@@#1#2{% + \beginnext + \toks2={{#1}{#2}}% + \edef\next{% + \noexpand\getoptk@@A\the\toks2 + {\expandafter\noexpand\csname + getoptk@behaviour@\getoptkactivedictionary @#1\endcsname}% + }% + \endnext +} + +\def\getoptk@@A#1#2#3{% + \beginnext + \toksloadcsexpansion\getoptkdictionary\to{\toks2}% + \toks4={\\{{#1}{#2}{#3}}}% + \edef\next{\noexpand\def\noexpand\getoptkdictionary{% + \the\toks2 + \the\toks4 + }% + }% + \endnext + \cslet{getoptk@dictionary@\getoptkactivedictionary}\getoptkdictionary + \beginnext + \def\getoptk@a{#2}% + \ifx\getoptk@a\empty + \toks4={}% + \else + \toks4={####1}% + \fi + \toks2={\def#3}% + \edef\next{\the\toks2\the\toks4}% + \endnext +} + +\def\toksloadcsexpansion#1\to#2{% + #2=\expandafter{#1}} +\def\tokscat#1\to#3{% + \beginnext + \edef\tokscat@a{\the#1\the#2}% + \toks2={#3}% + \toksloadcsexpansion\tokscat@a + \to{\toks4}% + \edef\next{\the\toks2={\the\toks4}}% + \endnext} +\def\beginnext{% + \begingroup + \let\next\undefined} +\def\endnext{% + \expandafter\endgroup\next} +\begingroup +\catcode`\*=13 +\def *#1{} +\global\futurelet\spacetoken*^^20\relax +\global\futurelet\newlinetoken*^^0a\relax +\endgroup +\def\readblanks\then#1\done{% + \beginnext + \def\next{#1}% + \readblanks@L} +\def\readblanks@L{% + \futurelet\readblanks@t\readblanks@A} +\def\readblanks@A{% + \let\readblanks@N\readblanks@E + \ifx\readblanks@t\spacetoken + \let\readblanks@N\readblanks@S + \fi + \ifx\readblanks@t\newlinetoken + \let\readblanks@N\readblanks@S + \fi + \ifx\readblanks@t\par + \let\readblanks@N\readblanks@I + \fi + \ifx\readblanks@t\input + \let\readblanks@N\readblanks@X + \fi + \readblanks@N} +\def\readblanks@E{\endnext} +\long\def\readblanks@S{% + \afterassignment\readblanks@L + \count0=0} +\def\readblanks@I#1{% + \readblanks@L} +\def\readblanks@X{% + \expandafter\readblanks@L} +\def\readletters\to#1\then#2\done{% + \beginnext + \toks2={#2}% + \toks4={#1}% + \toks6={}% + \readletters@L +} + +\def\readletters@L{% + \futurelet\readletters@t\readletters@A +} + +\def\readletters@A{% + \ifcat A\noexpand\readletters@t + \let\readletters@N\readletters@X + \else + \let\readletters@N\readletters@E + \fi + \readletters@N +} + +\def\readletters@X#1{% + \toks8={#1}% + \tokscat\toks6 &\toks8\to{\toks6}% + \readletters@L +} + +\def\readletters@E{% + \edef\next{\the\toks4={\the\toks6}\the\toks2}% + \endnext +} + +\newtoks\getoptkargument +\def\getoptk#1{% + \beginnext + \toks0={#1}% + \toks2={}% + \toks4={}% + \toks6={}% + \getoptkargument={}% + \getoptk@L} +\def\getoptk@E{% + \edef\next{% + \the\toks0{\the\toks2}% + \the\toks4}% + \endnext} +\def\getoptk@L{% + \readblanks\then\getoptk@A\done} +\def\getoptk@A{% + \readletters\to\toks4\then + \getoptk@B + \done} +\def\getoptk@B{% + \let\getoptk@N\getoptk@E + \let\\\getoptk@S + \getoptkdictionary + \getoptk@N} +\def\getoptk@S#1{\getoptk@T#1} +\def\getoptk@T#1#2#3{% + \edef\getoptk@a{\the\toks4}% + \def\getoptk@b{#1}% + \def\getoptk@p{#2}% + \ifx\getoptk@a\getoptk@b + \let\\\gobble + \toks6={}% + \toks8={#3}% + \def\getoptk@N{#2}% + \def\getoptk@a{}% + \ifx\getoptk@p\getoptk@a + \let\getoptk@N\getoptkcallback + \fi + \def\getoptk@a{[]}% + \ifx\getoptk@p\getoptk@a + \let\getoptk@N\getoptk@O + \fi + \fi} +\def\getoptkcallback{% + \tokscat\toks2 &\toks6\to{\toks2}% + \tokscat\toks2 &\toks8\to{\toks2}% + \def\getoptk@a{}% + \ifx\getoptk@p\getoptk@a + \toks6={}% + \else + \edef\getoptk@N{% + \toks6={% + {\the\getoptkargument}% + }% + }% + \getoptk@N + \fi + \tokscat\toks2 &\toks6\to{\toks2}% + \getoptk@L} +\newif\ifgetoptkbracket +\def\getoptk@O{% + \readblanks\then + \futurelet\getoptk@t\getoptk@P + \done} +\def\getoptk@P{% + \ifx\getoptk@t[%] + \toks6={\getoptkbrackettrue}% + \let\getoptk@N\getoptk@Q + \else + \toks6={\getoptkbracketfalse}% + \let\getoptk@N\getoptkcallback + \fi + \getoptk@N} +\def\getoptk@Q[#1]{% + \getoptkargument={#1}% + \getoptkcallback} +\def\getoptkmetaparser#1{% + \def\getoptkmetaparser@r{#1}% + \afterassignment\getoptkmetaparser@A + #1} +\def\getoptkmetaparser@A{% + \beginnext + \toks2=\expandafter{% + \getoptkmetaparser@r + }% + \edef\next{% + \noexpand + \getoptkmetaparser@B{\the\toks2}% + }% + \endnext} +\def\getoptkmetaparser@B#1{% + \edef\getoptk@N{% + \getoptkargument={\the#1}% + }% + \getoptk@N + \getoptkcallback} +\def\getoptkcountparser{% + \getoptkmetaparser{\count0 }} +\def\getoptkdimenparser{% + \getoptkmetaparser{\dimen0 }% +} + +\def\getoptkskipparser{% + \getoptkmetaparser{\skip0 }% +} + +\def\getoptkskipparser{% + \getoptkmetaparser{\skip0 }% +} + +\def\getoptktoksparser{% + \getoptkmetaparser{\toks0 }% +} +\def\newgetoptkdictionary#1{% + \cslet{getoptk@dictionary@#1}\empty + \setgetoptkdictionary{#1}% +} + +\def\setgetoptkdictionary#1{% + \def\getoptkactivedictionary{#1}% + \beginnext + \toks2={\let\getoptkdictionary}% + \toks4=\expandafter{\csname getoptk@dictionary@#1\endcsname}% + \edef\next{\the\toks2 \the\toks4}% + \endnext +} + +\def\defgetoptkflag#1{% + \getoptk@@{#1}{}% +} + +\def\defgetoptkbracket#1{% + \getoptk@@{#1}{[]}% +} + +\def\defgetoptkcount#1{% + \getoptk@@{#1}{\getoptkcountparser}% +} + +\def\defgetoptkdimen#1{% + \getoptk@@{#1}{\getoptkdimenparser}% +} + +\def\defgetoptkskip#1{% + \getopk@@{#1}{\getoptkskipparser}% +} + +\def\defgetoptktoks#1{% + \getopk@@{#1}{\getoptktoksparser}% +} +\catcode`\@=12 + |