% \iffalse meta-comment
%
% Copyright (C) 2010 by Ulrich M. Schwarz
% See file COPYING for more details.
%\fi
%
%\iffalse (hide this from DocInput)
%<*amsthm>
%\fi
%    \begin{macrocode}
\providecommand\thmt@space{ }

\define@key{thmstyle}{spaceabove}{%
  \def\thmt@style@spaceabove{#1}%
}
\define@key{thmstyle}{spacebelow}{%
  \def\thmt@style@spacebelow{#1}%
}
\define@key{thmstyle}{headfont}{%
  \def\thmt@style@headfont{#1}%
}
\define@key{thmstyle}{bodyfont}{%
  \def\thmt@style@bodyfont{#1}%
}
\define@key{thmstyle}{notefont}{%
  \def\thmt@style@notefont{#1}%
}
\define@key{thmstyle}{headpunct}{%
  \def\thmt@style@headpunct{#1}%
}
\define@key{thmstyle}{notebraces}{%
  \def\thmt@style@notebraces{\thmt@embrace#1}%
}
\define@key{thmstyle}{break}[]{%
  \def\thmt@style@postheadspace{\newline}%
}
\define@key{thmstyle}{postheadspace}{%
  \def\thmt@style@postheadspace{#1}%
}
\define@key{thmstyle}{headindent}{%
  \def\thmt@style@headindent{#1}%
}

\newtoks\thmt@style@headstyle
\define@key{thmstyle}{headformat}[]{%
  \thmt@setheadstyle{#1}%
}
\define@key{thmstyle}{headstyle}[]{%
  \thmt@setheadstyle{#1}%
}
\def\thmt@setheadstyle#1{%
  \thmt@style@headstyle{%
    \def\NAME{\the\thm@headfont ##1}%
    \def\NUMBER{\bgroup\@upn{##2}\egroup}%
    \def\NOTE{\if=##3=\else\bgroup\thmt@space\the\thm@notefont(##3)\egroup\fi}%
  }%
  \def\thmt@tmp{#1}%
  \@onelevel@sanitize\thmt@tmp
  %\tracingall
  \ifcsname thmt@headstyle@\thmt@tmp\endcsname
    \thmt@style@headstyle\@xa{%
      \the\thmt@style@headstyle
      \csname thmt@headstyle@#1\endcsname
    }%
  \else
    \thmt@style@headstyle\@xa{%
      \the\thmt@style@headstyle
      #1%
    }%
  \fi
  %\showthe\thmt@style@headstyle
}
% examples:
\def\thmt@headstyle@margin{%
  \makebox[0pt][r]{\NUMBER\ }\NAME\NOTE
}
\def\thmt@headstyle@swapnumber{%
  \NUMBER\ \NAME\NOTE
}



\def\thmt@embrace#1#2(#3){#1#3#2}

\def\thmt@declaretheoremstyle@setup{%
  \let\thmt@style@notebraces\@empty%
  \thmt@style@headstyle{}%
  \kvsetkeys{thmstyle}{%
    spaceabove=3pt,
    spacebelow=3pt,
    headfont=\bfseries,
    bodyfont=\normalfont,
    headpunct={.},
    postheadspace={ },
    headindent={},
    notefont={\fontseries\mddefault\upshape}
  }%
}
\def\thmt@declaretheoremstyle#1{%
  %\show\thmt@style@spaceabove
  \thmt@toks{\newtheoremstyle{#1}}%
  \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@spaceabove}}%
  \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@spacebelow}}%
  \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@bodyfont}}%
  \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@headindent}}% indent1 FIXME
  \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@headfont}}%  
  \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@headpunct}}%
  \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@postheadspace}}%
  \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\the\thmt@style@headstyle}}% headspec FIXME
  \the\thmt@toks
  %1 Indent amount: empty = no indent, \parindent = normal paragraph indent
  %2 Space after theorem head: { } = normal interword space; \newline = linebreak
  %% BUGFIX: amsthm ignores notefont setting altogether:
  \thmt@toks\@xa\@xa\@xa{\csname th@#1\endcsname}%
  \thmt@toks
  \@xa\@xa\@xa\@xa\@xa\@xa\@xa{%
  \@xa\@xa\@xa\@xa\@xa\@xa\@xa\thm@notefont
  \@xa\@xa\@xa\@xa\@xa\@xa\@xa{%
  \@xa\@xa\@xa\thmt@style@notefont
  \@xa\thmt@style@notebraces
  \@xa}\the\thmt@toks}%
  \@xa\def\csname th@#1\@xa\endcsname\@xa{\the\thmt@toks}%
%  \@xa\def\csname th@#1\@xa\@xa\@xa\@xa\@xa\@xa\@xa\endcsname
%    \@xa\@xa\@xa\@xa\@xa\@xa\@xa{%
%    \@xa\@xa\@xa\@xa\@xa\@xa\@xa\thm@notefont
%    \@xa\@xa\@xa\@xa\@xa\@xa\@xa{%
%    \@xa\@xa\@xa\thmt@style@notefont
%    \@xa\@xa\@xa\thmt@style@notebraces
%    \@xa\@xa\@xa}\csname th@#1\endcsname
%  }
}

\define@key{thmdef}{qed}[\qedsymbol]{%
  \thmt@trytwice{}{%
    \addtotheorempostheadhook[\thmt@envname]{%
      \protected@edef\qedsymbol{#1}%
      \pushQED{\qed}%
    }%
    \addtotheoremprefoothook[\thmt@envname]{%
      \protected@edef\qedsymbol{#1}%
      \popQED
    }%
  }%
}

\def\thmt@amsthmlistbreakhack{%
  \leavevmode
  \vspace{-\baselineskip}%
  \par
  \everypar{\setbox\z@\lastbox\everypar{}}%
}

\define@key{thmuse}{listhack}[\relax]{%
  \addtotheorempostheadhook[local]{%
    \thmt@amsthmlistbreakhack
  }%
}

%    \end{macrocode}
%\iffalse (hide this from DocInput)
%</amsthm>
%\fi
