%% Copyright 2021-2025 Ian Jauslin
%% 
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%% 
%%     http://www.apache.org/licenses/LICENSE-2.0
%% 
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.

%%
%% iantheorem package:
%%   Ian's customized theorem command
%%

%% boolean to signal that this package was loaded
\newif\ifiantheo

%% TeX format
\NeedsTeXFormat{LaTeX2e}[1995/12/01]

%% package name
\ProvidesPackage{iantheo}[2016/11/10]

%% options
\newif\ifsectionintheo
\DeclareOption{section_in_theo}{\sectionintheotrue}
\DeclareOption{no_section_in_theo}{\sectionintheofalse}
\newif\ifsubsectionintheo
\DeclareOption{subsection_in_theo}{\subsectionintheotrue}
\DeclareOption{no_subsection_in_theo}{\subsectionintheofalse}

\def\iantheo@defaultoptions{
  \ExecuteOptions{section_in_theo, no_subsection_in_theo}
  \ProcessOptions

  %%% reset at every new section
  \ifsectionintheo
    \let\iantheo@oldsection\section
    \gdef\section{\setcounter{theocount}{0}\iantheo@oldsection}
  \fi

  %% reset at every new subsection
  \ifsubsectionintheo
    \let\iantheo@oldsubsection\subsection
    \gdef\subsection{\setcounter{theocount}{0}\iantheo@oldsubsection}
  \fi
}


%% delimiters
\def\delimtitle#1{
  \par%
  \leavevmode%
  \raise.3em\hbox to\hsize{%
    \lower0.3em\hbox{\vrule height0.3em}%
    \hrulefill%
    \ \lower.3em\hbox{#1}\ %
    \hrulefill%
    \lower0.3em\hbox{\vrule height0.3em}%
  }%
  \par\penalty10000%
}

%% callable by ref
\def\delimtitleref#1{
  \par%
%
  \ifdefined\ianclass%
    % hyperref anchor%
    \hrefanchor%
    % define tag (for \label)%
    \xdef\tag{#1}%
  \fi%
%
  \leavevmode%
  \raise.3em\hbox to\hsize{%
    \lower0.3em\hbox{\vrule height0.3em}%
    \hrulefill%
    \ \lower.3em\hbox{\bf #1}\ %
    \hrulefill%
    \lower0.3em\hbox{\vrule height0.3em}%
  }%
  \par\penalty10000%
}

%% no title
\def\delim{
  \par%
  \leavevmode\raise.3em\hbox to\hsize{%
    \lower0.3em\hbox{\vrule height0.3em}%
    \hrulefill%
    \lower0.3em\hbox{\vrule height0.3em}%
  }%
  \par\penalty10000%
}

%% end delim
\def\enddelim{
  \par\penalty10000%
  \leavevmode%
  \raise.3em\hbox to\hsize{%
    \vrule height0.3em\hrulefill\vrule height0.3em%
  }%
  \par%
}


%% theorem
% counter
\newcounter{theocount}
% booleans (write section or subsection in equation number)
\def\theo#1{
  \stepcounter{theocount}
  \ifdefined\ianclass
    % hyperref anchor
    \hrefanchor
  \fi
  % the number
  \def\formattheo{\thetheocount}
  % add subsection number
  \ifsubsectionintheo
    \let\tmp\formattheo
    \edef\formattheo{\thesubsectioncount.\tmp}
  \fi
  % add section number
  \ifsectionintheo
    \let\tmp\formattheo
    \edef\formattheo{\sectionprefix\thesectioncount.\tmp}
  \fi
  % define tag (for \label)
  \xdef\tag{\formattheo}
  % write
  \delimtitle{\bf #1 \formattheo}
}
\let\endtheo\enddelim
%% theorem headers with name
\def\theoname#1#2{
  \theo{#1}\hfil({\it #2})\par\penalty10000\medskip%
}


%% qed symbol
\def\qedsymbol{$\square$}
\def\qed{\penalty10000\hfill\penalty10000\qedsymbol}


%% compatibility with article class
\ifdefined\ianclasstrue
  \relax
\else
  \def\thesectioncount{\thesection}
  \def\thesubsectioncount{\thesubsection}
  \def\sectionprefix{}
\fi


%% prevent page breaks after displayed equations
\newcount\prevpostdisplaypenalty
\def\nopagebreakaftereq{
  \prevpostdisplaypenalty=\postdisplaypenalty
  \postdisplaypenalty=10000
}
%% back to previous value
\def\restorepagebreakaftereq{
  \postdisplaypenalty=\prevpostdisplaypenalty
}


%% end
\iantheo@defaultoptions
\endinput
