%% Copyright 2014… Maïeul Rouquette
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
% 
% The Current Maintainer of this work is Maïeul Rouquette
% This work consists of the files handout.sty and example and documentation files.

\ProvidesPackage{handout}[2017/04/21 1.6.0 Handout package]
\RequirePackage{kvoptions,etoolbox,suffix}

% Options
\DeclareBoolOption[false]{disabled}
\let\disablehandout\handout@disabledtrue
\let\enablehandout\handout@disabledfalse

\DeclareBoolOption[false]{numbering}
\DeclareBoolOption[false]{sectioning}

\DeclareBoolOption[true]{printing}

\DeclareStringOption[.]{dir}

\ProcessKeyvalOptions*

% Warning tools
\newcommand{\handout@warning}[1]{\@latex@warning{Handout: #1}}

% Opening the handout file
\newwrite\@handout
\immediate\openout\@handout=\jobname.handout


% The main command, to be used by people
\newcommand{\handout}[1]{%	
	\ifhandout@disabled\else%Only if not disabled, of course!
		\ifhandout@numbering%
			\stepcounter{handoutnumber}%
			\handoutnumberintxt{\thehandoutnumber}%
		\fi%
		\ifhandout@printing%
		    \immediate\write\@handout {\string\handout@input{#1}}%
		\fi%
	\fi%
	\input{\handout@dir/#1}% Add the handout
}


% The special commands to be used by people

\newcommand{\nothandout}[1]{#1}
\newcommand{\onlyhandout}[1]{}
\newcommand{\forhandout}[1]{%
	\ifhandout@disabled\else%
	  \ifhandout@printing%
	    \immediate\write\@handout{\noexpand #1}%
	  \fi%
	\fi%
}
\WithSuffix\newcommand\forhandout*[1]{%
	\ifhandout@disabled\else%
	  \ifhandout@printing%
	    \immediate\write\@handout{\unexpanded{#1}}%
	  \fi%
	\fi%
}

% The command written in the .handout file
\newcommand{\handout@input}[1]{%
	\ifdefined\AtEveryHandout%
	  \AtEveryHandout%
	\fi%
	\ifhandout@numbering%
		\stepcounter{handoutnumber}%
		\handoutnumber{\thehandoutnumber}%
	\fi%
	\input{\handout@dir/#1}%
}
% Output the sectionning commands in the .handout file

\ifhandout@sectioning%Only if needed by option
	
	\apptocmd{\@sect}{% 
		\ifhandout@disabled\else%
		  \ifhandout@printing%
		    \immediate\write\@handout{\@backslashchar#1{\unexpanded{#8}}}%
		  \fi%
		\fi%
		}{}{\handout@warning{Can't patch sectioning commands}}

\fi
% Call the handout file at the end, if need

\AtEndDocument{%
    \ifhandout@printing%
	    \ifhandout@disabled\else
		  \immediate\closeout\@handout%
		  \before@handout%
		  \ifdef{\beforehandout}{\beforehandout}{\handout@warning{No command defined to be run before handout}}
		  \makeatletter%
		  \input\jobname.handout%
		  \makeatother%
		  \ifdef{\afterhandout}{\afterhandout}{\handout@warning{No command defined to be run after handout}}
	    \fi%
    \fi%
}

% Standard command before handout
\newcommand{\before@handout}{%
	% New page
	\newpage%
	% Reset counters
	\setcounter{page}{1}%
	\setcounter{footnote}{0}%
	\setcounter{table}{0}%
	\setcounter{figure}{0}%
	\ifhandout@sectioning%
		\setcounter{section}{0}%
		\setcounter{subsection}{0}%
		\setcounter{subsubsection}{0}%
	\fi
	\ifhandout@numbering
		\setcounter{handoutnumber}{0}%
	\fi
	% No new data in content or in label or index
	\def\addcontentsline##1##2##3{}
	\let\label\@gobble
	\renewcommand{\index}[2][1]{}
	 
	% Switches onlyhandout and nothandout commands
	\renewcommand{\nothandout}[1]{}
	\renewcommand{\onlyhandout}[1]{##1}

}

\AtBeginDocument{%
	\@ifpackageloaded{biblatex}{%
		\apptocmd{\before@handout}{\citereset}{}{}%
	}{}}

% Handout numbering

\ifhandout@numbering
	\newcounter{handoutnumber}
	\renewcommand{\thehandoutnumber}{\fbox{\arabic{handoutnumber}}}
\fi
\newcommand{\handoutnumberintxt}[1]{\handoutnumber{#1}}
\newcommand{\handoutnumber}[1]{\marginpar{#1}}


