% \iffalse meta comment
% File: isodate.dtx Copyright (C) 2000--2005 Harald Harders
% \fi
%
% \iffalse
%
%<*driver>
\documentclass[UKenglish]{ltxdoc}
\usepackage{babel}
\IfFileExists{isodate.sty}{\usepackage[english,iso]{isodate}
 \let\isodateSTYfound\active}{\GenericWarning{isodate.dtx}{Package
 file isodate.sty not found (Documentation will be messed up!^^J^^A
 Generate isodate.sty by (La)TeXing isodate.ins, process
 isodate.dtx again)^^J}\stop}
\usepackage{array}
\usepackage{url}
\usepackage{longtable}
\usepackage{morefloats}
\GetFileInfo{isodate.sty}
\title{The \texttt{isodate} package\thanks{This file has version 
    \fileversion\ last revised \printdateTeX{\filedate}.}}
\author{Harald Harders\\\texttt{h.harders@tu-bs.de}}
\date{File Date \printdateTeX{\filedate}, Printed \today}
\newlength{\tempdima}%
\makeatletter
\renewenvironment{table}[1][]{%
  \@float{table}[#1]%
  \centering%
  \setlength{\tempdima}{\abovecaptionskip}%
  \setlength{\abovecaptionskip}{\belowcaptionskip}%
  \setlength{\belowcaptionskip}{\tempdima}%
  }{%
\end@float
}
\makeatother
\EnableCrossrefs
\CodelineIndex
\DoNotIndex{\def,\edef,\let,\newcommand,\newenvironment,\newcounter,%
  \gdef,\@ifundefined,\@empty,\@firstoftwo,\@secondoftwo,\@nil,%
  \,,\number,\renewcommand,\setboolean,\whiledo,\ifthenelse}
\DoNotIndex{\setcounter,\space,\MessageBreak,\DeclareRobustCommand,\equal}
\DoNotIndex{\csname,\endcsname,\ifx,\else,\fi,\if,\fi,\@tempswafalse}
\DoNotIndex{\@tempswatrue,\undefined,\if,\or,\and,\fi}
\DoNotIndex{\begingroup,\endgroup,\begin,\end,\CurrentOption}
\CodelineNumbered
\RecordChanges
\CheckSum{2244}
\begin{document}
 \DocInput{isodate.dtx}
\end{document}
%</driver>
% \fi
%
% \changes{2.26}{2005/03/10}{Support different input formats
%   containing slashes}%
% \changes{2.23}{2004/11/19}{Avoid to use the \texttt{calc} package
%   since it causes problems with many other packages}%
% \changes{2.22}{2004/02/12}{Path changed according to new CTAN
%   structure}%
% \changes{2.22}{2004/02/12}{Makefile adapted for \TeX Live}%
% \changes{2.21}{2003/12/06}{Fix some bugs in date ranges when both
%   month and year are equal (several language)}%
% \changes{2.21}{2003/12/06}{Support to print date without year (in
%   all language-dependent commands \cs{iso@printmonthday@...} and
%   \cs{iso@printdate@...})}%
% \changes{2.20}{2003/12/06}{Avoid usage of \cs{filedate} and
%   \cs{fileversion}}
% \changes{2.01}{2000/08/24}{For the case that none of the packages
%   babel, german, and ngerman is loaded there is a new macro
%   \texttt{\textbackslash iso@languagename} that contains the name of
%   the last loaded language. If one of the packages is loaded it
%   contains the current language.}
% \changes{2.00}{2000/08/21}{Total reimplementation of the
%   package. The old package has renamed to isodateo.}
%
% \maketitle
%
% \begin{abstract}
% \noindent This package provides commands to switch between different 
% date formats (standard, ISO, numeric, \LaTeX\ package).
% They are used by the \cs{today} command, by the \cs{printdate} and
% \cs{printdateTeX} commands that print any date, and by the
% \cs{daterange} command that prints a date range.
% At the moment, this package supports German (old and new
% orthography, Austrian), British, US, Australian as well as New
% Zealand English,\footnote{In order to use Australian or New Zealand,
% you need a version of babel that supports the used language. It
% should be available, soon.}
% French, Danish, Swedish, and Norwegian.
%
% The idea for this package was taken from the akletter class. 
% \end{abstract}
%
% \tableofcontents
% 
% \section*{Acknowledgements}
%
% First of all I have to thank Axel Kielhorn who wrote the package
% \verb|akletter| which inspired me to write \verb|isodate|. The help
% of Heiko Oberdiek was necessary to handle characters in substrings
% which resulted in the package \verb|substr|. David Sanderson found
% the bug which disabled \verb|isodate| to work without
% \verb|babel|. He also helped me to improve the documentation and
% sent me a link to the ISO 8601 norm \cite{iso8601a}.
% Svend Tollak Munkejord has added the Norwegian language, Christian
% Schlauer has added Swedish.
%
% \section*{Requirements}
%
% The package |isodate| needs the package |substr.sty| which can be
% obtained from |CTAN:macros/latex/contrib/substr/|.
%
% \section{Commands}
% 
% \subsection{Switching the date output format}
%
% \DescribeMacro{\isodate}%
% \DescribeMacro{\numdate}%
% \DescribeMacro{\shortdate}%
% \DescribeMacro{\TeXdate}%
% \DescribeMacro{\origdate}%
% \changes{2.05}{2001/05/19}{Added an original format with a two digit year.}%
% \DescribeMacro{\shortorigdate}%
% \DescribeMacro{\Romandate}%
% \DescribeMacro{\romandate}%
% This package provides five commands to switch the output format of
% all commands that print dates (described later):
% \DescribeMacro{\shortRomandate}%
% \DescribeMacro{\shortromandate}%
% \medskip 
%
% \begin{longtable}[l]{@{}ll}
% \verb|\isodate|&date format described in ISO 8601 and DIN 5008
% \cite{iso8601a}\\
% &(yyyy-mm-dd)\\
% \verb|\numdate|&numeric date format with four digits of the year\\
% \verb|\shortdate|&short numeric date format with two digits of the
% year\\
% \verb|\TeXdate|&date format used for version description of 
% packages\\
% &(yyyy/mm/dd)\\
% \verb|\origdate|&original \LaTeX\ format\\
% \verb|\shortorigdate|&original \LaTeX\ format with two instead of four
% digits of\\
% &the year\\
% \verb|\Romandate|& As \cs{numdate} but with uppercase Roman numerals
% \\
% & for the month\\
% \verb|\romandate|& As \cs{numdate} but with lowercase Roman numerals
% \\
% & for the month\\
% \verb|\shortRomandate|& As \cs{shortdate} but with uppercase Roman numerals
% \\
% & for the month\\
% \verb|\shortromandate|& As \cs{shortdate} but with lowercase Roman numerals
% \\
% & for the month\\
% \end{longtable}
% \medskip 
%
% These commands \emph{do not} print any dates and they don't take an
% argument.
% They just switch the format for later usage of the date-printing
% commands \cs{today}, \cs{printdate}, \cs{printdateTeX}, and
% \cs{daterange}.
%
% The numeric and short numeric as well as the Roman numbered formats
% change their behaviour depending on the current language:
%
% \noindent\begin{tabular}{@{}llll@{}}
% German, nGerman&\verb|dd.\,mm.~yyyy|&resp.&\verb|dd.\,mm.\,yy|\\
% US English&\verb|mm/dd/yyyy|&resp.&\verb|mm/dd/yy|\\ 
% other languages&\verb|dd/mm/yyyy|&resp.&\verb|dd/mm/yy|
% \end{tabular}
%
% This package supports German (old and new rules, Austrian), US
% English, French, Danish, Swedish, and Norwegian.
% Switching the language by using \verb|\selectlanguage| does \emph{not}
% switch back to the original date format. So the current date format
% stays active when changing the language.
%
% The change of the date format works locally. So it is possible to
% change it locally inside a group; e.g.,
% \begin{verbatim}
%\today, {\origdate\today}, \today\end{verbatim}
% leads to ``\today, {\origdate\today}, \today''.
%
% \DescribeMacro{\printyearoff}%
% \DescribeMacro{\printyearon}%
% By default, all formats print the day, month, and year.
% Sometimes, you may want to print the date without the year. 
% This can be reached by using the command \cs{printyearoff}.
% You can switch back with \cs{printyearon} or by using
% \cs{printyearoff} inside a group (e.g., an environment).
% To switch globally, preceed the command by \cs{global}.
% An example:
% \begin{verbatim}
%\today, {\printyearoff\today}, \today\end{verbatim}
% leads to ``{\origdate\today, {\printyearoff\today}, \today}''.
%
%
% \subsection{Printing today's date}
%
% \DescribeMacro{\today}%
% As usual, the command \cs{today} prints the date of today. Its
% appearance is influenced by the current date format
%
% \subsection{Printing any date}
%
% \DescribeMacro{\printdate}%
% The command \verb|\printdate{#1}| prints any date in the current
% format. The argument may be a date in German, British English, or
% ISO format, e.g.,
% \begin{verbatim}
%\printdate{24.12.2000}
%\printdate{24/12/2000}
%\printdate{2000-12-24}\end{verbatim}
%
% \DescribeMacro{\printdateTeX}%
% The command \verb|\printdateTeX{#1}| prints any date in the actual
% format. The argument must be in the \LaTeX\ format
% \verb|yyyy/mm/dd|, e.g.,
% \begin{verbatim}
%\printdateTeX{2000/12/24}\end{verbatim}
% This command is useful for printing version information stored in a
% macro. For example the version of this package is stored in
% the macro \verb|\filedate| (``\filedate''). To print it with the actual
% date format you can use the command \verb|\printdateTeX{\filedate}|
% which leads to e.g., ``\printdateTeX{\filedate}'' or
% {\origdate``\printdateTeX{\filedate}''}.
% Another possibility is to switch the input format to |tex| using
% \cs{dateinputformat}, described below.
%
% \subsection{Printing date ranges}
%
% \DescribeMacro{\daterange}%
% The command \verb|\daterange{#1}{#2}| prints a date range in the current
% format. The arguments may be a date in German, British English, or
% ISO format (see above). But there is a limitation: Both arguments
% must have the same input format.
%
% Depending on the language and date format, this commands leaves out
% some of the data. The simplest way to understand it is to watch some
% examples:
% \par\medskip\noindent
% \verb|{\isodate|{\isodate\\
% \verb|\daterange{1999-05-03}{1999-05-31}| $\longrightarrow$
%   \daterange{1999-05-03}{1999-05-31}\\
% \verb|\daterange{1999-05-03}{1999-11-03}| $\longrightarrow$
%   \daterange{1999-05-03}{1999-11-03}\\
% \verb|\daterange{1999-05-03}{2000-04-07}| $\longrightarrow$
%   \daterange{1999-05-03}{2000-04-07}\\
% \verb|}|}\\
% \verb|{\origdate|{\origdate\\
% \verb|\daterange{1999-05-03}{1999-05-31}| $\longrightarrow$
%   \daterange{1999-05-03}{1999-05-31}\\
% \verb|\daterange{1999-05-03}{1999-11-03}| $\longrightarrow$
%   \daterange{1999-05-03}{1999-11-03}\\
% \verb|\daterange{1999-05-03}{2000-04-07}| $\longrightarrow$
%   \daterange{1999-05-03}{2000-04-07}\\
% \verb|}|}
%
% \subsection{Changing the ISO format}
%
% \DescribeMacro{\isodash}%
% The ISO norm says that the date format is ``yyyy-mm-dd'' or
% ``yyyymmdd'' \cite{iso8601a}.
% By default I use the hyphen ``-'' as separator. You can change this
% using the \verb|\isodash|\footnote{The name ``isodash'' is a little
% bit confusing and was chosen due to my limited knowledge in
% English. It should be named ``isoseparator'' or ``isosep''. But for 
% compatiblity reasons I will not change it.} command, e.g.,
% \begin{verbatim}
%\printdate{24/12/2000},
%\isodash{--}%
%\printdate{24/12/2000},
%\isodash{}%
%\printdate{24/12/2000}\end{verbatim}
% leads to ``2000-12-24, 2000--12--24, 20001224''. Or for example
% \begin{verbatim}
%\isodash{$\cdot$}
%\printdate{24/12/2000}\end{verbatim}
% leads to ``2000$\cdot$12$\cdot$24''.
%
%
% \subsection{Changing the short original format}
%
% \DescribeMacro{\shortyearsign}%
%
% The short original format normally prints the year with two digits, e.g.,
% ``19th May 01''.
% Some people want to add an additional sign before the year, e.g.,
% ``19th May '01''.
% This can be achieved by using the command \verb|\shortyearsign|, e.g.,
% \begin{verbatim}
%\printdate{24/12/2000},
%\shortyearsign{'}%
%\printdate{24/12/2000}\end{verbatim}
% leads to ``24 december 00, 24 december '00'' in English.
%
% This only effects the \verb|shortorig| format. The \verb|short| numerical
% format stays unchanged.
%
%
% \subsection{Changing the German format}
%
% \changes{2.03}{2001/05/04}{Allow change of spaces for German language}%
% The spacings for the numerical formats in the German language 
% (24.\,12.~2000 resp. 24.\,12.\,00) were taken from the Duden
% \cite{duden1996a} and are the defaults when using one of the
% German derivatives.
% Some people want to use different spacings. Thus from version 2.03 on it 
% is possible to change them.
% \DescribeMacro{\daymonthsepgerman}%
% \DescribeMacro{\monthyearsepgerman}%
% You can change the spacing between the day and the month using the 
% command \verb|\daymonthsepgerman|. Using the command
% \verb|\monthyearsepgerman| you can change the spacing between the
% month and the year for the long and the short format, e.g.,
% \begin{verbatim}
%\daymonthsepgerman{\quad}%
%\monthyearsepgerman{\qquad}{\quad}%
%{\numdate\printdate{24.12.2000}}, {\shortdate\printdate{24.12.2000}}\end{verbatim}
% leads to ``24.\quad12.\qquad2000, 24.\quad12.\quad00''.
%
% The default values are ``\cs{,}'' for the separator between day and
% month resp.\ ``\cs{,}'' between month and year in the short format
% and ``|~|'' in the long format.
%
%
% \subsection{User defined month formatting}
%
% Internally, the formats using Roman numerals for the month are just
% links to the \cs{numdate} and \cs{shortdate} formats with a changed
% format for printing the month.
% Therefore, the command \cs{Romandate} calls \cs{numdate} by
% following sequence:
% \begin{verbatim}
%\numdate[Roman]%
%\isotwodigitdayfalse\end{verbatim}
% This tells \cs{numdate} to format the month using the \cs{Roman}
% command and to typeset the day without a leading zero if it is
% less than ten.
%
% You may do similar things, e.g.,
% \begin{verbatim}
%\numdate[Alph]\end{verbatim}
% prints the months with the command \cs{Alph}, ``A'', ``B'', \ldots{}
% The day is printed with two digits since every call of \cs{numdate}
% or \cs{shortdate} calls \cs{isotwodigitdaytrue} which switches
% printing the day with two digits on.
% This does not make any sence but may serve as example.
% If you want to enable days with one digit, append
% \cs{isotwodigitdaytrue}:
% \begin{verbatim}
%\numdate[Alph]%
%\isotwodigitdaytrue\end{verbatim}
%
% You may declare any command that typesets a counter that is given as
% its mandatory argument (e.g., \cs{alph}, \cs{Alph}, \cs{arabic},
% \ldots) in the optional argument of the \cs{numdate},
% \cs{shortdate}, \cs{isodate}, and \cs{TeXdate} commands, without the
% leading backslash.
% You can, of course, define own commands that do it.
% For instance,
% \begin{verbatim}
%{\def\boldnum#1{\textbf{\twodigitarabic{#1}}}%
%\numdate[boldnum]%
%\printdate{24.3.2000}}\end{verbatim}
% leas to
% ``{\def\boldnum#1{\textbf{\twodigitarabic{#1}}}\ignorespaces
% \numdate[boldnum]\ignorespaces
% \printdate{24.3.2000}}''.
% \DescribeMacro{\twodigitarabic}
% Here, the \cs{twodigitarabic} command has been used that prints a
% positive number with at least two digits.\footnote{This command is
%   also used for the numerical date formats.}
%
% If you, for example want a numerical date format with the day and
% month printed with the ``natural'' number of digits rather than with
% two digits, you may do it as follows:
% \begin{verbatim}
%{\numdate[arabic]\isotwodigitdayfalse
%\printdate{1.2.2000}}\end{verbatim}
% which leads to ``{\numdate[arabic]\isotwodigitdayfalse
% \printdate{1.2.2000}}''.
%
% Using one of the other date formats reset the numerical format to
% its standard settings with arabic numerals (with two digits), e.g.,
% \begin{verbatim}
%{\numdate[Alph]\printdate{6.12.2000};
%\isodate\printdate{6.12.2000};
%\numdate\printdate{6.12.2000}}\end{verbatim}
% leads to ``{\numdate[Alph]\isotwodigitdayfalse\printdate{6.12.2000};
% \isodate\printdate{6.12.2000};
% \numdate\printdate{6.12.2000}}''.
%
% \subsection{Switching the date input format}
%
% \DescribeMacro{\dateinputformat}%
% As described above, the date can be given in different formats.
% For the German format |dd.mm.yyyy| and the ISO format |yyyy-mm-dd|,
% the input format is definite.
% But when using slashes to seperate the day, month, and year,
% different formats exist.
% British people use |dd/mm/yyyy|, American people use |mm/dd/yyyy|,
% while \TeX\ uses |yyyy/mm/dd| which in fact is an ISO format with
% slashes instead of dashes.
%
% By default, the British format is used.
% If the user wants to give the American or \TeX\ format as argument
% of the \cs{printdate} or \cs{daterange} commands, the macro
% \cs{dateinputformat} can be used to change the behaviour.
% This macro takes the name of the input format as single parameter,
% e.g., \cs{dateinputformat\{american\}}, for switching to American
% behaviour, e.i., |mm/dd/yyyy|.
% For example,
% \begin{verbatim}
%\numdate
%\selectlanguage{UKenglish}%
%\dateinputformat{american}%
%\printdate{12/31/2004}\end{verbatim}
% gives
% \begingroup
% \numdate
% \selectlanguage{UKenglish}\dateinputformat{american}\printdate{12/31/2004}.
% \endgroup
% In this example, \emph{input} format is American while the
% \emph{output} format is English.
%
% Valid arguments for the \cs{dateinputformat} command are |english|,
% |UKenglish|, |british|, |american|, |USenglish|, |tex|, |latex|,
% |TeX|, |LaTeX|.
% The meaning of most possibilities should be clear; |english| means
% British English.
%
% Beware that the input format may only be changed for the date format
% using slashes.
% Thus, you don't have to and are not allowed to specify input formats
% other than these described above.
% For example, \cs{dateinputformat\{german\}} is not
% allowed (and not necessary).
%
% \section{Calling the package}
%
% The package is called using the \verb|\usepackage| command:\\
% \verb|\usepackage[|option\verb|]{isodate}|. 
%
% The possible package options can be seen in table~\ref{tab:options}.
% %
% \begin{table}[!tbp]
% \centering
% \caption{Package options}
% \label{tab:options}
% \begin{minipage}{\linewidth}
% \begin{tabular}{ll}\hline
% option&function\\ \hline
% \verb|iso|&start with ISO date format\\
% \verb|num|&start with numeric date format with 4 digits of the year\\
% \verb|short|&start with numeric date format with 2 digits of the year\\
% \verb|TeX|&start with \LaTeX\ numeric date format (yyyy/mm/dd)\\
% \verb|orig|&start with normal \LaTeX\ date format
% (default\footnote{The original format is used as default in order
% to avoid a different document output by just including the package.})\\
% \verb|shortorig|&start with short normal \LaTeX\ date format (2 digits)\\
% \verb|Roman|&start with numeric date format (month in uppercase\\
%   & Roman numerals)\\
% \verb|roman|&start with numeric date format (month in lowercase\\
%   & Roman numerals)\\
% \verb|shortRoman|&start with short Roman format\\
% \verb|shortroman|&start with short roman format\\
% \hline
% \verb|american|&support American English date format\\
% \verb|austrian|&support Austrian date format\\
% \verb|british|&support British English date format\\
% \verb|danish|&support Danish date format\\
% \verb|english|&support British English date format\\
% \verb|french|&support French date format\\
% \verb|german|&support German date format\\
% \verb|naustrian|&support new Austrian date format\\
% \verb|ngerman|&support new German date format\\
% \verb|norsk|&support Norwegian date format\\
% \verb|norwegian|&support Norwegian date format\\
% \verb|swedish|&support Swedish date format\\
% \verb|UKenglish|&support British English date format\\
% \verb|USenglish|&support American English date format\\
% \hline
% \verb|inputenglish|& English date input format (default)\\ 
% \verb|inputbritish|& English date input format (default)\\
% \verb|inputUKenglish|& English date input format (default)\\
% \verb|inputamerican|& American date input format\\
% \verb|inputUSenglish|& American date input format\\
% \verb|inputtex|& \TeX\ date input format\\
% \verb|inputTeX|& \TeX\ date input format\\
% \verb|inputlatex|& \TeX\ date input format\\
% \verb|inputLaTeX|& \TeX\ date input format\\
% \hline
% \end{tabular}
% \end{minipage}
% \end{table}
%
% \emph{Be aware that at least one language option must be set when calling
% isodate.} The last language in the option list is the default language.
%
% The package isodate works well together with \verb|babel.sty|,
% \verb|german.sty|, or \verb|ngerman.sty|.
% It does not matter if \verb|isodate| is loaded before or after the
% used language package.
%
% It is also possible to use isodate without one of the language
% packages. Then it is not possible to switch between languages using 
% the \verb|\selectlanguage| command.\footnote{Yes, there is a way to
%   change the date language, but it is a little bit tricky:\\
% \texttt{\textbackslash makeatletter\\
% \textbackslash def\textbackslash iso@languagename\{german\}\%\\
% \textbackslash dategerman\%\\
% \textbackslash makeatother}} 
% Then the default language is the last one in the option list. If an
% error occurs when using isodate without one of the packages
% \verb|babel.sty|, \verb|german.sty|, and \verb|ngerman.sty| please
% run \verb|tstlang.tex| through latex and send the file
% \verb|tstlang.log| to the address \verb|h.harders@tu-bs.de|.
%
% If using isodate
% together with babel it can be useful to put the language options as 
% global options into the optional parameters of the
% \verb|\documentclass| command.
% Then automatically the available languages are the same for the text
% and the dates, and the default language is also the same.
% For example:
% \begin{verbatim}
%\documentclass[english,german]{article}
%\usepackage{babel}
%\usepackage[num]{isodate}\end{verbatim}
%
% The input format options specify the input format that is used at
% the begin of the document. 
% You don't have to define multiple options if you want to change the
% input format in the document using \cs{dateinputformat}.
% For example,
% \begin{verbatim}
%\documentclass[american,german,british]{article}
%\usepackage{babel}
%\usepackage[iso,inputamerican]{isodate}
%\begin{document}
%D \printdate{28.2.2000}\par  
%ISO \printdate{2000-2-28}\par
%US \printdate{2/28/2000}\par 
%\dateinputformat{british}UK \printdate{28/2/2000}\par
%\dateinputformat{tex}\TeX\ \printdate{2000/2/28}
%\end{document}\end{verbatim}
% works as expected.
%
% Beware that only the mentioned input formats are defined.
% For example, |inputgerman| does not exist because it is not
% necessary.
% 
%
% \section{Add new languages to the package}
%
% The easiest way to add new languages to the package is to copy one
% of the simple language files \verb|danish.idf| or \verb|french.idf|
% to the new language name, e.g., \verb|plattdeutsch.idf|, and change it
% as necessary.
%
% This new file can be used without changing \verb|isodate.sty| if you 
% use its name explicitly in the optional parameter of the
% \verb|\usepackage| command. If you have added support for a new
% language please mail me.
%
% \changes{2.04}{2001/05/17}{Added section for solvable problems.}
% \changes{2.10}{2003/10/13}{Removed section about solvable problems
%   since it was wrong.}
%
% \appendix
% 
% \section{Licence} 
% 
% Copyright 2000--2005 Harald Harders
%
% This program can be redistributed and/or modified under the terms
% of the LaTeX Project Public License Distributed from CTAN
% archives in directory macros/latex/base/lppl.txt; either
% version 1 of the License, or any later version.
% 
% \section{Known errors}
%
% \begin{itemize} 
% \item The \cs{printdate} and \cs{printdateTeX} commands are not
%   very good in checking the argument for correct syntax.
% \item The language definition files \verb|french.idf| and
% \verb|german.idf| are not yet commented.
% \item Isodate and draftcopy do not work together.
% \end{itemize}
%
% \section{Planned features and changes}
%
% \begin{itemize}
% \item Of course eliminate the errors.
% \item Add other languages.
%   Please help me with this topic. I don't know the date formats in
%   other languages.
% \item Add a command that prints only the month and the year of a date.
% \item Format short given years to four digits and calculate
%   reasonable first and second digits.
% \end{itemize}
%
% \begin{thebibliography}{1}
% \bibitem{iso8601a}
%   International Standard: ISO~8601.
%   \newblock \url{http://www.iso.ch/markete/8601.pdf}, 1988-06-15.
% \bibitem{duden1996a}
%   DUDEN Band 1.
%   \newblock Die deutsche Rechtschreibung.
%   \newblock 21. Auf\/lage, Dudenverlag, Mannheim, Germany, 1996.
% \end{thebibliography}
%                                
% \StopEventually{\PrintChanges \PrintIndex}
%
%
% \section{The implementation}
%
% \subsection{Package file isodate.sty}
%
% Heading of the files:
%    \begin{macrocode}
%<isodate>\NeedsTeXFormat{LaTeX2e}
%<isodate>\ProvidesPackage{isodate}
%<danish>\ProvidesFile{danish.idf}
%<english>\ProvidesFile{english.idf}
%<french>\ProvidesFile{french.idf}
%<german>\ProvidesFile{german.idf}
%<norsk>\ProvidesFile{norsk.idf}
%<swedish>\ProvidesFile{swedish.idf}
%<isodate>  [2005/03/11  v2.27  Print dates with different formats (HH)]
%<language>  [2005/03/11  v2.27  Language definitions for isodate package (HH)]
%    \end{macrocode}
% The package:
%    \begin{macrocode}
%<*isodate>
\RequirePackage{ifthen}
\IfFileExists{substr.sty}{\RequirePackage{substr}%
 }{\PackageError{isodate.sty}{Package file substr.sty not found}
   {This version of isodate.sty needs the package substr.sty.^^J%
     You can download it from
     CTAN:/macros/latex/contrib/substr/^^J%
     e.g., one CTAN node is ftp.dante.de.
     Install substr.sty into your TeX tree.}}
%    \end{macrocode}
% Declare the options for the default date format.
% \changes{2.05}{2001/05/19}{Execute options at the end of the package instead
%   of at the end of the preamble.}
% \changes{2.10}{2003/10/13}{Add month in Roman numerals}%
%    \begin{macrocode}
\DeclareOption{iso}{\AtEndOfPackage{\isodate}}
\DeclareOption{num}{\AtEndOfPackage{\numdate}}
\DeclareOption{short}{\AtEndOfPackage{\shortdate}}
\DeclareOption{TeX}{\AtEndOfPackage{\TeXdate}}
\DeclareOption{orig}{\AtEndOfPackage{\origdate}}
\DeclareOption{shortorig}{\AtEndOfPackage{\shortorigdate}}
\DeclareOption{Roman}{\AtEndOfPackage{\Romandate}}
\DeclareOption{roman}{\AtEndOfPackage{\romandate}}
\DeclareOption{shortRoman}{\AtEndOfPackage{\shortRomandate}}
\DeclareOption{shortroman}{\AtEndOfPackage{\shortromandate}}
%    \end{macrocode}
% \changes{2.26}{2005/03/10}{Support different input formats
%   containing slashes}%
% Declare the options for the default date input format.
%    \begin{macrocode}
\DeclareOption{inputenglish}{\AtEndOfPackage{\dateinputformat{english}}}
\DeclareOption{inputbritish}{\AtEndOfPackage{\dateinputformat{english}}}
\DeclareOption{inputUKenglish}{\AtEndOfPackage{\dateinputformat{english}}}
\DeclareOption{inputamerican}{\AtEndOfPackage{\dateinputformat{american}}}
\DeclareOption{inputUSenglish}{\AtEndOfPackage{\dateinputformat{american}}}
\DeclareOption{inputtex}{\AtEndOfPackage{\dateinputformat{tex}}}
\DeclareOption{inputTeX}{\AtEndOfPackage{\dateinputformat{tex}}}
\DeclareOption{inputlatex}{\AtEndOfPackage{\dateinputformat{tex}}}
\DeclareOption{inputLaTeX}{\AtEndOfPackage{\dateinputformat{tex}}}
%    \end{macrocode}
% Declare the options for language support.
% \changes{2.07}{2003/07/29}{Added Swedish language}%
% \changes{2.20}{2003/12/06}{Add Australian and New Zealand}%
% \changes{2.24}{2005/02/17}{Add option frenchb}%
% \changes{2.26}{2005/03/10}{Add option british}%
%    \begin{macrocode}
\DeclareOption{american}{\input{english.idf}}
\DeclareOption{australian}{\input{english.idf}}
\DeclareOption{austrian}{\input{german.idf}}
\DeclareOption{danish}{\input{danish.idf}}
\DeclareOption{english}{\input{english.idf}}
\DeclareOption{british}{\input{english.idf}}
\DeclareOption{french}{\input{french.idf}}
\DeclareOption{frenchb}{\input{french.idf}}
\DeclareOption{german}{\input{german.idf}}
\DeclareOption{naustrian}{\input{german.idf}}
\DeclareOption{newzealand}{\input{english.idf}}
\DeclareOption{ngerman}{\input{german.idf}}
\DeclareOption{norsk}{\input{norsk.idf}}
\DeclareOption{norwegian}{\input{norsk.idf}}
\DeclareOption{swedish}{\input{swedish.idf}}
\DeclareOption{UKenglish}{\input{english.idf}}
\DeclareOption{USenglish}{\input{english.idf}}
%    \end{macrocode}
% Make it possible to load language definition files that are not
% known by this package.
%    \begin{macrocode}
\DeclareOption*{%
  \InputIfFileExists{\CurrentOption.idf}{}{%
    \PackageError{isodate}{%
      Isodate definition file \CurrentOption.idf not found}{%
      Maybe you misspelled the language option?}}%
  }
%    \end{macrocode}
% Set default option to \verb|orig|.
%    \begin{macrocode}
\ExecuteOptions{orig}
%    \end{macrocode}
% Process the options.
%    \begin{macrocode}
\ProcessOptions*
%    \end{macrocode}
% Handle the case that no language was given. Throw an error message.
% Each language definition file \verb|*.idf| must contain a line
% \begin{verbatim}
%\let\iso@languageloaded\active\end{verbatim}
% that defines the command \verb|\iso@languageloaded|.
%    \begin{macrocode}
\ifx\iso@languageloaded\@undefined
  \PackageError{isodate}{%
    You haven't specified a language option}{%
    You need to specify a language, either as a global
    option\MessageBreak
    or as an optional argument to the \string\usepackage\space
    command.\MessageBreak
    If you have used the old isodate package (version <=1.06) you can
    change the\MessageBreak
    usepackage command to \protect\usepackage{isodate}.\MessageBreak
    You shouldn't try to proceed from here, type x to quit.}
\fi
%    \end{macrocode}
% \changes{2.10}{2003/10/13}{Add month in Roman numerals}%
% \begin{macro}{\iso@printday}
% \changes{2.14}{2003/10/26}{Control the number of digits for the day
%   by a boolean rather than by the command calls}%
% Prints a day.
%    \begin{macrocode}
\newcommand*\iso@printday[1]{%
  \ifisotwodigitday
    \ifthenelse{\number#1<10}{0}{}%
  \fi
  \number#1%
}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\twodigitarabic}
% \changes{2.10}{2003/10/13}{Added \cs{twodigitarabic}}%
% Typesets the given counter with at least two digits.
% This command is very simple and does only work for positive numbers
% below 100.
%    \begin{macrocode}
\newcommand*\twodigitarabic[1]{%
  \ifthenelse{\number\arabic{#1}<10}{0}{}%
  \arabic{#1}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printmonth}
% \changes{2.10}{2003/10/13}{Use \cs{twodigitarabic}}%
% Prints a month using \cs{theiso@tmpmonth} as output fourmat.
%    \begin{macrocode}
\newcommand*\iso@printmonth[1]{%
  \setcounter{iso@tmpmonth}{#1}%
  \theiso@tmpmonth%
}
%    \end{macrocode}
% Define the help counter that prints the month and initialize it to
% print arabic numbers.
%    \begin{macrocode}
\newcounter{iso@tmpmonth}
%\def\theiso@tmpmonth{\arabic{iso@tmpmonth}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@yeartwo}
% Prints the argument of the command with two
% digits. 
%
% Example: \verb|\iso@yeartwo{1873}| $\longrightarrow$
% \makeatletter\iso@yeartwo{1873}\makeatother.
%    \begin{macrocode}
\newcounter{iso@yeartwo}%
\newcommand*\iso@yeartwo[1]{%
  \setcounter{iso@yeartwo}{\number#1}%
  \whiledo{\theiso@yeartwo>99}{%
    \addtocounter{iso@yeartwo}{-100}}{}%
  \ifthenelse{\number\theiso@yeartwo<10}{0}{}\theiso@yeartwo
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@yearfour}
% \changes{2.26}{2005/03/10}{Force year in four digits for long formats}%
% Prints the argument of the command with four digits. 
%    \begin{macrocode}
\newcommand*\iso@yearfour[1]{%
  \ifthenelse{\number#1<1000}{0}{}%
  \ifthenelse{\number#1<100}{0}{}%
  \ifthenelse{\number#1<10}{0}{}%
  \number#1%
}%
%    \end{macrocode}
% \end{macro}
% \changes{2.14}{2003/10/26}{Control the number of digits for the day
%   by a boolean rather than by the command calls}%
% \begin{macro}{\ifisotwodigitday}
% Print day with two digits or natural number of digits?
%    \begin{macrocode}
\newif\ifisotwodigitday
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@dateformat}
% In this command, the current active date format ist stored. Possible
% values are: \verb|numeric|, \verb|short|, \verb|iso|, \verb|orig|,
% \verb|shortorig|, \verb|TeX|.
%    \begin{macrocode}
\def\iso@dateformat{numeric}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@inputformat}
% \changes{2.26}{2005/03/10}{Support different input formats
%   containing slashes}%
% This macro stores which input format is used for dates given with
% slashes. Valid formats are |english| (dd/mm/yyyy), |american|
% (mm/dd/yyyy), and |tex| (yyyy/mm/dd). By default, English is used.
%    \begin{macrocode}
\DeclareRobustCommand*\dateinputformat[1]{%
  \ifthenelse{%
    \equal{#1}{english}\or
    \equal{#1}{british}\or
    \equal{#1}{UKenglish}}{%
    \def\iso@inputformat{english}%
  }{%
    \ifthenelse{%
      \equal{#1}{american}\or
      \equal{#1}{USenglish}}{%
      \def\iso@inputformat{american}%
    }{%
      \ifthenelse{%
        \equal{#1}{tex}\or
        \equal{#1}{TeX}\or
        \equal{#1}{latex}\or
        \equal{#1}{LaTeX}}{%
        \def\iso@inputformat{tex}%
      }{%
        \PackageError{isodate}{Invalid date input format}{%
          Maybe you misspelled the language option (english, american,
          tex)?}%
      }%
    }%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@inputformat}
% \changes{2.26}{2005/03/10}{Support different input formats
%   containing slashes}%
% This macro stores which input format is used for dates given with
% slashes. Valid formats are |english| (dd/mm/yyyy), |american|
% (mm/dd/yyyy), and |tex| (yyyy/mm/dd). By default, English is used.
%    \begin{macrocode}
\dateinputformat{english}
%    \end{macrocode}
% \end{macro}
% \changes{2.10}{2003/10/13}{Add month in Roman numerals}%
% \begin{macro}{\numdate}
% Switches to long numerical date format.
%    \begin{macrocode}
\DeclareRobustCommand*\numdate[1][twodigitarabic]{%
  \def\iso@dateformat{numeric}%
  \isotwodigitdaytrue
  \def\theiso@tmpmonth{\csname #1\endcsname{iso@tmpmonth}}%
}
%    \end{macrocode}
% \end{macro}
% \changes{2.10}{2003/10/13}{Add month in Roman numerals}%
% \changes{2.14}{2003/10/26}{Don't print day with two digits when
%   Roman numerals are used for the month}%
% \begin{macro}{\shortdate}
% Switches to short numerical date format.
%    \begin{macrocode}
\DeclareRobustCommand*\shortdate[1][twodigitarabic]{%
  \def\iso@dateformat{short}%
  \isotwodigitdaytrue
  \def\theiso@tmpmonth{\csname #1\endcsname{iso@tmpmonth}}%
}
%    \end{macrocode}
% \end{macro}
% \changes{2.12}{2003/10/14}{Wrong one-digit months avoided}%
% \begin{macro}{\isodate}
% \changes{2.14}{2003/10/26}{Allow change in format for month}%
% Switches to ISO date format.
%    \begin{macrocode}
\DeclareRobustCommand*\isodate[1][twodigitarabic]{%
  \def\iso@dateformat{iso}%
  \isotwodigitdaytrue
  \def\theiso@tmpmonth{\csname #1\endcsname{iso@tmpmonth}}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\origdate}
% Switches to the original date format.
%    \begin{macrocode}
\DeclareRobustCommand*\origdate{%
  \def\iso@dateformat{orig}%
  \isotwodigitdayfalse
  \def\theiso@tmpmonth{\twodigitarabic{iso@tmpmonth}}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\shortorigdate}
% Switches to the short original date format.
%    \begin{macrocode}
\DeclareRobustCommand*\shortorigdate{%
  \def\iso@dateformat{shortorig}%
  \isotwodigitdayfalse
  \def\theiso@tmpmonth{\twodigitarabic{iso@tmpmonth}}%
}
%    \end{macrocode}
% \end{macro}q
% \begin{macro}{\TeXdate}
% \changes{2.14}{2003/10/26}{Allow change in format for month}%
% Switches to \LaTeX\ date format.
%    \begin{macrocode}
\DeclareRobustCommand*\TeXdate[1][twodigitarabic]{%
  \def\iso@dateformat{TeX}%
  \isotwodigitdaytrue
  \def\theiso@tmpmonth{\csname #1\endcsname{iso@tmpmonth}}%
}
%    \end{macrocode}
% \end{macro}
% \changes{2.10}{2003/10/13}{Add month in Roman numerals}%
% \begin{macro}{\Romandate}
% Switches to long numerical date format with month printed in
% uppercase Roman numerals.
%    \begin{macrocode}
\DeclareRobustCommand*\Romandate{%
  \numdate[Roman]%
  \isotwodigitdayfalse
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\romandate}
% Switches to long numerical date format with month printed in
% lowercase Roman numerals.
%    \begin{macrocode}
\DeclareRobustCommand*\romandate{%
  \numdate[roman]%
  \isotwodigitdayfalse
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\shortRomandate}
% Switches to short numerical date format with month printed in
% uppercase Roman numerals.
%    \begin{macrocode}
\DeclareRobustCommand*\shortRomandate{%
  \shortdate[Roman]%
  \isotwodigitdayfalse
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\shortromandate}
% Switches to short numerical date format with month printed in
% lowercase Roman numerals.
%    \begin{macrocode}
\DeclareRobustCommand*\shortromandate{%
  \shortdate[roman]%
  \isotwodigitdayfalse
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\isodash}
% Changes the dash in the ISO date format. The default is ``-''.
%    \begin{macrocode}
\def\iso@isodash{-}%
\DeclareRobustCommand*\isodash[1]{\def\iso@isodash{#1}}%
%    \end{macrocode}
% \end{macro}
% Define the sign that is printed before a two digit year in the short
% original format. Default is nothing.
% \begin{macro}{\shortyearsign}
%    \begin{macrocode}
\def\iso@twodigitsign{}
\DeclareRobustCommand*\shortyearsign[1]{\def\iso@twodigitsign{#1}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\isorangesign}
% Defines the sign or word that is printed between the two dates in a
% date range. e.g., in English the default is ``~to~''.
%    \begin{macrocode}
\def\iso@rangesign{\csname iso@rangesign@\iso@languagename\endcsname}%
\DeclareRobustCommand*\isorangesign[1]{\def\iso@rangesign{#1}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\printyearoff}
% \begin{macro}{\printyearon}
% \changes{2.21}{2003/12/06}{Switch on or off printing of year}%
% Switches printing of the year on or off.
% Default is to print the year.
%    \begin{macrocode}
\newif\ifiso@printyear
\DeclareRobustCommand*\printyearon{\iso@printyeartrue}
\DeclareRobustCommand*\printyearoff{\iso@printyearfalse}
\printyearon
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\iso@printdate}
% Defines the command \verb|iso@printdate| which takes three arguments 
% (year, month, day) and prints the date by using the \cs{today} command.
%    \begin{macrocode}
\newcommand*\iso@printdate[3]{%
  \begingroup%
%    \end{macrocode}
% \changes{2.25}{2005/02/21}{Warning for unknown languages}%
% \changes{2.25}{2005/02/21}{Fall-back format for unknown languages}%
% Generate a warning if the active language is not known by |isodate|.
%    \begin{macrocode}
    \@ifundefined{iso@printdate@\iso@languagename}{%
      \PackageWarning{isodate}{Language \iso@languagename\space unknown
        to isodate.\MessageBreak
        Using default format.}%
    }{}%
%    \end{macrocode}
% \changes{2.25}{2005/02/21}{Changed \cs{year}, \cs{month}, and
%   \cs{day} from macros to counters}%
% The counters \cs{year}, \cs{month}, and \cs{day} are preserved as
% counters instead of changed to macros (as it has been done until
% version 2.25) to avoid problems with languages that are not defined
% in |isodate.sty|.
%    \begin{macrocode}
    \year=#1 %
    \month=#2 %
    \day=#3 %
    \today%
  \endgroup%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\printdate}
% Prints a date that is given as one argument in one of these formats: 
% \verb|yyyy-mm-dd|, \verb|dd/mm/yyyy|, \verb|dd.mm.yyyy|.
%    \begin{macrocode}
\DeclareRobustCommand*\printdate[1]{%
%    \end{macrocode}
% Define \verb|\iso@date| command to expand the argument \verb|#1|.
%    \begin{macrocode}
  \edef\iso@date{#1}%
%    \end{macrocode}
% Count appearances of ``/'', ``-'', and ``.'' in the argument.
%    \begin{macrocode}
  \SubStringsToCounter{iso@slash}{/}{\iso@date}%
  \SubStringsToCounter{iso@minus}{-}{\iso@date}%
  \SubStringsToCounter{iso@dot}{.}{\iso@date}%
%    \end{macrocode}
% If number of ``.'' in the argument is equal to 2 then the German
% format \verb|dd.mm.yyyy| is used.
%    \begin{macrocode}
  \ifthenelse{\equal{\theiso@dot}{2}}{%
    \expandafter\iso@input@german\iso@date\@empty}{%
%    \end{macrocode}
% If number of ``-'' in the argument is equal to 2 then the ISO
% format \verb|yyyy-mm-dd| is used.
%    \begin{macrocode}
    \ifthenelse{\equal{\theiso@minus}{2}}{%
      \expandafter\iso@input@iso\iso@date\@empty}{%
%    \end{macrocode}
% If number of ``/'' in the argument is equal to 2 then the British English
% format \verb|dd/mm/yyyy| is used.
%    \begin{macrocode}
      \ifthenelse{\equal{\theiso@slash}{2}}{%
        \expandafter\iso@input@english\iso@date\@empty}{%
%    \end{macrocode}
% Else no of the formats above is used an thus an error message is thrown.
%    \begin{macrocode}
        ????\iso@isodash ??\iso@isodash ??%
        \PackageError{isodate}{unrecognized date format}{Use one of
          the following formats as macro argument:^^J%
          \space\space dd.mm.yyyy^^J%
          \space\space dd/mm/yyyy^^J%
          \space\space yyyy-mm-dd^^J%
          Don't use any spaces or commands like \protect\, or
          \protect~ inside the argument.}%
        }}}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@input@iso}
% Converts a string with the format \verb|yyyy-mm-dd| to three
% arguments \verb|{#1}{#2}{#3}| and calls \verb|\iso@printdate|.
%    \begin{macrocode}
\def\iso@input@iso#1-#2-#3\@empty{\iso@printdate{#1}{#2}{#3}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@input@german}
% Converts a string with the format \verb|dd.mm.yyyy| to three
% arguments \verb|{#3}{#2}{#1}| and calls \verb|\iso@printdate|.
%    \begin{macrocode}
\def\iso@input@german#1.#2.#3\@empty{\iso@printdate{#3}{#2}{#1}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@input@english}
% \changes{2.26}{2005/03/10}{Support different input formats
%   containing slashes}%
% Converts a string with the format \verb|dd/mm/yyyy| to three
% arguments \verb|{#3}{#2}{#1}| and calls \verb|\iso@printdate|.
%    \begin{macrocode}
\def\iso@input@english#1/#2/#3\@empty{%
  \ifthenelse{\equal{\iso@inputformat}{tex}}{%
    \iso@printdate{#1}{#2}{#3}%
  }{%
    \ifthenelse{\equal{\iso@inputformat}{american}}{%
      \iso@printdate{#3}{#1}{#2}%
    }{%
      \iso@printdate{#3}{#2}{#1}%
    }%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\printdateTeX}
% Prints a date that is given as one argument in the format
% \verb|yyyy/mm/dd|.
%    \begin{macrocode}
\DeclareRobustCommand*\printdateTeX[1]{%
%    \end{macrocode}
% Define \verb|\iso@date| command to expand the argument \verb|#1|.
%    \begin{macrocode}
  \edef\iso@date{#1}%
%    \end{macrocode}
% Count appearances of ``/'' in the argument.
%    \begin{macrocode}
  \SubStringsToCounter{iso@slash}{/}{\iso@date}%
%    \end{macrocode}
% If number of ``/'' in the argument is equal to 2 then the \LaTeX\
% format \verb|yyyy/mm/dd| is used.
%    \begin{macrocode}
  \ifthenelse{\equal{\theiso@slash}{2}}{%
    \expandafter\iso@input@TeX\iso@date\@empty}{%
%    \end{macrocode}
% Else no of the formats above is used an thus an error message is thrown.
%    \begin{macrocode}
    ????\iso@isodash ??\iso@isodash ??%
    \PackageError{isodate}{unrecognized date format}{Use one of
      the following formats as macro argument:^^J%
      \space\space dd.mm.yyyy^^J%
      \space\space dd/mm/yyyy^^J%
      \space\space yyyy-mm-dd^^J%
      Don't use any spaces or commands like \protect\, or
      \protect~ inside the argument.}%
    }}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@input@TeX}
% Converts a string with the format \verb|yyyy/mm/dd| to three
% arguments \verb|{#1}{#2}{#3}| and calls \verb|\iso@printdate|.
%    \begin{macrocode}
\def\iso@input@TeX#1/#2/#3\@empty{\iso@printdate{#1}{#2}{#3}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\daterange}
% Prints a date range.
%    \begin{macrocode}
\DeclareRobustCommand*\daterange[2]{%
%    \end{macrocode}
% Define \verb|\iso@date| and \verb|\iso@@date| commands to expand the
% argument \verb|#1| and \verb|#2|. Define \verb|\iso@@@date| which
% contains both arguments devided by a komma.
%    \begin{macrocode}
  \edef\iso@date{#1}%
  \edef\iso@@date{#2}%
  \edef\iso@@@date{\iso@date,\iso@@date}%
%    \end{macrocode}
% Count appearances of ``/'', ``-'', and ``.'' in the arguments.
%    \begin{macrocode}
  \SubStringsToCounter{iso@slash}{/}{\iso@date}%
  \SubStringsToCounter{iso@minus}{-}{\iso@date}%
  \SubStringsToCounter{iso@dot}{.}{\iso@date}%
  \SubStringsToCounter{iso@@slash}{/}{\iso@@date}%
  \SubStringsToCounter{iso@@minus}{-}{\iso@@date}%
  \SubStringsToCounter{iso@@dot}{.}{\iso@@date}%
%    \end{macrocode}
% If number of ``.'' in both arguments is equal to 2 then the German
% format \verb|dd.mm.yyyy| is used.
%    \begin{macrocode}
  \ifthenelse{\equal{\theiso@dot}{2}\and\equal{\theiso@@dot}{2}}{%
    \expandafter\iso@range@input@german\iso@@@date\@empty}{%
%    \end{macrocode}
% If number of ``-'' in both arguments is equal to 2 then the ISO
% format \verb|yyyy-mm-dd| is used.
%    \begin{macrocode}
    \ifthenelse{\equal{\theiso@minus}{2}\and\equal{\theiso@@minus}{2}}{%
      \expandafter\iso@range@input@iso\iso@@@date\@empty}{%
%    \end{macrocode}
% If number of ``/'' in both arguments is equal to 2 then the British English
% format \verb|dd/mm/yyyy| is used.
%    \begin{macrocode}
      \ifthenelse{\equal{\theiso@slash}{2}\and%
                  \equal{\theiso@@slash}{2}}{%
        \expandafter\iso@range@input@english\iso@@@date\@empty}{%
%    \end{macrocode}
% Else no of the formats above is used an thus an error message is thrown.
%    \begin{macrocode}
        ????\iso@isodash ??\iso@isodash ??%
        \PackageError{isodate}{unrecognized date format}{Use one of
          the following formats as macro argument:^^J%
          \space\space dd.mm.yyyy^^J%
          \space\space dd/mm/yyyy^^J%
          \space\space yyyy-mm-dd^^J%
          Don't use any spaces or commands like \protect\, or
          \protect~ inside the argument.^^J
          Use the same format for both arguments.}%
        }}}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@range@input@iso}
% \changes{2.21}{2003/12/06}{Support to print date without year}%
% Converts a string with the format \verb|yyyy-mm-dd,yyyy-mm-dd| to six
% arguments \verb|{#1}{#2}{#3}{#4}{#5}{#6}| and calls
% \verb|\iso@daterange@|language. 
%    \begin{macrocode}
\def\iso@range@input@iso#1-#2-#3,#4-#5-#6\@empty{%
  \begingroup
%    \end{macrocode}
% \changes{2.25}{2005/02/21}{Warning for unknown languages}%
% Generate a warning if the active language is not known by |isodate|.
%    \begin{macrocode}
    \@ifundefined{iso@daterange@\iso@languagename}{%
      \PackageWarning{isodate}{Language \iso@languagename\space unknown
        to isodate.\MessageBreak
        Using default date range with range sign --.}%
        \expandafter\def\csname iso@printdate@\iso@languagename\endcsname{}%
%    \end{macrocode}
% \changes{2.25}{2005/02/21}{Fall-back format for unknown languages}%
% Print date range in fall-back format.
%    \begin{macrocode}
      \iso@printdate{#1}{#2}{#3}--\iso@printdate{#4}{#5}{#6}%
    }{%
%    \end{macrocode}
% Print date range in the chosen |isodate| format.
%    \begin{macrocode}
      \ifthenelse{\equal{\number#1}{\number#4}}{}{\printyearon}%
      \csname iso@daterange@\iso@languagename\endcsname{%
        #1}{#2}{#3}{#4}{#5}{#6}%
    }%
  \endgroup
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@range@input@german}
% \changes{2.21}{2003/12/06}{Support to print date without year}%
% Converts a string with the format \verb|dd.mm.yyyy,dd.mm.yyyy| to six
% arguments \verb|{#3}{#2}{#1}{#6}{#5}{#4}| and calls
% \verb|\iso@daterange@|language. 
%    \begin{macrocode}
\def\iso@range@input@german#1.#2.#3,#4.#5.#6\@empty{%
  \begingroup
%    \end{macrocode}
% \changes{2.25}{2005/02/21}{Warning for unknown languages}%
% Generate a warning if the active language is not known by |isodate|.
%    \begin{macrocode}
    \@ifundefined{iso@daterange@\iso@languagename}{%
      \PackageWarning{isodate}{Language \iso@languagename\space unknown
        to isodate.\MessageBreak
        Using default date range with range sign --.}%
        \expandafter\def\csname iso@printdate@\iso@languagename\endcsname{}%
%    \end{macrocode}
% \changes{2.25}{2005/02/21}{Fall-back format for unknown languages}%
% Print date range in fall-back format.
%    \begin{macrocode}
      \iso@printdate{#3}{#2}{#1}--\iso@printdate{#6}{#5}{#4}%
    }{%
%    \end{macrocode}
% Print date range in the chosen |isodate| format.
%    \begin{macrocode}
      \ifthenelse{\equal{\number#3}{\number#6}}{}{\printyearon}%
      \csname iso@daterange@\iso@languagename\endcsname{%
        #3}{#2}{#1}{#6}{#5}{#4}%
    }%
  \endgroup
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@range@input@english}
% \changes{2.21}{2003/12/06}{Support to print date without year}%
% Converts a string with the format \verb|dd/mm/yyyy,dd/mm/yyyy| to six
% arguments \verb|{#3}{#2}{#1}{#6}{#5}{#4}| and calls
% \verb|\iso@daterange@|language. 
%    \begin{macrocode}
\def\iso@range@input@english#1/#2/#3,#4/#5/#6\@empty{%
  \begingroup
%    \end{macrocode}
% \changes{2.25}{2005/02/21}{Warning for unknown languages}%
% Generate a warning if the active language is not known by |isodate|.
%    \begin{macrocode}
    \@ifundefined{iso@daterange@\iso@languagename}{%
      \PackageWarning{isodate}{Language \iso@languagename\space unknown
        to isodate.\MessageBreak
        Using default date range with range sign --.}%
        \expandafter\def\csname iso@printdate@\iso@languagename\endcsname{}%
%    \end{macrocode}
% \changes{2.26}{2005/03/10}{Support different input formats
%   containing slashes}%
% \changes{2.25}{2005/02/21}{Fall-back format for unknown languages}%
% Print date range in fall-back format.
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@inputformat}{tex}}{%
          \iso@printdate{#1}{#2}{#3}--\iso@printdate{#4}{#5}{#6}%
        }{%
          \ifthenelse{\equal{\iso@inputformat}{american}}{%
            \iso@printdate{#3}{#1}{#2}--\iso@printdate{#6}{#4}{#5}%
          }{%
            \iso@printdate{#3}{#2}{#1}--\iso@printdate{#6}{#5}{#4}%
          }%
        }%
    }{%
%    \end{macrocode}
% \changes{2.26}{2005/03/10}{Support different input formats
%   containing slashes}%
% Print date range in the chosen |isodate| format.
%    \begin{macrocode}
      \ifthenelse{\equal{\number#3}{\number#6}}{}{\printyearon}%
      \ifthenelse{\equal{\iso@inputformat}{tex}}{%
        \csname iso@daterange@\iso@languagename\endcsname{%
          #1}{#2}{#3}{#4}{#5}{#6}%
      }{%
        \ifthenelse{\equal{\iso@inputformat}{american}}{%
          \csname iso@daterange@\iso@languagename\endcsname{%
            #3}{#1}{#2}{#6}{#4}{#5}%
        }{%
          \csname iso@daterange@\iso@languagename\endcsname{%
            #3}{#2}{#1}{#6}{#5}{#4}%
        }%
      }%
    }%
  \endgroup
}
%    \end{macrocode}
% \end{macro}
% Define the counters for conting the appearances of ``.'', ``-'', and 
% ''/'' in the arguments.
%    \begin{macrocode}
\newcounter{iso@slash}
\newcounter{iso@minus}
\newcounter{iso@dot}
\newcounter{iso@@slash}
\newcounter{iso@@minus}
\newcounter{iso@@dot}
%    \end{macrocode}
% The command \verb|\iso@languagename| is defined to be able to use
% this package without loading one of the language packages
% babel.sty, german.sty, or ngerman.sty.
%
% If neither babel.sty nor german.sty nor ngerman.sty is loaded my
% computer returns ``nohyphenation'' when using \verb|\languagename|.
% So this is the indication that none of the above packages is loaded.
% \changes{2.01}{2000/08/24}{Handle case of not loaded language
%   package babel, german and ngerman}
% \changes{2.12}{2003/10/14}{Test for babel improved}%
% \changes{2.14}{2003/10/26}{Test on babel, german, and ngerman}%
%    \begin{macrocode}
\AtBeginDocument{%
  \@tempswafalse
  \@ifpackageloaded{babel}{%
    \@tempswatrue
    \typeout{isodate: babel.sty has been loaded}%
  }{}%
  \@ifpackageloaded{german}{%
    \@tempswatrue
    \typeout{isodate: german.sty has been loaded}%
  }{}%
  \@ifpackageloaded{ngerman}{%
    \@tempswatrue
    \typeout{isodate: ngerman.sty has been loaded}%
  }{}%
%    \end{macrocode}
% The language is not equal ``nohyphenation''. So one of the language
% packages is loaded. Replace the internal language name
% \verb|\iso@languagename| by the global language name \verb|\languagename|.
%    \begin{macrocode}
  \if@tempswa
    \gdef\iso@languagename{\languagename}%
%    \end{macrocode}
% Reload language to surely switch to new date format. The
% languagename gets first expanded because of errors that would occur 
% otherwise.
%    \begin{macrocode}
    \edef\iso@tmplang{\languagename}%
    \expandafter\selectlanguage\expandafter{\iso@tmplang}%
  \else
%    \end{macrocode}
% At the end of the preamble still none of the language packages are loaded.
% So no language switching
% is possible. Set the date language manually to the last language
% that was loaded for isodate.
%    \begin{macrocode}
    \typeout{isodate: babel.sty, (n)german.sty have not been loaded}%
    \csname date\iso@languagename\endcsname%
  \fi
}
%</isodate>
%    \end{macrocode}
%
% \subsection{Language definition file danish.idf}
% \changes{2.26}{2005/03/10}{Force year in four digits for long formats}%
%
% \begin{macro}{\iso@languageloaded}
% Define the command \verb|\iso@languageloaded| in order to enable
% \verb|isodate.sty| to determine if at least one language is loaded.
%    \begin{macrocode}
%<*danish>
\let\iso@languageloaded\active
\typeout{Define commands for Danish date format}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\month@danish}
% Prints the name of today's month in the long form for the original
% date format.
%    \begin{macrocode}
\def\month@danish{\ifcase\month\or
    januar\or februar\or marts\or april\or maj\or juni\or
    juli\or august\or september\or oktober\or november\or december\fi}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printmonthday@danish}
% Prints the month and the day given as two arguments
% (\verb|{mm}{dd}|) in the current date format.
%    \begin{macrocode}
  \def\iso@printmonthday@danish#1#2{%
%    \end{macrocode}
% Numeric and short date format: \verb|dd/mm/|
%    \begin{macrocode}
    \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
      \equal{\iso@dateformat}{short}}{%
      \iso@printday{#2}/\iso@printmonth{#1}\ifiso@printyear/\fi}{%
%    \end{macrocode}
% ISO date format: \verb|-mm-dd|
%    \begin{macrocode}
      \ifthenelse{\equal{\iso@dateformat}{iso}}{%
        \ifiso@printyear\iso@isodash\fi\iso@printmonth{#1}%
        \iso@isodash\iso@printday{#2}}{%
%    \end{macrocode}
% \LaTeX\ date format: \verb|/mm/dd|
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
          \ifiso@printyear/\fi\iso@printmonth{#1}/\iso@printday{#2}}{%
%    \end{macrocode}
% Original date format: \verb|d. mmm|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{orig}\or
                      \equal{\iso@dateformat}{shortorig}}{%
            \iso@printday{#2}.~\begingroup
            \edef\lmonth{#1}\def\month{\lmonth}%
            \month@danish%
            \endgroup
            }{}}}}%
    }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printdate@danish}
% Prints the date given as three arguments (\verb|{yyyy}{mm}{dd}|) in
% the actual date format
%    \begin{macrocode}
  \def\iso@printdate@danish#1#2#3{%
%    \end{macrocode}
% ISO or \LaTeX date format: \verb|yyyy\iso@printmonthday@danish|
%    \begin{macrocode}
    \ifthenelse{\equal{\iso@dateformat}{iso}\or%
      \equal{\iso@dateformat}{TeX}}{%
      \ifiso@printyear
        \number#1%
      \fi}{}%
    \iso@printmonthday@danish{\number#2}{\number#3}%
    \ifiso@printyear
%    \end{macrocode}
% numeric date format: \verb|\iso@printmonthday@danish yyyy|
%    \begin{macrocode}
      \ifthenelse{\equal{\iso@dateformat}{numeric}}{\iso@yearfour{\number#1}}{%
%    \end{macrocode}
% original date format: \verb|\iso@printmonthday@danish~yyyy|
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{orig}}{~\iso@yearfour{\number#1}}{%
%    \end{macrocode}
% short original date format: \verb|\iso@printmonthday@danish~yy|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
            ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
%    \end{macrocode}
% short date format: \verb|\iso@printmonthday@danish yy|
%    \begin{macrocode}
            \ifthenelse{\equal{\iso@dateformat}{short}}{%
              \iso@yeartwo{\number#1}}{%
              }}}}%
      \fi
    }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@datedanish}
% This command redefines the \cs{today} command to print in the
% actual date format.
%    \begin{macrocode}
  \def\iso@datedanish{%
    \def\today{\iso@printdate@danish{\year}{\month}{\day}}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@...}
% Define date-range commands for dialects.
%    \begin{macrocode}
  \expandafter\def\csname iso@daterange@\CurrentOption\endcsname{%
    \iso@daterange@danish}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@danish}
% This command takes six arguments
% (\verb|{yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2}|) and prints the corrosponding
% date range in the actual date format.
%    \begin{macrocode}
\def\iso@daterange@danish#1#2#3#4#5#6{%
%    \end{macrocode}
% ISO or \LaTeX\ date format.
%    \begin{macrocode}
  \ifthenelse{\equal{\iso@dateformat}{iso}\or%
              \equal{\iso@dateformat}{TeX}}{%
%    \end{macrocode}
% Print the start date.
%    \begin{macrocode}
    \csname iso@printdate@\iso@languagename\endcsname{%
      #1}{#2}{#3}\iso@rangesign%
%    \end{macrocode}
% If year and month are equal, only print the day of the end date. If
% only the year is equal, only print month and day of the end
% date. Otherwise print the whole end date.
%    \begin{macrocode}
    \ifthenelse{\equal{\number#1}{\number#4}}{%
      \ifthenelse{\equal{\number#2}{\number#5}}{\iso@printday{#6}%
        }{\iso@printmonthday@danish{#5}{#6}}}{%
      \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}%
  }{%
%    \end{macrocode}
% Numeric, short, or original date format.
%
% If year and month are equal, only print the day of the start date. If
% only the year is equal, only print month and day of the start
% date. Otherwise print the whole start date.
%    \begin{macrocode}
    \ifthenelse{\equal{\number#1}{\number#4}}{%
      \ifthenelse{\equal{\number#2}{\number#5}}{%
        \ifthenelse{\equal{\iso@dateformat}{orig}\or
                    \equal{\iso@dateformat}{shortorig}}{%
          \iso@printday{#3}.}{\iso@printday{#3}}%
        }{\iso@printmonthday@danish{#2}{#3}}}{%
      \begingroup
        \printyearon
        \csname iso@printdate@\iso@languagename\endcsname{%
          #1}{#2}{#3}%
      \endgroup}%
%    \end{macrocode}
% Print the end date.
%    \begin{macrocode}
    \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
      #4}{#5}{#6}%
  }{%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@rangesign@danish}
% Sets the word between start and end date in a date range to ``~til~''.
%    \begin{macrocode}
\expandafter\def\csname iso@rangesign@\CurrentOption\endcsname{~til~}
%    \end{macrocode}
% \end{macro}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
\def\iso@languagename{danish}%
%    \end{macrocode}
% Redefine the command \verb|\datedanish| that is used by babel to
% switch to the original Danish date format to enable the use of
% different date formats.
% This has to be done after the preamble in order to ensure to overwrite
% the babel command.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifx\undefined\iso@datedanish\else
    \def\datedanish{\iso@datedanish}%
  \fi
}
%</danish>
%    \end{macrocode}
%
% \subsection{Language definition file english.idf}
% \changes{2.26}{2005/03/10}{Force year in four digits for long formats}%
%
% \begin{macro}{\iso@languageloaded}
% Define the command \verb|\iso@languageloaded| in order to enable
% \verb|isodate.sty| to determine if at least one language is loaded.
%    \begin{macrocode}
%<*english>
\let\iso@languageloaded\active
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\month@english}
% Prints the name of today's month in the long form for the original
% date format.
%    \begin{macrocode}
\def\month@english{\ifcase\month\or
    January\or February\or March\or April\or May\or June\or
    July\or August\or September\or October\or November\or December\fi}
%    \end{macrocode}
% \end{macro}
% British and American English dates are very different. So handle
% them seperately. It might have been easier to put them in different
% files but I wanted to organize my files analogous to babel.
%
% First handle British English.
%    \begin{macrocode}
\ifthenelse{\equal{\CurrentOption}{english}\or
            \equal{\CurrentOption}{british}\or
            \equal{\CurrentOption}{UKenglish}}{%
\typeout{Define commands for English date format}
%    \end{macrocode}
% \begin{macro}{\day@english}
% Prints today's day for the original date format.
%    \begin{macrocode}
  \def\day@english{\ifcase\day\or
    1st\or 2nd\or 3rd\or 4th\or 5th\or
    6th\or 7th\or 8th\or 9th\or 10th\or
    11th\or 12th\or 13th\or 14th\or 15th\or
    16th\or 17th\or 18th\or 19th\or 20th\or
    21st\or 22nd\or 23rd\or 24th\or 25th\or
    26th\or 27th\or 28th\or 29th\or 30th\or
    31st\fi}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printmonthday@english}
% Prints the month and the day given as two arguments
% (\verb|{mm}{dd}|) in the current date format.
%    \begin{macrocode}
  \def\iso@printmonthday@english#1#2{%
%    \end{macrocode}
% Numeric and short date format: \verb|dd/mm/|
%    \begin{macrocode}
    \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
      \equal{\iso@dateformat}{short}}{%
      \iso@printday{#2}/\iso@printmonth{#1}\ifiso@printyear/\fi}{%
%    \end{macrocode}
% ISO date format: \verb|mm-dd|
%    \begin{macrocode}
      \ifthenelse{\equal{\iso@dateformat}{iso}}{%
        \iso@printmonth{#1}\iso@isodash\iso@printday{#2}}{%
%    \end{macrocode}
% \LaTeX\ date format: \verb|mm/dd|
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
          \iso@printmonth{#1}/\iso@printday{#2}}{%
%    \end{macrocode}
% Original date format: \verb|ddd mmm|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{orig}\or
                      \equal{\iso@dateformat}{shortorig}}{%
            \begingroup
            \edef\lday{#2}\def\day{\lday}%
            \edef\lmonth{#1}\def\month{\lmonth}%
            \day@english~\month@english%
            \endgroup
            }{}}}}%
    }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printdate@english}
% Prints the date given as three arguments (\verb|{yyyy}{mm}{dd}|) in
% the actual date format.
%    \begin{macrocode}
  \def\iso@printdate@english#1#2#3{%
%    \end{macrocode}
% ISO date format: \verb|yyyy-\iso@printmonthday@english|
%    \begin{macrocode}
    \ifthenelse{\equal{\iso@dateformat}{iso}}{%
      \ifiso@printyear\iso@yearfour{\number#1}\iso@isodash\fi}{%
%    \end{macrocode}
% \LaTeX\ date format: \verb|yyyy/\iso@printmonthday@english|
%    \begin{macrocode}
      \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
        \ifiso@printyear\iso@yearfour{\number#1}/\fi}{}}%
    \iso@printmonthday@english{\number#2}{\number#3}%
%    \end{macrocode}
% Numeric date format: \verb|\iso@printmonthday@english yyyy|
%    \begin{macrocode}
    \ifiso@printyear
      \ifthenelse{\equal{\iso@dateformat}{numeric}}{\iso@yearfour{\number#1}}{%
%    \end{macrocode}
% Original date format: \verb|\iso@printmonthday@english~yyyy|
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{orig}}{~\iso@yearfour{\number#1}}{%
%    \end{macrocode}
% Short original date format: \verb|\iso@printmonthday@english~yy|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
            ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
%    \end{macrocode}
% Short date format: \verb|\iso@printmonthday@english yy|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{short}}{%
            \iso@yeartwo{\number#1}}{%
            }}}%
      }%
    \fi
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printdate@UKenglish}
% Just a second name for \verb|\iso@printdate@UKenglish|.
%    \begin{macrocode}
  \def\iso@printdate@UKenglish{\iso@printdate@english}
  \def\iso@printdate@british{\iso@printdate@english}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@dateenglish}
% This command redefines the \cs{today} command to print in the
% actual date format.
%    \begin{macrocode}
  \def\iso@dateenglish{%
    \def\today{\iso@printdate@english{\year}{\month}{\day}}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@...}
% Define date-range commands for dialects of English.
%    \begin{macrocode}
  \expandafter\def\csname iso@daterange@\CurrentOption\endcsname{%
    \iso@daterange@english}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@english}
% This command takes six arguments
% (\verb|{yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2}|) and prints the corrosponding
% date range in the actual date format.
%    \begin{macrocode}
  \def\iso@daterange@english#1#2#3#4#5#6{%
%    \end{macrocode}
% ISO or \LaTeX\ date format.
%    \begin{macrocode}
    \ifthenelse{\equal{\iso@dateformat}{iso}\or%
                \equal{\iso@dateformat}{TeX}}{%
%    \end{macrocode}
% Print the start date.
%    \begin{macrocode}
      \csname iso@printdate@\iso@languagename\endcsname{%
        #1}{#2}{#3}\iso@rangesign%
%    \end{macrocode}
% If year and month are equal, only print the day of the end date. If
% only the year is equal, only print month and day of the end
% date. Otherwise print the whole end date.
%    \begin{macrocode}
      \ifthenelse{\equal{\number#1}{\number#4}}{%
        \ifthenelse{\equal{\number#2}{\number#5}}{\iso@printday{#6}%
          }{\iso@printmonthday@english{#5}{#6}}}{%
        \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%
%    \end{macrocode}
% Numeric, short, or original date format.
%
% If year and month are equal, only print the day of the start date. If
% only the year is equal, only print month and day of the start
% date. Otherwise print the whole start date.
%    \begin{macrocode}
      \ifthenelse{\equal{\number#1}{\number#4}}{%
        \ifthenelse{\equal{\number#2}{\number#5}}{%
          \ifthenelse{\equal{\iso@dateformat}{orig}\or
                      \equal{\iso@dateformat}{shortorig}}{%
            \begingroup
              \edef\lday{#3}\def\day{\lday}%
              \day@english\endgroup}{\iso@printday{#3}}%
          }{\iso@printmonthday@english{#2}{#3}}}{%
        \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%
%    \end{macrocode}
% Print the end date.
%    \begin{macrocode}
      \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
        #4}{#5}{#6}%
    }{%
    }%
  }
%    \end{macrocode}
% \end{macro}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
  \def\iso@languagename{english}%
%    \end{macrocode}
% The end of the British section.
%
% \changes{2.20}{2003/12/06}{Add Australian and New Zealand}%
% Second handle Australian and New Zealand.
%    \begin{macrocode}
}{%
  \ifthenelse{\equal{\CurrentOption}{australian}\or%
              \equal{\CurrentOption}{newzealand}}{%
  \typeout{Define commands for Australian date format}
%    \end{macrocode}
% \begin{macro}{\iso@printmonthday@australian}
% Prints the month and the day given as two arguments
% (\verb|{mm}{dd}|) in the current date format.
%    \begin{macrocode}
    \def\iso@printmonthday@australian#1#2{%
%    \end{macrocode}
% Numeric and short date format: \verb|dd/mm/|
%    \begin{macrocode}
      \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
        \equal{\iso@dateformat}{short}}{%
        \iso@printday{#2}/\iso@printmonth{#1}\ifiso@printyear/\fi}{%
%    \end{macrocode}
% ISO date format: \verb|mm-dd|
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{iso}}{%
          \iso@printmonth{#1}\iso@isodash\iso@printday{#2}}{%
%    \end{macrocode}
% \LaTeX\ date format: \verb|mm/dd|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
            \iso@printmonth{#1}/\iso@printday{#2}}{%
%    \end{macrocode}
% Original date format: \verb|ddd mmm|
%    \begin{macrocode}
             \ifthenelse{\equal{\iso@dateformat}{orig}\or
                        \equal{\iso@dateformat}{shortorig}}{%
              \begingroup
%              \edef\lday{#2}\def\day{\lday}%
              \edef\lmonth{#1}\def\month{\lmonth}%
              \iso@printday{#2}~\month@english%
              \endgroup
              }{}}}}%
      }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printdate@australian}
% Prints the date given as three arguments (\verb|{yyyy}{mm}{dd}|) in
% the actual date format.
%    \begin{macrocode}
    \def\iso@printdate@australian#1#2#3{%
%    \end{macrocode}
% ISO date format: \verb|yyyy-\iso@printmonthday@australian|
%    \begin{macrocode}
      \ifiso@printyear
        \ifthenelse{\equal{\iso@dateformat}{iso}}{%
          \iso@yearfour{\number#1}\iso@isodash}{%
%    \end{macrocode}
% \LaTeX\ date format: \verb|yyyy/\iso@printmonthday@australian|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
            \iso@yearfour{\number#1}/}{}%
        }%
      \fi
      \iso@printmonthday@australian{\number#2}{\number#3}%
%    \end{macrocode}
% Numeric date format: \verb|\iso@printmonthday@australian yyyy|
%    \begin{macrocode}
      \ifiso@printyear
        \ifthenelse{\equal{\iso@dateformat}{numeric}}{%
          \iso@yearfour{\number#1}}{%
%    \end{macrocode}
% Original date format: \verb|\iso@printmonthday@australian~yyyy|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{orig}}{%
            ~\iso@yearfour{\number#1}}{%
%    \end{macrocode}
% Short original date format: \verb|\iso@printmonthday@australian~yy|
%    \begin{macrocode}
            \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
              ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
%    \end{macrocode}
% Short date format: \verb|\iso@printmonthday@australian yy|
%    \begin{macrocode}
            \ifthenelse{\equal{\iso@dateformat}{short}}{%
              \iso@yeartwo{\number#1}}{%
              }}}%
        }%
      \fi
    }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printdate@newzealand}
% Just a second name for \verb|\iso@printdate@UKenglish|.
%    \begin{macrocode}
    \def\iso@printdate@newzealand{\iso@printdate@australian}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@dateaustralian}
% This command redefines the \cs{today} command to print in the
% actual date format.
%    \begin{macrocode}
    \def\iso@dateaustralian{%
      \def\today{\iso@printdate@australian{\year}{\month}{\day}}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@...}
% Define date-range commands for dialects of Australian.
%    \begin{macrocode}
  \expandafter\def\csname iso@daterange@\CurrentOption\endcsname{%
    \iso@daterange@australian}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@australian}
% This command takes six arguments
% (\verb|{yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2}|) and prints the corrosponding
% date range in the actual date format.
%    \begin{macrocode}
    \def\iso@daterange@australian#1#2#3#4#5#6{%
%    \end{macrocode}
% ISO or \LaTeX\ date format.
%    \begin{macrocode}
      \ifthenelse{\equal{\iso@dateformat}{iso}\or%
                  \equal{\iso@dateformat}{TeX}}{%
%    \end{macrocode}
% Print the start date.
%    \begin{macrocode}
        \csname iso@printdate@\iso@languagename\endcsname{%
          #1}{#2}{#3}\iso@rangesign%
%    \end{macrocode}
% If year and month are equal, only print the day of the end date. If
% only the year is equal, only print month and day of the end
% date. Otherwise print the whole end date.
%    \begin{macrocode}
        \ifthenelse{\equal{\number#1}{\number#4}}{%
          \ifthenelse{\equal{\number#2}{\number#5}}{\iso@printday{#6}%
            }{\iso@printmonthday@australian{#5}{#6}}}{%
          \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%
%    \end{macrocode}
% Numeric, short, or original date format.
%
% If year and month are equal, only print the day of the start date. If
% only the year is equal, only print month and day of the start
% date. Otherwise print the whole start date.
%    \begin{macrocode}
        \ifthenelse{\equal{\number#1}{\number#4}}{%
          \ifthenelse{\equal{\number#2}{\number#5}}{%
            \ifthenelse{\equal{\iso@dateformat}{orig}}{%
              \begingroup
%                \edef\lday{#3}\def\day{\lday}%
                \iso@printday{#3}\endgroup}{\iso@printday{#3}}%
            }{\iso@printmonthday@australian{#2}{#3}}}{%
          \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%
%    \end{macrocode}
% Print the end date.
%    \begin{macrocode}
        \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
          #4}{#5}{#6}%
      }{%
      }%
    }
%    \end{macrocode}
% \end{macro}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
    \def\iso@languagename{australian}%
%    \end{macrocode}
% The end of the Australian section.
%
% Third, handle American.
%    \begin{macrocode}
  }{%
  \typeout{Define commands for American date format}
%    \end{macrocode}
% \begin{macro}{\iso@printmonthday@american}
% Prints the month and the day given as two arguments
% (\verb|{mm}{dd}|) in the current date format.
%    \begin{macrocode}
    \def\iso@printmonthday@american#1#2{%
%    \end{macrocode}
% Numeric and short date format: \verb|mm/dd/|
%    \begin{macrocode}
       \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
        \equal{\iso@dateformat}{short}}{%
        \iso@printmonth{#1}/\iso@printday{#2}\ifiso@printyear/\fi}{%
%    \end{macrocode}
% ISO date format: \verb|mm-dd|
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{iso}}{%
          \iso@printmonth{#1}\iso@isodash\iso@printday{#2}}{%
%    \end{macrocode}
% \LaTeX\ date format: \verb|mm/dd|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
            \iso@printmonth{#1}/\iso@printday{#2}}{%
%    \end{macrocode}
% Original date format: \verb|mmm d|
%    \begin{macrocode}
            \ifthenelse{\equal{\iso@dateformat}{orig}\or
                        \equal{\iso@dateformat}{shortorig}}{%
              \begingroup%
              \edef\lmonth{#1}%
               \def\month{\lmonth}\month@english%
              \endgroup
              ~\iso@printday{#2}%
              }{}}}%
      }%
    }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printdate@american}
% Prints the date given as three arguments (\verb|{yyyy}{mm}{dd}|) in
% the actual date format.
%    \begin{macrocode}
    \def\iso@printdate@american#1#2#3{%
%    \end{macrocode}
% ISO date format: \verb|yyyy-\iso@printmonthday@american|
%    \begin{macrocode}
      \ifiso@printyear
        \ifthenelse{\equal{\iso@dateformat}{iso}}{%
          \iso@yearfour{\number#1}\iso@isodash}{%
%    \end{macrocode}
% \LaTeX\ date format: \verb|yyyy/\iso@printmonthday@american|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
            \iso@yearfour{\number#1}/}{}}%
      \fi
      \iso@printmonthday@american{\number#2}{\number#3}%
%    \end{macrocode}
% Numeric date format: \verb|\iso@printmonthday@american yyyy|
%    \begin{macrocode}
      \ifiso@printyear
        \ifthenelse{\equal{\iso@dateformat}{numeric}}{%
          \iso@yearfour{\number#1}}{%
%    \end{macrocode}
% Original date format: \verb|\iso@printmonthday@american,~yyyy|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{orig}}{%
            ,~\iso@yearfour{\number#1}}{%
%    \end{macrocode}
% Short original date format: \verb|\iso@printmonthday@american,~yyyy|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
            ,~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
%    \end{macrocode}
% Short date format: \verb|\iso@printmonthday@american yy|
%    \begin{macrocode}
            \ifthenelse{\equal{\iso@dateformat}{short}}{%
              \iso@yeartwo{\number#1}}{}}}%
        }%
      \fi
    }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printdate@USenglish}
% Just a second name for \verb|\iso@printdate@UKamerican|.
%    \begin{macrocode}
    \def\iso@printdate@USenglish{\iso@printdate@american}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@dateamerican}
% This command redefines the \cs{today} command to print in the
% actual date format.
%    \begin{macrocode}
    \def\iso@dateamerican{%
      \def\today{\iso@printdate@american{\year}{\month}{\day}}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@...}
% Define date-range commands for dialects of American.
%    \begin{macrocode}
  \expandafter\def\csname iso@daterange@\CurrentOption\endcsname{%
    \iso@daterange@american}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@american}
% This command takes six arguments
% (\verb|{yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2}|) and prints the corrosponding
% date range in the actual date format.
%    \begin{macrocode}
    \def\iso@daterange@american#1#2#3#4#5#6{%
%    \end{macrocode}
% ISO or \LaTeX\ date format.
%    \begin{macrocode}
      \ifthenelse{\equal{\iso@dateformat}{iso}\or%
                  \equal{\iso@dateformat}{TeX}}{%
%    \end{macrocode}
% Print the start date.
%    \begin{macrocode}
        \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}%
         \iso@rangesign%
%    \end{macrocode}
% If year and month are equal, only print the day of the end date. If
% only the year is equal, only print month and day of the end
% date. Otherwise print the whole end date.
%    \begin{macrocode}
        \ifthenelse{\equal{\number#1}{\number#4}}{%
          \ifthenelse{\equal{\number#2}{\number#5}}{\iso@printday{#6}%
            }{\iso@printmonthday@american{#5}{#6}}}{%
          \csname iso@printdate@\iso@languagename\endcsname{%
            #4}{#5}{#6}}}{%
%    \end{macrocode}
% Original date format.
%
% If year and month are equal, print \verb|mmm d1 to d2, yyyy|. If
% only the year is equal, print \verb|mmm1 d1 to mmm2 d2, yyyy|. 
% Otherwise print the whole start and end date.
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{orig}\or
                    \equal{\iso@dateformat}{shortorig}}{%
          \ifthenelse{\equal{\number#1}{\number#4}}{%
            \ifthenelse{\equal{\number#2}{\number#5}}{%
              \iso@printmonthday@american{#2}{#3}\iso@rangesign%
              \iso@printday{#6},~%
              \ifthenelse{\equal{\iso@dateformat}{orig}}{%
                \number#4}{\iso@twodigitsign\iso@yeartwo{\number#4}}%
              }{%
              \iso@printmonthday@american{#2}{#3}\iso@rangesign%
              \csname iso@printdate@\iso@languagename\endcsname{%
                #4}{#5}{#6}}}{%
            \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}%
            \iso@rangesign%
            \csname iso@printdate@\iso@languagename\endcsname{%
              #4}{#5}{#6}}}{%
%    \end{macrocode}
% Numeric or short date format.
%
% If year and month are equal, only print the day of the end date.
% Otherwise print the whole end date.
%    \begin{macrocode}
          \ifthenelse{\equal{\number#1}{\number#4}}{%
          \iso@printmonthday@american{#2}{#3}}{%
          \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%
%    \end{macrocode}
% Print the end date.
%    \begin{macrocode}
        \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
          #4}{#5}{#6}}%
      }%
    }
%    \end{macrocode}
% \end{macro}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
    \def\iso@languagename{american}%
%    \end{macrocode}
% The end of the American section.
%    \begin{macrocode}
  }
}
%    \end{macrocode}
% \begin{macro}{\iso@rangesign@...}
% Sets the word between start and end date in a date range to ``~to''.
%    \begin{macrocode}
\expandafter\def\csname iso@rangesign@\CurrentOption\endcsname{~to~}
%    \end{macrocode}
% \end{macro}
% Redefine the command \verb|date|language that is used by babel.sty,
% german.sty, and ngerman.sty to switch to the original
% English/American date format to enable the use of different date
% formats.
% This has to be done after the preamble in order to ensure to overwrite
% the babel command.
%
% Do this only if \verb|\iso@date|language is defined.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifx\undefined\iso@dateenglish\else
    \def\dateenglish{\iso@dateenglish}%
    \def\datebritish{\iso@dateenglish}%
    \def\dateUKenglish{\iso@dateenglish}%
  \fi
  \ifx\undefined\iso@dateaustralian\else
    \def\dateaustralian{\iso@dateaustralian}%
    \def\datenewzealand{\iso@dateaustralian}%
  \fi
  \ifx\undefined\iso@dateamerican\else
    \def\dateamerican{\iso@dateamerican}%
    \def\dateUSenglish{\iso@dateamerican}%
  \fi
}
%</english>
%    \end{macrocode}
%
% \subsection{Language definition file french.idf}
% \changes{2.26}{2005/03/10}{Force year in four digits for long formats}%
%
% \begin{macro}{\iso@languageloaded}
% Define the command \verb|\iso@languageloaded| in order to enable
% \verb|isodate.sty| to determine if at least one language is loaded.
%    \begin{macrocode}
%<*french>
\let\iso@languageloaded\active
\typeout{Define commands for French date format}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\def\month@french{\ifcase\month\or
  janvier\or f\'evrier\or mars\or avril\or mai\or juin\or
  juillet\or ao\^ut\or septembre\or octobre\or novembre\or
  d\'ecembre\fi}
%    \end{macrocode}
%    \begin{macrocode}
\def\iso@printmonthday@french#1#2{%
  \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
    \equal{\iso@dateformat}{short}}{%
    \iso@printday{#2}/\iso@printmonth{#1}\ifiso@printyear/\fi}{%
    \ifthenelse{\equal{\iso@dateformat}{iso}}{%
      \ifiso@printyear\iso@isodash\fi\iso@printmonth{#1}%
      \iso@isodash\iso@printday{#2}}{%
      \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
        \ifiso@printyear/\fi\iso@printmonth{#1}/\iso@printday{#2}}{%
        \ifthenelse{\equal{\iso@dateformat}{orig}\or
                    \equal{\iso@dateformat}{shortorig}}{%
          \begingroup
          \edef\lday{#2}\edef\day{\lday}%
          \edef\lmonth{#1}\def\month{\lmonth}%
          \number\day\ifnum1=\day \noexpand\ier\fi~\month@french%
          \endgroup
          }{}}}}%
  }
%    \end{macrocode}
%    \begin{macrocode}
\def\iso@printdate@french#1#2#3{%
  \ifthenelse{\equal{\iso@dateformat}{iso}\or%
    \equal{\iso@dateformat}{TeX}}{%
    \ifiso@printyear\iso@yearfour{\number#1}\fi}{}%
  \iso@printmonthday@french{\number#2}{\number#3}%
  \ifiso@printyear
    \ifthenelse{\equal{\iso@dateformat}{numeric}}{\iso@yearfour{\number#1}}{%
      \ifthenelse{\equal{\iso@dateformat}{orig}}{~\iso@yearfour{\number#1}}{%
        \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
          ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
          \ifthenelse{\equal{\iso@dateformat}{short}}{%
            \iso@yeartwo{\number#1}}{}}}}%
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\def\iso@datefrench{%
  \def\today{\iso@printdate@french{\year}{\month}{\day}}}%
%    \end{macrocode}
% \begin{macro}{\iso@daterange@...}
% Define date-range commands for dialects.
%    \begin{macrocode}
  \expandafter\def\csname iso@daterange@\CurrentOption\endcsname{%
    \iso@daterange@french}%
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\def\iso@daterange@french#1#2#3#4#5#6{%
  \ifthenelse{\equal{\iso@dateformat}{iso}\or%
              \equal{\iso@dateformat}{TeX}}{%
    \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}%
    \iso@rangesign%
    \ifthenelse{\equal{\number#1}{\number#4}}{%
      \ifthenelse{\equal{\number#2}{\number#5}}{\iso@printday{#6}%
        }{\iso@printmonthday@french{#5}{#6}}}{%
      \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%
%    \end{macrocode}
%    \begin{macrocode}
    \ifthenelse{\equal{\number#1}{\number#4}}{%
      \ifthenelse{\equal{\number#2}{\number#5}}{%
        \ifthenelse{\equal{\iso@dateformat}{orig}}{%
          \begingroup
            \edef\lday{#3}\edef\day{\lday}%
            \number\day\ifnum1=\day \noexpand\ier\fi
            \endgroup}{\iso@printday{#3}}%
        }{\iso@printmonthday@french{#2}{#3}}}{%
      \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%
    \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
      #4}{#5}{#6}%
}{%
    }%
}
%    \end{macrocode}
%    \begin{macrocode}
\expandafter\def\csname iso@rangesign@\CurrentOption\endcsname{~au~}
%    \end{macrocode}
% \changes{2.06}{2002/04/08}{Changed range sign for French language,
% thanks to Felix P\"utsch}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
\def\iso@languagename{french}%
%    \end{macrocode}
% \changes{2.03}{2001/05/04}{Fixed a bug in the French language that caused
%   not to switch to it correctly on startup.}
% \verb|\datefrenchb| has to be defined additionally because babel starts
% with language frenchb instead of french.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifx\undefined\iso@datefrench\else
    \def\datefrench{\iso@datefrench}%
    \def\datefrenchb{\iso@datefrench}%
  \fi
}
%</french>
%    \end{macrocode}
%
% \subsection{Language definition file german.idf}
% \changes{2.26}{2005/03/10}{Force year in four digits for long formats}%
%
% \begin{macro}{\iso@languageloaded}
% Define the command \verb|\iso@languageloaded| in order to enable
% \verb|isodate.sty| to determine if at least one language is loaded.
%    \begin{macrocode}
%<*german>
\let\iso@languageloaded\active
\typeout{Define commands for German date format (\CurrentOption)}
%    \end{macrocode}
% \end{macro}
% \changes{2.03}{2001/05/04}{Allow change of spaces for German language}%
% Define spaces between day and month resp. month and year. \verb|dm| 
% stands for day-month and \verb|my| for month-year. The defaults are taken
% from the Duden \cite{duden1996a}.
%    \begin{macrocode}
\def\iso@dmsepgerman{\,}%
\def\iso@mylongsepgerman{~}%
\def\iso@myshortsepgerman{\,}%
%    \end{macrocode}
% \begin{macro}{\daymonthsepgerman}
% Change space between day and month in numeric date formats for the
% German language. The only parameter is the new spacing.
%    \begin{macrocode}
\DeclareRobustCommand*\daymonthsepgerman[1]{\def\iso@dmsepgerman{#1}}
%    \begin{macrocode}
% \end{macro}
% \begin{macro}{\monthyearsepgerman}
% Change space between month and year in numeric date formats for the
% German language. The first parameter is the new spacing for the long
% format and the second for the short format.
%    \begin{macrocode}
\DeclareRobustCommand*\monthyearsepgerman[2]{%
  \def\iso@mylongsepgerman{#1}%
  \def\iso@myshortsepgerman{#2}}
%    \end{macrocode}
% \end{macro}
% \changes{2.02}{2000/10/03}{Changed the umlauts to normal \TeX\ commands to
% be able to use German dates without german.sty or babel.sty.}
%    \begin{macrocode}
\def\month@german{\ifcase\month\or
  Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
  Juli\or August\or September\or Oktober\or November\or Dezember\fi}
\def\month@ngerman{\month@german}
\def\month@austrian{\ifnum1=\month
  J\"anner\else \month@german\fi}
\def\month@naustrian{\month@austrian}
%    \end{macrocode}
%    \begin{macrocode}
\@namedef{iso@printmonthday@\CurrentOption}#1#2{%
  \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
              \equal{\iso@dateformat}{short}}{%
    \iso@printday{#2}.\iso@dmsepgerman\iso@printmonth{#1}.}{%
    \ifthenelse{\equal{\iso@dateformat}{iso}}{%
      \iso@printmonth{#1}\iso@isodash\iso@printday{#2}}{%
      \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
        \iso@printmonth{#1}/\iso@printday{#2}}{%
        \ifthenelse{\equal{\iso@dateformat}{orig}\or
                    \equal{\iso@dateformat}{shortorig}}{%
          \iso@printday{#2}.~\begingroup
          \edef\lmonth{#1}%
          \def\month{\lmonth}\csname month@\iso@languagename\endcsname%
          \endgroup
          }{}}}}%
}
%    \end{macrocode}
%    \begin{macrocode}
\@namedef{iso@printdate@\CurrentOption}#1#2#3{%
  \ifiso@printyear
    \ifthenelse{\equal{\iso@dateformat}{iso}}{%
      \iso@yearfour{\number#1}\iso@isodash}{%
      \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
        \iso@yearfour{\number#1}/}{}}%
  \fi
  \csname iso@printmonthday@\iso@languagename\endcsname{%
    \number#2}{\number#3}%
  \ifiso@printyear
    \ifthenelse{\equal{\iso@dateformat}{numeric}}{%
      \iso@mylongsepgerman\iso@yearfour{\number#1}}{%
      \ifthenelse{\equal{\iso@dateformat}{orig}}{~\iso@yearfour{\number#1}}{%
        \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
          ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
          \ifthenelse{\equal{\iso@dateformat}{short}}{%
            \iso@myshortsepgerman\iso@yeartwo{\number#1}}{}}}}%
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\@namedef{iso@daterange@\CurrentOption}#1#2#3#4#5#6{%
  \ifthenelse{\equal{\iso@dateformat}{iso}\or%
              \equal{\iso@dateformat}{TeX}}{%
    \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}%
    \iso@rangesign%
    \ifthenelse{\equal{\number#1}{\number#4}}{%
      \ifthenelse{\equal{\number#2}{\number#5}}{\iso@printday{#6}%
        }{\csname iso@printmonthday@\iso@languagename\endcsname{#5}{#6}}}{%
      \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%
%    \end{macrocode}
%    \begin{macrocode}
    \ifthenelse{\equal{\number#1}{\number#4}}{%
      \ifthenelse{\equal{\number#2}{\number#5}}{%
        \ifthenelse{\equal{\iso@dateformat}{orig}}{%
          \iso@printday{#3}}{\iso@printday{#3}}.%
        }{\csname iso@printmonthday@\iso@languagename\endcsname{%
          #2}{#3}}}{%
      \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%
    \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
      #4}{#5}{#6}%
  }%
}
%    \end{macrocode}
%    \begin{macrocode}
\expandafter\def\csname iso@rangesign@\CurrentOption\endcsname{~bis~}
%    \end{macrocode}
%    \begin{macrocode}
\ifthenelse{\equal{\CurrentOption}{german}}{%
  \def\iso@dategerman{%
    \def\today{\iso@printdate@german{\year}{\month}{\day}}}%
%    \end{macrocode}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
  \def\iso@languagename{german}%
}{%
%    \end{macrocode}
%    \begin{macrocode}
\ifthenelse{\equal{\CurrentOption}{ngerman}}{%
  \def\iso@datengerman{%
    \def\today{\iso@printdate@ngerman{\year}{\month}{\day}}}%
%    \end{macrocode}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
  \def\iso@languagename{ngerman}%
}{%
%    \end{macrocode}
%    \begin{macrocode}
\ifthenelse{\equal{\CurrentOption}{austrian}}{%
  \def\iso@dateaustrian{%
    \def\today{\iso@printdate@austrian{\year}{\month}{\day}}}%
%    \end{macrocode}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
  \def\iso@languagename{austrian}%
}{%
%    \end{macrocode}
%    \begin{macrocode}
\ifthenelse{\equal{\CurrentOption}{naustrian}}{%
  \def\iso@datenaustrian{%
    \def\today{\iso@printdate@naustrian{\year}{\month}{\day}}}%
%    \end{macrocode}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
  \def\iso@languagename{naustrian}%
}{%
}}}}
%    \end{macrocode}
% Redefine the command \verb|date|language that is used by babel.sty,
% german.sty, and ngerman.sty to switch to the original
% German date format to enable the use of different date
% formats.
% This has to be done after the preamble in order to ensure to overwrite
% the babel command.
%
% Do this only if \verb|\iso@date|language is defined.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifx\undefined\iso@dategerman\else
    \def\dategerman{\iso@dategerman}%
  \fi
  \ifx\undefined\iso@datengerman\else
    \def\datengerman{\iso@datengerman}%
  \fi
  \ifx\undefined\iso@dateaustrian\else
    \def\dateaustrian{\iso@dateaustrian}%
  \fi
  \ifx\undefined\iso@datenaustrian\else
    \def\datenaustrian{\iso@datenaustrian}%
  \fi
}
%</german>
%    \end{macrocode}
%
% \changes{2.02}{2001/04/30}{Added Norwegian language by Svend Tollak
% Munkejord}
% \subsection{Language definition file norsk.idf}
% \changes{2.26}{2005/03/10}{Force year in four digits for long formats}%
% 
% This file was provided by Svend Tollak Munkejord
% (svend.t.munkejord@energy.sintef.no).
%
% \begin{macro}{\iso@languageloaded}
% Define the command \verb|\iso@languageloaded| in order to enable
% \verb|isodate.sty| to determine if at least one language is loaded.
%    \begin{macrocode}
%<*norsk>
\let\iso@languageloaded\active
\typeout{Define commands for Norwegian date format}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\month@norsk}
% Prints the name of today's month in the long form for the original
% date format.
%    \begin{macrocode}
\def\month@norsk{\ifcase\month\or
    januar\or februar\or mars\or april\or mai\or juni\or
    juli\or august\or september\or oktober\or november\or desember\fi}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printmonthday@norsk}
% Prints the month and the day given as two arguments
% (\verb|{mm}{dd}|) in the current date format.
%    \begin{macrocode}
  \def\iso@printmonthday@norsk#1#2{%
%    \end{macrocode}
% Numeric and short date format: \verb|dd/mm/|
%    \begin{macrocode}
    \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
      \equal{\iso@dateformat}{short}}{%
      \iso@printday{#2}/\iso@printmonth{#1}\ifiso@printyear/\fi}{%
%    \end{macrocode}
% ISO date format: \verb|-mm-dd|
%    \begin{macrocode}
      \ifthenelse{\equal{\iso@dateformat}{iso}}{%
        \ifiso@printyear\iso@isodash\fi
        \iso@printmonth{#1}\iso@isodash\iso@printday{#2}}{%
%    \end{macrocode}
% \LaTeX\ date format: \verb|/mm/dd|
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
          \ifiso@printyear/\fi\iso@printmonth{#1}/\iso@printday{#2}}{%
%    \end{macrocode}
% Original date format: \verb|d. mmm|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{orig}\or
                      \equal{\iso@dateformat}{shortorig}}{%
            \iso@printday{#2}.~\begingroup
            \edef\lmonth{#1}\def\month{\lmonth}%
            \month@norsk%
            \endgroup
            }{}}}}%
    }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printdate@norsk}
% Prints the date given as three arguments (\verb|{yyyy}{mm}{dd}|) in
% the actual date format
%    \begin{macrocode}
  \def\iso@printdate@norsk#1#2#3{%
%    \end{macrocode}
% ISO or \LaTeX date format: \verb|yyyy\iso@printmonthday@norsk|
%    \begin{macrocode}
    \ifthenelse{\equal{\iso@dateformat}{iso}\or%
      \equal{\iso@dateformat}{TeX}}{%
      \ifiso@printyear\iso@yearfour{\number#1}\fi}{}%
    \iso@printmonthday@norsk{\number#2}{\number#3}%
%    \end{macrocode}
% numeric date format: \verb|\iso@printmonthday@norsk yyyy|
%    \begin{macrocode}
    \ifiso@printyear
      \ifthenelse{\equal{\iso@dateformat}{numeric}}{\iso@yearfour{\number#1}}{%
%    \end{macrocode}
% original date format: \verb|\iso@printmonthday@norsk~yyyy|
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{orig}}{~\iso@yearfour{\number#1}}{%
%    \end{macrocode}
% short original date format: \verb|\iso@printmonthday@norsk~yyyy|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
            ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
%    \end{macrocode}
% short date format: \verb|\iso@printmonthday@norsk yy|
%    \begin{macrocode}
            \ifthenelse{\equal{\iso@dateformat}{short}}{%
              \iso@yeartwo{\number#1}}{%
            }}}}%
    \fi
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@datenorsk}
% This command redefines the \cs{today} command to print in the
% actual date format.
%    \begin{macrocode}
  \def\iso@datenorsk{%
    \def\today{\iso@printdate@norsk{\year}{\month}{\day}}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@...}
% Define date-range commands for dialects.
%    \begin{macrocode}
  \expandafter\def\csname iso@daterange@\CurrentOption\endcsname{%
    \iso@daterange@norsk}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@norsk}
% This command takes six arguments
% (\verb|{yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2}|) and prints the corrosponding
% date range in the actual date format.
%    \begin{macrocode}
\def\iso@daterange@norsk#1#2#3#4#5#6{%
%    \end{macrocode}
% ISO or \LaTeX\ date format.
%    \begin{macrocode}
  \ifthenelse{\equal{\iso@dateformat}{iso}\or%
              \equal{\iso@dateformat}{TeX}}{%
%    \end{macrocode}
% Print the start date.
%    \begin{macrocode}
    \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}%
    \iso@rangesign%
%    \end{macrocode}
% If year and month are equal, only print the day of the end date. If
% only the year is equal, only print month and day of the end
% date. Otherwise print the whole end date.
%    \begin{macrocode}
    \ifthenelse{\equal{\number#1}{\number#4}}{%
      \ifthenelse{\equal{\number#2}{\number#5}}{\iso@printday{#6}%
        }{\iso@printmonthday@norsk{#5}{#6}}}{%
      \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%
%    \end{macrocode}
% Numeric, short, or original date format.
%
% If year and month are equal, only print the day of the start date. If
% only the year is equal, only print month and day of the start
% date. Otherwise print the whole start date.
%    \begin{macrocode}
    \ifthenelse{\equal{\number#1}{\number#4}}{%
      \ifthenelse{\equal{\number#2}{\number#5}}{%
        \ifthenelse{\equal{\iso@dateformat}{orig}\or
          \equal{\iso@dateformat}{shortorig}}{%
          \iso@printday{#3}.}{\iso@printday{#3}}%
        }{\iso@printmonthday@norsk{#2}{#3}}}{%
      \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%
%    \end{macrocode}
% Print the end date.
%    \begin{macrocode}
    \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
      #4}{#5}{#6}%
  }{%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@rangesign@norsk}
% Sets the word between start and end date in a date range to ``~til~''.
%    \begin{macrocode}
\expandafter\def\csname iso@rangesign@\CurrentOption\endcsname{~til~}
%    \end{macrocode}
% \end{macro}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
\def\iso@languagename{norsk}%
%    \end{macrocode}
% Redefine the command \verb|\datenorsk| that is used by babel to
% switch to the original Norsk date format to enable the use of
% different date formats.
% This has to be done after the preamble in order to ensure to overwrite
% the babel command.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifx\undefined\iso@datenorsk\else
    \def\datenorsk{\iso@datenorsk}%
  \fi
}
%</norsk>
%    \end{macrocode}
%
% \changes{2.07}{2003/07/29}{Added Swedish language by Christian
% Schlauer}
% \subsection{Language definition file swedish.idf}
% \changes{2.26}{2005/03/10}{Force year in four digits for long formats}%
% 
% This file was provided by Christian Schlauer
% (christian.schlauer@web.de).
%
% \begin{macro}{\iso@languageloaded}
% Define the command \verb|\iso@languageloaded| in order to enable
% \verb|isodate.sty| to determine if at least one language is loaded.
%    \begin{macrocode}
%<*swedish>
\let\iso@languageloaded\active
\typeout{Define commands for Swedish date format}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\month@swedish}
% Prints the name of today's month in the long form for the original
% date format.
%    \begin{macrocode}
\def\month@swedish{\ifcase\month\or
    januari\or februari\or mars\or april\or maj\or juni\or
    juli\or augusti\or september\or oktober\or november\or december\fi}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printmonthday@swedish}
% Prints the month and the day given as two arguments
% (\verb|{mm}{dd}|) in the current date format.
%    \begin{macrocode}
  \def\iso@printmonthday@swedish#1#2{%
%    \end{macrocode}
% Numeric and short date format: \verb|dd/mm/|
%    \begin{macrocode}
    \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
      \equal{\iso@dateformat}{short}}{%
      \iso@printday{#2}/\iso@printmonth{#1}\ifiso@printyear/\fi}{%
%    \end{macrocode}
% ISO date format: \verb|-mm-dd|
%    \begin{macrocode}
      \ifthenelse{\equal{\iso@dateformat}{iso}}{%
        \ifiso@printyear\iso@isodash\fi\iso@printmonth{#1}%
        \iso@isodash\iso@printday{#2}}{%
%    \end{macrocode}
% \LaTeX\ date format: \verb|/mm/dd|
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
          \ifiso@printyear/\fi\iso@printmonth{#1}/\iso@printday{#2}}{%
%    \end{macrocode}
% Original date format: \verb|d. mmm|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{orig}\or
                      \equal{\iso@dateformat}{shortorig}}{%
            \iso@printday{#2}.~\begingroup
            \edef\lmonth{#1}\def\month{\lmonth}%
            \month@swedish%
            \endgroup
            }{}}}}%
    }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@printdate@swedish}
% Prints the date given as three arguments (\verb|{yyyy}{mm}{dd}|) in
% the actual date format
%    \begin{macrocode}
  \def\iso@printdate@swedish#1#2#3{%
%    \end{macrocode}
% ISO or \LaTeX date format: \verb|yyyy\iso@printmonthday@swedish|
%    \begin{macrocode}
    \ifthenelse{\equal{\iso@dateformat}{iso}\or%
      \equal{\iso@dateformat}{TeX}}{%
      \ifiso@printyear\iso@yearfour{\number#1}\fi}{}%
    \iso@printmonthday@swedish{\number#2}{\number#3}%
%    \end{macrocode}
% numeric date format: \verb|\iso@printmonthday@swedish yyyy|
%    \begin{macrocode}
    \ifiso@printyear
      \ifthenelse{\equal{\iso@dateformat}{numeric}}{\iso@yearfour{\number#1}}{%
%    \end{macrocode}
% original date format: \verb|\iso@printmonthday@swedish~yyyy|
%    \begin{macrocode}
        \ifthenelse{\equal{\iso@dateformat}{orig}}{~\iso@yearfour{\number#1}}{%
%    \end{macrocode}
% short original date format: \verb|\iso@printmonthday@swedish~yy|
%    \begin{macrocode}
          \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
            ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
%    \end{macrocode}
% short date format: \verb|\iso@printmonthday@swedish yy|
%    \begin{macrocode}
            \ifthenelse{\equal{\iso@dateformat}{short}}{%
              \iso@yeartwo{\number#1}}{%
              }}}}%
    \fi
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@dateswedish}
% This command redefines the \cs{today} command to print in the
% actual date format.
%    \begin{macrocode}
  \def\iso@dateswedish{%
    \def\today{\iso@printdate@swedish{\year}{\month}{\day}}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@...}
% Define date-range commands for dialects.
%    \begin{macrocode}
  \expandafter\def\csname iso@daterange@\CurrentOption\endcsname{%
    \iso@daterange@swedish}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@daterange@swedish}
% This command takes six arguments
% (\verb|{yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2}|) and prints the corrosponding
% date range in the actual date format.
%    \begin{macrocode}
\def\iso@daterange@swedish#1#2#3#4#5#6{%
%    \end{macrocode}
% ISO or \LaTeX\ date format.
%    \begin{macrocode}
  \ifthenelse{\equal{\iso@dateformat}{iso}\or%
              \equal{\iso@dateformat}{TeX}}{%
%    \end{macrocode}
% Print the start date.
%    \begin{macrocode}
    \csname iso@printdate@\iso@languagename\endcsname{%
      #1}{#2}{#3}\iso@rangesign%
%    \end{macrocode}
% If year and month are equal, only print the day of the end date. If
% only the year is equal, only print month and day of the end
% date. Otherwise print the whole end date.
%    \begin{macrocode}
    \ifthenelse{\equal{\number#1}{\number#4}}{%
      \ifthenelse{\equal{\number#2}{\number#5}}{\iso@printday{#6}%
        }{\iso@printmonthday@swedish{#5}{#6}}}{%
      \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%
%    \end{macrocode}
% Numeric, short, or original date format.
%
% If year and month are equal, only print the day of the start date. If
% only the year is equal, only print month and day of the start
% date. Otherwise print the whole start date.
%    \begin{macrocode}
    \ifthenelse{\equal{\number#1}{\number#4}}{%
      \ifthenelse{\equal{\number#2}{\number#5}}{%
        \ifthenelse{\equal{\iso@dateformat}{orig}\or
                    \equal{\iso@dateformat}{shortorig}}{%
          \iso@printday{#3}.}{\iso@printday{#3}}%
        }{\iso@printmonthday@swedish{#2}{#3}}}{%
      \csname iso@printdate@\iso@languagename\endcsname{%
        #1}{#2}{#3}}%
%    \end{macrocode}
% Print the end date.
%    \begin{macrocode}
    \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
      #4}{#5}{#6}%
}{%
    }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\iso@rangesign@swedish}
% Sets the word between start and end date in a date range to ``~till~''.
%    \begin{macrocode}
\expandafter\def\csname iso@rangesign@\CurrentOption\endcsname{~till~}
%    \end{macrocode}
% \end{macro}
% Define the language name that will the active language for isodate
% if none of the packages babel.sty, german.sty, and ngerman.sty is
% loaded and if this is the last language that is used for isodate.
% If one of the above packages is used this definition will be
% overridden by the command \verb|\languagename| that will always
% return the current used language.
%    \begin{macrocode}
\def\iso@languagename{swedish}%
%    \end{macrocode}
% Redefine the command \verb|\dateswedish| that is used by babel to
% switch to the original Swedish date format to enable the use of
% different date formats.
% This has to be done after the preamble in order to ensure to overwrite
% the babel command.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifx\undefined\iso@dateswedish\else
    \def\dateswedish{\iso@dateswedish}%
  \fi
}
%</swedish>
%    \end{macrocode}
%
% \Finale
