%% 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
%0. Preamble

\ProvidesFile{bookinother.bbx}
[2020/03/02 v2.3.3 biblatex bibliography style to have entry type for book edited in other entry type (MR)]

\RequireBiber
\RequirePackage{xpatch}
\ifdef{\biblatexmultipledm@bibstyle}
	{\RequireBibliographyStyle{\biblatexmultipledm@bibstyle}}
	{\RequireBibliographyStyle{verbose}}



% 1. The drivers for new entrytype
\DeclareBibliographyDriver{inarticle}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\printdelim{nametitledelim}}\newblock%
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit
  \usebibmacro{bybookineditor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{bybookauthor}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{maintitle}%
  \newunit\newblock
  \usebibmacro{bybookeditor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{journal+issuetitle}%
  \newunit
  \usebibmacro{byeditor+others}%
  \newunit
  \usebibmacro{note+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{issn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}


\DeclareBibliographyDriver{ininarticle}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\printdelim{nametitledelim}}\newblock%
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit
  \usebibmacro{bybookineditor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{bybookauthor}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{booktitle}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{bymainauthor}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{maintitle}%
  \newunit\newblock
  \usebibmacro{bybookeditor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{journal+issuetitle}%
  \newunit
  \usebibmacro{byeditor+others}%
  \newunit
  \usebibmacro{note+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{issn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}



\DeclareBibliographyDriver{ininbook}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{title}%
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit
  \usebibmacro{bybookineditor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{bybookauthor}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{booktitle}%
  \newunit
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{bymainauthor}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{maintitle}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{edition}%
  \newunit
  \printfield{volume}%
  \printfield{part}%
  \newunit
  \printfield{volumes}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}


\DeclareBibliographyDriver{inincollection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\printdelim{nametitledelim}}\newblock%
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit
  \usebibmacro{bybookineditor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{bybookauthor}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{booktitle}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{maintitle}%
  \ifbibmacroundef{bymaineditor+others}%
    {}
    {\newunit%
    \usebibmacro{bymaineditor+others}%
    }%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{edition}%
  \newunit
  \iffieldundef{maintitle}
  {\printfield{volume}%
  \printfield{part}}
  {%
    \newunit
    \printfield{volumes}%
    \newunit\newblock
    \usebibmacro{series+number}%
    \newunit\newblock
    \printfield{note}%
    \newunit\newblock
    \usebibmacro{publisher+location+date}%
    \newunit\newblock
    \usebibmacro{chapter+pages}%
    \newunit\newblock
    \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {%
      \newunit\newblock
      \usebibmacro{doi+eprint+url}%
      \newunit\newblock
      \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock}%%
  }%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}


\DeclareBibliographyDriver{ininproceedings}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\printdelim{nametitledelim}}\newblock%
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit
  \usebibmacro{bybookineditor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{bybookauthor}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{booktitle}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{maintitle}%
  \newunit%
  \ifbibmacroundef{bymaineditor+others}%
    {}
    {\newunit%
    \usebibmacro{bymaineditor+others}%
    }%
  \newunit\newblock
  \usebibmacro{event+venue+date}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \iffieldundef{maintitle}
    {\printfield{volume}%
     \printfield{part}}
    {}%
  \newunit
  \printfield{volumes}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \printlist{organization}%
  \newunit
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}



\DeclareBibliographyDriver{inthesis}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit
  \usebibmacro{bybookineditor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{bybookauthor}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{booktitle}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \printfield{type}%
  \newunit
  \usebibmacro{institution+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit
  \printfield{pagetotal}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

% 2. The alias and sourcemaps

\DeclareBibliographyAlias{bookinarticle}{inarticle}
\DeclareBibliographyAlias{bookincollection}{incollection}
\DeclareBibliographyAlias{bookinincollection}{inincollection}
\DeclareBibliographyAlias{bookininproceedings}{ininproceedings}
\DeclareBibliographyAlias{bookinjournal}{article}
\DeclareBibliographyAlias{bookinproceedings}{inproceedings}
\DeclareBibliographyAlias{bookinreference}{incollection}
\DeclareBibliographyAlias{bookininreference}{inincollection}
\DeclareBibliographyAlias{bookinthesis}{inthesis}
\DeclareBibliographyAlias{bookininbook}{ininbook}
\DeclareBibliographyAlias{bookininarticle}{ininarticle}

\DeclareStyleSourcemap{
 \maps[datatype=bibtex]{
        \map{
          \step[typesource=inmastersthesis, typetarget=inthesis, final]
          \step[fieldset=type,            fieldvalue=mathesis]
        }
        \map{
          \step[typesource=inphdthesis, typetarget=inthesis, final]
          \step[fieldset=type,            fieldvalue=phdthesis]
        }
        \map{
          \step[typesource=bookinmastersthesis, typetarget=inthesis, final]
          \step[fieldset=type,            fieldvalue=mathesis]
        }
        \map{
          \step[typesource=bookinphdthesis, typetarget=inthesis, final]
          \step[fieldset=type,            fieldvalue=phdthesis]
        }
  }
}

% 3. The new fields format


% 3.a bookeditor

\newbibmacro*{bybookeditor}{%
  \ifnameundef{bookeditor}
    {}
    {\usebibmacro{bytypestrg}{bookeditor}{editor}%
     \setunit{\addspace}%
     \printnames[byeditor]{bookeditor}%
     \newunit}%
  }

% 3.b Booinkeditor

% 3.b.i Tools for patching
\newcommand{\bookinother@patch@failed}[1]{\PackageError{bookinother}{Unable to patch #1 driver}}

% 3.b.ii Patch standard drivers
\xpatchbibdriver{incollection}%
  {\usebibmacro{byauthor}}
  {\usebibmacro{byauthor}\newunit\usebibmacro{bybookineditor}}
  {}
  {\bookinother@patch@failed{incollection}}

\xpatchbibdriver{inproceedings}%
  {\usebibmacro{byauthor}}
  {\usebibmacro{byauthor}\newunit\usebibmacro{bybookineditor}}
  {}
  {\bookinother@patch@failed{inproceedings}}


\xpatchbibdriver{article}%
  {\usebibmacro{byauthor}}
  {\usebibmacro{byauthor}%
  \ifbibmacroundef{byineditor}%
    {\newunit\usebibmacro{bybookineditor}}%
    {}%
  }
  {}
  {\bookinother@patch@failed{article}}



% 3.b.iii Declare Bibmacro
\ifdefined\abx@macro@bybookineditor\else%
  \newbibmacro*{bybookineditor}{%
    \ifnameundef{bookineditor}
      {}%
      {\usebibmacro{bytypestrg}{bookineditor}{editor}%
       \setunit{\addspace}%
       \printnames[byeditor]{bookineditor}%
       \newunit%
       \ifnamesequal{bookineditor}{editor}%
        {\clearname{editor}}%
        {}%
      }%
    }%
\fi%

% 3.c Mainauthor

\DeclareNameAlias{mainauthor}{bookauthor}
\DeclareNameAlias{bymainauthor}{bybookauthor}

\newbibmacro*{bymainauthor}{%
  \ifnamesequal{mainauthor}{bookauthor}
    {}
    {\printnames{mainauthor}}}

% 4. The formats for classical fields

\DeclareFieldFormat[%
  inarticle,%
  inincollection,%
  ininproceedings,%
  ininreference,%
  inthesis,%
  ininbook,
  ]{title}{\mkbibquote{#1\isdot}}

\DeclareFieldFormat[%
   inincollection,%
   bookinincollection,%
   inthesis,%
   bookinthesis,%
   ininproceedings,%
   bookininproceedings,%
   ininreference,%
   bookininreference,%
   ininbook,%
   bookininbook,%
   ininarticle,%
   bookininarticle%
   ]{booktitle}{\mkbibquote{#1\isdot}}

\DeclareFieldFormat[%
  inarticle,bookinarticle,%
  ininarticle,bookininarticle%
  ]{maintitle}{\mkbibquote{#1\isdot}}



% Inspired from biblatex.def
\DeclareFieldFormat[inarticle,bookinjournal,bookinarticle]{series}{% series of a journal
  \ifinteger{#1}
    {\mkbibordseries{#1}~\bibstring{jourser}}
    {\ifbibstring{#1}{\bibstring{#1}}{#1}}}
\DeclareFieldFormat[inarticle,bookinjournal,bookinarticle]{volume}{#1}% volume of a journal
\DeclareFieldFormat[inarticle,bookinjournal,bookinarticle]{number}{#1}% number of a journal

% 5. Inheritance

\DeclareDataInheritance{article}{bookinarticle,inarticle}{
	\inherit{author}{bookauthor}%
	\inherit{ineditor}{bookeditor}%
	\inherit{title}{maintitle}%
	\inherit{subtitle}{mainsubtitle}%
	\inherit{titleaddon}{maintitleaddon}%
  \noinherit{shorttitle}
  \noinherit{sorttitle}
  \noinherit{indextitle}
  \noinherit{indexsorttitle}
}

\DeclareDataInheritance{collection,reference}
{bookincollection,bookinreference}{%
  \inherit{title}{booktitle}
  \inherit{subtitle}{booksubtitle}
  \inherit{titleaddon}{booktitleaddon}
  \noinherit{shorttitle}
  \noinherit{sorttitle}
  \noinherit{indextitle}
  \noinherit{indexsorttitle}
}

\DeclareDataInheritance%
  {inproceedings,
   incollection,
   inreference,
   inbook,
  }%
  {%
  bookinincollection,inincollection,%
  bookininproceedings,inproceedings,%
  ininreference,bookininreference,%
  bookininbook,ininbook,%
  }{%
	\inherit{author}{bookauthor}%
	\inherit{title}{booktitle}%
	\inherit{subtitle}{booksubtitle}%
	\inherit{titleaddon}{booktitleaddon}%
	\inherit{bookauthor}{mainauthor}%
	\inherit{booktitle}{maintitle}%
	\inherit{booksubtitle}{mainsubtitle}%
	\inherit{booktitleaddon}{maintitleaddon}%
  \noinherit{shorttitle}
  \noinherit{sorttitle}
  \noinherit{indextitle}
  \noinherit{indexsorttitle}
}

\DeclareDataInheritance{proceedings}{bookinproceedings}{%
  \inherit{title}{booktitle}
  \inherit{subtitle}{booksubtitle}
  \inherit{titleaddon}{booktitleaddon}
  \noinherit{shorttitle}
  \noinherit{sorttitle}
  \noinherit{indextitle}
  \noinherit{indexsorttitle}
}

\DeclareDataInheritance{thesis,phdthesis,mathesis}{bookinthesis,inthesis,inphdthesis,inmathesis,bookinphdthesis,bookinmathesis}{
	\inherit{author}{bookauthor}%
	\inherit{title}{booktitle}%
	\inherit{titleaddon}{booktitleaddon}%
	\inherit{subtitle}{booksubtitle}%
  \noinherit{shorttitle}
  \noinherit{sorttitle}
  \noinherit{indextitle}
  \noinherit{indexsorttitle}
}

\DeclareDataInheritance{inarticle}{bookininarticle,ininarticle}{%
	\inherit{author}{bookauthor}%
	\inherit{bookauthor}{mainauthor}%
	\inherit{title}{booktitle}%
	\inherit{subtitle}{booksubtitle}%
	\inherit{titleaddon}{booktitleaddon}%
	\inherit{booktitle}{maintitle}%
	\inherit{booksubtitle}{mainsubtitle}%
	\inherit{booktitleaddon}{maintitleaddon}%
  \noinherit{shorttitle}
  \noinherit{sorttitle}
  \noinherit{indextitle}
  \noinherit{indexsorttitle}
}

% 6. Label name

\DeclareLabelname[%
  bookinarticle,%
  bookincollection,%
  bookinincollection,%
  bookininproceedings,
  bookininreference,%
  bookinjournal,%
  bookinproceedings,%
  bookinreference,%
  bookinthesis,%
  bookinphdthesis,%
  bookinmathesis,
  bookininbook
  bookininarticle
  ]{%
  \field{shortauthor}
  \field{author}
  \field{ineditor}
  \field{bookineditor}
}

% 7. For biblatex-bookinother

\listadd\opcit@booktitle@entrytypes{inarticle}
\listadd\opcit@booktitle@entrytypes{bookinarticle}
\listadd\opcit@booktitle@entrytypes@novolume{inarticle}
\listadd\opcit@booktitle@entrytypes@novolume{bookinarticle}

\listadd\opcit@booktitle@entrytypes{inincollection}
\listadd\opcit@booktitle@entrytypes{bookinincollection}

\listadd\opcit@booktitle@entrytypes{ininproceedings}
\listadd\opcit@booktitle@entrytypes{bookininproceedings}

\listadd\opcit@booktitle@entrytypes{ininreference}
\listadd\opcit@booktitle@entrytypes{bookininreference}

\listadd\opcit@booktitle@entrytypes{inthesis}
\listadd\opcit@booktitle@entrytypes{bookinthesis}

\listadd\opcit@booktitle@entrytypes{inphdthesis}
\listadd\opcit@booktitle@entrytypes{bookphdinthesis}

\listadd\opcit@booktitle@entrytypes{inmathesis}
\listadd\opcit@booktitle@entrytypes{bookinmathesis}

\listadd\opcit@booktitle@entrytypes{inincollection}
\listadd\opcit@booktitle@entrytypes{bookinincollection}

\listadd\opcit@booktitle@entrytypes{inthesis}
\listadd\opcit@booktitle@entrytypes{bookinthesis}

\listadd\opcit@booktitle@entrytypes{ininproceedings}
\listadd\opcit@booktitle@entrytypes{bookininproceedings}

\listadd\opcit@booktitle@entrytypes{ininreference}
\listadd\opcit@booktitle@entrytypes{bookininreference}

\listadd\opcit@booktitle@entrytypes{ininbook}
\listadd\opcit@booktitle@entrytypes{bookininbook}

\listadd\opcit@booktitle@entrytypes{ininarticle}
\listadd\opcit@booktitle@entrytypes{bookininarticle}
\listadd\opcit@booktitle@entrytypes@novolume{ininarticle}
\listadd\opcit@booktitle@entrytypes@novolume{bookininarticle}

\endinput
