% --------------------------------------------------------------------------
% the CNLTX bundle
%
%   LaTeX source code and output
%
% --------------------------------------------------------------------------
% Clemens Niederberger
% Web:    https://github.com/cgnieder/cnltx/
% E-Mail: contact@mychemistry.eu
% --------------------------------------------------------------------------
% Copyright 2013--2019 Clemens Niederberger
%
% 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 Clemens Niederberger.
% --------------------------------------------------------------------------
% If you have any ideas, questions, suggestions or bugs to report, please
% feel free to contact me.
% --------------------------------------------------------------------------
\RequirePackage{cnltx-base}
\ProvidesFile{cnltx.bbx}[\cnltx@@date\space \cnltx@@version\space \cnltx@@info]

\cnltx@load@modules{example,tools,translations,names}

\RequireBiber
\RequireBibliographyStyle{alphabetic}
\ExecuteBibliographyOptions{block=ragged,useprefix=true}

\DeclareBibliographyDriver{latex}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \usebibmacro{maintainer}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title+subtitle}%
  \usebibmacro{version+date}%
  \newunit\newblock
  \usebibmacro{url+urldate}%
  \newunit\newblock
  \usebibmacro{finentry}%
}
\DeclareBibliographyAlias{package}{latex}
\DeclareBibliographyAlias{class}{latex}
\DeclareBibliographyAlias{bundle}{latex}

\newbibmacro*{title+subtitle}{%
  \iffieldundef{title}{}{%
    \printfield{title}%
    \ifbibindex{\indexfield{title}}{}%
    \setunit{\adddot\addspace}%
    \iffieldundef{subtitle}{}{%
      \printfield{subtitle}%
      \setunit{\adddot\addspace}%
    }%
  }%
}

\NewBibliographyString{version}
\NewBibliographyString{or-newer}
\DefineBibliographyStrings{english}{
  version = {version} ,
  or-newer = {or newer}
}

\DefineBibliographyStrings{german}{
  version = {Version} ,
  or-newer = {oder neuer}
}

\newbibmacro*{version+date}{%
  \iffieldundef{version}{}{%
    \bibstring{version}%
    \addspace
    \printfield{version}%
    \addcomma\addspace
  }%
  \usebibmacro{date}%
  \addspace
  \bibstring[\mkbibparens]{or-newer}%
  \setunit{\adddot\addspace}%
}

\newbibmacro*{maintainer}{%
  \printtext{%
    \ifnameundef{maintainer}
      {}
      {%
        \addcomma\addspace
        \ifnumgreater{\value{maintainer}}{1}
          {\GetTranslation{cnltx-maintainers}}
          {\GetTranslation{cnltx-maintainer}}%
        \addcolon\addspace
        \printnames{maintainer}%
      }%
  }%
}

