% uni-wtal-lin.bbx, v 0.2 2013-08-09, Carsten A. Dahlmann (Ace@Dahlmann.net)
% based on authoryear

%% requires authoryear
\RequireBibliographyStyle{authoryear}

%% Book
\DeclareBibliographyDriver{book}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/editor+others/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{maintitle+title}%
  \newunit
  \iffieldundef{maintitle}
    {\printfield{volume}%
     \printfield{part}}
    {}%
  \newunit
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \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}%
  \setunit{\bibpagespunct}\newblock
  \newunit\newblock
  \iffieldundef{series}
  {}%
  {\usebibmacro{series+number}}%
  \usebibmacro{finentry}}

%% InBook
\DeclareBibliographyDriver{inbook}{%
  \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{bybookauthor}%
  \setunit{\titleaddonpunct}\newblock
  \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  \iffieldundef{maintitle}
    {\printfield{volume}%
     \printfield{part}}
    {}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \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}%
  \setunit{\bibpagespunct}
  \newunit\newblock
  \iffieldundef{series}
  {}%
  {\usebibmacro{series+number}}%
  \usebibmacro{finentry}}

%% Collection
\DeclareBibliographyDriver{collection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{editor+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{maintitle+title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \iffieldundef{maintitle}
    {\printfield{volume}%
     \printfield{part}}
    {}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \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}%
  \setunit{\bibpagespunct}\newblock
  \newunit\newblock
  \iffieldundef{series}
  {}%
  {\usebibmacro{series+number}}%
  \usebibmacro{finentry}}

%% InCollection
\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+others} 
  \setunit{\titleaddonpunct}\newblock
  \usebibmacro{maintitle+booktitle}% 
  \newunit 
  \iffieldundef{maintitle} 
    {\printfield{volume}% 
     \printfield{part}} 
    {}% 
  \newunit\newblock
    \printfield{note}%
  \newunit\newblock 
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}% 
  \newunit\newblock 
  \usebibmacro{doi+eprint+url}% 
  \newunit\newblock 
  \usebibmacro{addendum+pubstate}% 
  \setunit{\bibpagerefpunct}\newblock 
  \usebibmacro{pageref}% 
  \setunit{\bibpagespunct}
  \newunit\newblock
  \iffieldundef{series}
  {}%
  {\usebibmacro{series+number}}
  \usebibmacro{finentry}} 

%% Article 
\DeclareBibliographyDriver{article}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{bytranslator+others}%
  \newunit\newblock
  \printfield{version}%
  \newunit\newblock
  \usebibmacro{journal+issuetitle}%
  \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}}

%% Unpublished
\DeclareBibliographyDriver{unpublished}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \printfield{howpublished}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \iftoggle{bbx:url}
    {\usebibmacro{url+urldate}}
    {}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagespunct}%
  \usebibmacro{location+date}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \usebibmacro{finentry}}


%% use option edsuper for turning superscripted edition on/off 

\newbool{bbx:editionstring}
\newbool{bbx:edsuper}

