%% Copyright 2013 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 file biblatex-source-division.sty

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{biblatex-source-division}[2015/07/07 v2.3.1 source division for biblatex]
\RequirePackage{xpatch}

% The options
\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=@biblatexsourcedivision@,prefix=biblatexsourcedivision@}
\DeclareStringOption[maintitle]{after}
\ProcessKeyvalOptions*
% 


% Test if the package biblatex-true-citepages-omit is loaded
\@ifpackageloaded{biblatex-true-citepages-omit}{\PackageError{biblatex-true-citepages-omit}{You must load biblatex-true-citepages-omit AFTER biblatex-source-division}{}}{}
% Prepare in the case of <x>volcite commands

\newtoggle{volcite}{}
\apptocmd{\volcitecmd}{\AtNextCite{\toggletrue{volcite}}}{}{}
\apptocmd{\multivolcitecmd}{\AtNextMultiCite{\toggletrue{volcite}}}{}{}
% Call the source division getting
\AtEveryCitekey{%
	\usebibmacro{getsourcedivision}%
}{}{}

% Get source division, put in in titladdon field, and delete source division from the postnote field
\newbibmacro{getsourcedivision}{%
  \iffieldundef{postnote}{}{%
     \global\undef\volpostnote%
     \usefield{\getsourcedivision@}{postnote}%
     \ifboolexpr{test {\iffieldundef{maintitle}} or test{\ifdefstring{\biblatexsourcedivision@after}{title}}}%
       {\restorefield{titleaddon}{\titleaddon}}
       {\restorefield{maintitleaddon}{\titleaddon}}%
     \ifdefempty{\postnote}%
       {\clearfield{postnote}}%
       {\restorefield{postnote}{\postnote}}%
   }%
 }
 
% Analyse of the source division

%% Main command
\newrobustcmd*{\getsourcedivision@}[1]{\getsourcedivision@i#1++} 

%% Are there parenthesis ?
\def\getsourcedivision@i{%
  \@ifnextchar(%)
    {\getsourcedivision@ii}%
    {\getsourcedivision@ii()}}

%% Put the source division and "true" postnote in macro
\def\getsourcedivision@ii(#1)#2++{%
  \ifdefmacro{\volpostnote}{%
    \gdef\titleaddon{#1}%
    \gdef\postnote{{\volvol}{#2}}%   
   }{%
     \iftoggle{volcite}{%
		   \volgetsourcedivision@#2%
		}%
		{%
		  \gdef\titleaddon{#1}%
		  \gdef\postnote{#2}%
		}%
	}%
 }
\newrobustcmd*{\volgetsourcedivision@}[2]{%
  \gdef\volpostnote{#2}%
  \gdef\volvol{#1}%
  \ifdefempty{volpostnote}%
    {\clearfield{volpostnote}}%
    {\restorefield{volpostnote}{\volpostnote}}%
  \usefield{\getsourcedivision@}{volpostnote}%
}

% Insert source division in bibmacro for abreviated forms

\xapptobibmacro{cite:ibid}{\newunit\printfield{titleaddon}\printfield{maintitleaddon}}{}{}
\xapptobibmacro{cite:opcit}{\newunit\printfield{titleaddon}\printfield{maintitleaddon}}{}{}
\xapptobibmacro{cite:short}{\newunit\printfield{titleaddon}\printfield{maintitleaddon}}{}{}
\xapptobibmacro{cite:title}{\newunit\printfield{titleaddon}\printfield{maintitleaddon}}{}{}

\endinput