% Copyright (C) 2004, 2005, 2006 Arne Jorgensen

% This file is free software; you can redistribute it and/or modify it
% under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.

% This file is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
% General Public License for more details.

% You should have received a copy of the GNU General Public License
% along with this file; if not, write to the Free Software Foundation,
% Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

\NeedsTeXFormat{LaTeX2e}[1995/12/01]

% subversion date and revision
\def\dkbib@svn $#1 #2 #3 #4-#5-#6 #7 #8 ${%
  \def\dkbib@sty@revision{#3}
  \def\dkbib@sty@date{#4/#5/#6}
}
\dkbib@svn $Id: dk-bib.sty 92 2006-05-21 21:18:10Z arne $
\def\dkbib@version{0.6}

\ProvidesPackage{dk-bib}[\dkbib@sty@date\space v\dkbib@version\space(r\dkbib@sty@revision) Danish variants of the standard BibTeX styles]

\RequirePackage{xkeyval}

\newif\ifdkbib@url
\dkbib@urlfalse
\DeclareOptionX{url}[true]{%
  \csname dkbib@url#1\endcsname}

\newif\ifdkbib@isbn
\dkbib@isbnfalse
\DeclareOptionX{isbn}[true]{%
  \csname dkbib@isbn#1\endcsname}

\newif\ifdkbib@issn
\dkbib@issnfalse
\DeclareOptionX{issn}[true]{%
  \csname dkbib@issn#1\endcsname}

\newif\ifdkbib@annote
\dkbib@annotefalse
\DeclareOptionX{annote}[true]{%
  \csname dkbib@annote#1\endcsname}

\newif\ifdkbib@printing
\dkbib@printingfalse
\DeclareOptionX{printing}[true]{%
  \csname dkbib@printing#1\endcsname}

\newif\ifdkbib@apalike
\dkbib@apalikefalse
\DeclareOptionX{apalike}[true]{%
  \csname dkbib@apalike#1\endcsname}

\newif\ifdkbib@fixcitedash
\dkbib@fixcitedashtrue
\DeclareOptionX{fixcitedash}[true]{%
  \csname dkbib@fixcitedash#1\endcsname}

\newcount\dkbib@maxordinaldepth
\dkbib@maxordinaldepth0
\newcommand*\dkbib@DeclareOrdinalWord[2]{
  \ifnum#1>\dkbib@maxordinaldepth
    \dkbib@maxordinaldepth#1
  \fi
  \@namedef{dkbib@word#1}{#2}%
}
\dkbib@DeclareOrdinalWord{1}{f\o rste}
\dkbib@DeclareOrdinalWord{2}{anden}
\dkbib@DeclareOrdinalWord{3}{tredje}
\dkbib@DeclareOrdinalWord{4}{fjerde}
\dkbib@DeclareOrdinalWord{5}{femte}
\dkbib@DeclareOrdinalWord{6}{sjette}
\dkbib@DeclareOrdinalWord{7}{syvende}
\dkbib@DeclareOrdinalWord{8}{ottende}
\dkbib@DeclareOrdinalWord{9}{niende}
\dkbib@DeclareOrdinalWord{10}{tiende}
\dkbib@DeclareOrdinalWord{11}{elvte}
\dkbib@DeclareOrdinalWord{12}{tolvte}
\dkbib@DeclareOrdinalWord{13}{trettende}
\dkbib@DeclareOrdinalWord{14}{fjortende}
\dkbib@DeclareOrdinalWord{15}{femtende}
\dkbib@DeclareOrdinalWord{16}{sekstende}
\dkbib@DeclareOrdinalWord{17}{syttende}
\dkbib@DeclareOrdinalWord{18}{attende}
\dkbib@DeclareOrdinalWord{19}{nittende}
\dkbib@DeclareOrdinalWord{20}{tyvende}

\newcount\dkbib@ordinaldepth
\dkbib@ordinaldepth\dkbib@maxordinaldepth
\DeclareOptionX{ordinaldepth}{%
  \dkbib@ordinaldepth#1}

\ifnum\dkbib@ordinaldepth>\dkbib@maxordinaldepth
  \PackageWarningNoLine{dk-bib}{Ordinal depth set to
    \the\dkbib@ordinaldepth, but maximum is \the\dkbib@maxordinaldepth}
\fi

\newif\ifdkbib@ordinalstoword
\dkbib@ordinalstowordfalse
\DeclareOptionX{ordinals2word}[true]{%
  \csname dkbib@ordinalstoword#1\endcsname}

\ProcessOptionsX

% Work around a wrong implementation  of \MakeUppercase (according to
% Morten H\o gholm who also provided this implementation)
\DeclareRobustCommand\dkbib@MakeUppercase[1]{%
  \begingroup
  \def\i{I}\def\j{J}%
  \def\dkbib@reserved@a##1##2{\let##1##2\dkbib@reserved@a}%
  \expandafter\dkbib@reserved@a\@uclclist\dkbib@reserved@b{\dkbib@reserved@b\@gobble}%
  \protected@edef\dkbib@reserved@a{\endgroup\uppercase{#1}}%
  \dkbib@reserved@a
}
\protected@edef\dkbib@MakeUppercase#1{\dkbib@MakeUppercase{#1}}

\AtBeginDocument{%
  %%% fixcitedash
  \@ifpackageloaded{cite}%
    {\ifdkbib@fixcitedash%
        \providecommand{\dkbibdash}{\hbox{-}\penalty\@m}%
        \renewcommand{\citedash}{\dkbibdash}%
      \fi}%
    {\relax}%
  %%% apalike
  \ifdkbib@apalike%
    \RequirePackage{dk-apali}%
  \fi%
  %%% url
  \ifdkbib@url%
    \RequirePackage{url}%
    \providecommand{\dkbiburl}[1]{URL \url{#1}}%
  \else%
    \def\dkbiburl#1{\unskip\@gobble}%
  \fi%
  %%% isbn
  \ifdkbib@isbn%
    \providecommand{\dkbibisbn}[1]{ISBN #1}%
  \else%
    \def\dkbibisbn#1{\unskip\@gobble}%
  \fi%
  %%% issn
  \ifdkbib@issn%
    \providecommand{\dkbibissn}[1]{ISSN #1}%
  \else%
    \def\dkbibissn#1{\unskip\@gobble}%
  \fi%
  %%% annote
  \ifdkbib@annote%
    \providecommand{\dkbibannote}[2]{%
      \begin{quotation}\noindent
        \dkbib@MakeUppercase #2
      \end{quotation}
    }%
  \else%
    \def\dkbibannote#1#2{\unskip}%
  \fi%    
  %%% edition/printing
  \DeclareRobustCommand{\dkbibedition}[2]{%
    \ifx\@empty#1\@empty\else%
      \ifdkbib@ordinalstoword%
        \@ifundefined{dkbib@word#1}%
          {#1\dkbib@addperiod~udgave}%
          {\ifnum#1>\dkbib@ordinaldepth
             #1\dkbib@addperiod~udgave%
           \else
             \@nameuse{dkbib@word#1}~udgave%
           \fi}%
      \else
        #1\dkbib@addperiod~udgave%
      \fi
      \ifdkbib@printing
        \ifx\@empty#2\@empty\else, \fi
      \fi
    \fi
    \ifdkbib@printing
      \ifx\@empty#2\@empty\else
        \ifdkbib@ordinalstoword%
          \@ifundefined{dkbib@word#2}%
            {#2\dkbib@addperiod~oplag}%
            {\ifnum#2>\dkbib@ordinaldepth
               #2\dkbib@addperiod~oplag%
             \else
               \@nameuse{dkbib@word#2}~oplag%
             \fi}%
        \else
          #2\dkbib@addperiod~oplag%
        \fi
      \fi
    \fi
  }
  \DeclareRobustCommand\dkbibEdition[2]{%
    \protected@edef\reserved@a{\csname dkbibedition \endcsname{#1}{#2}}%
    \expandafter\dkbib@MakeUppercase\reserved@a}
}