\DeclareBibliographyOption{editionstring}[true]{%
  \csuse{bool#1}{bbx:editionstring}}
\DeclareBibliographyOption{edsuper}[true]{%
  \csuse{bool#1}{bbx:edsuper}}

%% DeclareFieldFormat edition
\DeclareFieldFormat{edition}{%
  \ifinteger{#1}
    {\mkbibordedition{#1}~\bibstring{edition}}
    {\ifbool{bbx:editionstring}
      {#1\addspace\bibstring{edition}\isdot}
      {#1\isdot}}}

%% DeclareFieldFormat edition:super
\DeclareFieldFormat{edition:super}{%
  \ifinteger{#1}
    {\mkbibsuperscript{#1}}
    {\blxdw@warning@noline{%
      The 'edition' field of entry\MessageBreak
      '\abx@field@entrykey' is not an integer.\MessageBreak
      The edition will not be printed as\MessageBreak
      superscript. Instead, the 'edition'\MessageBreak
      field is printed completely}}}

%% Test, if field is integer
\newcommand{\bbx@iffieldinteger}[1]{%
  \iffieldundef{#1}
    {\@secondoftwo}
    {\edef\@tempa{\strfield{#1}}%
     \expandafter\ifinteger\expandafter{\@tempa}}}

%% for position of edition at the end:
%% if option edsuper true and
%%%% if field integer, do nothing
%%%% else print edition
%% else print edition
%%
\renewbibmacro*{publisher+location+date}{%
  \printlist{location}%
  \iflistundef{publisher}
    {\setunit*{\addcomma\space}}
    {\setunit*{\addcolon\space}}%
  \printlist{publisher}%
  \setunit*{\addcomma\space}%
  \usebibmacro{date}%
  \ifbool{bbx:edsuper}
    {\bbx@iffieldinteger{edition}
       {}%
       {\printfield{edition}%
        \newunit}}%
    {\printfield{edition}%
     \newunit}}

%% for position of edition (superscripted) at the beginning:
%% if option edsuper true and
%%%% if field integer, print edition superscripted
%%%% else do nothing
%% else do nothing  
%%
\renewbibmacro*{date+extrayear}{%
    \iffieldundef{year}
      {}%
      {\printtext[parens]{%
         \printfield{issue}%
         \setunit*{\addspace}%
         {\printdateextra}%
         {\ifbool{bbx:edsuper}%
    		 {\bbx@iffieldinteger{edition}%
       			{\printfield[edition:super]{edition}}%
       			{}}%
    		 {}}%
         }}}%


%% put series and number into parenthesis
\renewbibmacro*{series+number}{%
  \printtext[parens]{=\addhpthinspace\printfield{series}%
  \setunit*{\addspace}%
  \printfield{number}\nopunct%
  }\setunit*{\addspace}\nopunct}


%% no comma before (eds.)
\renewbibmacro*{bbx:editor}[1]{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\usebibmacro{bbx:dashcheck}
       {\bibnamedash}
       {\printnames{editor}%
        \setunit{\addspace}%
        \usebibmacro{bbx:savehash}}%
     \usebibmacro{#1}%
     \clearname{editor}%
     \setunit{\addspace}}%
    {\global\undef\bbx@lasthash
     \usebibmacro{labeltitle}%
     \setunit*{\addspace}}%
   \usebibmacro{date+extrayear}}%
%  \usebibmacro{year}}%


%% byeditor: first-last (eds.)
\renewbibmacro*{byeditor+others}{%
  \ifnameundef{editor}
    {}
    {\printnames[byeditor]{editor}%
     \setunit{\addspace}%
     \usebibmacro{editorstrg}%
     \clearname{editor}%
     \newunit}%
  \usebibmacro{byeditorx}%
  \usebibmacro{bytranslator+others}}


%% deactivate series for journal
\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\addspace}%
  \usebibmacro{volume+number+eid}%
  \setunit{\addspace}%
  \usebibmacro{issue+date}%
  \setunit{\addcolon\space}%
  \usebibmacro{issue}%
  \newunit}


%% renew volume+number: colon as delimiter
\newbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \setunit*{\addcolon\space}%
  \printfield{number}%
  \setunit{\addcomma\space}%
  \printfield{eid}}


%% listing of names: name/name/final name
\renewcommand{\multinamedelim}[0]{\addslash}% 
\renewcommand*{\finalnamedelim}[0]{\addslash}%


%% change of german abbreviations
\DefineBibliographyStrings{german}{%
  and={\&},
  editor={\addspace\mkbibparens {Hg\adddot}},
  editors={\addspace\mkbibparens {Hgg\adddot}},
  byeditor={Hg\addcolon\thinspace},
  andothers={et\addabbrvspace al\adddot},
  }

%% change of english abbreviations
\DefineBibliographyStrings{english}{%
  and={\&},
  editor={\addspace\mkbibparens {ed\adddot}},
  editors={\addspace\mkbibparens {eds\adddot}},
  byeditor={ed\addcolon\thinspace},
  andothers={et\addabbrvspace al\adddot},
  }


%% no quotation marks for article, inbook, ...
\DeclareFieldFormat
  [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
  {title}{#1\isdot}

%% colon after the word "in"
\renewbibmacro*{in:}{%
  \printtext{%
    \bibstring{in}\addcolon\space}}

%% colon for "editor:" after "in:"
\newcommand*{\titleaddonpunct}{\addcolon\space}

%% no "visited:" before urldate
\DeclareFieldFormat{urldate}{\mkbibparens{#1}}

%% vertical spacing between entrys
\setlength{\bibitemsep}{0.8\baselineskip}


%% load style defaults
\ExecuteBibliographyOptions{%
maxnames=2,
maxbibnames=99,
dashed=false,
edsuper=true,
}%

\endinput
