%%
%% This is file `thm-patch.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% thm-patch.dtx  (with options: `patch')
%% This is a generated file.
%% 
%% This file is part of the `thmtools' package.
%% The `thmtools' package has the LPPL maintenance status: maintained.
%% Current Maintainer is Ulrich M. Schwarz, ulmi@absatzen.de
%% 
%% Copyright (C) 2008 by Ulrich M. Schwarz.
%% 
%% This file may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, version 1.3a.
%% This version is obtainable at
%% http://www.latex-project.org/lppl/lppl-1-3a.txt
%% 
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{thm-patch}[2008/06/22 v0.1beta6 thm-patch (ulmi)]
\let\@xa=\expandafter
\let\@nx=\noexpand
\RequirePackage{parseargs}

\@ifundefined{c@thmt@dummyctr}{%
  \newcounter{thmt@dummyctr}%
}{}%
\gdef\theHthmt@dummyctr{dummy.\arabic{thmt@dummyctr}}%
\gdef\thethmt@dummyctr{}%

\newif\ifthmt@isstarred
\newif\ifthmt@hassibling
\newif\ifthmt@hasparent

\@ifundefined{beamer@version}{%
  \def\thmt@parsetheoremargs#1{%
    \parse{%
      {\parseOpt[]{\def\thmt@optarg{##1}}{\let\thmt@optarg\@empty}}%
      {%
        \csname thmt@#1@preheadhook\endcsname
        \thmt@generic@preheadhook
        \protected@edef\tmp@args{%
          \ifx\@empty\thmt@optarg\else [\thmt@optarg]\fi
        }%
        \csname thmt@original@#1\@xa\endcsname\tmp@args
        \csname thmt@#1@postheadhook\endcsname
        \thmt@generic@postheadhook
        \let\@parsecmd\@empty
      }%
    }%
  }%
}{%
  \newif\ifthmt@hasoverlay
  \def\thmt@parsetheoremargs#1{%
    \parse{%
      {\parseOpt<>{\thmt@hasoverlaytrue\def\thmt@overlay{##1}}{}}%
      {\parseOpt[]{\def\thmt@optarg{##1}}{\let\thmt@optarg\@empty}}%
      {\ifthmt@hasoverlay\expandafter\@gobble\else\expandafter\@firstofone\fi
          {\parseOpt<>{\thmt@hasoverlaytrue\def\thmt@overlay{##1}}{}}%
      }%
      {%
        \csname thmt@#1@preheadhook\endcsname
        \thmt@generic@preheadhook
        \protected@edef\tmp@args{%
          \ifthmt@hasoverlay <\thmt@overlay>\fi
          \ifx\@empty\thmt@optarg\else [\thmt@optarg]\fi
        }%
        \csname thmt@original@#1\@xa\endcsname\tmp@args
        \csname thmt@#1@postheadhook\endcsname
        \thmt@generic@postheadhook
        \let\@parsecmd\@empty
      }%
    }
  }%
}

\let\thmt@original@newtheorem\newtheorem
\def\newtheorem{%
  \thmt@isstarredfalse
  \thmt@hassiblingfalse
  \thmt@hasparentfalse
  \parse{%
    {\parseFlag*{\thmt@isstarredtrue}{}}%
    {\parseMand{\def\thmt@envname{##1}}}%
    {\parseOpt[]{\thmt@hassiblingtrue\def\thmt@sibling{##1}}{}}%
    {\parseMand{\def\thmt@thmname{##1}}}%
    {\parseOpt[]{\thmt@hasparenttrue\def\thmt@parent{##1}}{}}%
    {\let\@parsecmd\thmt@newtheoremiv}%
  }%
}

\newcommand\thmt@newtheoremiv{%
  \thmt@newtheorem@predefinition
  % whee, now reassemble the whole shit.
  \protected@edef\thmt@args{%
    \@nx\thmt@theoremdefiner%
    \ifthmt@isstarred *\fi
    {\thmt@envname}%
    \ifthmt@hassibling [\thmt@sibling]\fi
    {\thmt@thmname}%
    \ifthmt@hasparent [\thmt@parent]\fi
  }
  \thmt@args
  \thmt@newtheorem@postdefinition
}

\newcommand\thmt@newtheorem@predefinition{}
\newcommand\thmt@newtheorem@postdefinition{}

\g@addto@macro\thmt@newtheorem@postdefinition{%
  \@xa\thmt@addtheoremhook\@xa{\thmt@envname}%
  \ifthmt@isstarred\@namedef{the\thmt@envname}{}\fi
  \protected@edef\thmt@tmp{%
    \def\@nx\thmt@envname{\thmt@envname}%
    \def\@nx\thmt@thmname{\thmt@thmname}%
  }
  \@xa\addtotheorempreheadhook\@xa[\@xa\thmt@envname\@xa]\@xa{%
    \thmt@tmp
  }%
}
\newcommand\thmt@addtheoremhook[1]{%
  % this adds two command calls to the newly-defined theorem.
  \@xa\let\csname thmt@original@#1\@xa\endcsname
          \csname#1\endcsname
  \@xa\renewcommand\csname #1\endcsname{
    \thmt@parsetheoremargs{#1}%
  }%
  \@xa\let\csname thmt@original@end#1\@xa\endcsname\csname end#1\endcsname
  \@xa\def\csname end#1\endcsname{%
    % these need to be in opposite order of headhooks.
    \csname thmtgeneric@prefoothook\endcsname
    \csname thmt@#1@prefoothook\endcsname
    \csname thmt@original@end#1\endcsname
    \csname thmt@generic@postfoothook\endcsname
    \csname thmt@#1@postfoothook\endcsname
  }
  \@namedef{thmt@#1@preheadhook}{}%
  \@namedef{thmt@#1@postheadhook}{}%
  \@namedef{thmt@#1@prefoothook}{}%
  \@namedef{thmt@#1@postfoothook}{}%
}
\newcommand\thmt@generic@preheadhook{\refstepcounter{thmt@dummyctr}}
\newcommand\thmt@generic@postheadhook{}

\providecommand\g@prependto@macro[2]{%
  \begingroup
    \toks@\@xa{\@xa{#1}{#2}}%
    \def\tmp@a##1##2{##2##1}%
    \@xa\@xa\@xa\gdef\@xa\@xa\@xa#1\@xa\@xa\@xa{\@xa\tmp@a\the\toks@}%
  \endgroup
}

\newcommand\addtotheorempreheadhook[1][generic]{%
  \expandafter\g@addto@macro\csname thmt@#1@preheadhook\endcsname%
}
\newcommand\addtotheorempostheadhook[1][generic]{%
  \expandafter\g@addto@macro\csname thmt@#1@postheadhook\endcsname%
}

\newcommand\addtotheoremprefoothook[1][generic]{%
  \expandafter\g@prependto@macro\csname thmt@#1@prefoothook\endcsname%
}
\newcommand\addtotheorempostfoothook[1][generic]{%
  \expandafter\g@prependto@macro\csname thmt@#1@postfoothook\endcsname%
}

\endinput
%%
%% End of file `thm-patch.sty'.
