% \iffalse meta-comment
%
% 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.
% The license can be obtained from
% http://www.latex-project.org/lppl/lppl-1-3a.txt
%
% \fi
%
%\iffalse (hide this from DocInput)
%<*driver>
\documentclass{ltxdoc}

\usepackage[T1]{fontenc}
\usepackage{fourier}
\usepackage[scaled=0.8]{helvet}
\usepackage{luximono}

\usepackage{amsmath, amsthm}
\usepackage{thm-patch}
\newtheorem{lemma}{Lemma}
\GetFileInfo{thm-patch.sty}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{thm-patch.dtx}
\end{document}
%</driver>
%<*patch>
%\fi
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
% \CheckSum{160}
%
% \DoNotIndex{\@for,\addtocounter,\arabic,\csname,\endcsname,\cup,\CurrentOption}
% \DoNotIndex{\{,\},\do,\define@key,\def,\DeclareOption,\else,\ensuremath,\expandafter}
% \DoNotIndex{\hspace,\fi,\rule,\ifcase,\ifx,\in,\InputIfFileExists,\leq,\let,\mathpalette}
% \DoNotIndex{\NeedsTeXFormat,\ldots,\ldotp,\newcommand,\newcounter,\or}
% \DoNotIndex{\PackageInfo,\PackageWarning,\parm,\ProcessOptions,\protected@edef}
% \DoNotIndex{\providecommand,\ProvidesPackage,\relax,\renewcommand,\RequirePackage}
% \DoNotIndex{\setcounter,\setkeys,\rlap,\setminus,\widthof,\mathrm}
%
% \newcommand\thmrestate{\textsf{thm-patch}}
% \title{The \thmrestate\ package\thanks{%
%   This file documents version~\fileversion\ of~\filedate,
%   RCS ${}$Id: thm-patch.dtx,v 1.6 2008/02/17 21:08:04 ulmi Exp ulmi ${}$.
% }}
% \author{Ulrich M. Schwarz\thanks{ulmi@absatzen.de}}
%
% \maketitle
%
%\begin{abstract}
%\end{abstract}
%\section{Usage}
%
%\section{Implementation}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{thm-patch}[2008/02/17 BETA thm-patch (ulmi)]
\let\@xa=\expandafter
\let\@nx=\noexpand

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

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

\let\thmt@original@newtheorem\newtheorem
\def\newtheorem{%
  \thmt@isstarredfalse
  \let\thmt@sibling=\relax \thmt@hassiblingfalse
  \let\thmt@parent=\relax  \thmt@hasparentfalse
  \@ifstar
    {\thmt@isstarredtrue\thmt@newtheoremii}%
    {\thmt@newtheoremii}%
}
\newcommand\thmt@newtheoremii[1]{%
  \def\thmt@envname{#1}%
  \thmt@newtheoremiii
}
\newcommand\thmt@newtheoremiii[2][]{%
  \def\thmt@thmname{#2}%
  \ifx&#1&\else
    \thmt@hassiblingtrue
    \def\thmt@sibling{#1}%
  \fi
  \@ifnextchar[{%
    \thmt@hasparenttrue
    \def\tmp@a[####1]{\def\thmt@parent{####1}\thmt@newtheoremiv}%
    \tmp@a
  }{%
    \thmt@newtheoremiv
  }%
}
\newcommand\thmt@newtheoremiv{%
  \thmt@newtheorem@predefinition
  % whee, now reassemble the whole shit.
  \protected@edef\thmt@args{%
    \@nx\thmt@original@newtheorem%
    \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\addtotheoremprehook\@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 \thmt@envname\endcsname[1][]{%
    \def\thmt@optarg{##1}%
    \csname thmt@#1@preheadhook\endcsname
    \thmt@generic@preheadhook
    \csname thmt@original@#1\@xa\endcsname
      \ifx\@empty\thmt@optarg\else [##1]\fi
    \csname thmt@#1@postheadhook\endcsname
    \thmt@generic@postheadhook
  }%
  \@namedef{thmt@#1@preheadhook}{}%
  \@namedef{thmt@#1@postheadhook}{}%
}
\newcommand\thmt@generic@preheadhook{\refstepcounter{thmt@dummyctr}}
\newcommand\thmt@generic@postheadhook{}

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

%    \end{macrocode}
%\iffalse
%</patch>
%\fi
