summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/datetime/datetime.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/datetime/datetime.dtx')
-rw-r--r--Master/texmf-dist/source/latex/datetime/datetime.dtx4817
1 files changed, 4817 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/datetime/datetime.dtx b/Master/texmf-dist/source/latex/datetime/datetime.dtx
new file mode 100644
index 00000000000..84aacd4bfbd
--- /dev/null
+++ b/Master/texmf-dist/source/latex/datetime/datetime.dtx
@@ -0,0 +1,4817 @@
+%\iffalse
+% datetime.dtx generated using makedtx version 0.9b (c) Nicola Talbot
+% Command line args:
+% -macrocode ".*\.perl"
+% -setambles ".*\.perl=>\nopreamble\nopostamble"
+% -src "(.+)\.(def)=>\1.\2"
+% -src "(.+)\.(sty)=>\1.\2"
+% -src "(.+)\.(perl)=>\1.\2"
+% -src "(dt-sampl\.tex)=>\1"
+% -doc "manual.tex"
+% -author "Nicola Talbot"
+% -dir "source"
+% datetime
+% Created on 2005/10/1 15:23
+%\fi
+%\iffalse
+%<*package>
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%</package>
+%\fi
+% \iffalse
+% Doc-Source file to use with LaTeX2e
+% Copyright (C) 2005 Nicola Talbot, all rights reserved.
+% \fi
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+
+\usepackage[colorlinks,
+ bookmarks,
+ bookmarksopen,
+ pdfauthor={N.L.C. Talbot},
+ pdftitle={datetime.sty: A Date and Time Package},
+ pdfkeywords={date,time,LaTeX}]{hyperref}
+
+
+
+\newcommand{\stynamefmt}[1]{\textsf{#1}}
+\begin{document}
+\DocInput{datetime.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+%\RecordChanges
+%\OnlyDescription
+%\def\docdate{25 May 2005}
+%
+%\changes{v2.46}{30 Sep 2005}{'today defined using 'DeclareRobustCommand}
+%\changes{v2.41}{22 Oct 2004}{'today defined using 'providecommand instead of 'renewcommand}
+%
+% \title{datetime.sty v2.46: Formatting Current Date and
+%Time}
+% \author{N.L.C. Talbot}
+% \date{\docdate}
+% \maketitle
+% \tableofcontents
+% \section{Introduction}
+%\changes{v1.0}{8 Aug 2000}{First release}
+%\changes{v1.01}{18 Sept 2000}{Documentation added}
+%The \stynamefmt{datetime} package is a \LaTeXe\ package that
+%provides various different formats for \verb"\today",
+%and provides commands for displaying the current time.
+%If you only want the
+%time commands but not the date changing commands, you can pass
+%the option \texttt{nodate} to the package.
+%\changes{v2.3}{1 May 2004}{nodate option added}
+%
+%\changes{v2.41}{22 Oct 2004}{split package into two files:
+%datetime.sty and fmtcount.sty}
+%Since version 2.4, the \stynamefmt{datetime} package has been
+%separated into two packages: \stynamefmt{datetime} and
+%\stynamefmt{fmtcount}. When I originally created this package,
+%I defined the commands, \verb"\ordinal" etc which could be used
+%in the definition of \verb"\today". Since then, I have extended
+%the number of commands available that can be used to display the
+%value of a \LaTeX\ counter, however it seems more appropriate to
+%define all these counter-related commands in a separate package.
+%The \stynamefmt{fmtcount} package is now distributed separately
+%from the \stynamefmt{datetime} package, and will also need to
+%be installed.
+%
+%\changes{v2.42}{1 Nov 2004}{make package compatible with babel}
+%As from version 2.42, the \stynamefmt{datetime} package is now
+%compatible with \stynamefmt{babel}, however you must load the
+%\stynamefmt{datetime} package \emph{after} the \stynamefmt{babel} package. For example:
+%\begin{verbatim}
+%\usepackage[francais]{babel}
+%\usepackage{datetime}
+%\end{verbatim}
+%
+% \section{Date Declarations}
+% There are various declarations that change the effect of
+%\verb"\today". The change can be localised by placing the
+%declaration within a group.
+%
+% \vspace{10pt}\noindent \meta{Day} \meta{Month} \meta{Year} formats:\\
+% \noindent\DescribeMacro{\longdate}
+% The declaration \verb"\longdate" will redefine
+%\verb"\today" to produce the current date displayed in the form
+%Wednesday 8\textsuperscript{th} March, 2000
+% if the package option \texttt{dayofweek} is used, or
+%8\textsuperscript{th} March, 2000 if the package option
+% \texttt{nodayofweek} is used.\\
+% \DescribeMacro{\shortdate}
+% The declaration \verb"\shortdate" will redefine
+%\verb"\today" to produce the current date displayed in the form
+%Wed 8\textsuperscript{th} Mar, 2000 if the package option
+%\texttt{dayofweek} is used, or 8\textsuperscript{th} Mar, 2000
+%if the package option \texttt{nodayofweek} is used.\\
+% \DescribeMacro{\ddmmyyyydate}
+% The declaration \verb"\ddmmyyyydate" will redefine
+%\verb"\today" to produce
+% the current date displayed in the form 08/03/2000\\
+% \DescribeMacro{\dmyyyydate}
+% The declaration \verb"\dmyyyydate" will redefine
+%\verb"\today" to produce
+% the current date displayed in the form 8/3/2000\\
+% \DescribeMacro{\ddmmyydate}
+% The declaration \verb"\ddmmyydate" will redefine
+%\verb"\today" to produce
+% the current date displayed in the form 08/03/00\\
+% \DescribeMacro{\dmyydate}
+% The declaration \verb"\dmyydate" will redefine
+%\verb"\today" to produce
+% the current date displayed in the form 8/3/00\\
+% \DescribeMacro{\textdate}
+% The declaration \verb"\textdate" will redefine
+%\verb"\today" to produce the current date displayed in the form:
+%Wednesday the Eighth of March, Two Thousand if the package option
+%\texttt{dayofweek} is used, or Eighth of March, Two Thousand if
+%the package option \texttt{nodayofweek} is used.
+%
+% \vspace{10pt}\noindent \meta{Month} \meta{Day} \meta{Year} formats:\\
+% \DescribeMacro{\usdate}
+% The declaration \verb"\usdate" will redefine
+%\verb"\today" to produce the current date displayed in the form
+%March 8, 2000. (As \TeX\ and \LaTeX\ do by default.)\\
+% \DescribeMacro{\mmddyyyydate}
+% The declaration \verb"\mmddyyyydate" will redefine
+%\verb"\today" to produce the current date displayed in the form
+%03/08/2000\\
+% \DescribeMacro{\mdyyyydate}
+% The declaration \verb"\mdyyyydate" will redefine
+%\verb"\today" to produce the current date displayed in the form
+%3/8/2000\\
+% \DescribeMacro{\mmddyydate}
+% The declaration \verb"\mmddyydate" will redefine
+%\verb"\today" to produce the current date displayed in the form
+%03/08/00\\
+% \DescribeMacro{\mdyydate}
+% The declaration \verb"\mdyydate" will redefine
+%\verb"\today" to produce the current date displayed in the form
+%3/8/00
+%
+%\vspace{10pt}\noindent In addition, the declarations \verb"\date"\meta{lang} are
+%available for all languages defined either by
+%calling \stynamefmt{babel} prior to \stynamefmt{datetime} or by
+%passing the language name as an option to \stynamefmt{datetime}.
+%See~\autoref{sec:newdate} if you want to define your own customised date format.
+%
+%\changes{v2.43}{25 Feb 2005}{added 'dateseparator}%
+%As from version 2.43, the numerical date formats (such as
+%\verb"\ddmmyyyydate") use the command
+%\verb"\dateseparator" to separate the numbers. So, for example,
+%if you want to hyphens instead of slashes, you can do:
+%\begin{verbatim}
+%\renewcommand{\dateseparator}{-}
+%\end{verbatim}
+%
+% \section{Time Commands}
+%\changes{v2.3}{1 May 2004}{Fixed minor bug in 'ampmtime.
+%(or more specifically, changed the way 'ampmtime, 'xxivtime
+% and 'oclock are defined.)}
+%\DescribeMacro{\currenttime}
+% The current time is displayed using the command
+%\verb"\currenttime".
+%\DescribeMacro{\settimeformat}
+% The format can be changed using the declaration
+%\verb"\settimeformat{"\meta{style}\verb+}+,
+% where \meta{style} is the name of the format\footnote{%
+% Note that the commands \texttt{\textbackslash xxivtime},
+%\texttt{\textbackslash ampmtime} and
+% \texttt{\textbackslash oclock} are still available,
+%\texttt{\textbackslash settimeformat}
+% redefines \texttt{\textbackslash currenttime} to the command
+%given by placing a backslash in front of \meta{style}. So
+% \texttt{\textbackslash settimeformat\{xxivtime\}} sets
+%\texttt{\textbackslash currenttime}
+% to \texttt{\textbackslash xxivtime} and so on.}. Available
+%formats are:
+%\begin{description}
+%\item[xxivtime] Twenty-four hour time in the form 22:28 (Default)
+%\item[ampmtime] Twelve hour time in the form 10:28pm
+%\item[oclock] Displays the current time as a string, e.g.\
+%Twenty-Eight minutes past Ten in the afternoon.\footnote{Version
+%2.43 fixed bug which caused an infinite loop on the hour.}
+%\changes{v2.43}{23 Feb 2005}{Fixed bug in oclock time format}
+%\end{description}
+%
+% \DescribeMacro{\newtimeformat}
+%\changes{v2.3}{1 May 2004}{'newtimeformat and 'settimeformat
+%added}
+% New time formats can be defined using the command:\\[5pt]
+%\verb"\newtimeformat{"\meta{name}\verb+}{+\meta{format}\verb!}!\\[5pt]
+% where \meta{name} is the name of the new format (used in
+%\verb"\settimeformat"), and \meta{format} is how to format the
+%time. Within \meta{format} you can use the counters
+%\texttt{HOUR} (number of hours after midnight), \texttt{MINUTE}
+%(number of minutes past the hour), \texttt{HOURXII} (number of
+%hours after midnight/midday), \texttt{TOHOUR} (the next hour)
+% and \texttt{TOMINUTE} (number of minutes to the next hour), and
+%the corresponding commands:
+% \verb"\THEHOUR",
+%\verb"\THEMINUTE",
+%\verb"\THEHOURXII",
+%\verb"\THETOHOUR" and
+%\verb"\THETOMINUTE".
+%
+% For example, to define a new time format that uses a dot instead of a colon:
+%\begin{verbatim}
+%\newtimeformat{dottime}{\twodigit{\THEHOUR}.\twodigit{\THEMINUTE}}
+%\end{verbatim}
+%You then need to switch to this new format before you can use it:
+%\begin{verbatim}
+%\settimeformat{dottime}
+%\currenttime
+%\end{verbatim}
+%
+%\changes{v2.43}{25 Feb 2005}{added 'timeseparator}%
+%As from version 2.43, if you only want to change the separator,
+%you can simply redefine \verb"\timeseparator"
+%instead of defining a new time format. For example:
+%\begin{verbatim}
+%\renewcommand{\timeseparator}{.}
+%\end{verbatim}
+%The \texttt{xxivtime} format will now work like the \texttt{dottime} format defined above.
+%
+% \section{Formating Dates}
+% \DescribeMacro{\pdfdate}
+%\changes{v2.32}{4 May 2004}{Fixed bug in 'pdfdate}
+%\changes{v2.31}{1 May 2004}{'pdfdate added}
+% The command \verb"\pdfdate"\footnote{thanks to Ulrich Dirr for
+%asking about this} prints the date in the format required for
+% PDF files, e.g.\ if the date is 1 May 2004 and time is
+% 22:02, \verb"\pdfdate" will print 20040501220200. The reason
+%this date format is separate from all the others is because the
+%other form doesn't get properly expanded by PDF\TeX. (This
+%command is defined regardless of whether the package option
+%\texttt{nodate} is called.)
+%Example:
+%\begin{verbatim}
+%\pdfinfo{
+% /Author (Me)
+% /Title (A Sample Document)
+% /CreationDate (D:20040501215500)
+% /ModificationDate (D:\pdfdate)
+%}
+%\end{verbatim}
+%
+% There are two commands that print the name of the current
+% month:
+% \DescribeMacro{\monthname}
+% \verb"\monthname" prints the current month name in full,
+%e.g.\ August, and
+% \DescribeMacro{\shortmonthname}
+% \verb"\shortmonthname" prints the abbreviated month name,
+%e.g.\ Aug. Both \verb"\monthname" and
+%\verb"\shortmonthname" take an optional argument (a number from
+%1 to 12) if the name of a specific month is required. For
+%example, \verb"\monthname[6]" will produced the output: June.
+%\changes{v2.1}{17 Dec 2003}{Fixed bug in 'shortmonthname which
+%produced an error message in December}
+%\changes{v2.1}{17 Dec 2003}{Changed 'fmtord to use
+%'textsuperscript instead of \texttt{\^{}}}
+%
+% The day of the week is computed using the algorithm documented at
+% \url{http://userpages.wittenburg.edu/bshelburne/Comp150/DayOfWeek.htm}.
+% This algorithm works for any date between 1\textsuperscript{st}
+%Jan, 1901 and 31\textsuperscript{st} Dec, 2099.
+% The following macros display the day of week for a given date:
+%
+% \noindent\DescribeMacro{\dayofweekname}
+% \verb"\dayofweekname{"\meta{day}\verb!}{!\meta{month}\verb+}{+\meta{year}\verb:}: prints the
+% day of week for the specified date. For example,
+%\verb"\dayofweekname{31}{10}{2002}"
+% will produce the output: Thursday.\\
+% \DescribeMacro{\shortdayofweekname}
+% \verb"\shortdayofweekname{"\meta{day}\verb!}{!\meta{month}\verb+}{+\meta{year}\verb:}: prints the abbreviated name for the
+% day of week for the specified date. For example\\
+% \verb"\shortdayofweekname{31}{10}{2002}"\\
+% will produce the output: Thu.
+%
+% \noindent\DescribeMacro{\ifshowdow}
+% The \TeX\ conditional \verb"\ifshowdow" can be used to determine
+% whether or not the option \texttt{dayofweek} has been passed to
+%the package.
+% For example:
+%\begin{verbatim}
+%\ifshowdow\dayofweekname{31}{10}{2002} \fi
+%\end{verbatim}
+% will only display the day of week if the \texttt{dayofweek}
+%option was passed to \stynamefmt{datetime}.
+% Alternatively, you can use David~Carlisle's \stynamefmt{ifthen}
+%package:
+%\begin{verbatim}
+%\ifthenelse{\boolean{showdow}}{\dayofweekname{31}{10}{2002} }{}
+%\end{verbatim}
+%
+%\noindent\DescribeMacro{\ordinaldate}
+%\changes{v2.45}{23 May 2005}{'ordinaldate added}
+%The command \verb!\ordinaldate{!\meta{number}\verb+}+
+%displays \meta{number} as a date-type ordinal. If the
+%current language is English, this will simply pass
+%the argument to \verb!\ordinalnum! (defined in the
+%\stynamefmt{fmtcount} package),
+%if the current language is Breton, Welsh or French, a superscript
+%will only be added if \meta{number} is 1, otherwise only
+%\meta{number} will be displayed.
+%
+% \DescribeMacro{\formatdate}
+% The macro \verb"\formatdate{"\meta{day}\verb!}{!\meta{month}\verb+}{+\meta{year}\verb:}:\footnote{Note the
+% name change since version 1.1. The command name was changed
+%from \texttt{\textbackslash thedate}
+% to \texttt{\textbackslash formatdate}
+% to avoid a name clash when using the \stynamefmt{seminar} class
+%file.} formats
+% the specified date according to the current format of
+%\verb"\today"\footnote{To be more precise, \textbackslash
+%\texttt{today} is defined to be \textbackslash
+%\texttt{formatdate\{\textbackslash day\}\{\textbackslash month\}\{\textbackslash year\}}
+% where \textbackslash \texttt{longdate} etc change the definition
+%of \textbackslash \texttt{formatdate}}. (Arguments
+% must all be integers.) For example, in combination with
+%\verb"\longdate", the command\\
+%\verb"\formatdate{27}{9}{2004}"\\
+% will produce the output: Monday 27\textsuperscript{th}
+%September, 2004.
+%\changes{v1.1}{20 Apr 2002}{'thedate added (later changed to
+%'formatdate)}
+%\changes{v2.0}{30 Oct 2002}{Changed 'thedate to 'formatdate
+% to avoid name conflict with \stynamefmt{seminar} class file.}
+%\changes{v2.0}{30 Oct 2002}{Changed 'ordinal,
+% 'ordinalstring, 'Ordinalstring,
+% 'numberstring, 'Numberstring to take a
+% \LaTeX\ counter as argument instead of a \TeX\ count register,
+%to make them more consistent with 'arabic etc}
+%
+% \DescribeMacro{\twodigit}
+% You can ensure that a number is displayed with at least two
+%digits by using the command
+%\verb"\twodigit{"\meta{num}\verb!}!\footnote{New to version 2.2}.
+% This is of use if you want to define your own date or time
+%formats.
+%
+% \section{Defining New Date Formats}\label{sec:newdate}
+%
+% \DescribeMacro{\newdateformat}
+% New date formats can be defined using the command:\\[5pt]
+% \verb"\newdateformat{"\meta{name}\verb!}{!\meta{format}\verb+}+\\[5pt]
+% where \meta{name} is the name of the new format, and
+% \meta{format} is how to format the date. Within the
+% argument \meta{format} you can use the commands \verb"\THEDAY",
+%\verb!\THEMONTH!
+% and \verb"\THEYEAR" to represent the relevant day, month and
+%year, or you can use the counters
+% \texttt{DAY}, \texttt{MONTH} and \texttt{YEAR} if you want to
+%use \verb"\ordinal" etc. Once you have defined the
+% new date format, you can then switch to it using the declaration \verb'\'\meta{name}
+% (i.e.\ the name you specified preceded by a backslash), and
+% subsequent calls to \verb"\today" and \verb!\formatdate! will
+%use your new format.
+%\changes{v2.2}{27 Apr 2004}{'newdateformat added}
+%
+% For example, suppose you want to define a new date format called,
+% say, \texttt{mydate}, that will typeset the date in the form:
+%8-3-2002,
+% then you can do:
+%\begin{verbatim}
+%\newdateformat{mydate}{\THEDAY-\THEMONTH-\THEYEAR}
+%\end{verbatim}
+% \verb"\newdateformat" will then define the declaration
+%\verb!\mydate! which can be used to
+% switch to your new format. In the following example,
+% two new date formats are defined, and they are then
+% selected to produce two different formats for the current date:
+%\begin{verbatim}
+%\newdateformat{dashdate}{%
+%\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+%
+%\newdateformat{usvardate}{%
+%\monthname[\THEMONTH] \ordinal{DAY}, \THEYEAR}
+%
+%Dash: \dashdate\today.
+%US: \usvardate\today.
+%\end{verbatim}
+%If the current date is, say, 8th March, 2002, the above code will
+% produce the following:
+%Dash: 08-03-2002.
+%US: March 8\textsuperscript{th}, 2002.
+%
+%Note that \verb"\THEDAY" etc and \texttt{DAY} etc have no real
+%meaning outside \verb"\newdateformat" (this is why they
+%are in uppercase). Incidentally, the \texttt{dashdate} format
+%is not really necessary, as you can achieve this format
+%using:
+%\begin{verbatim}
+%\renewcommand{\dateseparator}{-}
+%\ddmmyyyydate
+%\end{verbatim}
+%
+%Another note: in the above code, \verb'\ordinal' was
+%used to illustrate the use of the \texttt{DAY} counter. It
+%is better to use \verb'\ordinaldate' instead:
+%\begin{verbatim}
+%\newdateformat{usvardate}{%
+%\monthname[\THEMONTH] \ordinaldate{\THEDAY}, \THEYEAR}
+%\end{verbatim}
+%
+%\section{Saving Dates}
+%
+%\changes{v2.45}{1 May 2005}{added facility for saving dates}
+%It is possible to save a date for later use using the command:
+%\footnote{Thanks to Denis Bitouz\'e for asking about this}\par
+%\DescribeMacro{\newdate}
+%\verb"\newdate{"\meta{name}\verb!}{!\meta{day}\verb+}{+%
+%\meta{month}\verb'}{'\meta{year}\verb"}"
+%
+%This date can later be displayed using the same format as that
+%used by \verb"\formatdate" using the command:\par
+%\DescribeMacro{\displaydate}
+%\verb"\displaydate{"\meta{name}\verb'}'
+%
+%Individual elements of the date can be extracted using the
+%commands:\par
+%\DescribeMacro{\getdateday}
+%\verb"\getdateday{"\meta{name}\verb'}'\par
+%\DescribeMacro{\getdatemonth}
+%\verb"\getdatemonth{"\meta{name}\verb'}'\par
+%\DescribeMacro{\getdateyear}
+%\verb"\getdateyear{"\meta{name}\verb'}'
+%
+%\section{Predefined Names}
+%
+%The following commands are defined by the \stynamefmt{datetime}
+%package:
+%
+%\begin{tabular}{ll}
+%\bfseries Command Name & \bfseries Default Value\\
+%\verb"\dateseparator"\changes{v2.43}{25 Feb 2005}{added
+%'dateseparator} & \verb'/'\\
+%\verb"\timeseparator"\changes{v2.43}{25 Feb 2005}{added
+%'timeseparator} & \verb':'\\
+%\verb"\amname" & \texttt{am}\\
+%\verb"\pmname" & \texttt{pm}\\
+%\verb"\amorpmname" & \verb'\amname' if morning, otherwise
+%\verb!\pmname!\\
+%\verb"\amstring" & \texttt{in the morning}\\
+%\verb"\pmstring" & \texttt{in the afternoon}\\
+%\verb"\amorpmstring" & \verb!\amstring! if morning, otherwise
+%\verb'\pmstring'\\
+%\verb"\halfpast" & \texttt{Half past}\\
+%\verb"\quarterpast" & \texttt{Quarter past}\\
+%\verb"\quarterto" & \texttt{Quarter to}\\
+%\verb"\noon" & \texttt{Noon}\\
+%\verb"\midnight" & \texttt{Midnight}\\
+%\verb"\oclockstring" & \texttt{O'Clock}
+%\end{tabular}
+%
+% \section{Package Options}
+%
+% The following options may be passed to this package:\\[10pt]
+% \begin{tabular}{@{\ttfamily}ll}
+% long & make \verb"\today" produce long date\\
+% short & make \verb"\today" produce short date\\
+% ddmmyyyy & make \verb"\today" produce DD/MM/YYYY date\\
+% dmyyyy & make \verb"\today" produce D/M/YYYY date\\
+% ddmmyy & make \verb"\today" produce DD/MM/YY date\\
+% dmyy & make \verb"\today" produce D/M/YY date\\
+% text & make \verb"\today" produce text date\\
+% us & make \verb"\today" produce US style date\\
+% mmddyyyy & make \verb"\today" produce MM/DD/YYYY date\\
+% mdyyyy & make \verb"\today" produce M/D/YYYY date\\
+% mmddyy & make \verb"\today" produce MM/DD/YY date\\
+% mdyy & make \verb"\today" produce M/D/YY date\\
+% raise & make ordinal st,nd,rd,th appear as superscript\\
+% level & make ordinal st,nd,rd,th appear level with rest of
+%text\\
+% dayofweek & make the day of week appear for \verb"\longdate",
+%\verb!\shortdate! \\
+% & or \verb"\textdate"\\
+% nodayofweek & don't display the day of week.\\
+% 24hr & make \verb"\currenttime" produce \texttt{xxivtime}
+%format\\
+% 12hr & make \verb"\currenttime" produce \texttt{ampmtime}
+%format\\
+% oclock & make \verb"\currenttime" produce \texttt{oclock}
+%format\\
+% nodate & Don't redefine \verb"\today" or define the month or
+%day of week commands\\
+% & (useful if you only want the time commands or
+%\verb"\pdfdate")
+% \end{tabular}
+%
+%The default options are: \texttt{long}, \texttt{raise},
+%\texttt{dayofweek} and \texttt{24hr}.
+%
+%\section{Multilingual Support}
+%
+%If the \stynamefmt{babel} package is called prior to
+%\stynamefmt{datetime}, \verb"\date"\meta{lang}
+%will be the default date format,
+%where \meta{lang} is the current language.
+%
+%The commands \verb'\monthname' and \verb"\shortmonthname",
+%will produce the month name in the current language.
+%If you want the month name in a specific language, you
+%can use the command \verb'\monthname'\meta{lang}.
+%For example, \verb"\monthnamefrench[6]" will produce the output:
+%juin.
+%
+%There is currently only limited multilingual support for
+%\verb"\dayofweekname" and \verb!\shortdayofweekname! (just
+%English, French, Portuguese and Spanish). You can add support for
+%other languages by defining the commands
+%\verb'\dayofweeknameid'\meta{lang} and
+%\verb'\shortdayofweeknameid'\meta{lang}. Note that these
+%commands only take \emph{one} argument which should be
+%a number from 1 to 7 indicating the day of the week.
+%
+%You can use the following as templates. Replace
+%\texttt{english} with the name of your language (as given
+%by \verb'\languagename') and replace \texttt{Sunday}
+%etc as appropriate:
+%\begin{verbatim}
+%\providecommand{\dayofweeknameidenglish}[1]{%
+%\ifcase#1\relax
+%\or Sunday%
+%\or Monday%
+%\or Tuesday%
+%\or Wednesday%
+%\or Thursday%
+%\or Friday%
+%\or Saturday%
+%\fi}
+%
+%\providecommand{\shortdayofweekidnameenglish}[1]{%
+%\ifcase#1\relax
+%\or Sun%
+%\or Mon%
+%\or Tue%
+%\or Wed%
+%\or Thu%
+%\or Fri%
+%\or Sat%
+%\fi}
+%\end{verbatim}
+%If you want them added to future versions of
+%\stynamefmt{datetime}, please e-mail me the code.
+%
+%\section{Configuration File}
+%
+%\changes{v2.4}{25 Sept 2004}{provision for configuration file
+%datetime.cfg}
+%As from Version 2.4, the \stynamefmt{datetime} package will read in
+%settings from the configuration
+% file \texttt{datetime.cfg}, if it exists, which will override
+%the default package options.
+% For example, suppose you prefer a short date without the day of
+%week by default, you will need to create
+% a file called \texttt{datetime.cfg} that contains the line:
+%\begin{verbatim}
+%\shortdate\showdowfalse
+%\end{verbatim}
+%The file \texttt{datetime.cfg} should then go somewhere on the
+%\TeX\ path. Now all you need to do is:
+%\begin{verbatim}
+%\usepackage{datetime}
+%\end{verbatim}
+%without having to specify the \texttt{short} and
+%\texttt{nodayofweek} options.
+%
+%You can also use this file to define and set your own date
+%styles. For example, you could create
+%a configuration file that has the following lines:
+%\begin{verbatim}
+%\newdateformat{dashdate}{\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+%\dashdate
+%\end{verbatim}
+%Whenever you use the \stynamefmt{datetime} package, it will now
+%use this format by default.
+%
+%\section{LaTeX2HTML styles}
+%
+%\changes{v2.43}{25 Feb 2005}{Added LaTeX2HTML support}%
+%\changes{v2.44}{3 Mar 2005}{Fixed minor bugs in Perl scripts}
+%Version 2.43 and above of the \stynamefmt{datetime} bundle
+%supplies the LaTeX2HTML style file \texttt{datetime.perl}.
+%This file should be placed in a
+%directory searched by LaTeX2HTML. The following limitations
+%apply to the LaTeX2HTML styles:
+%
+%\begin{itemize}
+%\item The configuration file \texttt{datetime.cfg}
+%is currently ignored. (This is because
+%I can't work out the correct code to do this. If you
+%know how to do this, please let me know.) You can however
+%do:
+%\begin{verbatim}
+%\usepackage{datetime}
+%\html{\input{datetime.cfg}}
+%\end{verbatim}
+%This, I agree, is an unpleasant cludge.
+%
+%\item The commands \verb"\monthname"\meta{language} are not
+%implemented.
+%
+%\item Some of the languages are not implemented.
+%
+%\item The package option \texttt{nodate} is not implemented.
+%
+%\end{itemize}
+%
+% \section{Contact Details}
+% Dr Nicola Talbot\\
+% School of Computing Sciences\\
+% University of East Anglia\\
+% Norwich. NR4 7TJ.\\
+% United Kingdom.\\
+% \url{http://theoval.cmp.uea.ac.uk/~nlct/}
+%
+%
+%\StopEventually{}
+%\section{The Code}
+% \begin{macrocode}
+%<*dt-austrian.def>
+% \end{macrocode}
+%\section{Compatibility with Babel}
+%Austrian
+% \begin{macrocode}
+\ProvidesFile{dt-austrian.def}[2004/10/31]
+
+\providecommand{\monthnameaustrian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or J\"anner%
+\or Februar%
+\or M\"arz%
+\or April%
+\or Mai%
+\or Juni%
+\or Juli%
+\or August%
+\or September%
+\or Oktober%
+\or November%
+\or Dezember%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (janvier) to 12 (decembre)}%
+\fi}
+
+\DeclareRobustCommand*\dateaustrian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameaustrian[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-austrian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-bahasa.def>
+% \end{macrocode}
+%Bahasa
+% \begin{macrocode}
+\ProvidesFile{dt-bahasa.def}[2004/10/31]
+
+\providecommand{\monthnamebahasa}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (Januari) to 12 (Desember)}%
+\or Januari%
+\or Pebruari%
+\or Maret%
+\or April%
+\or Mei%
+\or Juni%
+\or Juli%
+\or Agustus%
+\or September%
+\or Oktober%
+\or Nopember%
+\or Desember%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (Januari) to 12 (Desember)}%
+\fi}
+
+\providecommand{\shortmonthnamebahasa}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (Januari) to 12 (Desember)}%
+\or Januari%
+\or Pebruari%
+\or Maret%
+\or April%
+\or Mei%
+\or Juni%
+\or Juli%
+\or Agustus%
+\or September%
+\or Oktober%
+\or Nopember%
+\or Desember%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (Januari) to 12 (Desember)}%
+\fi}
+
+\DeclareRobustCommand*\datebahasa{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day}~\monthnamebahasa[\@month]\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-bahasa.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-basque.def>
+% \end{macrocode}
+%Basque
+% \begin{macrocode}
+\ProvidesFile{dt-basque.def}[2004/10/31]
+
+\providecommand{\monthnamebasque}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (urtarrilaren) to 12 (abenduaren)}%
+\or urtarrilaren%
+\or otsailaren%
+\or martxoaren%
+\or apirilaren%
+\or maiatzaren%
+\or ekainaren%
+\or uztailaren%
+\or abuztuaren%
+\or irailaren%
+\or urriaren%
+\or azaroaren%
+\or abenduaren%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (urtarrilaren) to 12 (abenduaren)}%
+\fi}
+
+\providecommand{\shortmonthnamebasque}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (urtarrilaren) to 12 (abenduaren)}%
+\or urtarrilaren%
+\or otsailaren%
+\or martxoaren%
+\or apirilaren%
+\or maiatzaren%
+\or ekainaren%
+\or uztailaren%
+\or abuztuaren%
+\or irailaren%
+\or urriaren%
+\or azaroaren%
+\or abenduaren%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (urtarrilaren) to 12 (abenduaren)}%
+\fi}
+
+\DeclareRobustCommand*\datebasque{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@year.eko\space\monthnamebasque[\@month]~\number\@day}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-basque.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-breton.def>
+% \end{macrocode}
+%Breton
+% \begin{macrocode}
+\ProvidesFile{dt-breton.def}[2004/10/31]
+
+\providecommand{\monthnamebreton}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (Genver) to 12 (Kerzu)}%
+\or Genver%
+\or C'hwevrer%
+\or Meurzh%
+\or Ebrel%
+\or Mae%
+\or Mezheven%
+\or Gouere%
+\or Eost%
+\or Gwengolo%
+\or Here%
+\or Du%
+\or Kerzu%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (Genver) to 12 (Kerzu)}%
+\fi}
+
+\providecommand{\shortmonthnamebreton}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (Genver) to 12 (Kerzu)}%
+\or Genver%
+\or C'hwevrer%
+\or Meurzh%
+\or Ebrel%
+\or Mae%
+\or Mezheven%
+\or Gouere%
+\or Eost%
+\or Gwengolo%
+\or Here%
+\or Du%
+\or Kerzu%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (Genver) to 12 (Kerzu)}%
+\fi}
+
+\DeclareRobustCommand*\datebreton{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\ifnum\@day=1\relax 1\/\textsuperscript{a\~n}\else\number\@day\fi\space
+a\space viz\space\monthnamebreton[\@month]\space\number\@year
+}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-breton.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-bulgarian.def>
+% \end{macrocode}
+%Bulgarian
+% \begin{macrocode}
+\ProvidesFile{dt-bulgarian.def}[2004/10/31]
+
+\providecommand{\monthnamebulgarian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+ \or\cyrya\cyrn\cyru\cyra\cyrr\cyri\or
+ \cyrf\cyre\cyrv\cyrr\cyru\cyra\cyrr\cyri\or
+ \cyrm\cyra\cyrr\cyrt\or
+ \cyra\cyrp\cyrr\cyri\cyrl\or
+ \cyrm\cyra\cyrishrt\or
+ \cyryu\cyrn\cyri\or
+ \cyryu\cyrl\cyri\or
+ \cyra\cyrv\cyrg\cyru\cyrs\cyrt\or
+ \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrv\cyrr\cyri\or
+ \cyro\cyrk\cyrt\cyro\cyrm\cyrv\cyrr\cyri\or
+ \cyrn\cyro\cyre\cyrm\cyrv\cyrr\cyri\or
+ \cyrd\cyre\cyrk\cyre\cyrm\cyrv\cyrr\cyri
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\providecommand{\shortmonthnamebulgarian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+ \or\cyrya\cyrn\cyru\cyra\cyrr\cyri\or
+ \cyrf\cyre\cyrv\cyrr\cyru\cyra\cyrr\cyri\or
+ \cyrm\cyra\cyrr\cyrt\or
+ \cyra\cyrp\cyrr\cyri\cyrl\or
+ \cyrm\cyra\cyrishrt\or
+ \cyryu\cyrn\cyri\or
+ \cyryu\cyrl\cyri\or
+ \cyra\cyrv\cyrg\cyru\cyrs\cyrt\or
+ \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrv\cyrr\cyri\or
+ \cyro\cyrk\cyrt\cyro\cyrm\cyrv\cyrr\cyri\or
+ \cyrn\cyro\cyre\cyrm\cyrv\cyrr\cyri\or
+ \cyrd\cyre\cyrk\cyre\cyrm\cyrv\cyrr\cyri
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datebulgarian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnamebulgarian[\@month]\ \number\@year~\cyrg.}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-bulgarian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-catalan.def>
+% \end{macrocode}
+%Catalan
+% \begin{macrocode}
+\ProvidesFile{dt-catalan.def}[2004/10/31]
+
+\providecommand{\monthnamecatalan}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (de gener) to 12 (de desembre)}%
+\or de gener%
+\or de febrer%
+\or de mar\c{c}%
+\or d'abril%
+\or de maig%
+\or de juny%
+\or de juliol%
+\or d'agost%
+\or de setembre%
+\or d'octubre%
+\or de novembre%
+\or de desembre%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (de gener) to 12 (de desembre)}%
+\fi}
+
+\providecommand{\shortmonthnamecatalan}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (de gener) to 12 (de desembre)}%
+\or de gener%
+\or de febrer%
+\or de mar\c{c}%
+\or d'abril%
+\or de maig%
+\or de juny%
+\or de juliol%
+\or d'agost%
+\or de setembre%
+\or d'octubre%
+\or de novembre%
+\or de desembre%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (de gener) to 12 (de desembre)}%
+\fi}
+
+\DeclareRobustCommand*\datecatalan{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnamecatalan[\@month]\ de~\number\@year
+}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-catalan.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-croatian.def>
+% \end{macrocode}
+%Croatian
+% \begin{macrocode}
+\ProvidesFile{dt-croatian.def}[2004/10/31]
+
+\providecommand{\monthnamecroatian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (sijecnja) to 12 (prosinca)}%
+\or sije\v{c}nja%
+\or velja\v{c}e%
+\or o\v{z}ujka%
+\or travnja%
+\or svibnja%
+\or lipnja%
+\or srpnja%
+\or kolovoza%
+\or rujna%
+\or listopada%
+\or studenog%
+\or prosinca%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (sijecnja) to 12 (prosinca)}%
+\fi}
+
+\providecommand{\shortmonthnamecroatian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (sijecnja) to 12 (prosinca)}%
+\or sije\v{c}nja%
+\or velja\v{c}e%
+\or o\v{z}ujka%
+\or travnja%
+\or svibnja%
+\or lipnja%
+\or srpnja%
+\or kolovoza%
+\or rujna%
+\or listopada%
+\or studenog%
+\or prosinca%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (sijecnja) to 12 (prosinca)}%
+\fi}
+
+\DeclareRobustCommand*\datecroatian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamecroatian[\@month]\space \number\@year.}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-croatian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-czech.def>
+% \end{macrocode}
+%Czech
+% \begin{macrocode}
+\ProvidesFile{dt-czech.def}[2004/10/31]
+
+\providecommand{\monthnameczech}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or ledna%
+\or \'unora%
+\or b\v{r}ezna%
+\or dubna%
+\or kv\v{e}tna%
+\or \v{c}ervna%
+\or \v{c}ervence%
+\or srpna%
+\or z\'a\v{r}\'{\i}%
+\or \v{r}\'{\i}jna%
+\or listopadu%
+\or prosince%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\providecommand{\shortmonthnameczech}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or ledna%
+\or \'unora%
+\or b\v{r}ezna%
+\or dubna%
+\or kv\v{e}tna%
+\or \v{c}ervna%
+\or \v{c}ervence%
+\or srpna%
+\or z\'a\v{r}\'{\i}%
+\or \v{r}\'{\i}jna%
+\or listopadu%
+\or prosince%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateczech{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameczech[\@month]\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-czech.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-danish.def>
+% \end{macrocode}
+%Danish
+% \begin{macrocode}
+\ProvidesFile{dt-danish.def}[2004/10/31]
+
+\providecommand{\monthnamedanish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or januar%
+\or februar%
+\or marts%
+\or april%
+\or maj%
+\or juni%
+\or juli%
+\or august%
+\or september%
+\or oktober%
+\or november%
+\or december%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datedanish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamedanish[\@month]\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-danish.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-dutch.def>
+% \end{macrocode}
+%Dutch
+% \begin{macrocode}
+\ProvidesFile{dt-dutch.def}[2004/10/31]
+
+\providecommand{\monthnamedutch}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or januari%
+\or februari%
+\or maart%
+\or april%
+\or mei%
+\or juni%
+\or juli%
+\or augustus%
+\or september%
+\or oktober%
+\or november%
+\or december%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datedutch{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnamedutch[\@month]\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-dutch.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-esperanto.def>
+% \end{macrocode}
+%Esperanto
+% \begin{macrocode}
+\ProvidesFile{dt-esperanto.def}[2004/10/31]
+
+\providecommand{\monthnameesperanto}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or januaro%
+\or februaro%
+\or marto%
+\or aprilo%
+\or majo%
+\or junio%
+\or julio%
+\or a\u{u}gusto%
+\or septembro%
+\or oktobro%
+\or novembro%
+\or decembro%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateesperanto{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day{--a}~de~\monthnameesperanto[\@month],\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-esperanto.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-estonian.def>
+% \end{macrocode}
+%Estonian
+% \begin{macrocode}
+\ProvidesFile{dt-estonian.def}[2004/10/31]
+
+\providecommand{\monthnameestonian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or jaanuar%
+\or veebruar%
+\or m"arts%
+\or aprill%
+\or mai%
+\or juuni%
+\or juuli%
+\or august%
+\or september%
+\or oktoober%
+\or november%
+\or detsember%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateestonian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.\space\monthnameestonian[\@month]\space \number\@year.\space a.}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-estonian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-finnish.def>
+% \end{macrocode}
+%Finnish
+% \begin{macrocode}
+\ProvidesFile{dt-finnish.def}[2004/10/31]
+
+\providecommand{\monthnamefinnish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or tammikuuta%
+\or helmikuuta%
+\or maaliskuuta%
+\or huhtikuuta%
+\or toukokuuta%
+\or kes\"akuuta%
+\or hein\"akuuta%
+\or elokuuta%
+\or syyskuuta%
+\or lokakuuta%
+\or marraskuuta%
+\or joulukuuta%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datefinnish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamefinnish[\@month]\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-finnish.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-french.def>
+% \end{macrocode}
+%French
+% \begin{macrocode}
+\ProvidesFile{dt-french.def}[2004/10/31]
+
+\providecommand{\dayofweeknameidfrench}[1]{%
+\ifcase#1\relax
+\or dimanche%
+\or lundi%
+\or mardi%
+\or mercredi%
+\or jeudi%
+\or vendredi%
+\or samedi%
+\fi}
+
+ % is this correct?
+\providecommand{\shortdayofweeknameidfrench}[1]{%
+\ifcase#1\relax
+\or dim%
+\or lun%
+\or mar%
+\or mer%
+\or jeu%
+\or ven%
+\or sam%
+\fi}
+
+\providecommand{\monthnamefrench}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (janvier) to 12 (decembre)}%
+\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%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (janvier) to 12 (decembre)}%
+\fi}
+
+\DeclareRobustCommand*\datefrench{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\ifnum\@day=1{\ier}\fi\space\monthnamefrench[\@month]\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-french.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-galician.def>
+% \end{macrocode}
+%Galician
+% \begin{macrocode}
+\ProvidesFile{dt-galician.def}[2004/10/31]
+
+\providecommand{\monthnamegalician}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or xaneiro%
+\or febreiro%
+\or marzo%
+\or abril%
+\or maio%
+\or xu\~no%
+\or xullo%
+\or agosto%
+\or setembro%
+\or outubro%
+\or novembro%
+\or decembro%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dategalician{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~de\space\monthnamegalician[\@month]\space de~\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-galician.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-german.def>
+% \end{macrocode}
+%German
+% \begin{macrocode}
+\ProvidesFile{dt-german.def}[2004/10/31]
+
+\providecommand{\monthnamegerman}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\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%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (janvier) to 12 (decembre)}%
+\fi}
+
+\DeclareRobustCommand*\dategerman{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamegerman[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-german.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-greek.def>
+% \end{macrocode}
+%Greek
+% \begin{macrocode}
+\ProvidesFile{dt-greek.def}[2004/10/31]
+
+\providecommand{\monthnamegreek}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or Ianouar'iou%
+\or Febrouar'iou%
+\or Mart'iou%
+\or April'iou%
+\or Ma'"iou%
+\or Ioun'iou%
+\or Ioul'iou%
+\or Augo'ustou%
+\or Septembr'iou%
+\or Oktwbr'iou%
+\or Noembr'iou%
+\or Dekembr'iou%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dategreek{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\space\monthnamegreek[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-greek.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-hebrew.def>
+% \end{macrocode}
+%Hebrew
+% \begin{macrocode}
+\ProvidesFile{dt-hebrew.def}[2004/10/31]
+
+\DeclareRobustCommand*\datehebrew{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\hebdate\@day\@month\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-hebrew.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-icelandic.def>
+% \end{macrocode}
+%Icelandic
+% \begin{macrocode}
+\ProvidesFile{dt-icelandic.def}[2004/10/31]
+
+\providecommand{\monthnameicelandic}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or janúar%
+\or febrúar%
+\or mars%
+\or apríl%
+\or maí%
+\or júní%
+\or júlí%
+\or ágúst%
+\or september%
+\or október%
+\or nóvember%
+\or desembe%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateicelandic{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameicelandic[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-icelandic.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-irish.def>
+% \end{macrocode}
+%Irish
+% \begin{macrocode}
+\ProvidesFile{dt-irish.def}[2004/10/31]
+
+\providecommand{\monthnameirish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or Ean\'air%
+\or Feabhra%
+\or M\'arta%
+\or Aibre\'an%
+\or Bealtaine%
+\or Meitheamh%
+\or I\'uil%
+\or L\'unasa%
+\or Me\'an F\'omhair%
+\or Deireadh F\'omhair%
+\or M\'{\i} na Samhna%
+\or M\'{\i} na Nollag%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateirish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\space\monthnameirish[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-irish.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-italian.def>
+% \end{macrocode}
+%Italian
+% \begin{macrocode}
+\ProvidesFile{dt-italian.def}[2004/10/31]
+
+\providecommand{\monthnameitalian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or gennaio%
+\or febbraio%
+\or marzo%
+\or aprile%
+\or maggio%
+\or giugno%
+\or luglio%
+\or agosto%
+\or settembre%
+\or ottobre%
+\or novembre%
+\or dicembre%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateitalian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\space\monthnameitalian[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-italian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-latin.def>
+% \end{macrocode}
+%Latin
+% \begin{macrocode}
+\ProvidesFile{dt-latin.def}[2004/10/31]
+
+\providecommand{\monthnamelatin}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or Ianuarii%
+\or Februarii%
+\or Martii%
+\or Aprilis%
+\or Maii%
+\or Iunii%
+\or Iulii%
+\or Augusti%
+\or Septembris%
+\or Octobris%
+\or Novembris%
+\or Decembris%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datelatin{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont
+ \uppercase\expandafter{\romannumeral\@day}~\monthnamelatin[\@month]\space{\uppercase\expandafter{\romannumeral\@year}}}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-latin.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-lsorbian.def>
+% \end{macrocode}
+%LSorbian
+% \begin{macrocode}
+\ProvidesFile{dt-lsorbian.def}[2004/10/31]
+
+\providecommand{\monthnamenewlsorbian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or januara%
+\or februara%
+\or m\v erca%
+\or apryla%
+\or maja%
+\or junija%
+\or julija%
+\or awgusta%
+\or septembra%
+\or oktobra%
+\or nowembra%
+\or decembra%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\providecommand{\monthnameoldlsorbian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or wjelikego ro\v zka%
+\or ma\l ego ro\v zka%
+\or nal\v etnika%
+\or jat\v sownika%
+\or ro\v zownika%
+\or sma\v znika%
+\or pra\v znika%
+\or \v znje\'nca%
+\or po\v znje\'nca%
+\or winowca%
+\or nazymnika%
+\or godownika%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\let\monthnamelsorbian=\monthnamenewlsorbian
+
+\DeclareRobustCommand*\newdatelsorbian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamenewlsorbian[\@month]\space\number\@year}}
+
+\DeclareRobustCommand*\olddatelsorbian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameoldlsorbian[\@month]\space\number\@year}}
+
+\let\datelsorbian\newdatelsorbian
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-lsorbian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-magyar.def>
+% \end{macrocode}
+%Magyar
+% \begin{macrocode}
+\ProvidesFile{dt-magyar.def}[2004/10/31]
+
+\providecommand{\monthnamemagyar}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or janu\'ar%
+\or febru\'ar%
+\or m\'arcius%
+\or \'aprilis%
+\or m\'ajus%
+\or j\'unius%
+\or j\'ulius%
+\or augusztus%
+\or szeptember%
+\or okt\'ober%
+\or november%
+\or december%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datemagyar{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@year.~\monthnamemagyar[\@month]\space\number\@day.}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-magyar.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-naustrian.def>
+% \end{macrocode}
+%NAustrian
+% \begin{macrocode}
+\ProvidesFile{dt-naustrian.def}[2004/10/31]
+
+\providecommand{\monthnamenaustrian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or J\"anner%
+\or Februar%
+\or M\"arz%
+\or April%
+\or Mai%
+\or Juni%
+\or Juli%
+\or August%
+\or September%
+\or Oktober%
+\or November%
+\or Dezember%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datenaustrian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamenaustrian[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-naustrian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-ngerman.def>
+% \end{macrocode}
+%NGerman
+% \begin{macrocode}
+\ProvidesFile{dt-ngerman.def}[2004/10/31]
+
+\providecommand{\monthnamengerman}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\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%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datengerman{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamengerman[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-ngerman.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-norsk.def>
+% \end{macrocode}
+%Norsk
+% \begin{macrocode}
+\ProvidesFile{dt-norsk.def}[2004/10/31]
+
+\providecommand{\monthnamenorsk}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or januar%
+\or februar%
+\or mars%
+\or april%
+\or mai%
+\or juni%
+\or juli%
+\or august%
+\or september%
+\or oktober%
+\or november%
+\or desember%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datenorsk{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamenorsk[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-norsk.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-polish.def>
+% \end{macrocode}
+%Polish
+% \begin{macrocode}
+\ProvidesFile{dt-polish.def}[2004/10/31]
+
+\providecommand{\monthnamepolish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or stycznia%
+\or lutego%
+\or marca%
+\or kwietnia%
+\or maja%
+\or czerwca%
+\or lipca%
+\or sierpnia%
+\or wrze\'snia%
+\or pa\'zdziernika%
+\or listopada%
+\or grudnia%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datepolish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnamepolish[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-polish.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-portuges.def>
+% \end{macrocode}
+%Portuges
+% \begin{macrocode}
+\ProvidesFile{dt-portuges.def}[2004/10/31]
+
+\providecommand{\dayofweeknameidportuges}[1]{%
+\ifcase#1\relax
+\or domingo%
+\or segunda-feira%
+\or ter\c{c}a-feira%
+\or quarta-feira%
+\or quinta-feira%
+\or sexta-feira%
+\or sabado%
+\fi}
+
+\providecommand{\monthnameportuges}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or Janeiro%
+\or Fevereiro%
+\or Mar\c{c}o%
+\or Abril%
+\or Maio%
+\or Junho%
+\or Julho%
+\or Agosto%
+\or Setembro%
+\or Outubro%
+\or Novembro%
+\or Dezembro%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateportuges{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\space de\space\monthnameportuges[\@month]\space de\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-portuges.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-romanian.def>
+% \end{macrocode}
+%Romanian
+% \begin{macrocode}
+\ProvidesFile{dt-romanian.def}[2004/10/31]
+
+\providecommand{\monthnameromanian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or ianuarie%
+\or februarie%
+\or martie%
+\or aprilie%
+\or mai%
+\or iunie%
+\or iulie%
+\or august%
+\or septembrie%
+\or octombrie%
+\or noiembrie%
+\or decembrie%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateromanian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnameromanian[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-romanian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-russian.def>
+% \end{macrocode}
+%Russian
+% \begin{macrocode}
+\ProvidesFile{dt-russian.def}[2004/10/31]
+
+\providecommand{\monthnamerussian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or \cyrya\cyrn\cyrv\cyra\cyrr\cyrya\or
+ \cyrf\cyre\cyrv\cyrr\cyra\cyrl\cyrya\or
+ \cyrm\cyra\cyrr\cyrt\cyra\or
+ \cyra\cyrp\cyrr\cyre\cyrl\cyrya\or
+ \cyrm\cyra\cyrya\or
+ \cyri\cyryu\cyrn\cyrya\or
+ \cyri\cyryu\cyrl\cyrya\or
+ \cyra\cyrv\cyrg\cyru\cyrs\cyrt\cyra\or
+ \cyrs\cyre\cyrn\cyrt\cyrya\cyrb\cyrr\cyrya\or
+ \cyro\cyrk\cyrt\cyrya\cyrb\cyrr\cyrya\or
+ \cyrn\cyro\cyrya\cyrb\cyrr\cyrya\or
+ \cyrd\cyre\cyrk\cyra\cyrb\cyrr\cyrya%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\daterussian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnamerussian[\@month]\ \number\@year~\cyrg.}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-russian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-samin.def>
+% \end{macrocode}
+%Samin
+% \begin{macrocode}
+\ProvidesFile{dt-samin.def}[2004/10/31]
+
+\providecommand{\monthnamesamin}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or o\dj{}\dj{}ajagem\'anu\or
+ guovvam\'anu\or
+ njuk\v cam\'anu\or
+ cuo\ng{}om\'anu\or
+ miessem\'anu\or
+ geassem\'anu\or
+ suoidnem\'anu\or
+ borgem\'anu\or
+ \v cak\v cam\'anu\or
+ golggotm\'anu\or
+ sk\'abmam\'anu\or
+ juovlam\'anu%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datesamin{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\monthnamesamin[\@month]\space\number\@day.~b.\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-samin.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-scottish.def>
+% \end{macrocode}
+%Scottish
+% \begin{macrocode}
+\ProvidesFile{dt-scottish.def}[2004/10/31]
+
+\providecommand{\monthnamescottish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or am Faoilteach%
+\or an Gearran%
+\or am M\`art%
+\or an Giblean%
+\or an C\`eitean%
+\or an t-\`Og mhios%
+\or an t-Iuchar%
+\or L\`unasdal%
+\or an Sultuine%
+\or an D\`amhar%
+\or an t-Samhainn%
+\or an Dubhlachd%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datescottish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\space\monthnamescottish[\@month]\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-scottish.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-serbian.def>
+% \end{macrocode}
+%Serbian
+% \begin{macrocode}
+\ProvidesFile{dt-serbian.def}[2004/10/31]
+
+\providecommand{\monthnameserbian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or januar%
+\or februar%
+\or mart%
+\or april%
+\or maj%
+\or juni%
+\or juli%
+\or avgust%
+\or septembar%
+\or oktobar%
+\or novembar%
+\or decembar%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateserbian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameserbian[\@month]\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-serbian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-slovak.def>
+% \end{macrocode}
+%Slovak
+% \begin{macrocode}
+\ProvidesFile{dt-slovak.def}[2004/10/31]
+
+\providecommand{\monthnameslovak}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or janu\'ara%
+\or febru\'ara%
+\or marca%
+\or apr\'{\i}la%
+\or m\'aja%
+\or j\'una%
+\or j\'ula%
+\or augusta%
+\or septembra%
+\or okt\'obra%
+\or novembra%
+\or decembra%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateslovak{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameslovak[\@month]\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-slovak.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-slovene.def>
+% \end{macrocode}
+%Slovene
+% \begin{macrocode}
+\ProvidesFile{dt-slovene.def}[2004/10/31]
+
+\providecommand{\monthnameslovene}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or januar%
+\or februar%
+\or marec%
+\or april%
+\or maj%
+\or junij%
+\or julij%
+\or avgust%
+\or september%
+\or oktober%
+\or november%
+\or december%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateslovene{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameslovene[\@month]\space \number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-slovene.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-spanish.def>
+% \end{macrocode}
+%Spanish
+% \begin{macrocode}
+\ProvidesFile{dt-spanish.def}[2004/10/31]
+
+\providecommand{\dayofweeknameidspanish}[1]{%
+\ifcase#1\relax
+\or domingo%
+\or lunes%
+\or martes%
+\or mi\'ercoles%
+\or jueves%
+\or viernes%
+\or s\'abado%
+\fi}
+
+ % is this correct?
+\providecommand{\shortdayofweeknameidspanish}[1]{%
+\ifcase#1\relax
+\or dom%
+\or lun%
+\or mar%
+\or mi\'e%
+\or jue%
+\or vie%
+\or s\'ab%
+\fi}
+
+\providecommand{\monthnamespanish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or enero%
+\or febrero%
+\or marzo%
+\or abril%
+\or mayo%
+\or junio%
+\or julio%
+\or agosto%
+\or septiembre%
+\or octubre%
+\or noviembre%
+\or diciembre%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datespanish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~de \monthnamespanish[\@month]\ de~\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-spanish.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-swedish.def>
+% \end{macrocode}
+%Swedish
+% \begin{macrocode}
+\ProvidesFile{dt-swedish.def}[2004/10/31]
+
+\providecommand{\monthnameswedish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or januari%
+\or februari%
+\or mars%
+\or april%
+\or maj%
+\or juni%
+\or juli%
+\or augusti%
+\or september%
+\or oktober%
+\or november%
+\or december%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateswedish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnameswedish[\@month]\space\number\@year}}
+
+\DeclareRobustCommand*\datesymd{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@year-\two@digits\@month-\two@digits\@day}
+}
+
+\DeclareRobustCommand*\datesdmy{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day/\number\@month\space\number\@year}
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-swedish.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-turkish.def>
+% \end{macrocode}
+%Turkish
+% \begin{macrocode}
+\ProvidesFile{dt-turkish.def}[2004/10/31]
+
+\providecommand{\monthnameturkish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or Ocak%
+\or \c Subat%
+\or Mart%
+\or Nisan%
+\or May\i{}s%
+\or Haziran%
+\or Temmuz%
+\or A\u gustos%
+\or Eyl\"ul%
+\or Ekim%
+\or Kas\i{}m%
+\or Aral\i{}k%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateturkish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnameturkish[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-turkish.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-ukraineb.def>
+% \end{macrocode}
+%Ukraine
+% \begin{macrocode}
+\ProvidesFile{dt-ukraineb.def}[2004/10/31]
+
+\providecommand{\monthnameukraineb}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or \cyrs\cyrii\cyrch\cyrn\cyrya\or
+ \cyrl\cyryu\cyrt\cyro\cyrg\cyro\or
+ \cyrb\cyre\cyrr\cyre\cyrz\cyrn\cyrya\or
+ \cyrk\cyrv\cyrii\cyrt\cyrn\cyrya\or
+ \cyrt\cyrr\cyra\cyrv\cyrn\cyrya\or
+ \cyrch\cyre\cyrr\cyrv\cyrn\cyrya\or
+ \cyrl\cyri\cyrp\cyrn\cyrya\or
+ \cyrs\cyre\cyrr\cyrp\cyrn\cyrya\or
+ \cyrv\cyre\cyrr\cyre\cyrs\cyrn\cyrya\or
+ \cyrzh\cyro\cyrv\cyrt\cyrn\cyrya\or
+ \cyrl\cyri\cyrs\cyrt\cyro\cyrp\cyra\cyrd\cyra\or
+ \cyrg\cyrr\cyru\cyrd\cyrn\cyrya%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\dateukraineb{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnameukraineb[\@month]\space\number\@year~\cyrr.}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-ukraineb.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-usorbian.def>
+% \end{macrocode}
+%USorbian
+% \begin{macrocode}
+\ProvidesFile{dt-usorbian.def}[2004/10/31]
+
+\providecommand{\monthnamenewusorbian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or januara%
+\or februara%
+\or m\v erca%
+\or apryla%
+\or meje%
+\or junija%
+\or julija%
+\or awgusta%
+\or septembra%
+\or oktobra%
+\or nowembra%
+\or decembra%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\providecommand{\monthnameoldusorbian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or wulkeho r\'o\v zka%
+\or ma\l eho r\'o\v zka%
+\or nal\v etnika%
+\or jutrownika%
+\or r\'o\v zownika%
+\or sma\v znika%
+\or pra\v znika%
+\or \v znjenca%
+\or po\v znjenca%
+\or winowca%
+\or nazymnika%
+\or hodownika%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\let\monthnameusorbian=\monthnamenewusorbian
+
+\DeclareRobustCommand*\newdateusorbian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamenewusorbian[\@month]\space\number\@year}}
+
+\DeclareRobustCommand*\olddateusorbian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameoldusorbian[\@month]\space\number\@year}}
+
+\let\dateusorbian\newdateusorbian
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-usorbian.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-welsh.def>
+% \end{macrocode}
+%Welsh
+% \begin{macrocode}
+\ProvidesFile{dt-welsh.def}[2004/10/31]
+
+\providecommand{\monthnamewelsh}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\or Ionawr%
+\or Chwefror%
+\or Mawrth%
+\or Ebrill%
+\or Mai%
+\or Mehefin%
+\or Gorffennaf%
+\or Awst%
+\or Medi%
+\or Hydref%
+\or Tachwedd%
+\or Rhagfyr%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}
+
+\DeclareRobustCommand*\datewelsh{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\ifnum\@day=1\relax 1\/$^{\mathrm{a\tilde{n}}}$\else
+\number\@day\fi \space a\space viz\space\monthnamewelsh[\@month]\space\number\@year}}
+% \end{macrocode}
+% \begin{macrocode}
+%</dt-welsh.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*datetime.sty>
+% \end{macrocode}
+%\subsection{datetime.sty}
+% This section deals with the code for \texttt{datetime.sty}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datetime}[2005/09/30 v2.46 Date Time Package]
+% \end{macrocode}
+%\texttt{fmtcount.sty} needs to be loaded here as it defines the command |\fmtord| which may be redefined later:
+% \begin{macrocode}
+\RequirePackage{fmtcount}
+% \end{macrocode}
+% Define a new conditional |\if@dt@nodate|. If it is true,
+% |\today| will not be redefined, nor will
+% |\monthname|, |\shortmonthname|, |\dayofweek| and |\shortdayofweek| be defined.
+% Set it to false.
+% \begin{macrocode}
+\newif\if@dt@nodate
+\@dt@nodatefalse
+% \end{macrocode}
+% Define the character used to separate the numbers in the formats defined by
+% |\ddmmyyyy| etc
+% \begin{macrocode}
+\newcommand{\dateseparator}{/}
+% \end{macrocode}
+% Define |\ordinaldate|. This is needed because some
+% languages only use an ordinal for the first day of
+% the month (such as french). This isn't really needed
+% here, but the LaTeX2HTML style file needs this command.
+% \begin{macrocode}
+\newcommand{\ordinaldateenglish}[1]{\ordinalnum{#1}}
+\let\ordinaldatenohyphenation=\ordinaldateenglish
+
+\newcommand{\ordinaldatewelsh}[1]{%
+#1\ifnum#1=1\/\textsuperscript{a\~n}\fi}
+
+\newcommand{\ordinaldatebreton}[1]{%
+#1\ifnum#1=1\/\textsuperscript{a\~n}\fi}
+
+\newcommand{\ordinaldatefrench}[1]{%
+#1\ifnum#1=1\ier\fi}
+
+\newcommand{\ordinaldate}[1]{%
+\@ifundefined{languagename}{\ordinalnum{#1}}{%
+\@ifundefined{ordinaldate\languagename}{#1}{%
+\csname ordinaldate\languagename\endcsname{#1}}}}
+% \end{macrocode}
+% Now define the declarations that redefine |\formatdate| as they
+% are used by the package options.
+% \begin{macrocode}
+\newif\ifshowdow % show the day of week if true
+
+\providecommand{\formatdate}[3]{}
+
+\newcount\@day
+\newcount\@month
+\newcount\@year
+
+\DeclareRobustCommand*{\longdate}{%
+\renewcommand{\formatdate}[3]{\ifshowdow\dayofweekname{##1}{##2}{##3} \fi
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\ordinaldate{\the\@day}\ \monthname[\@month], \the\@year}}
+
+\DeclareRobustCommand*{\shortdate}{%
+\renewcommand{\formatdate}[3]{\ifshowdow\shortdayofweekname{##1}{##2}{##3} \fi
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\ordinaldate{\the\@day}\ \shortmonthname[\@month], \the\@year}}
+
+\providecommand*{\twodigit}[1]{{\@dtctr=#1\relax\ifnum\@dtctr<10 0\fi\the\@dtctr}}
+
+\DeclareRobustCommand*{\ddmmyyyydate}{%
+\renewcommand{\formatdate}[3]{\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\twodigit\@day\dateseparator \twodigit\@month\dateseparator \the\@year}}
+
+\DeclareRobustCommand*{\dmyyyydate}{%
+\renewcommand{\formatdate}[3]{\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\the\@day\dateseparator \the\@month\dateseparator \the\@year}}
+
+\DeclareRobustCommand*{\ddmmyydate}{\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\@dtctr=\@year%
+\@modulo{\@dtctr}{100}%
+\twodigit\@day\dateseparator \twodigit\@month\dateseparator \twodigit\@dtctr}}
+
+\DeclareRobustCommand*{\dmyydate}{\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\@dtctr=\@year%
+\@modulo{\@dtctr}{100}%
+\the\@day\dateseparator \the\@month\dateseparator \twodigit\@dtctr}}
+
+\DeclareRobustCommand*{\textdate}{%
+\renewcommand{\formatdate}[3]{\ifshowdow\dayofweekname{##1}{##2}{##3} the \fi
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\@Ordinalstring\@day\ of \monthname[\@month], \@Numberstring\@year}}
+
+\DeclareRobustCommand*{\usdate}{%
+\renewcommand{\formatdate}[3]{\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\monthname[\@month]\ \the\@day, \the\@year}}
+
+\DeclareRobustCommand*{\mmddyyyydate}{%
+\renewcommand{\formatdate}[3]{\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\twodigit\@month\dateseparator \twodigit\@day\dateseparator \the\@year}}
+
+\DeclareRobustCommand*{\mdyyyydate}{%
+\renewcommand{\formatdate}[3]{\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\the\@month\dateseparator \the\@day\dateseparator \the\@year}}
+
+\DeclareRobustCommand*{\mmddyydate}{\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\@dtctr=\@year%
+\@modulo{\@dtctr}{100}%
+\twodigit\@month\dateseparator \twodigit\@day\dateseparator \twodigit\@dtctr}}
+
+\DeclareRobustCommand*{\mdyydate}{\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\@dtctr=\@year%
+\@modulo{\@dtctr}{100}%
+\the\@month\dateseparator \the\@day\dateseparator \twodigit\@dtctr}}
+% \end{macrocode}
+% (New to v.2.45) Define commands to save dates
+% and later format them.
+% \begin{macrocode}
+\newcommand{\newdate}[4]{%
+\@ifundefined{date@#1@y}{%
+\@namedef{date@#1@d}{#2}%
+\@namedef{date@#1@m}{#3}%
+\@namedef{date@#1@y}{#4}}{%
+\PackageError{datetime}{Date `#1' already defined}{}}}
+
+\newcommand{\getdateyear}[1]{%
+\@ifundefined{date@#1@y}{%
+\PackageError{datetime}{Date `#1' not defined}{}}{%
+\csname date@#1@y\endcsname}}
+
+\newcommand{\getdatemonth}[1]{%
+\@ifundefined{date@#1@m}{%
+\PackageError{datetime}{Date `#1' not defined}{}}{%
+\csname date@#1@m\endcsname}}
+
+\newcommand{\getdateday}[1]{%
+\@ifundefined{date@#1@d}{%
+\PackageError{datetime}{Date `#1' not defined}{}}{%
+\csname date@#1@d\endcsname}}
+
+\newcommand{\displaydate}[1]{%
+\@ifundefined{date@#1@y}{%
+\PackageError{datetime}{Date `#1' not defined}{}}{%
+\formatdate{\csname date@#1@d\endcsname}{%
+\csname date@#1@m\endcsname}{%
+\csname date@#1@y\endcsname}}}
+% \end{macrocode}
+% (New to v2.3) Define |\currenttime| which will print the
+% time according to the current format. Set it to 24hr time by default
+% \begin{macrocode}
+\DeclareRobustCommand*{\currenttime}{\xxivtime}
+
+\newcommand{\timeseparator}{:}
+
+\providecommand{\settimeformat}[1]{\DeclareRobustCommand*\currenttime{\csname#1\endcsname}}
+% \end{macrocode}
+% Set defaults:
+% \begin{macrocode}
+\longdate
+\showdowtrue
+% \end{macrocode}
+% Load in specifications from configuration file:
+% \begin{macrocode}
+\InputIfFileExists{datetime.cfg}{\typeout{Loading local datetime configurations}}{\typeout{No datetime.cfg file found}}
+% \end{macrocode}
+% Specify the package options, specify default options and process
+% \begin{macrocode}
+\RequirePackage{fmtcount}
+\DeclareOption{long}{\longdate}
+\DeclareOption{short}{\shortdate}
+\DeclareOption{ddmmyyyy}{\ddmmyyyydate}
+\DeclareOption{dmyyyy}{\dmyyyydate}
+\DeclareOption{ddmmyy}{\ddmmyydate}
+\DeclareOption{dmyy}{\dmyydate}
+\DeclareOption{text}{\textdate}
+\DeclareOption{us}{\usdate}
+\DeclareOption{mmddyyyy}{\mmddyyyydate}
+\DeclareOption{mdyyyy}{\mdyyyydate}
+\DeclareOption{mmddyy}{\mmddyydate}
+\DeclareOption{mdyy}{\mdyydate}
+\DeclareOption{level}{\fmtcountsetoptions{fmtord=level}}
+\DeclareOption{raise}{\fmtcountsetoptions{fmtord=raise}}
+\DeclareOption{dayofweek}{\showdowtrue}
+\DeclareOption{nodayofweek}{\showdowfalse}
+\DeclareOption{nodate}{\@dt@nodatetrue}
+\DeclareOption{24hr}{\settimeformat{xxivtime}}
+\DeclareOption{12hr}{\settimeformat{ampmtime}}
+\DeclareOption{oclock}{\settimeformat{oclock}}
+
+% babel stuff
+
+\DeclareOption{austrian}{\input{dt-austrian.def}}
+\DeclareOption{bahasa}{\input{dt-bahasa.def}}
+\DeclareOption{basque}{\input{dt-basque.def}}
+\DeclareOption{breton}{\input{dt-breton.def}}
+\DeclareOption{bulgarian}{\input{dt-bulgarian.def}}
+\DeclareOption{catalan}{\input{dt-catalan.def}}
+\DeclareOption{croatian}{\input{dt-croatian.def}}
+\DeclareOption{czech}{\input{dt-czech.def}}
+\DeclareOption{danish}{\input{dt-danish.def}}
+\DeclareOption{dutch}{\input{dt-dutch.def}}
+\DeclareOption{esperanto}{\input{dt-esperanto.def}}
+\DeclareOption{estonian}{\input{dt-estonian.def}}
+\DeclareOption{finnish}{\input{dt-finnish.def}}
+\DeclareOption{french}{\input{dt-french.def}}
+\DeclareOption{galician}{\input{dt-galician.def}}
+\DeclareOption{german}{\input{dt-german.def}}
+\DeclareOption{greek}{\input{dt-greek.def}}
+\DeclareOption{hebrew}{\input{dt-hebrew.def}}
+\DeclareOption{icelandic}{\input{dt-icelandic.def}}
+\DeclareOption{irish}{\input{dt-irish.def}}
+\DeclareOption{italian}{\input{dt-italian.def}}
+\DeclareOption{latin}{\input{dt-latin.def}}
+\DeclareOption{lsorbian}{\input{dt-lsorbian.def}}
+\DeclareOption{magyar}{\input{dt-magyar.def}}
+\DeclareOption{naustrian}{\input{dt-naustrian.def}}
+\DeclareOption{ngerman}{\input{dt-ngerman.def}}
+\DeclareOption{norsk}{\input{dt-norsk.def}}
+\DeclareOption{polish}{\input{dt-polish.def}}
+\DeclareOption{portuges}{\input{dt-portuges.def}}
+\DeclareOption{romanian}{\input{dt-romanian.def}}
+\DeclareOption{russian}{\input{dt-russian.def}}
+\DeclareOption{samin}{\input{dt-samin.def}}
+\DeclareOption{scottish}{\input{dt-scottish.def}}
+\DeclareOption{serbian}{\input{dt-serbian.def}}
+\DeclareOption{slovak}{\input{dt-slovak.def}}
+\DeclareOption{slovene}{\input{dt-slovene.def}}
+\DeclareOption{spanish}{\input{dt-spanish.def}}
+\DeclareOption{swedish}{\input{dt-swedish.def}}
+\DeclareOption{turkish}{\input{dt-turkish.def}}
+\DeclareOption{ukraineb}{\input{dt-ukraineb.def}}
+\DeclareOption{usorbian}{\input{dt-usorbian.def}}
+\DeclareOption{welsh}{\input{dt-welsh.def}}
+
+\ProcessOptions
+\RequirePackage{ifthen}
+% \end{macrocode}
+% \subsubsection{Date Macros}
+% Define the macro that prints the month name.
+% (Only define this command if @dt@nodate is false)
+% \begin{macrocode}
+\if@dt@nodate
+\typeout{datetime package message : option "nodate" used, so not defining \protect\monthname}
+\else
+\providecommand{\monthnameenglish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (January) to 12 (December)}%
+\or January%
+\or February%
+\or March%
+\or April%
+\or May%
+\or June%
+\or July%
+\or August%
+\or September%
+\or October%
+\or November%
+\or December%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (January) to 12 (December)}%
+\fi}
+
+
+ %\let\monthname=\monthnameenglish
+\newcommand{\monthname}{\@ifundefined{languagename}{%
+\monthnameenglish}{\@ifundefined{monthname\languagename}{%
+\monthnameenglish}{\csname monthname\languagename\endcsname}}}
+\fi
+% \end{macrocode}
+% Define the macro that prints the abbreviated month name
+% (Again, only do this if @dt@nodate is false)
+% \begin{macrocode}
+\if@dt@nodate
+\typeout{datetime package message : option "nodate" used, so not defining \protect\shortmonthname}
+\else
+\providecommand{\shortmonthnameenglish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (jan) to 12 (dec)}%
+\or Jan%
+\or Feb%
+\or Mar%
+\or Apr%
+\or May%
+\or Jun%
+\or Jul%
+\or Aug%
+\or Sept%
+\or Oct%
+\or Nov%
+\or Dec%
+\else%
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (jan) to 12 (dec)}%
+\fi}
+
+ %\let\shortmonthname=\shortmonthnameenglish
+
+\newcommand{\shortmonthname}{\@ifundefined{languagename}{%
+\shortmonthnameenglish}{\@ifundefined{shortmonthname\languagename}{%
+\shortmonthnameenglish}{\csname shortmonthname\languagename\endcsname}}}
+\fi
+% \end{macrocode}
+% Define macros needed to compute the weekday
+% (Again, only do this if @dt@nodate is false)
+% Need to define |\ifleapyear| regardless of @dt@nodate otherwise \LaTeX\ won't
+% match |\ifleapyear| with |\fi|
+% \begin{macrocode}
+\newif\ifleapyear
+
+\newcount\@dtctr
+
+\if@dt@nodate
+\typeout{datetime package message : option "nodate" used, so not defining \protect\dayofweek \space or \protect\shortdayofweek}
+\else
+% Using the algorithm documented at
+% http://userpages.wittenberg.edu/bshelburne/Comp150/DayofWeek.htm
+
+% \testifleapyear{<year>}
+\providecommand{\testifleapyear}[1]{%
+\leapyearfalse
+\@year=#1\relax
+\@dtctr=\@year
+\@modulo{\@dtctr}{400}%
+\ifnum\@dtctr=0\relax
+\leapyeartrue % year mod 400 = 0 => leap year
+\else
+\@dtctr=\@year
+\@modulo{\@dtctr}{100}%
+\ifnum\@dtctr=0\relax
+\leapyearfalse % year mod 100 = 0 && year mod 400 != 0 => not a leap year
+\else
+\@dtctr=\@year
+\@modulo{\@dtctr}{4}%
+\ifnum\@dtctr=0\relax
+\leapyeartrue % year mod 4 = 0 && year mod 100 != 0 => leap year
+\fi
+\fi
+\fi
+}
+
+\newcount\dayofyear
+
+% \computedayofyear{<day>}{<month>}{<year>}
+
+\providecommand{\computedayofyear}[3]{%
+\testifleapyear{#3}%
+\dayofyear=0\relax
+\@day=#1\relax \@month=#2\relax \@year=#3\relax
+\ifcase\@month
+\or
+\or \advance\dayofyear by 31\relax
+\or \advance\dayofyear by 59\relax
+\or \advance\dayofyear by 90\relax
+\or \advance\dayofyear by 120\relax
+\or \advance\dayofyear by 151\relax
+\or \advance\dayofyear by 181\relax
+\or \advance\dayofyear by 212\relax
+\or \advance\dayofyear by 243\relax
+\or \advance\dayofyear by 273\relax
+\or \advance\dayofyear by 304\relax
+\or \advance\dayofyear by 334\relax
+\else
+\PackageError{datetime}{Invalid month number}{The second argument to \protect\computedayofyear
+should lie in the range 1-12}
+\fi
+\ifnum\@month>2\relax
+\ifleapyear\advance\dayofyear by 1\relax\fi
+\fi
+\advance\dayofyear by \@day\relax
+}
+
+\newcount\dayofweek
+
+% \computedayofweek{<day>}{<month>}{<year>}
+
+\providecommand{\computedayofweek}[3]{%
+\computedayofyear{#1}{#2}{#3}%
+\@dtctr=#3\relax
+\advance\@dtctr by -1901\relax
+\@modulo{\@dtctr}{28}%
+\dayofweek=\@dtctr
+\divide\dayofweek by 4\relax
+\advance\dayofweek by \@dtctr
+\advance\dayofweek by 2\relax
+\@modulo{\dayofweek}{7}%
+\advance\dayofweek by \dayofyear
+\advance\dayofweek by -1\relax
+\@modulo{\dayofweek}{7}%
+\advance\dayofweek by 1\relax}
+
+\providecommand{\dayofweeknameidenglish}[1]{%
+\ifcase#1\relax
+\or Sunday%
+\or Monday%
+\or Tuesday%
+\or Wednesday%
+\or Thursday%
+\or Friday%
+\or Saturday%
+\fi}
+
+\providecommand{\dayofweeknameid}[1]{%
+\@ifundefined{languagename}{%
+\dayofweeknameidenglish{#1}}{%
+\@ifundefined{dayofweeknameid\languagename}{%
+\dayofweeknameidenglish{#1}}{%
+\csname dayofweeknameid\languagename\endcsname{#1}}}%
+}
+
+\providecommand{\dayofweekname}[3]{%
+\computedayofweek{#1}{#2}{#3}%
+\dayofweeknameid{\dayofweek}%
+}
+
+\providecommand{\thisdayofweekname}{%
+\dayofweekname{\day}{\month}{\year}}
+
+\providecommand{\shortdayofweeknameidenglish}[1]{%
+\ifcase#1\relax
+\or Sun%
+\or Mon%
+\or Tue%
+\or Wed%
+\or Thu%
+\or Fri%
+\or Sat%
+\fi}
+
+\providecommand{\shortdayofweekname}[3]{%
+\computedayofweek{#1}{#2}{#3}%
+\@ifundefined{languagename}{%
+\shortdayofweeknameidenglish{\dayofweek}}{%
+\@ifundefined{shortdayofweeknameid\languagename}{%
+\shortdayofweeknameidenglish{\dayofweek}}{%
+\csname shortdayofweeknameid\languagename\endcsname\dayofweek}}%
+}
+
+\fi
+
+\providecommand{\thisshortdayofweekname}{\dayofweekname{\day}{\month}{\year}}
+% \end{macrocode}
+% Redefine |\today| so that it uses |\formatdate|.
+% (Only do this if @dt@nodate is false)
+% \begin{macrocode}
+\if@dt@nodate
+\else
+\DeclareRobustCommand*{\today}{\formatdate{\day}{\month}{\year}}
+\fi
+% \end{macrocode}
+%Check to see if babel package has redefined |\today|.
+% \begin{macrocode}
+\if@dt@nodate
+\else
+\@ifundefined{dateenglish}{}{\let\dateenglish\longdate}
+\@ifundefined{dateaustrian}{}{\input{dt-austrian.def}}
+\@ifundefined{datebahasa}{}{\input{dt-bahasa.def}}
+\@ifundefined{datebasque}{}{\input{dt-basque.def}}
+\@ifundefined{datebreton}{}{\input{dt-breton.def}}
+\@ifundefined{datebulgarian}{}{\input{dt-bulgarian.def}}
+\@ifundefined{datecatalan}{}{\input{dt-catalan.def}}
+\@ifundefined{datecroatian}{}{\input{dt-croatian.def}}
+\@ifundefined{dateczech}{}{\input{dt-czech.def}}
+\@ifundefined{datedanish}{}{\input{dt-danish.def}}
+\@ifundefined{datedutch}{}{\input{dt-dutch.def}}
+\@ifundefined{dateesperanto}{}{\input{dt-esperanto.def}}
+\@ifundefined{dateestonian}{}{\input{dt-estonian.def}}
+\@ifundefined{datefinnish}{}{\input{dt-finnish.def}}
+\@ifundefined{datefrench}{}{\input{dt-french.def}}
+\@ifundefined{dategalician}{}{\input{dt-galician.def}}
+\@ifundefined{dategerman}{}{\input{dt-german.def}}
+\@ifundefined{dategreek}{}{\input{dt-greek.def}}
+\@ifundefined{datehebrew}{}{\input{dt-hebrew.def}}
+\@ifundefined{dateicelandic}{}{\input{dt-icelandic.def}}
+\@ifundefined{dateirish}{}{\input{dt-irish.def}}
+\@ifundefined{dateitalian}{}{\input{dt-italian.def}}
+\@ifundefined{datelatin}{}{\input{dt-latin.def}}
+\@ifundefined{datelsorbian}{}{\input{dt-lsorbian.def}}
+\@ifundefined{datemagyar}{}{\input{dt-magyar.def}}
+\@ifundefined{datenaustrian}{}{\input{dt-naustrian.def}}
+\@ifundefined{datengerman}{}{\input{dt-ngerman.def}}
+\@ifundefined{datenorsk}{}{\input{dt-norsk.def}}
+\@ifundefined{datepolish}{}{\input{dt-polish.def}}
+\@ifundefined{dateportuges}{}{\input{dt-portuges.def}}
+\@ifundefined{dateromanian}{}{\input{dt-romanian.def}}
+\@ifundefined{daterussian}{}{\input{dt-russian.def}}
+\@ifundefined{datesamin}{}{\input{dt-samin.def}}
+\@ifundefined{datescottish}{}{\input{dt-scottish.def}}
+\@ifundefined{dateserbian}{}{\input{dt-serbian.def}}
+\@ifundefined{dateslovak}{}{\input{dt-slovak.def}}
+\@ifundefined{dateslovene}{}{\input{dt-slovene.def}}
+\@ifundefined{datespanish}{}{\input{dt-spanish.def}}
+\@ifundefined{dateswedish}{}{\input{dt-swedish.def}}
+\@ifundefined{dateturkish}{}{\input{dt-turkish.def}}
+\@ifundefined{dateukraineb}{}{\input{dt-ukraineb.def}}
+\@ifundefined{dateusorbian}{}{\input{dt-usorbian.def}}
+\@ifundefined{datewelsh}{}{\input{dt-welsh.def}}
+\fi
+% \end{macrocode}
+% Define |\newdateformat| which defines a declaration that redefines |\formatdate| so that
+% it uses |\dateformat|. |\dateformat| takes four arguments, the first defines the format
+% the last three arguments are the three arguments that effectively get passed to |\formatdate|.
+% |\dateformat| sets |\@day|, |\@month| and |\@year|. |\c@DAY|, |\c@MONTH| and |\c@YEAR|
+% are set as synonims for |\@day|, |\@month| and |\@year|, to that the uses can use the counters
+% |DAY|, |MONTH| and |YEAR| as part of the format.
+% \begin{macrocode}
+\if@dt@nodate
+\typeout{datetime package message : option "nodate" used, so not defining \protect\newdateformat}
+\else
+
+\providecommand\THEDAY{\the\@day}
+\providecommand\THEMONTH{\the\@month}
+\providecommand\THEYEAR{\the\@year}
+\let\c@DAY=\@day
+\let\c@MONTH=\@month
+\let\c@YEAR=\@year
+
+\providecommand{\dateformat}[4]{\@day=#2\relax\@month=#3\relax\@year=#4\relax#1}
+
+\providecommand{\newdateformat}[2]{%
+\@ifundefined{#1}{\expandafter\DeclareRobustCommand\csname#1\endcsname{\renewcommand{\formatdate}{\dateformat{#2}}}}{%
+\PackageError{datetime}{Can't create new date format, command \textbackslash#1 already defined}{You will need to
+give you new date format a different name}}}
+\fi
+
+% \end{macrocode}
+% \subsubsection{Time Macros}
+% Define a command to create a new time format, similar to the new date format.
+% \begin{macrocode}
+\newcount\c@HOUR
+\newcount\c@HOURXII
+\newcount\c@MINUTE
+\newcount\c@TOHOUR
+\newcount\c@TOMINUTE
+\def\THEHOUR{\the\c@HOUR}
+\def\THEHOURXII{\the\c@HOURXII}
+\def\THEMINUTE{\the\c@MINUTE}
+\def\THETOHOUR{\the\c@TOHOUR}
+\def\THETOMINUTE{\the\c@TOMINUTE}
+
+\providecommand{\newtimeformat}[2]{%
+\@ifundefined{#1}{%
+\expandafter\def\csname#1\endcsname{%
+\c@HOUR=\time%
+\divide\c@HOUR by 60\relax
+\c@HOURXII=\c@HOUR
+\ifnum\c@HOURXII>12
+\advance\c@HOURXII by -12\relax
+\fi
+\c@MINUTE=\time%
+\@modulo{\c@MINUTE}{60}%
+\c@TOHOUR=\c@HOURXII
+\advance\c@TOHOUR by 1\relax
+\@modulo{\c@TOHOUR}{12}%
+\c@TOMINUTE=\c@MINUTE
+\advance\c@TOMINUTE by -60\relax
+\multiply\c@TOMINUTE by -1\relax
+#2\relax
+}}{%
+\PackageError{datetime}{Command \textbackslash#1 already defined}{%
+You can't create a new time format called "#1" as the command \textbackslash#1 already exists}}}
+% \end{macrocode}
+% Define commands to print the current time.
+% \begin{macrocode}
+\newtimeformat{xxivtime}{\twodigit\THEHOUR\timeseparator\twodigit\THEMINUTE}
+
+\newtimeformat{ampmtime}{\THEHOURXII\timeseparator\twodigit\THEMINUTE\ifthenelse{\value{HOUR}<12}{\amname}{\ifthenelse{\time=720}{ \noon}{\pmname}}}
+
+\newtimeformat{oclock}{\ifthenelse{\time=0 \or \time=720}{%
+% Midnight or Midday
+\ifthenelse{\time=0}{\midnight}{\noon}}{%
+% Neither Midnight nor Midday
+% Do minutes first
+\ifthenelse{\value{MINUTE}=0}{%
+% Don't print any minutes, just do the hour and \oclockstring
+\Numberstring{HOUR} \oclockstring}{%
+\ifthenelse{\value{MINUTE}=15}{%
+\quarterpast\ \Numberstring{HOUR}}{%
+\ifthenelse{\value{MINUTE}=30}{%
+\halfpast\ \Numberstring{HOUR}}{%
+\ifthenelse{\value{MINUTE}=45}{%
+\quarterto\ \Numberstring{TOHOUR}}{%
+\ifthenelse{\value{MINUTE}<30}{%
+\Numberstring{MINUTE}\ \ifthenelse{\value{MINUTE}=1}{minute}{minutes} past \Numberstring{HOURXII}}{%
+\Numberstring{TOMINUTE}\ \ifthenelse{\value{TOMINUTE}=1}{minute}{minutes} to \Numberstring{TOHOUR}}}}}}\
+% Now say whether it is morning or afternoon
+\ifthenelse{\value{HOUR}<12}{%
+% Morning
+\amstring}{%
+% Afternoon
+\pmstring}}}
+
+\providecommand{\amname}{am}
+\providecommand{\pmname}{pm}
+\providecommand{\amorpmname}{\ifthenelse{\value{HOUR}>12}{\pmname}{\amname}}
+\providecommand{\amstring}{in the morning}
+\providecommand{\pmstring}{in the afternoon}
+\providecommand{\amorpmstring}{\ifthenelse{\value{HOUR}>12}{\pmstring}{\amstring}}
+\providecommand{\halfpast}{Half past}
+\providecommand{\quarterpast}{Quarter past}
+\providecommand{\quarterto}{Quarter to}
+\providecommand{\noon}{Noon}
+\providecommand{\midnight}{Midnight}
+\providecommand{\oclockstring}{O'Clock}
+
+% \end{macrocode}
+% Finally create command that will typeset the date in PDF format
+% e.g. 20040501215500
+% \begin{macrocode}
+\newcount\pdftimectr
+\newcount\pdfdatectr
+
+\pdftimectr=0\relax
+\@dtctr=\time%
+\divide\@dtctr by 60\relax
+\multiply\@dtctr by 10000\relax
+\pdftimectr=\@dtctr
+%
+\@dtctr=\time%
+\@modulo{\@dtctr}{60}%
+\multiply\@dtctr by 100\relax
+\advance\pdftimectr by \@dtctr
+%
+\pdfdatectr=\day
+\@dtctr=\month
+\multiply\@dtctr by 100\relax
+\advance\pdfdatectr by \@dtctr
+\@dtctr=\year
+\multiply\@dtctr by 10000\relax
+\advance\pdfdatectr by \@dtctr
+%
+\ifnum\pdftimectr<100000
+\edef\pdfdate{\the\pdfdatectr0\the\pdftimectr}
+\else
+\edef\pdfdate{\the\pdfdatectr\the\pdftimectr}
+\fi
+% \end{macrocode}
+% \begin{macrocode}
+%</datetime.sty>
+% \end{macrocode}
+% \begin{macrocode}
+%<*datetime.perl>
+% \end{macrocode}
+% \begin{macrocode}
+# File : datetime.perl
+# Author : Nicola Talbot
+# Date : 3 Mar 2005
+# Version : 1.01
+# Description : LaTeX2HTML implementation of datetime package.
+
+# set up default values for internal counters.
+
+($global{SECONDS},$global{MINUTE},$global{HOUR},$global{DAY},$global{MONTH},$global{YEAR})=localtime(time);
+$global{YEAR} += 1900;
+$global{MONTH}++;
+
+$global{HOURXII} = ($global{HOUR} == 12 ? 12 : ($global{HOUR})%12);
+$global{TOHOUR} = ($global{HOUR} == 11 ? 12 :($global{HOUR}+1)%12);
+$global{TOMINUTE} = ($global{MINUTE} == 0? 0 : 60 - $global{MINUTE});
+
+package main;
+
+&do_require_package('fmtcount');
+
+sub do_cmd_ordinaldate{
+ &do_cmd_ordinalnum(@_);
+}
+
+# define package options
+
+sub do_datetime_long{
+ &do_cmd_longdate(@_);
+}
+
+sub do_datetime_short{
+ &do_cmd_shortdate(@_);
+}
+
+sub do_datetime_text{
+ &do_cmd_textdate(@_);
+}
+
+sub do_datetime_ddmmyyyy{
+ &do_cmd_ddmmyyyydate(@_);
+}
+
+sub do_datetime_dmyyyy{
+ &do_cmd_dmyyyydate(@_);
+}
+
+sub do_datetime_ddmmyy{
+ &do_cmd_ddmmyydate(@_);
+}
+
+sub do_datetime_dmyy{
+ &do_cmd_dmyyyydate(@_);
+}
+
+sub do_datetime_us{
+ &do_cmd_usdate(@_);
+}
+
+sub do_datetime_mmddyyyy{
+ &do_cmd_mmddyyyydate(@_);
+}
+
+sub do_datetime_mdyyyy{
+ &do_cmd_mdyyyydate(@_);
+}
+
+sub do_datetime_mmddyy{
+ &do_cmd_mmddyydate(@_);
+}
+
+sub do_datetime_mdyy{
+ &do_cmd_mdyyyydate(@_);
+}
+
+sub do_datetime_raise{
+ local($tmp)="";
+
+ $tmp .= 'sub do_cmd_fmtord{';
+ $tmp .= 'local($_) = @_;';
+ $tmp .= 'local($num) = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($num=$2));';
+ $tmp .= 'join("", "<SUP>",$num,"</SUP>",$_);';
+ $tmp .='}';
+
+ eval($tmp);
+}
+
+sub do_datetime_level{
+ local($tmp)="";
+
+ $tmp .= 'sub do_cmd_fmtord{';
+ $tmp .= 'local($_) = @_;';
+ $tmp .= 'local($num) = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($num=$2));';
+ $tmp .= 'join("", $num,$_);';
+ $tmp .='}';
+
+ eval($tmp);
+}
+
+sub do_datetime_dayofweek{
+ &do_cmd_showdowtrue(@_);
+}
+
+sub do_datetime_nodayofweek{
+ &do_cmd_showdowfalse(@_);
+}
+
+sub do_datetime_24hr{
+ $tmp = 'sub do_cmd_currenttime{local($_) = @_; join(\'\', "\\\\xxivtime", $_[0]); }';
+
+ eval($tmp);
+
+ join('', $_[0]);
+}
+
+sub do_datetime_12hr{
+ $tmp = 'sub do_cmd_currenttime{local($_) = @_; join(\'\', "\\\\ampmtime", $_[0]); }';
+
+ eval($tmp);
+
+ join('', $_[0]);
+}
+
+sub do_datetime_oclock{
+ $tmp = 'sub do_cmd_currenttime{local($_) = @_; join(\'\', "\\\\oclock", $_[0]); }';
+
+ eval($tmp);
+
+ join('', $_[0]);
+}
+
+# babel stuff (Month will already be redefined by babel, so only need to change $dateformat)
+
+sub do_datetime_austrian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateaustrian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateaustrian(@_);
+}
+
+if (defined &austrian_today)
+{
+ &do_datetime_austrian(@_);
+}
+
+sub do_datetime_bahasa{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datebahasa{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datebahasa(@_);
+}
+
+if (defined &bahasa_today)
+{
+ &do_datetime_bahasa(@_);
+}
+
+sub do_datetime_basque{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datebasque{';
+ $tmp .= ' $dateformat = "THEYEAR.eko MONTHNAME[THEMONTH] THEDAY";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datebasque(@_);
+}
+
+if (defined &basque_today)
+{
+ &do_datetime_basque(@_);
+}
+
+sub do_datetime_breton{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datebreton{';
+ $tmp .= ' $dateformat = "{ORDINALDATE{DAY}}\\ a viz MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_ordinaldate{';
+ $tmp .= 'local($_) = @_;';
+ $tmp .= 'local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));';
+ $tmp .= 'local($before) = $num;';
+
+ $tmp .= 'if ($num == 1)';
+ $tmp .= '{ $before .= \'a\~n\'; }';
+
+ $tmp .= '$before . $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datebreton(@_);
+}
+
+if (defined &breton_today)
+{
+ &do_datetime_breton(@_);
+}
+
+sub do_datetime_bulgarian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datebulgarian{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR \\cyrg.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datebulgarian(@_);
+}
+
+if (defined &bulgarian_today)
+{
+ &do_datetime_bulgarian(@_);
+}
+
+sub do_datetime_catalan{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datecatalan{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] de THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datecatalan(@_);
+}
+
+if (defined &catalan_today)
+{
+ &do_datetime_catalan(@_);
+}
+
+sub do_datetime_croatian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datecroatian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datecroatian(@_);
+}
+
+if (defined &croatian_today)
+{
+ &do_datetime_croatian(@_);
+}
+
+sub do_datetime_czech{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateczech{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateczech(@_);
+}
+
+if (defined &czech_today)
+{
+ &do_datetime_czech(@_);
+}
+
+sub do_datetime_danish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datedanish{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datedanish(@_);
+}
+
+if (defined &danish_today)
+{
+ &do_datetime_danish(@_);
+}
+
+sub do_datetime_dutch{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datedutch{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datedutch(@_);
+}
+
+if (defined &dutch_today)
+{
+ &do_datetime_dutch(@_);
+}
+
+sub do_datetime_esperanto{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateesperanto{';
+ $tmp .= ' $dateformat = "THEDAY--a de MONTHNAME[THEMONTH], THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateesperanto(@_);
+}
+
+if (defined &esperanto_today)
+{
+ &do_datetime_esperanto(@_);
+}
+
+sub do_datetime_estonian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateestonian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR. a.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateestonian(@_);
+}
+
+if (defined &estonian_today)
+{
+ &do_datetime_estonian(@_);
+}
+
+sub do_datetime_finnish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datefinnish{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datefinnish(@_);
+}
+
+if (defined &finnish_today)
+{
+ &do_datetime_finnish(@_);
+}
+
+sub do_datetime_french{
+ local($tmp) = "";
+
+ eval($tmp);
+ $tmp .= 'sub do_cmd_datefrench{';
+ $tmp .= ' $dateformat = "{ORDINALDATE{DAY}}\\ MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_ordinaldate{';
+ $tmp .= 'local($_) = @_;';
+ $tmp .= 'local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));';
+ $tmp .= 'local($before) = $num;';
+
+ $tmp .= 'if ($num == 1)';
+ $tmp .= '{ $before .= \'\ier\'; }';
+
+ $tmp .= '$before . $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datefrench(@_);
+}
+
+if (defined &french_today)
+{
+ &do_datetime_french(@_);
+}
+
+sub do_datetime_galician{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dategalician{';
+ $tmp .= ' $dateformat = "THEDAY de MONTHNAME[THEMONTH] de THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dategalician(@_);
+}
+
+if (defined &galician_today)
+{
+ &do_datetime_galician(@_);
+}
+
+sub do_datetime_german{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dategerman{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dategerman(@_);
+}
+
+if (defined &german_today)
+{
+ &do_datetime_german(@_);
+}
+
+sub do_datetime_greek{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dategreek{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dategreek(@_);
+}
+
+if (defined &greek_today)
+{
+ &do_datetime_greek(@_);
+}
+
+sub do_datetime_icelandic{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateicelandic{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateicelandic(@_);
+}
+
+if (defined &icelandic_today)
+{
+ &do_datetime_icelandic(@_);
+}
+
+sub do_datetime_irish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateirish{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateirish(@_);
+}
+
+if (defined &irish_today)
+{
+ &do_datetime_irish(@_);
+}
+
+sub do_datetime_italian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateitalian{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateitalian(@_);
+}
+
+if (defined &italian_today)
+{
+ &do_datetime_italian(@_);
+}
+
+sub do_datetime_latin{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datelatin{';
+ $tmp .= ' $dateformat = "ROMANNUMERALU{THEDAY} MONTHNAME[THEMONTH] ROMANNUMERALU{THEYEAR}";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datelatin(@_);
+}
+
+if (defined &latin_today)
+{
+ &do_datetime_latin(@_);
+}
+
+sub do_datetime_lsorbian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datelsorbian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datelsorbian(@_);
+}
+
+if (defined &lsorbian_today)
+{
+ &do_datetime_lsorbian(@_);
+}
+
+sub do_datetime_magyar{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datemagyar{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datemagyar(@_);
+}
+
+if (defined &magyar_today)
+{
+ &do_datetime_magyar(@_);
+}
+
+sub do_datetime_naustrian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datenaustrian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datenaustrian(@_);
+}
+
+if (defined &naustrian_today)
+{
+ &do_datetime_naustrian(@_);
+}
+
+sub do_datetime_ngerman{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datengerman{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datengerman(@_);
+}
+
+if (defined &ngerman_today)
+{
+ &do_datetime_ngerman(@_);
+}
+
+sub do_datetime_norsk{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datenorsk{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datenorsk(@_);
+}
+
+if (defined &norsk_today)
+{
+ &do_datetime_norsk(@_);
+}
+
+sub do_datetime_polish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datenorsk{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datenorsk(@_);
+}
+
+if (defined &polish_today)
+{
+ &do_datetime_polish(@_);
+}
+
+sub do_datetime_portuges{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateportuges{';
+ $tmp .= ' $dateformat = "THEDAY de MONTHNAME[THEMONTH] de THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateportuges(@_);
+}
+
+if (defined &portuges_today)
+{
+ &do_datetime_portuges(@_);
+}
+
+sub do_datetime_romanian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateromanian{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateromanian(@_);
+}
+
+if (defined &romanian_today)
+{
+ &do_datetime_romanian(@_);
+}
+
+sub do_datetime_russian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_daterussian{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR \\\\cyrg.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_daterussian(@_);
+}
+
+if (defined &russian_today)
+{
+ &do_datetime_russian(@_);
+}
+
+sub do_datetime_samin{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datesamin{';
+ $tmp .= ' $dateformat = "MONTHNAME[THEMONTH] THEDAY.~b. THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datesamin(@_);
+}
+
+if (defined &samin_today)
+{
+ &do_datetime_samin(@_);
+}
+
+sub do_datetime_scottish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datescottish{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datescottish(@_);
+}
+
+if (defined &scottish_today)
+{
+ &do_datetime_scottish(@_);
+}
+
+sub do_datetime_serbian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateserbian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateserbian(@_);
+}
+
+if (defined &serbian_today)
+{
+ &do_datetime_serbian(@_);
+}
+
+sub do_datetime_slovak{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateslovak{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateslovak(@_);
+}
+
+if (defined &slovak_today)
+{
+ &do_datetime_slovak(@_);
+}
+
+sub do_datetime_slovene{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateslovene{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateslovene(@_);
+}
+
+if (defined &slovene_today)
+{
+ &do_datetime_slovene(@_);
+}
+
+sub do_datetime_spanish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datespanish{';
+ $tmp .= ' $dateformat = "THEDAY~de MONTHNAME[THEMONTH] de~THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datespanish(@_);
+}
+
+if (defined &spanish_today)
+{
+ &do_datetime_spanish(@_);
+}
+
+sub do_datetime_swedish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateswedish{';
+ $tmp .= ' $dateformat = "THEDAY~MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = "";
+ $tmp .= 'sub do_cmd_datesymd{';
+ $tmp .= ' $dateformat = "THEYEAR-TWODIGIT{THEMONTH}-TWODIGIT{THEDAY}";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = "";
+ $tmp .= 'sub do_cmd_datesdmy{';
+ $tmp .= ' $dateformat = "THEDAY/THEMONTH THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateswedish(@_);
+}
+
+if (defined &swedish_today)
+{
+ &do_datetime_swedish(@_);
+}
+
+sub do_datetime_turkish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateturkish{';
+ $tmp .= ' $dateformat = "THEDAY~MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateturkish(@_);
+}
+
+if (defined &turkish_today)
+{
+ &do_datetime_turkish(@_);
+}
+
+sub do_datetime_ukraineb{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateukraineb{';
+ $tmp .= ' $dateformat = "THEDAY~MONTHNAME[THEMONTH] THEYEAR~\\\\cyrr.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateukraineb(@_);
+}
+
+if (defined &ukraineb_today)
+{
+ &do_datetime_ukraineb(@_);
+}
+
+sub do_datetime_usorbian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateusorbian{';
+ $tmp .= ' $dateformat = "THEDAY.~MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateusorbian(@_);
+}
+
+if (defined &usorbian_today)
+{
+ &do_datetime_usorbian(@_);
+}
+
+sub do_datetime_welsh{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datewelsh{';
+ $tmp .= ' $dateformat = "{ORDINALDATE{DAY}}\\ a viz MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_ordinaldate{';
+ $tmp .= 'local($_) = @_;';
+ $tmp .= 'local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));';
+ $tmp .= 'local($before) = $num;';
+
+ $tmp .= 'if ($num == 1)';
+ $tmp .= '{ $before .= \'a\~n\'; }';
+
+ $tmp .= '$before . $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datewelsh(@_);
+}
+
+if (defined &welsh_today)
+{
+ &do_datetime_welsh(@_);
+}
+
+# As far as I know, LaTeX2HTML doesn't implement TeX conditionals.
+# $showdow corresponds to LaTeX boolean variable showdow
+$showdow = 1;
+
+sub get_monthname{
+ local($month) = @_;
+
+ if ($month eq 'THEMONTH' or $month eq '\THEMONTH')
+ {
+ # this is a cludge to help newdateformat work
+
+ 'MONTHNAME[THEMONTH]';
+ }
+ else
+ {
+ if ($month eq '')
+ {
+ local($today) = &get_date();
+ $today =~ m|(\d+)/0?(\d+)/|;
+ $month = $1;
+ }
+
+ $Month[$month];
+ }
+}
+
+sub do_cmd_monthname{
+ local($_) = @_;
+ local($month,$pat) = &get_next_optional_argument;
+
+ local($monthname) = &get_monthname($month);
+ join('',$monthname,$_);
+}
+
+sub get_shortmonthname{
+ local($month) = @_;
+
+ if ($month eq 'THEMONTH' or $month eq '\THEMONTH')
+ {
+ 'SHORTMONTHNAME[THEMONTH]';
+ }
+ else
+ {
+ substr(&get_monthname($month), 0, 3);
+ }
+}
+
+sub do_cmd_shortmonthname{
+ local($_) = @_;
+ local($month,$pat) = &get_next_optional_argument;
+
+ local($monthname) = &get_shortmonthname($month);
+
+ join('',$monthname,$_);
+}
+
+sub is_leap_year{
+ local($year) = @_;
+ local($isleapyear) = 0;
+
+ if (($year%400) == 0)
+ {
+ # year mod 400 = 0 => leap year
+
+ $isleapyear = 1;
+ }
+ elsif (($year%100) == 0)
+ {
+ # year mod 100 = 0 and year mod 400 != 0 => not a leap year
+
+ $isleapyear = 0;
+ }
+ elsif (($year%4) == 0)
+ {
+ # year mod 4 = 0 and year mod 100 != 0 => leap year
+
+ $isleapyear = 1;
+ }
+
+ $isleapyear;
+}
+
+sub get_day_of_year{
+ local($day,$month,$year) = @_;
+ local($dayofyear) = 0;
+
+ SWITCH: {
+ if ($month == 2) {$dayofyear += 31; last SWITCH; }
+ if ($month == 3) {$dayofyear += 59; last SWITCH; }
+ if ($month == 4) {$dayofyear += 90; last SWITCH; }
+ if ($month == 5) {$dayofyear += 120; last SWITCH; }
+ if ($month == 6) {$dayofyear += 151; last SWITCH; }
+ if ($month == 7) {$dayofyear += 181; last SWITCH; }
+ if ($month == 8) {$dayofyear += 212; last SWITCH; }
+ if ($month == 9) {$dayofyear += 243; last SWITCH; }
+ if ($month == 10) {$dayofyear += 273; last SWITCH; }
+ if ($month == 11) {$dayofyear += 304; last SWITCH; }
+ if ($month == 12) {$dayofyear += 334; last SWITCH; }
+ }
+
+ if ($month > 2 && &is_leap_year($year))
+ {
+ $dayofyear += 1;
+ }
+
+ $dayofyear += $day;
+ local($_)=$dayofyear;
+}
+
+sub get_day_of_week{
+ local($day,$month,$year) = @_;
+ local($dayofyear) = &get_day_of_year($day,$month,$year);
+ local($_) = (((($year-1901)%28)*1.25 + 2)%7 + $dayofyear - 1)%7 + 1;
+}
+
+sub get_day_of_weekname_english{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('Sunday',
+ 'Monday',
+ 'Tuesday',
+ 'Wednesday',
+ 'Thursday',
+ 'Friday',
+ 'Saturday');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_day_of_weekname_french{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('dimanche',
+ 'lundi',
+ 'mardi',
+ 'mercredi',
+ 'jeudi',
+ 'vendredi',
+ 'samedi');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_day_of_weekname_spanish{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('domingo',
+ 'lunes',
+ 'martes',
+ 'mi\\\'ercoles',
+ 'jueves',
+ 'viernes',
+ 's\\\'abado');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_day_of_weekname_portuges{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('domingo',
+ 'segunda-feira',
+ 'ter\c{c}a-feira',
+ 'quarta-feira',
+ 'quinta-feira',
+ 'sexta-feira',
+ 'sabado');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_day_of_weekname{
+ local($dow)=@_;
+ local($dowsub);
+
+ $dowsub = "get_day_of_weekname_$default_language";
+
+ if (defined ($dowsub))
+ {
+ &$dowsub($dow);
+ }
+ else
+ {
+ &get_day_of_weekname_english($dow);
+ }
+}
+
+sub get_short_day_of_weekname{
+ local($dow)=@_;
+
+ substr(&get_day_of_weekname($dow),0,3);
+}
+
+sub do_cmd_dayofweeknameid{
+ local($_) = @_;
+ local($dow);
+
+ $dow = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($dow=$2));
+
+ join('',&get_day_of_weekname($dow), $_);
+}
+
+sub do_cmd_dayofweekname{
+ local($_) = @_;
+ local($day,$month,$year);
+ # read 1st argument
+ $day = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($day=$2));
+ # read 2nd argument
+ $month = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($month=$2));
+ # read 3rd argument
+ $year = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($year=$2));
+
+ if ($day eq 'THEDAY' or $day eq '\THEDAY')
+ {
+ # this is a cludge to help newdateformat work
+
+ join('', '{DOW}', $_);
+ }
+ else
+ {
+ local($dow) = &get_day_of_week($day,$month,$year);
+
+ join('',&get_day_of_weekname($dow), $_);
+ }
+}
+
+sub do_cmd_shortdayofweekname{
+ local($_) = @_;
+ local($day,$month,$year);
+ # read 1st argument
+ $day = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($day=$2));
+ # read 2nd argument
+ $month = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($month=$2));
+ # read 3rd argument
+ $year = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($year=$2));
+
+ local($dow) = &get_day_of_week($day,$month,$year);
+
+ join('',&get_short_day_of_weekname($dow), $_);
+}
+
+sub do_cmd_thisdayofweekname{
+ local($dow) = &get_day_of_week($global{DAY}, $global{MONTH}, $global{YEAR});
+
+ join('',$DayOfWeek[$dow], $_);
+}
+
+sub do_cmd_thisshortdayofweekname{
+ local($dow) = &get_day_of_week($global{DAY}, $global{MONTH}, $global{YEAR});
+
+ join('',&get_short_day_of_weekname($dow), $_);
+}
+
+$dateformat = "\\ifshowdow{DOW}\\fi {ORDINALDATE{DAY}}\\ MONTHNAME[THEMONTH], THEYEAR";
+
+sub format_date{
+ local($day,$month,$year) = @_;
+
+ local($str) = $dateformat;
+
+ $str =~ s/THEDAY/$day/g;
+ $str =~ s/THEMONTH/$month/g;
+ $str =~ s/THEYEAR/$year/g;
+
+ $str =~ s/TWODIGIT{([\d]+)}/&get_twodigit($1)/eg;
+ $str =~ s/ROMANNUMERAL{([\d]+)}/&froman($1)/eg;
+ $str =~ s/ROMANNUMERALU{([\d]+)}/uc(&froman($1))/eg;
+ $str =~ s/TRUNCATE{([\d]+)}/&get_twodigit($1%100)/eg;
+ $str =~ s/SHORTMONTHNAME\[([\d]+)\]/&get_shortmonthname($1)/eg;
+ $str =~ s/MONTHNAME\[([\d]+)\]/&get_monthname($1)/eg;
+
+ local($X) = ++$global{'max_id'};
+ local($Y) = ++$global{'max_id'};
+ local($Z) = ++$global{'max_id'};
+ $str =~ s/{DOW}/\\dayofweekname${OP}$X${CP}$day${OP}$X${CP}${OP}$Y${CP}$month${OP}$Y${CP}${OP}$Z${CP}$year${OP}$Z${CP}/g;
+ $str =~ s/{SDOW}/\\shortdayofweekname${OP}$X${CP}$day${OP}$X${CP}${OP}$Y${CP}$month${OP}$Y${CP}${OP}$Z${CP}$year${OP}$Z${CP}/g;
+
+ local($br_id) = ++$global{'max_id'};
+ $suffix = &get_ordinal_suffix($day);
+ $str =~ s/{ORDINAL{DAY}}/$day\\fmtord${OP}$br_id${CP}$suffix${OP}$br_id${CP}/g;
+
+ $br_id = ++$global{'max_id'};
+ $suffix = &get_ordinal_suffix($month);
+ $str =~ s/{ORDINAL{MONTH}}/$month\\fmtord${OP}$br_id${CP}$suffix${OP}$br_id${CP}/g;
+
+ $br_id = ++$global{'max_id'};
+ $suffix = &get_ordinal_suffix($year);
+ $str =~ s/{ORDINAL{YEAR}}/$year\\fmtord${OP}$br_id${CP}$suffix${OP}$br_id${CP}/g;
+
+ local($br_id) = ++$global{'max_id'};
+ $str =~ s/{ORDINALDATE{DAY}}/\\ordinaldate${OP}$br_id${CP}$day${OP}$br_id${CP}/g;
+
+ $str =~ s/{NUMBERSTRING{DAY}}/&get_numberstring($day)/eg;
+ $str =~ s/{NUMBERSTRING{MONTH}}/&get_numberstring($month)/eg;
+ $str =~ s/{NUMBERSTRING{YEAR}}/&get_numberstring($year)/eg;
+
+ $str =~ s/{ORDINALSTRING{DAY}}/&get_ordinalstring($day)/eg;
+ $str =~ s/{ORDINALSTRING{MONTH}}/&get_ordinalstring($month)/eg;
+ $str =~ s/{ORDINALSTRING{YEAR}}/&get_ordinalstring($year)/eg;
+
+ $str =~ s/{NNUMBERSTRING{DAY}}/&get_Numberstring($day)/eg;
+ $str =~ s/{NNUMBERSTRING{MONTH}}/&get_Numberstring($month)/eg;
+ $str =~ s/{NNUMBERSTRING{YEAR}}/&get_Numberstring($year)/eg;
+
+ $str =~ s/{OORDINALSTRING{DAY}}/&get_Ordinalstring($day)/eg;
+ $str =~ s/{OORDINALSTRING{MONTH}}/&get_Ordinalstring($month)/eg;
+ $str =~ s/{OORDINALSTRING{YEAR}}/&get_Ordinalstring($year)/eg;
+
+ $str;
+}
+
+sub do_cmd_formatdate{
+ local($day,$month,$year);
+ # read 1st argument
+ $day = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($day=$2));
+ # read 2nd argument
+ $month = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($month=$2));
+ # read 3rd argument
+ $year = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($year=$2));
+
+ join('', &format_date($day,$month,$year), $_[0]);
+}
+
+sub do_cmd_today{
+ join('', &format_date($global{DAY},$global{MONTH},$global{YEAR}), $_[0]);
+}
+
+sub do_cmd_day{
+ join('', $global{DAY}, $_[0]);
+}
+
+sub do_cmd_month{
+ join('', $global{MONTH}, $_[0]);
+}
+
+sub do_cmd_year{
+ join('', $global{YEAR}, $_[0]);
+}
+
+sub do_cmd_showdowtrue{
+ local($_) = @_;
+ $showdow = 1;
+ $_[0];
+}
+
+sub do_cmd_showdowfalse{
+ local($_) = @_;
+ $showdow = 0;
+ $_[0];
+}
+
+# This is a bit primative, it doesn't allow for
+# nested conditionals
+
+sub do_cmd_ifshowdow{
+ local($_) = @_;
+ local($ifbit,$elsebit);
+
+ $_[0] =~s/(.*)\\fi//;
+
+ $ifbit = $1;
+
+ $ifbit =~s/(.*)\\else(.*)/\1/g;
+
+ $elsebit = $2;
+
+ if ($showdow)
+ {
+ join('', $ifbit, $_[0]);
+ }
+ else
+ {
+ join('', $elsebit, $_[0]);
+ }
+}
+
+sub do_cmd_dateseparator{
+ join('', '/', $_[0]);
+}
+
+sub do_cmd_longdate{
+ $dateformat = "\\ifshowdow{DOW}\\fi {ORDINALDATE{DAY}}\\ MONTHNAME[THEMONTH], THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_shortdate{
+ $dateformat = "\\ifshowdow{SDOW}\\fi {ORDINALDATE{DAY}}\\ SHORTMONTHNAME[THEMONTH], THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_ddmmyyyydate{
+ $dateformat = "TWODIGIT{THEDAY}\\dateseparator TWODIGIT{THEMONTH}\\dateseparator THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_dmyyyydate{
+ $dateformat = "THEDAY\\dateseparator THEMONTH\\dateseparator THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_dmyydate{
+ $dateformat = "THEDAY\\dateseparator THEMONTH\\dateseparator TRUNCATE{THEYEAR}";
+
+ $_[0];
+}
+
+sub do_cmd_ddmmyydate{
+ $dateformat = "TWODIGIT{THEDAY}\\dateseparator TWODIGIT{THEMONTH}\\dateseparator TRUNCATE{THEYEAR}";
+
+ $_[0];
+}
+
+sub do_cmd_textdate{
+ $dateformat = "\\ifshowdow{DOW} the\\fi {OORDINALSTRING{DAY}} of MONTHNAME[THEMONTH], {NNUMBERSTRING{YEAR}}";
+
+ $_[0];
+}
+
+sub do_cmd_usdate{
+ $dateformat = "MONTHNAME[THEMONTH] THEDAY, THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_mmddyyyydate{
+ $dateformat = "TWODIGIT{THEMONTH}\\dateseparator TWODIGIT{THEDAY}\\dateseparator THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_mdyyyydate{
+ $dateformat = "THEMONTH\\dateseparator THEDAY\\dateseparator THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_mmddyydate{
+ $dateformat = "TWODIGIT{THEMONTH}\\dateseparator TWODIGIT{THEDAY}\\dateseparator TRUNCATE{THEYEAR}";
+
+ $_[0];
+}
+
+sub do_cmd_mdyydate{
+ $dateformat = "THEMONTH\\dateseparator THEDAY\\dateseparator TRUNCATE{THEYEAR}";
+
+ $_[0];
+}
+
+sub do_cmd_THEYEAR{
+ join('', 'THEYEAR', $_[0]);
+}
+
+sub do_cmd_THEMONTH{
+ join('', 'THEMONTH', $_[0]);
+}
+
+sub do_cmd_THEDAY{
+ join('', 'THEDAY', $_[0]);
+}
+
+sub do_cmd_newdateformat{
+ local($_) = @_;
+ local($cmd,$cmdbody);
+ local($ntmp);
+
+ $cmd = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($cmd=$2));
+ $cmdbody = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($cmdbody=$2));
+
+ $ntmp = 'sub do_cmd_' . $cmd . '{';
+ $ntmp .= '$dateformat = "' . $cmdbody . '";';
+
+ $ntmp .= '$_[0];';
+ $ntmp .= '}';
+
+ eval($ntmp);
+
+ join('', $_[0]);
+}
+
+sub do_cmd_pdfdate{
+ local($_) = @_;
+
+ local($timestring) = sprintf "%d%02d%02d%02d%02d%02d",
+ $global{YEAR}, $global{MONTH}, $global{DAY}, $global{HOUR}, $global{MINUTE}, $global{SECONDS};
+
+ join('', $timestring, $_[0]);
+}
+
+ %userdates = ();
+
+sub do_cmd_newdate{
+ local($_)=@_;
+ local($datename,$mon,$day,$year);
+
+ $datename = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($datename=$2));
+
+ $day = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($day=$2));
+
+ $mon = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($mon =$2));
+
+ $year = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($year =$2));
+
+
+ $userdates{$datename}{day} = $day;
+ $userdates{$datename}{month} = $mon;
+ $userdates{$datename}{year} = $year;
+
+ join('', $_[0]);
+}
+
+sub do_cmd_displaydate{
+ local($_)=@_;
+ local($datename);
+ local($cmd,$br_id);
+
+ $datename = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($datename=$2));
+
+ $br_id = ++$global{'max_id'};
+ $cmd = "$OP$br_id$CP" . $userdates{$datename}{day} ."$OP$br_id$CP";
+ $br_id = ++$global{'max_id'};
+ $cmd .= "$OP$br_id$CP" . $userdates{$datename}{month} ."$OP$br_id$CP";
+ $br_id = ++$global{'max_id'};
+ $cmd .= "$OP$br_id$CP" . $userdates{$datename}{year} ."$OP$br_id$CP";
+
+ join('', '\formatdate', $cmd, $_[0]);
+}
+
+sub do_cmd_getdateyear{
+ local($_)=@_;
+ local($datename);
+
+ $datename = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($datename=$2));
+
+ join('', $userdates{$datename}{year}, $_[0]);
+}
+
+sub do_cmd_getdatemonth{
+ local($_)=@_;
+ local($datename);
+
+ $datename = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($datename=$2));
+
+ join('', $userdates{$datename}{month}, $_[0]);
+}
+
+sub do_cmd_getdateday{
+ local($_)=@_;
+ local($datename);
+
+ $datename = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($datename=$2));
+
+ join('', $userdates{$datename}{day}, $_[0]);
+}
+
+# time commands
+
+sub do_cmd_timeseparator{
+ join('', ':', $_[0]);
+}
+
+sub do_cmd_xxivtime{
+ local($_) = @_;
+
+ local($timestring) = sprintf "%02d\\timeseparator %02d", $global{HOUR}, $global{MINUTE};
+
+ join('', $timestring, $_[0]);
+}
+
+sub do_cmd_noon{
+ local($_) = @_;
+
+ join('', "Noon", $_[0]);
+}
+
+sub do_cmd_midnight{
+ local($_) = @_;
+
+ join('', "Midnight", $_[0]);
+}
+
+sub do_cmd_amname{
+ local($_) = @_;
+
+ join('', "am", $_[0]);
+}
+
+sub do_cmd_pmname{
+ local($_) = @_;
+
+ join('', "pm", $_[0]);
+}
+
+sub do_cmd_amstring{
+ local($_) = @_;
+
+ join('', "in the morning", $_[0]);
+}
+
+sub do_cmd_pmstring{
+ local($_) = @_;
+
+ join('', "in the afternoon", $_[0]);
+}
+
+sub do_cmd_halfpast{
+ local($_) = @_;
+
+ join('', "Half past", $_[0]);
+}
+
+sub do_cmd_quarterpast{
+ local($_) = @_;
+
+ join('', "Quarter past", $_[0]);
+}
+
+sub do_cmd_quarterto{
+ local($_) = @_;
+
+ join('', "Quarter to", $_[0]);
+}
+
+sub do_cmd_oclockstring{
+ local($_) = @_;
+
+ join('', "O'Clock", $_[0]);
+}
+
+sub do_cmd_amorpmname{
+ if ($global{HOUR}>12)
+ {
+ &do_cmd_pmname;
+ }
+ else
+ {
+ &do_cmd_amname;
+ }
+}
+
+sub do_cmd_amorpmstring{
+ if ($global{HOUR}>12)
+ {
+ &do_cmd_pmstring;
+ }
+ else
+ {
+ &do_cmd_amstring;
+ }
+}
+
+sub do_cmd_ampmtime{
+ local($_) = @_;
+ local($timestring);
+
+ $timestring = sprintf "%d\\timeseparator %02d\\amorpmname", $global{HOUR}, $global{MINUTE};
+
+ join('', $timestring, $_[0]);
+}
+
+sub do_cmd_oclock{
+ local($_) = @_;
+ local($timestring);
+
+ if ($global{HOUR} == 0 && $global{MINUTE} == 0)
+ {
+ $timestring = "\\midnight";
+ }
+ elsif ($global{HOUR} == 12 && $global{MINUTE} == 0)
+ {
+ $timestring = "\\noon";
+ }
+ else
+ {
+ if ($global{MINUTE} == 0)
+ {
+ $timestring = &get_Numberstring($global{HOURXII}) . " \\oclockstring";
+ }
+ elsif ($global{MINUTE} == 15)
+ {
+ $timestring = "\\quarterpast\\ " . &get_Numberstring($global{HOURXII});
+ }
+ elsif ($global{MINUTE} == 30)
+ {
+ $timestring = "\\halfpast\\ " . &get_Numberstring($global{HOURXII});
+ }
+ elsif ($global{MINUTE} == 45)
+ {
+ $timestring = "\\quarterto\\ " . &get_Numberstring($global{TOHOUR});
+ }
+ elsif ($global{MINUTE} < 30)
+ {
+ $timestring = get_Numberstring($global{MINUTE});
+
+ $timestring .= ($global{MINUTE} == 1 ? " minute" : " minutes") . " past ";
+
+ $timestring .= get_Numberstring($global{HOURXII});
+ }
+ else
+ {
+ $timestring = get_Numberstring($global{TOMINUTE});
+
+ $timestring .= ($global{MINUTE} == 1 ? " minute" : " minutes") . " to ";
+
+ $timestring .= get_Numberstring($global{TOHOUR});
+ }
+
+ $timestring .= ($global{HOUR} < 12 ? " \\amstring" : " \\pmstring");
+ }
+
+ join('', $timestring, $_[0]);
+}
+
+sub do_cmd_currenttime{
+ local($_) = @_;
+
+ join('', "\\xxivtime", $_[0]);
+}
+
+sub do_cmd_settimeformat{
+ local($_) = @_;
+ local($cmd);
+
+ $cmd = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($cmd=$2));
+
+ #$tmp = 'sub do_cmd_currenttime{local($_) = @_; join(\'\', "\\\\' . $cmd . '", $_[0]); }';
+
+ $tmp = 'sub do_cmd_currenttime{&do_cmd_' . $cmd . '(@_);}';
+
+ eval($tmp);
+
+ join('', $_[0]);
+}
+
+sub do_cmd_newtimeformat{
+ local($_) = @_;
+ local($cmd,$cmdbody);
+
+ $cmd = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($cmd=$2));
+ $cmdbody = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($cmdbody=$2));
+
+ $tmp = 'sub do_cmd_' . $cmd . '{' . "\n";
+
+ $tmp .= 'local($_) = @_;'. "\n";
+
+ $tmp .= 'join(\'\',"' . $cmdbody. '", $_[0]); }';
+
+ eval($tmp);
+
+ join('', $_[0]);
+}
+
+sub do_cmd_THEHOUR{
+ local($_) = @_;
+
+ join('', $global{HOUR}, $_[0]);
+}
+
+sub do_cmd_THEMINUTE{
+ local($_) = @_;
+
+ join('', $global{MINUTE}, $_[0]);
+}
+
+sub do_cmd_THETOHOUR{
+ local($_) = @_;
+
+ join('', $global{TOHOUR}, $_[0]);
+}
+
+sub do_cmd_THETOMINUTE{
+ local($_) = @_;
+
+ join('', $global{TOMINUTE}, $_[0]);
+}
+
+sub do_cmd_THEHOURXII{
+ local($_) = @_;
+
+ join('', $global{HOURXII}, $_[0]);
+}
+
+1;
+% \end{macrocode}
+% \begin{macrocode}
+%</datetime.perl>
+% \end{macrocode}
+% \begin{macrocode}
+%<*dt-sampl.tex>
+% \end{macrocode}
+\documentclass[a4paper]{article}
+
+\usepackage{ifpdf}
+\usepackage{datetime}
+
+\ifpdf
+\pdfinfo{
+ /CreationDate (D:20040501215500)
+ /ModDate (D:\pdfdate)
+}
+\fi
+
+\padzeroes[8]
+
+\newdateformat{dashdate}{\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+\newdateformat{usvardate}{\monthname[\THEMONTH]~\ordinaldate{\THEDAY}, \THEYEAR}
+\newdateformat{mydate}{\ifshowdow \dayofweekname{\THEDAY}{\THEMONTH}{\THEYEAR} \fi
+\THEDAY\ \monthname[\THEMONTH], \THEYEAR}
+\newdateformat{yyyymmdd}{\THEYEAR\twodigit{\THEMONTH}\twodigit{\THEDAY}}
+
+\newtimeformat{dottime}{\twodigit{\THEHOUR}.\twodigit{\THEMINUTE}}
+\newtimeformat{dashtime12}{\THEHOURXII-\twodigit{\THEMINUTE}}
+\newtimeformat{hhmm}{\twodigit{\THEHOUR}\twodigit{\THEMINUTE}}
+
+\begin{document}
+
+\section{Date Formats}
+Default: \today.
+
+\begin{tabular}{ll}
+\bfseries Declaration & \bfseries\verb|\today|\\
+\verb|\longdate| & \longdate\today\\
+\verb|\shortdate| & \shortdate\today\\
+\verb|\ddmmyyyydate| & \ddmmyyyydate\today\\
+\verb|\dmyyyydate| & \dmyyyydate\today\\
+\verb|\ddmmyydate| & \ddmmyydate\today\\
+\verb|\dmyydate| & \dmyydate\today\\
+\verb|\textdate| & \textdate\today\\
+\verb|\usdate| & \usdate\today\\
+\verb|\mmddyyyydate| & \mmddyyyydate\today\\
+\verb|\mdyyyydate| & \mdyyyydate\today\\
+\verb|\mmddyydate| & \mmddyydate\today\\
+\verb|\mdyydate| & \mdyydate\today
+\end{tabular}
+
+\section{Time Formats}
+Default: \currenttime.
+
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\currenttime|\\
+xxivtime & \settimeformat{xxivtime}\currenttime\\
+ampmtime & \settimeformat{ampmtime}\currenttime\\
+oclock & \settimeformat{oclock}\currenttime
+\end{tabular}
+
+\section{Specific Date:}
+
+\begin{tabular}{ll}
+\verb|\longdate| & \longdate\formatdate{1}{3}{2000}\\
+\verb|\shortdate| & \shortdate\formatdate{8}{3}{2000}\\
+\verb|\ddmmyyyydate| & \ddmmyyyydate\formatdate{8}{3}{2000}\\
+\verb|\dmyyyydate| & \dmyyyydate\formatdate{8}{3}{2000}\\
+\verb|\ddmmyydate| & \ddmmyydate\formatdate{8}{3}{2000}\\
+\verb|\dmyydate| & \dmyydate\formatdate{8}{3}{2000}\\
+\verb|\textdate| & \textdate\formatdate{8}{3}{2000}\\
+\verb|\usdate| & \usdate\formatdate{8}{3}{2000}\\
+\verb|\mmddyyyydate| & \mmddyyyydate\formatdate{8}{3}{2000}\\
+\verb|\mdyyyydate| & \mdyyyydate\formatdate{8}{3}{2000}\\
+\verb|\mmddyydate| & \mmddyydate\formatdate{8}{3}{2000}\\
+\verb|\mdyydate| & \mdyydate\formatdate{8}{3}{2000}
+\end{tabular}
+
+\section{Defining New Dates}
+
+\begin{tabular}{ll}
+\verb|\dashdate| & \dashdate\today\\
+\verb|\usvardate| & \usvardate\today\\
+\verb|\mydate| & \mydate\today\\
+\verb|\yyyymmdd| & \yyyymmdd\today\\
+\verb|\dashdate| & \dashdate\formatdate{8}{3}{2000}\\
+\verb|\usvardate| & \usvardate\formatdate{8}{3}{2000}\\
+\verb|\mydate| & \mydate\formatdate{8}{3}{2000}\\
+\verb|\yyyymmdd| & \yyyymmdd\formatdate{8}{3}{2000}
+\end{tabular}
+
+\section{Defining New Times}
+
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\currenttime|\\
+dottime & \settimeformat{dottime}\currenttime\\
+dashtime12 & \settimeformat{dashtime12}\currenttime\\
+hhmm & \settimeformat{hhmm}\currenttime
+\end{tabular}
+
+\end{document}
+% \begin{macrocode}
+%</dt-sampl.tex>
+% \end{macrocode}
+%\Finale
+\endinput