% Copyright 2003--2007 by Till Tantau
% Copyright 2010 by Vedran Mileti\'c
% Copyright 2017 by Joseph Wright
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file LICENSE.md for more details.

\mode
<presentation>

\ifbeamer@ams

  \RequirePackage{amsmath}
  \RequirePackage{amsthm}

  % For old versions of amsthm
  \providecommand\thm@space@setup{}
  \providecommand\pushQED[1]{\def\beamer@qed{#1}}
  \providecommand\popQED{\beamer@qed}
  \providecommand\qedhere{\qed}

  % Redfine certain amsthm internals:
  \def\@thm#1#2#3{%
    \ifhmode\unskip\unskip\par\fi
    \normalfont
    \let\thmheadnl\relax
    \let\thm@swap\@gobble
    \thm@headpunct{.}% add period after heading
    \thm@space@setup
    #1% style overrides
    \def\inserttheoremname{#3}
    \def\inserttheorempunctuation{\the\thm@headpunct}
    \def\@tempa{#2}%
    \ifx\@empty\@tempa
      \def\inserttheoremnumber{}
    \else
      \refstepcounter{#2}%
      \expandafter\def\expandafter\inserttheoremnumber\expandafter{ \csname the#2\endcsname}
    \fi
    \beamer@begintheorem%
  }

  \let\beamer@origxthm=\@xthm
  \def\@xthm#1{\resetcounteronoverlays{#1}\beamer@origxthm{#1}}

  \def\inserttheoremheadfont{\the\thm@headfont}
  \def\inserttheoremblockenv{block}

  \def\th@example{%
    \normalfont % body font
    \def\inserttheoremblockenv{exampleblock}
  }

  \newcommand<>\beamer@begintheorem[1][]{%
    \ifblank{#1}
    {\def\inserttheoremaddition{}}
    {\def\inserttheoremaddition{#1}}
    \usebeamertemplate{theorem begin}#2}
  \def\@endtheorem{\usebeamertemplate{theorem end}}

  \renewenvironment<>{proof}[1][\proofname]{%
    \par
    \def\insertproofname{#1\@addpunct{.}}%
    \pushQED{\qed}
    \usebeamertemplate{proof begin}#2}
  {\popQED\usebeamertemplate{proof end}}

\fi

\def\qedsymbol{\leavevmode\hbox{\usebeamertemplate*{qed symbol}}}


\mode
<article>
{
  \ifbeamer@ams
    \RequirePackage{amsmath}
    \RequirePackage{amsthm}

    \renewenvironment<>{proof}[1][\proofname]
    {\begin{actionenv}#2\begin{originalproof}[{#1}]}{\end{originalproof}\end{actionenv}}

    % Make new theorem overlay-specification-aware
    \let\beamer@origthm=\@thm
    \def\@thm#1#2#3{\def\beamer@store{{#1}{#2}{#3}}\beamer@readspec}
    \def\beamer@storeaction{\begin{actionenv}}
    \newcommand<>\beamer@readspec[1][]{\def\beamer@storeaction{\begin{actionenv}#2}%
      \expandafter\beamer@origthm\beamer@store[{#1}]}

    \let\beamer@origbegintheorem=\@begintheorem
    \def\@begintheorem{\beamer@storeaction\beamer@origbegintheorem}

    \let\beamer@origendtheorem=\@endtheorem
    \def\@endtheorem{\beamer@origendtheorem\end{actionenv}}
  \fi

  \def\th@example{\th@remark}

  \newcommand{\ExampleInline}[1]{\translate{Example}: \ignorespaces#1}

  % Compatibility:
  \newcommand{\BeispielInline}[1]{Beispiel: \ignorespaces#1}
}

\mode
<all>
{
  \ifbeamer@blocks
    \ifbeamer@countsect
      \newtheorem{theorem}{\translate{Theorem}}[section]
    \else
      \newtheorem{theorem}{\translate{Theorem}}
    \fi
    \newtheorem{corollary}[theorem]{\translate{Corollary}}
    \newtheorem{fact}[theorem]{\translate{Fact}}
    \newtheorem{lemma}[theorem]{\translate{Lemma}}
    \newtheorem{problem}[theorem]{\translate{Problem}}
    \newtheorem{solution}[theorem]{\translate{Solution}}

    \theoremstyle{definition}
    \newtheorem{definition}[theorem]{\translate{Definition}}
    \newtheorem{definitions}[theorem]{\translate{Definitions}}

    \theoremstyle{example}
    \newtheorem{example}[theorem]{\translate{Example}}
    \newtheorem{examples}[theorem]{\translate{Examples}}


    % Compatibility
    \newtheorem{Beispiel}[theorem]{Beispiel}
    \newtheorem{Beispiele}[theorem]{Beispiele}
    \theoremstyle{plain}
    \newtheorem{Loesung}[theorem]{L\"osung}
    \newtheorem{Satz}[theorem]{Satz}
    \newtheorem{Folgerung}[theorem]{Folgerung}
    \newtheorem{Fakt}[theorem]{Fakt}
    \newenvironment{Beweis}{\begin{proof}[Beweis.]}{\end{proof}}
    \newenvironment{Lemma}{\begin{lemma}}{\end{lemma}}
    \newenvironment{Proof}{\begin{proof}}{\end{proof}}
    \newenvironment{Theorem}{\begin{theorem}}{\end{theorem}}
    \newenvironment{Problem}{\begin{problem}}{\end{problem}}
    \newenvironment{Corollary}{\begin{corollary}}{\end{corollary}}
    \newenvironment{Example}{\begin{example}}{\end{example}}
    \newenvironment{Examples}{\begin{examples}}{\end{examples}}
    \newenvironment{Definition}{\begin{definition}}{\end{definition}}
  \fi
}

\mode
<all>
