% atbeginend.sty 
%
% Licensed to the Apache Software Foundation (ASF) under one or more
% contributor license agreements.  See the NOTICE file distributed with
% this work for additional information regarding copyright ownership.
% The ASF licenses this file to You 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.

% defines
% \BeforeBegin{environment}{code-to-execute}
% \BeforeEnd  {environment}{code-to-execute}
% \AfterBegin {environment}{code-to-execute}
% \AfterEnd   {environment}{code-to-execute}
%
% Save \begin and \end to \BeginEnvironment and \EndEnvironment
\let\BeginEnvironment=\begin
\let\EndEnvironment=\end

\def\IfUnDef#1{\expandafter\ifx\csname#1\endcsname\relax}

% Null command needed to for \nothing{something}=.nothing.
\def\NullCom#1{}

\def\begin#1{%
%
% if defined \BeforeBeg for this environment, execute it
\IfUnDef{BeforeBeg#1}\else\csname BeforeBeg#1\endcsname\fi%
%
%
%
\IfUnDef{AfterBeg#1}% This is done to skip the command for environments
		     % which can take arguments, like multicols; YOU MUST NOT
		     % USE \AfterBegin{...}{...} for such environments!
	\let\SaveBegEng=\BeginEnvironment%
\else%
	% Start this environment
		\BeginEnvironment{#1}%
	% and execute code after \begin{environment}
		\csname AfterBeg#1\endcsname%
	% 
	\let\SaveBegEng=\NullCom%
\fi%
\SaveBegEng{#1}%
}


\def\end#1{%
%
% execute code before \end{environment}
\IfUnDef{BeforeEnd#1}\else\csname BeforeEnd#1\endcsname\fi%
%
% close this environment
\EndEnvironment{#1}%
%
% and execute code after \begin{environment}
\IfUnDef{AfterEnd#1}\else\csname AfterEnd#1\endcsname\fi%
}


%% Now, define commands
% \BeforeBegin{environment}{code-to-execute}
% \BeforeEnd  {environment}{code-to-execute}
% \AfterBegin {environment}{code-to-execute}
% \AfterEnd   {environment}{code-to-execute}

\def\BeforeBegin#1#2{\expandafter\gdef\csname BeforeBeg#1\endcsname
{#2}}
\def\BeforeEnd  #1#2{\expandafter\gdef\csname BeforeEnd#1\endcsname
{#2}}
\def\AfterBegin #1#2{\expandafter\gdef\csname AfterBeg#1\endcsname {#2}}
\def\AfterEnd   #1#2{\expandafter\gdef\csname AfterEnd#1\endcsname{#2}}