\renewcommand*\mkbibnamefamily[1]{\cnltx@write@lastname{#1}}
\renewcommand*\mkbibnamegiven[1]{\cnltx@write@firstname{#1}}
\renewcommand*\mkbibnameprefix[1]{\cnltx@write@lastname{#1}}

\DeclareNameAlias[package]{maintainer}{default}
\DeclareNameAlias[class]{maintainer}{default}
\DeclareNameAlias[bundle]{maintainer}{default}

\RequirePackage{translations}
\DeclareTranslationFallback{cnltx-maintainer}{current maintainer}
\DeclareTranslation{English}{cnltx-maintainer}{current maintainer}
\DeclareTranslation{German}{cnltx-maintainer}{aktueller Maintainer}

\DeclareTranslationFallback{cnltx-maintainers}{current maintainers}
\DeclareTranslation{English}{cnltx-maintainers}{current maintainers}
\DeclareTranslation{German}{cnltx-maintainers}{aktuelle Maintainer}

\DeclareFieldFormat[package]{title}{\pkg*{#1}}
\DeclareFieldFormat[class]{title}{\cls*{#1}}
\DeclareFieldFormat[bundle]{title}{\bnd*{#1}}

\DeclareFieldFormat[package]{version}{#1}
\DeclareFieldFormat[class]{version}{#1}
\DeclareFieldFormat[bundle]{version}{#1}

\DeclareIndexFieldFormat[package]{title}{%
  \ifstrequal{#1}{\KOMAScript}
    {\pkgidx[KOMA-Script]{\KOMAScript}}
    {\pkgidx{#1}}%
}
\DeclareIndexFieldFormat[class]{title}{%
  \ifstrequal{#1}{\KOMAScript}
    {\clsidx[KOMA-Script]{\KOMAScript}}
    {\clsidx{#1}}%
}
\DeclareIndexFieldFormat[bundle]{title}{%
  \ifstrequal{#1}{\KOMAScript}
    {\bndidx[KOMA-Script]{\KOMAScript}}
    {\bndidx{#1}}%
}

\DeclareIndexFieldFormat[package]{indextitle}{%
  \ifstrequal{#1}{\KOMAScript}
    {\pkgidx[KOMA-Script]{\KOMAScript}}
    {\pkgidx{#1}}%
}
\DeclareIndexFieldFormat[class]{indextitle}{%
  \ifstrequal{#1}{\KOMAScript}
    {\clsidx[KOMA-Script]{\KOMAScript}}
    {\clsidx{#1}}%
}
\DeclareIndexFieldFormat[bundle]{indextitle}{%
  \ifstrequal{#1}{\KOMAScript}
    {\bndidx[KOMA-Script]{\KOMAScript}}
    {\bndidx{#1}}%
}

\DeclareIndexNameFormat{cnltx}{%
  \nameparts{#1}%
  \expandafter\notblank\expandafter{\namepartgiven}{%
    \usebibmacro{index:entry}{\index}{%
      \namepartfamily, \namepartgiven
      \actualoperator
      \expandafter\notblank\expandafter{\namepartprefix}
        {\cnltx@write@lastname\namepartprefix\space}
        {}%
      \cnltx@write@lastname\namepartfamily,
      \cnltx@write@firstname\namepartgiven
    }%
  }{%
    \usebibmacro{index:entry}{\index}{%
      \namepartfamily
      \actualoperator
      \expandafter\notblank\expandafter{\namepartprefix}
        {\cnltx@write@lastname\namepartprefix\space}
        {}%
      \cnltx@write@lastname\namepartfamily
    }%
  }%
}

\DeclareIndexNameAlias{labelname}{cnltx}
\DeclareIndexNameAlias{author}{cnltx}
\DeclareIndexNameAlias{maintainer}{cnltx}
\DeclareIndexNameAlias{labelname}{cnltx}
\DeclareIndexNameAlias{author}{cnltx}
\DeclareIndexNameAlias{maintainer}{cnltx}
\DeclareIndexNameAlias{labelname}{cnltx}
\DeclareIndexNameAlias{author}{cnltx}
\DeclareIndexNameAlias{maintainer}{cnltx}

\DeclareFieldFormat[package]{subtitle}{\mkbibemph{#1}}
\DeclareFieldFormat[class]{subtitle}{\mkbibemph{#1}}
\DeclareFieldFormat[bundle]{subtitle}{\mkbibemph{#1}}

\DeclareLabelname[package,class,bundle]{%
  \field{shortauthor}
  \field{author}
  \field{maintainer}
  \field{shorteditor}
  \field{editor}
  \field{translator}
}

\DeclareDriverSourcemap[datatype=bibtex]{
  \map{
    \step[fieldsource=info, fieldtarget=subtitle]
  }
}

\endinput

HISTORY:
2013/09/14 v0.4   - first version added to the bundle
2013/10/04 v0.7a  - added drivers `@class' and `@bundle'
2013/11/22 v0.9   - made independent from the `cnltx-doc' class
2014/03/11 v0.11  - change name format so that names are printed according to
                    the format of the \newname commands from the `tools'
                    module;
                    this is going to need tests if it really is consistent
                    for different types of name formats (prefixes, affixes...)
2016/03/11 v0.13b - adapt bib style to biblatex v3.3
2017/02/04 v0.14  - new bibmacro `version+date', use said macro in the `latex'
                    driver
2019/11/01 v0.15  - fix problems with name format
