%%
%% This file was generated by the docstrip utility from toolbox.dtx.
%% You may distribute this file only together with the source toolbox.dtx
%% (and if possible with toolbox.ins) and only if these files are unmodified.
%%
%% Author:
%%
%% M. V\"ath      vaeth@mathematik.uni-wuerzburg.de
%%

\ifx\typeout\undefined
  \def\tbx@tmp{\immediate\write17}\expandafter\tbx@tmp
\else
  \expandafter\typeout
\fi{toolbox.sty by M. Vaeth: The TeX Programmer's Toolbox 5.1}

%% First, some LaTeX support:
%% We inform LaTeX that this is a package, and we test whether we would
%% override some existing commands.

\ifx\ProvidesPackage\undefined\else
  \ProvidesPackage{toolbox}[2004/04/29 v5.1]
\fi

\ifx\newcommand\undefined\else
  \newcommand{\toolboxMakeDef}{}
  \newcommand{\toolboxFreeDef}{}
  \newcommand{\toolboxFuturelet}{}
  \newcommand{\toolboxGobbleNext}{}
  \newcommand{\toolboxIfNextToken}{}
  \newcommand{\toolboxIfNextGobbling}{}
  \newcommand{\toolboxIfEmpty}{}
  \newcommand{\toolboxIfx}{}
  \newcommand{\toolboxIfX}{}
  \newcommand{\toolboxIfElse}{}
  \newcommand{\toolboxLoop}{}
  \newcommand{\toolboxLoopName}{}
  \newcommand{\toolboxToken}{}
  \newcommand{\toolboxTokenName}{}
  \newcommand{\toolboxTokDef}{}
  \newcommand{\toolboxDef}{}
  \newcommand{\toolboxAppend}{}
  \newcommand{\toolboxSplitAt}{}
  \newcommand{\toolboxMakeSplit}{}
  \newcommand{\toolboxFreeSplit}{}
  \newcommand{\toolboxReplace}{}
  \newcommand{\toolboxReplaceSplit}{}
  \newcommand{\toolboxMakeHarmless}{}
  \newcommand{\toolboxDropBrace}{}
  \newcommand{\toolboxIf}{}
  \newcommand{\toolboxNewiftrue}{}
  \newcommand{\toolboxNewiffalse}{}
  \newcommand{\toolboxLet}{}
  \newcommand{\toolboxWithNr}{}
  \newcommand{\toolboxEmpty}{}
  \newcommand{\toolboxSpace}{}
  \newcommand{\toolboxSpaceToken}{}
  \newcommand{\toolboxFirstOfTwo}{}
  \newcommand{\toolboxSecondOfTwo}{}
  \newcommand{\toolboxGobbleArg}{}
\fi

\def\toolboxEmpty{}
\def\toolboxSpace{ }
\expandafter
  \futurelet\expandafter\toolboxSpaceToken\expandafter
    \if\toolboxSpace\toolboxEmpty\toolboxEmpty\fi

\long\def\toolboxFirstOfTwo#1#2{#1}
\long\def\toolboxSecondOfTwo#1#2{#2}
\long\def\toolboxGobbleArg#1{}

\toksdef\tbx@toks=0

\def\toolboxMakeDef{\tbx@MakeNames\tbx@MakeDef}
\def\tbx@MakeDef#1#2#3#4#5#6#7#8#9{%
  \tbx@def#1{\toolboxIfNextGobbling*%
    {\tbx@MakeNew\let{#8}{#9}}{\tbx@MakeNew\def{#8}{#9}}}%
  \tbx@def#2{\toolboxIfNextGobbling*%
    {\tbx@MakeRenew\let{#8}{#9}}{\tbx@MakeRenew\def{#8}{#9}}}%
  \tbx@def#3{\toolboxIfNextGobbling*%
    {\tbx@MakeProvide\let{#8}{#9}}{\tbx@MakeProvide\def{#8}{#9}}}%
  \tbx@def#4{\toolboxIfNextGobbling*%
    {\tbx@MakeForce\let{#8}{#9}}{\tbx@MakeForce\def{#8}{#9}}}%
  \tbx@def#5##1##2{\expandafter
    \tbx@MakeLet\csname tbx@l@#8@#9@##2\endcsname##1}%
  \tbx@def#6{\toolboxIfNextGobbling*%
    {\tbx@MakeUse\tbx@itemEnd{#8}{#9}}{\tbx@MakeUse\relax{#8}{#9}}}%
  \long\def#7##1}

\def\tbx@MakeNew#1#2#3#4{\expandafter
  \ifx\csname tbx@l@#2@#3@#4\endcsname\relax\else
    \errmessage{#2New#3: entry #4 already exists}%
  \fi
  \tbx@MakeForce{#1}{#2}{#3}{#4}}

\def\tbx@MakeRenew#1#2#3#4{\expandafter
  \ifx\csname tbx@l@#2@#3@#4\endcsname\relax
    \errmessage{#2Renew#3: entry #4 was not defined before}%
  \fi
  \tbx@MakeForce{#1}{#2}{#3}{#4}}

\def\tbx@MakeProvide#1#2#3#4#5{\expandafter
  \ifx\csname tbx@l@#2@#3@#4\endcsname\relax
    \tbx@MakeForce{#1}{#2}{#3}{#4}{#5}%
  \fi}

\long\def\tbx@MakeForce#1#2#3#4#5{%
  \ifx#1\let
    \expandafter
      \let\csname tbx@l@#2@#3@#4\endcsname#5%
  \else
    \expandafter
      \tbx@MakeDoDef\csname tbx@l@#2@#3@#4\expandafter\endcsname
        \csname tbx@e@#2@#3\endcsname{#5}%
  \fi}
\long\def\tbx@MakeDoDef#1#2#3{\tbx@toks\expandafter{#2{#3}}%
  \edef#1{\the\tbx@toks}}

\def\tbx@MakeLet#1#2{%
  \ifx#1\relax
    \let#2\undefined
  \else
    \let#2#1%
  \fi}

\def\tbx@MakeUse#1#2#3#4{%
  \expandafter
  \ifx\csname tbx@l@#2@#3@#4\endcsname#1%
    \errmessage{Entry #4 was not defined with
    #2New#3, #2Provide#3, or #2Def#3}%
  \fi
  \csname tbx@l@#2@#3@#4\endcsname}

\def\tbx@def#1{%
  \ifx#1\relax\else
    \errmessage{\string#1 is already defined}%
  \fi
  \def#1}

\def\toolboxFreeDef{\toolboxIfNextGobbling*%
  {\tbx@MakeNames{\tbx@FreeDef\relax}}{\tbx@MakeNames{\tbx@FreeDef\undefined}}}
\def\tbx@FreeDef#1#2#3#4#5#6#7#8#9{%
  \let#2\undefined\let#3\undefined\let#4\undefined\let#5\undefined
  \let#8\undefined
  \ifx#1\undefined
    \let#6\undefined\let#7\undefined
  \fi\toolboxGobbleArg}

\def\tbx@MakeNames#1{\toolboxIfNextToken[%]
  {\tbx@MakingNames{#1}}{\tbx@MakingNames{#1}[]}}
\def\tbx@MakingNames#1[#2]#3{\expandafter
  \tbx@ListSwap\expandafter{%
    \csname#2New#3\expandafter\endcsname
    \csname#2Renew#3\expandafter\endcsname
    \csname#2Provide#3\expandafter\endcsname
    \csname#2Def#3\expandafter\endcsname
    \csname#2Let#3\expandafter\endcsname
    \csname#2#3\expandafter\endcsname
    \csname tbx@e@#2@#3\endcsname{#2}{#3}}{#1}}
\def\tbx@ListSwap#1#2{#2#1}

\long\def\toolboxFuturelet#1#2{\toolboxTokDef{#2}\tbx@tmp\futurelet#1\tbx@tmp}

\long\def\toolboxGobbleNext#1{\toolboxTokDef{#1}\tbx@tmp
  \afterassignment\tbx@tmp
  \let\toolboxToken= }% The space here is important to read spaces properly

\long\def\toolboxIfNextToken#1#2#3{%
  \toolboxFuturelet\toolboxToken{%
    \ifx#1\toolboxToken
      \expandafter\toolboxFirstOfTwo
    \else
      \expandafter\toolboxSecondOfTwo
    \fi{#2}{#3}}}

\long\def\toolboxIfNextGobbling#1#2#3{%
  \toolboxIfNextToken{#1}{\toolboxGobbleNext{#2}}{#3}}

\long\def\toolboxLoop#1#2{\tbx@item\tbx@i\tbx@I{#1}{#2}}
\long\def\toolboxLoopName#1#2#3{\tbx@LoopName{#1}iI\tbx@item{#2}{#3}}
\def\tbx@LoopName#1#2#3#4{%
  \expandafter#4\csname tbx@#2@#1\expandafter\endcsname
    \csname tbx@#3@#1\endcsname}
\long\def\tbx@item#1#2#3#4{%
  \long\def#1##1{%
    \toolboxTokDef{##1}\toolboxToken
    \ifx\toolboxToken\tbx@itemEnd
      \def#2{\let#1\undefined\let#2\undefined}%
    \else
      #4{##1}%
    \fi
    #2}%
  \let#2#1%
  #1#3\tbx@itemEnd}
\def\tbx@itemEnd{\tbx@itemEnd}

\long\def\toolboxTokenLoop#1#2{\tbx@token\tbx@t\tbx@T{#1}{#2}}
\long\def\toolboxTokenLoopName#1#2#3{\tbx@LoopName{#1}tT\tbx@token{#2}{#3}}
\long\def\tbx@token#1#2#3#4{%
  \def#1{%
    \ifx\toolboxToken\tbx@tokenEnd
      \def#2{\let#1\undefined\let#2\undefined}%
    \else
      #4\toolboxToken
    \fi
    #2}%
  \def#2{\afterassignment#1\let\toolboxToken= }%
  #2#3\tbx@tokenEnd}
\def\tbx@tokenEnd{\tbx@tokenEnd}

\long\def\toolboxIfEmpty#1{\toolboxIfx{#1}\toolboxEmpty}
\long\def\toolboxIfX#1#2{\toolboxTokDef{#1}\tbx@ifx\toolboxIfx{#2}\tbx@ifx}
\long\def\toolboxIfx#1#2{\toolboxTokDef{#1}\tbx@tmp
  \toolboxIfElse{\ifx\tbx@tmp#2}}
\long\def\toolboxIfElse#1{#1\expandafter
  \toolboxFirstOfTwo\else\expandafter\toolboxSecondOfTwo\fi}

\long\def\toolboxTokDef#1#2{\tbx@toks{#1}\edef#2{\the\tbx@toks}}

\def\toolboxDef#1#2{%
  \tbx@item\tbx@odefa\tbx@odefb{#2}\tbx@odef
  \let#1\tbx@odeftmp\let\tbx@odeftmp\toolboxEmpty}
\let\tbx@odeftmp\toolboxEmpty
\long\def\tbx@odef#1{\expandafter\tbx@odefapp\expandafter{#1}}
\long\def\tbx@odefapp#1{\tbx@toks\expandafter{\tbx@odeftmp#1}%
  \edef\tbx@odeftmp{\the\tbx@toks}}

\def\toolboxAppend#1#2{\toolboxDef#1{#1#2}}

\long\def\toolboxSurround#1#2#3{\tbx@toks{#1}%
  \tbx@toks\expandafter{\the\expandafter\tbx@toks#3#2}%
  \edef#3{\the\tbx@toks}}

\def\toolboxMakeSplit{%
  \toolboxIfNextGobbling*\tbx@MakeLong\tbx@MakeShort}
\long\def\tbx@MakeLong#1#2{%
  \tbx@SplitNames{#2}%
  \expandafter
    \tbx@DoSplitInstance\tbx@splt{#1}\long}
\def\tbx@MakeShort#1#2{%
  \tbx@SplitNames{#2}%
  \expandafter
    \tbx@DoSplitInstance\tbx@splt{#1}{}}
\def\tbx@SplitNames#1{%
  \expandafter
    \def\expandafter\tbx@splt\expandafter{\csname#1\expandafter\endcsname
      \csname tbx@#1@spt\expandafter\endcsname
      \csname tbx@#1@rst\endcsname}}
\long\def\tbx@DoSplitInstance#1#2#3#4#5{%
  #5\def#1##1##2##3{%
    #2##2##3\toolboxEmpty##1#4#4@tbx@spt%
    \ifx##3\toolboxEmpty
      \let##3\undefined
    \else
      #3##3##1a@tbx@rst%
    \fi
  }%
  #5\def#2##1##2##3#4##4#4##5@tbx@spt{\expandafter
    \toolboxTokDef\expandafter{##3}##1\toolboxTokDef{##5}##2}%
  #5\def#3##1##2#4##3@tbx@rst{\tbx@rememberlasta##3@tbx@dropa%
    \tbx@defwithoutlasta##1##3@tbx@dropa}}
\long\def\tbx@rememberlasta#1a@tbx@dropa{\toolboxTokDef{#1}\tbx@droplasta
  \toolboxTokDef{#1a}\tbx@rebuilda}
\long\def\tbx@defwithoutlasta#1#2@tbx@dropa{\toolboxTokDef{#2}\tbx@originala
  \ifx\tbx@originala\tbx@rebuilda
    \let#1\tbx@droplasta
  \else
    \expandafter\toolboxTokDef\expandafter{\expandafter{\tbx@droplasta}}#1%
  \fi}

\def\toolboxFreeSplit#1{%
  \tbx@SplitNames{#1}%
  \expandafter
    \toolboxLoop\expandafter{\tbx@splt}\tbx@freeSplit}
\def\tbx@freeSplit#1{\let#1\undefined}

\def\toolboxSplitAt{\toolboxIfNextGobbling*\tbx@SplitLong\tbx@SplitShort}
\long\def\tbx@SplitLong#1#2#3#4{%
  \tbx@DoSplitInstance\tbx@splt\tbx@splta\tbx@spltb{#2}\long
  \tbx@splt{#1}{#3}{#4}}
\def\tbx@SplitShort#1#2#3#4{%
  \tbx@DoSplitInstance\tbx@splt\tbx@splta\tbx@spltb{#2}{}%
  \tbx@splt{#1}{#3}{#4}}

\long\def\toolboxReplaceSplit#1#2#3{%
  \toolboxTokDef{#1}\tbx@reptext
  \expandafter
    \tbx@replace\expandafter{#3}{\let#3\toolboxEmpty}#3#2\tbx@reptext}
\long\def\tbx@replace#1#2#3#4#5{#2%
  #4{#1}\tbx@repla\tbx@replb
  \toolboxIfElse{\ifx\tbx@replb\undefined}%
    {\toolboxDef#3{#3\tbx@repla}}%
    {\toolboxDef#3{#3\tbx@repla#5}%
     \expandafter\tbx@replace\expandafter{\tbx@replb}{}#3#4#5}}
\long\def\toolboxReplace#1#2{%
  \tbx@DoSplitInstance\tbx@splt\tbx@splta\tbx@spltb{#1}\long
  \toolboxReplaceSplit{#2}\tbx@splt}
\def\toolboxMakeHarmless#1{\edef#1{\tbx@Nearverbatim#1}}
\def\tbx@Nearverbatim{\expandafter\tbx@Meaning\meaning}
\long\def\tbx@Meaning#1>{}

\def\toolboxDropBrace#1{\expandafter\tbx@ForgetBrace#1@tbx@dropbrace#1}
\long\def\tbx@ForgetBrace#1@tbx@dropbrace#2{\toolboxTokDef{#1}#2}

\long\def\toolboxIf#1#2#3{%
  \ifx#1#3\def\tbx@tmp{#2#3}\else\def\tbx@tmp{#2\tbx@tmp}\fi\tbx@tmp}

\def\toolboxNewiftrue#1{\tbx@newifexec{#1}{\csname#1true\endcsname}}
\def\toolboxNewiffalse#1{\tbx@newifexec{#1}{\csname#1false\endcsname}}
\def\toolboxNewifTrue#1{\tbx@newifexec{#1}{}\csname#1true\endcsname}
\def\toolboxNewifFalse#1{\tbx@newifexec{#1}{}\csname#1false\endcsname}
\def\tbx@newifexec#1#2{\expandafter
   \ifx\csname if#1\endcsname\relax
     \expandafter\tbx@newif\csname if#1\endcsname{#1}%
     #2%
   \fi}
\def\tbx@newif#1#2{%
  \expandafter
    \def\csname#2true\endcsname{\let#1\iftrue}%
  \expandafter
    \def\csname#2false\endcsname{\let#1\iffalse}}

\def\toolboxWithNr#1#2#3{\expandafter#2\csname #3#1\endcsname}
\def\toolboxLet#1#2{\expandafter\let\expandafter#1\csname #2\endcsname}

\endinput
%%
%% End of file `toolbox.sty'.
