summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/isodate/isodate.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:54:09 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:54:09 +0000
commit6d194c5911349b081e4f5d2fceae6e70de7f6063 (patch)
tree10e7be211eb504885b2d390786b57629eef06a70 /Master/texmf-dist/source/latex/isodate/isodate.dtx
parente1631ad38523ce5a94b368ef94f755e305f5a0cd (diff)
trunk/Master/texmf-dist/source/latex/isodate
git-svn-id: svn://tug.org/texlive/trunk@333 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/isodate/isodate.dtx')
-rw-r--r--Master/texmf-dist/source/latex/isodate/isodate.dtx2903
1 files changed, 2903 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/isodate/isodate.dtx b/Master/texmf-dist/source/latex/isodate/isodate.dtx
new file mode 100644
index 00000000000..6d419e12145
--- /dev/null
+++ b/Master/texmf-dist/source/latex/isodate/isodate.dtx
@@ -0,0 +1,2903 @@
+% \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