% !Mode:: "TeX:UTF-8"
%% udesoftec-biblatex.sty
%% Copyright 2015 J. Peter M. Schuler
%% 2018/03/28 v1.6.2 udesoftec

%
% 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 `author-maintained'.
% 
% The current maintainer of this work is J. Peter M. Schuler
% j.peter.m.schuler@uni-due.de
%
% This work consists of the files 
% * udesoftec.cls 
% * udesoftec.bst
% * udesoftec-bibcommon.sty
% * udesoftec-biblatex.sty
% * udesoftec-bst.sty
% * udesoftec-extra.sty
%
% As this work is based on years of mostly undocumented improvement, 
% it includes parts, for which sources can't be identified anymore. Public postings
% in the LaTeX community were used as an input and if source is known, it is
% mentioned below. If anybody identifies parts of his/her own code,
% feel free to contact the maintainer in order to get listed. 
%
% Special thanks to all contributors and for the help of the tex-live team,
% e.g. Axel K.; Norbert P.; Petra R.; Rainer S.; Reinhard K.; Robin F.
%
% For further information refer to:
% http://mirrors.ctan.org/macros/latex/contrib/udesoftec/README
% and
% http://mirrors.ctan.org/macros/latex/contrib/udesoftec/udesoftec-doc.pdf

\NeedsTeXFormat{LaTeX2e}%
\ProvidesPackage{udesoftec-biblatex}[2018/03/28 v1.6.2 udesoftec-biblatex.sty udesoftec bibstyle configuration for biblatex]%

% 
% \newif\ifprimaryDocumentLanguageGerman
% \DeclareOption{de}          {\primaryDocumentLanguageGermantrue}
% \DeclareOption{en}          {\primaryDocumentLanguageGermanfalse}

\newif\ifdocumentIsFinal
\documentIsFinalfalse
\DeclareOption{final}          {\documentIsFinaltrue}

\DeclareOption*{\PackageWarning{udesoftec-biblatex}{Unknown option \CurrentOption}}

\ProcessOptions\relax
%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{udesoftec-bibcommon}

\usepackage[
    backend=biber,
    style=authoryear,
    natbib=true, %full cite command fallback
    dashed=false,
    %sortcites=true,
    sorting=nyt,
    maxcitenames=2,
    giveninits=true,
    terseinits=true,
    uniquename=false,
    uniquelist=false,
    urldate=long,
    maxbibnames=99]{biblatex}
\@ifpackageloaded{biblatex_legacy}
{
\ExecuteBibliographyOptions{labeldate,sorting=nyt,pagetracker}
}{
\ExecuteBibliographyOptions{labeldateparts,sorting=nyt,pagetracker}
}
\setlength{\bibhang} {1.5em} %hanging indentation for list of references
\setlength{\bibitemsep} {.25em}
\setlength{\bibnamesep} {.25em}
\setlength{\bibinitsep} {.25em}


\DeclareFieldFormat*{title}{\bblFontTitle{#1}}
\renewcommand*{\mkbibacro}[1]{#1}
\DeclareFieldFormat{isbn}{\mkbibacro{ISBN}\addcolon{}#1}
\DeclareFieldFormat{isrn}{\mkbibacro{ISRN}\addcolon{}#1}
\DeclareFieldFormat{issn}{\mkbibacro{ISSN}\addcolon{}#1}
\DeclareFieldFormat{doi}{\bbldoi{#1}}


\renewcommand*{\mkbibnameprefix}[1]{\bblFontAuthorInText{#1}}
\renewcommand*{\mkbibnamefamily}[1]{\bblFontAuthorInText{#1}}

\renewcommand*{\labelnamepunct}{\bblAuthorTitleSep}
\renewcommand*{\revsdnamedelim}{\bblAuthorsSep}
\renewcommand*{\multinamedelim}{\bblAuthorsSep}
\renewcommand*{\finalnamedelim}{ \bblFontAuthorInText{\bblAuthorsSepInText}}

\renewcommand*{\multilistdelim}{\bblAuthorsSep}
\renewcommand*{\finallistdelim}{\bblAuthorsSep}

\renewcommand*{\andothersdelim}{\space}
\renewcommand*{\nameyeardelim}{\space}


\renewcommand*{\finentrypunct}{}


\DeclareFieldFormat{booktitle}{\bblFontInBookTitle{#1}\isdot}
\DeclareFieldFormat{journaltitle}{\bblFontJournalTitle{#1}\isdot}
\DeclareFieldFormat{issuetitle}{\bblFontInBookTitle{#1}\isdot}
\DeclareFieldFormat{maintitle}{\bblFontInBookTitle{#1}\isdot}

\AtBeginBibliography{%
    \renewcommand*{\finalnamedelim}{\bblAuthorsSep}
%    \renewcommand*{\mkbibnameprefix}[1]{#1}
    \renewcommand*{\mkbibnamelast}[1]{#1}
    \renewcommand*{\mkbibnamegiven}[1]{#1}
    \renewcommand*{\mkbibnamefamily}[1]{#1}
%    \renewcommand*{\mkbibnameaffix}[1]{#1}
    \renewcommand*{\bibnamedelimd}{\bblFirstnameSep}
    \renewcommand*{\multinamedelim}{\bblAuthorsSep}
    \renewcommand*{\finalnamedelim}{\bblAuthorsSep}%
    \renewcommand*{\revsdnamepunct}{}
    \doublehyphendemerits=10000
    \raggedright    
}



  \toggletrue{abx@bool@giveninits}%
  \DeclareNameAlias{default}{family-given}%
    \renewbibmacro*{name:last-first}[5]{%
        \usebibmacro{name:delim}{#1}%
         \ifblank{#3}{}{\bibnamedelimd\mkbibnameprefix{#3}\isdot}%
         \mkbibnamelast{#1}\isdot%
         \ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}%
         \ifblank{#2}{}{\bibnamedelimd\mkbibnamefirst{#2}}%
    
}

\DeclareNameAlias{sortname}{last-first} %alle Autoren in der Biblografie gleich


\DefineBibliographyStrings{ngerman}{%
    references = {\bblheading},
    andothers         = {\bblFontAuthorInText{\bbletal}}, % we don't use et al in bbl
    editor        = {\bbled},%
    editors       = {\bbleds},%
    urlseen   = {\bbllastaccesswas}%
}

\DefineBibliographyStrings{english}{%
references = {\bblheading},
  andothers         = {\bblFontAuthorInText{\bbletal}}, % we don't use et al in bbl
  editor        = {\bbled},%
  editors       = {\bbleds},%
  urlseen   = {\bbllastaccesswas}%
%  page             = {{Seite}{S\adddot}},
%  pages            = {{Seiten}{S\adddot}},
}

\DefineBibliographyStrings{british}{%
references = {\bblheading},
  andothers         = {\bblFontAuthorInText{\bbletal}}, % we don't use et al in bbl
  editor        = {\bbled},%
  editors       = {\bbleds},%
  urlseen   = {\bbllastaccesswas}%
%  page             = {{Seite}{S\adddot}},
%  pages            = {{Seiten}{S\adddot}},
}

\AtEveryBibitem{\clearlist{language}}
\AtEveryBibitem{\clearfield{pagetotal}}




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newbibmacro*{byeditor+suffix}{%
  \ifnameundef{editor}
    {}
    {%\usebibmacro{byeditor+othersstrg}%
     %\setunit{\addspace}%
     \printnames[byeditor]{editor}%
     \clearname{editor}%
  \usebibmacro{editorstrg}%
     \newunit}%
  \usebibmacro{byeditorx}%
  \usebibmacro{bytranslator+others}%
 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% suppress URL and ISBN if doi present
\settoggle{bbx:isbn}{false} %deactivate normal isbn output
\renewbibmacro*{doi+eprint+url}{%
  \iffieldundef{doi}
  {
  \printfield{isbn}
  \printfield{issn}
   \usebibmacro{url+urldate}
  }
  {
    \printfield{doi}
     \newunit\newblock
    \iftoggle{bbx:eprint}
    {\usebibmacro{eprint}}
    {}%
  }
 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% for compatibility with bibcommon's citemulti
\providecommand{\bibstyle@udesoftec}{}
\providecommand{\bibstyle@udesoftecmulticite}{}

\let\defaultCite\cite%
\let\cite\citep%

\renewcommand*{\citemulti}[1]{%
\let\cite\defaultCite%
\mkbibparens{#1}%
\let\cite\citep%
}


\providebibmacro*{date+extrayear}{}

\def\bbx@opt@mergedate@true{\bbx@opt@mergedate@compact}

% merge date/issue with date label
\def\bbx@opt@mergedate@maximum{%
  \renewbibmacro*{date+extrayear}{%
    \iffieldundef{\thefield{datelabelsource}year}
      {}
      {\printtext[parens]{%
         \printfield{issue}%
         \setunit*{\addspace}%
         \iffieldsequal{year}{\thefield{datelabelsource}year}
           {\printdateextralabel}%
           {\printfield{labelyear}%
            \printfield{extrayear}}}}}%
  \renewbibmacro*{date}{}%
  \renewbibmacro*{issue+date}{}}

% merge date with date label
\def\bbx@opt@mergedate@compact{%
  \renewbibmacro*{date+extrayear}{%
    \iffieldundef{\thefield{datelabelsource}year}
      {}
      {\printtext[parens]{%
         \iffieldsequal{year}{\thefield{datelabelsource}year}
           {\printdateextralabel}%
           {\printfield{labelyear}%
            \printfield{extrayear}}}}}%
  \renewbibmacro*{date}{}%
  \renewbibmacro*{issue+date}{%
    \iffieldundef{issue}
      {}
      {\printtext[parens]{\printfield{issue}}}%
    \newunit}}

% merge year-only date with date label
\def\bbx@opt@mergedate@basic{%
  \renewbibmacro*{date+extrayear}{%
    \iffieldundef{\thefield{datelabelsource}year}
      {}
      {\printtext[parens]{%
         \printfield{\thefield{datelabelsource}year}%
         \printfield{extrayear}}}}%
  \renewbibmacro*{date}{%
    \iffieldundef{month}
      {}
      {\printdate}}%
  \renewbibmacro*{issue+date}{%
    \ifboolexpr{
      test {\iffieldundef{issue}}
      and
      test {\iffieldundef{month}}
    }
      {}
      {\printtext[parens]{%
         \printfield{issue}%
         \setunit*{\addspace}%
         \printdate}}%
    \newunit}}

% merge year-only date with year-only date label
\def\bbx@opt@mergedate@minimum{%
  \renewbibmacro*{date+extrayear}{%
    \iffieldundef{\thefield{datelabelsource}year}
      {}
      {\printtext[parens]{%
         \printfield{\thefield{datelabelsource}year}%
         \printfield{extrayear}}}}%
  \renewbibmacro*{date}{%
    \ifboolexpr{
      test {\iffieldundef{month}}
      and
      test {\iffieldundef{extrayear}}
    }
      {}
      {\printdate}}%
  \renewbibmacro*{issue+date}{%
    \ifboolexpr{
      test {\iffieldundef{issue}}
      and
      test {\iffieldundef{month}}
      and
      test {\iffieldundef{extrayear}}
    }
      {}
      {\printtext[parens]{%
         \printfield{issue}%
         \setunit*{\addspace}%
         \printdate}}%
    \newunit}}

% don't merge date/issue with date label
\def\bbx@opt@mergedate@false{%
  \renewbibmacro*{date+extrayear}{%
    \iffieldundef{\thefield{datelabelsource}year}
      {}
      {\printtext[parens]{%
         \printfield{\thefield{datelabelsource}year}%
         \printfield{extrayear}}}}%
  \renewbibmacro*{date}{\printdate}%
  \renewbibmacro*{issue+date}{%
    \printtext[parens]{%
      \printfield{issue}%
      \setunit*{\addspace}%
      \printdate}%
    \newunit}}

\defbibheading{udesoftec}[\bibname]{%
    \renewcommand*{\chapterformatsimple}{}
    \let\chapterformat\chapterformatsimple%
    \chapter{#1}%
    \addcontentsline{toc}{chapter}{#1}%
    \let\chapterformat\defaultchapterformat%
}
\renewbibmacro*{author}{%
  \ifboolexpr{
    test \ifuseauthor
    and
    not test {\ifnameundef{author}}
  }
    {\bblFontAuthorInList{\usebibmacro{bbx:dashcheck}
       {\bibnamedash}
       {\usebibmacro{bbx:savehash}%
        \printnames{author}%
        \iffieldundef{authortype}
          {\setunit{\addspace}}
          {\setunit{\addcomma\space}}}%
     \iffieldundef{authortype}
       {}
       {\usebibmacro{authorstrg}%
        \setunit{\addspace}}}}%
    {\global\undef\bbx@lasthash
     \usebibmacro{labeltitle}%
     \setunit*{\addspace}}%
\bblFontYearInList{\usebibmacro{date+extrayear}}}
\renewbibmacro*{in:}{\printtext{\bblin}}
\renewbibmacro*{editor}{%
  \usebibmacro{bbx:editor}{editorstrg}}
\renewbibmacro*{editor+others}{%
  \usebibmacro{bbx:editor}{editor+othersstrg}}
  
  
%remove punctuation before (eds) and make bold
\renewbibmacro*{bbx:editor}[1]{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\bblFontAuthorInList{\usebibmacro{bbx:dashcheck}
       {\bibnamedash}
       {\printnames{editor}%
        \setunit{\bblEdPrefix}%
        \usebibmacro{bbx:savehash}}%
     \usebibmacro{#1}%
     \clearname{editor}%
     \setunit{\addspace}}}%
    {\global\undef\bbx@lasthash
     \usebibmacro{labeltitle}%
     \setunit*{\addspace}}%
\bblFontYearInList{\usebibmacro{date+extrayear}}}
 % erst publisher, dann location
 \renewbibmacro*{publisher+location+date}{%
  \printlist{publisher}%
  \setunit*{\addcomma\space}%
  \printlist[][1-1]{location}%nur erste Location
  \setunit*{\addcomma\space}%
  \usebibmacro{date}%
  \newunit}

% location ohne schnickscnack
\DeclareListFormat{location}{#1}
%Todo: Bundesland/Land entfernen


\renewbibmacro*{event+venue+date}{%
  \printfield{eventtitle}%
  \iffieldundef{eventtitleaddon}%
  {}%
  {%
  \newunit%
  \printfield{eventtitleaddon}%
  }
  \ifboolexpr{
    test {\iffieldundef{venue}}
    and
    test {\iffieldundef{eventyear}}
  }
    {}
    {\setunit*{\addspace}%
     \printtext[parens]{%
       \printfield{venue}%
       \setunit*{\addcomma\space}%
       \printeventdate}}%
  \newunit}



% remove double editors from proceedings

\DeclareBibliographyDriver{proceedings}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{editor+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{maintitle+title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{event+venue+date}%
  \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
  \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}}
  
  
  
  
  
  
  

\DeclareBibliographyDriver{inproceedings}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{byeditor+suffix}%
  \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  \usebibmacro{event+venue+date}%
  \newunit\newblock
  \newunit\newblock
  \iffieldundef{series}
    {\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{incollection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{byeditor+suffix}%
  \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  \iffieldundef{series}
    {\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}
  } 
  
  
  
  

%%%%%%%%%%%%
% link whole cite including name
% http://tex.stackexchange.com/questions/15951/hyperlink-name-with-biblatex-authoryear-biblatex-1-4b
%%%%%%%%%%%%
\DeclareFieldFormat{citehyperref}{%
  \DeclareFieldAlias{bibhyperref}{noformat}% Avoid nested links
  \bibhyperref{#1}}

\DeclareFieldFormat{textcitehyperref}{%
  \DeclareFieldAlias{bibhyperref}{noformat}% Avoid nested links
  \bibhyperref{%
    #1%
    \ifbool{cbx:parens}
      {\bibcloseparen\global\boolfalse{cbx:parens}}
      {}}}

\savebibmacro{cite}
\savebibmacro{textcite}

\renewbibmacro*{cite}{%
  \printtext[citehyperref]{%
    \restorebibmacro{cite}%
    \usebibmacro{cite}}}

\renewbibmacro*{textcite}{%
  \ifboolexpr{
    ( not test {\iffieldundef{prenote}} and
      test {\ifnumequal{\value{citecount}}{1}} )
    or
    ( not test {\iffieldundef{postnote}} and
      test {\ifnumequal{\value{citecount}}{\value{citetotal}}} )
  }
    {\DeclareFieldAlias{textcitehyperref}{noformat}}
    {}%
  \printtext[textcitehyperref]{%
    \restorebibmacro{textcite}%
    \usebibmacro{textcite}}}

\AtEveryCitekey{%
\clearfield{shorthand}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%
\endinput%