summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/fmtcount
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:53:28 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:53:28 +0000
commitfaca1b69882dc17b029983d4c7d045d6d49b5cd6 (patch)
treed981d5420813ad49c23a49f67e433bc0735dccb5 /Master/texmf-dist/source/latex/fmtcount
parent67d7baf003ddae4c3f71801f38fdfdc170ee4f9c (diff)
trunk/Master/texmf-dist/source/latex/fmtcount
git-svn-id: svn://tug.org/texlive/trunk@292 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/fmtcount')
-rw-r--r--Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx5622
-rw-r--r--Master/texmf-dist/source/latex/fmtcount/fmtcount.ins32
2 files changed, 5654 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx b/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx
new file mode 100644
index 00000000000..fe7f838d450
--- /dev/null
+++ b/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx
@@ -0,0 +1,5622 @@
+%\iffalse
+% fmtcount.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 "(fc-samp\.tex)=>\1"
+% -src "(fc-lang\.tex)=>\1"
+% -doc "manual.tex"
+% -author "Nicola Talbot"
+% -dir "source"
+% fmtcount
+% Created on 2005/7/1 14:39
+%\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={fmtcount.sty: Displaying the Values of LaTeX Counters},
+ pdfkeywords={LaTeX,counter}]{hyperref}
+
+
+
+\newcommand{\stynamefmt}[1]{\textsf{#1}}
+\begin{document}
+\DocInput{fmtcount.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+%\RecordChanges
+%\OnlyDescription
+%\def\filedate{20 June 2005}
+%\def\fileversion{1.03}
+%\def\filename{fmtcount.dtx}
+%\def\docdate{1 July 2005}
+%
+% \title{fmtcount.sty v\fileversion: Displaying the Values of
+%\LaTeX\ Counters}
+% \author{N.L.C. Talbot}
+% \date{\docdate}
+% \maketitle
+% \tableofcontents
+% \section{Introduction}
+%The \stynamefmt{fmtcount} package provides commands to display
+%the values of \LaTeX\ counters in a variety of formats. It also
+%provides equivalent commands for actual numbers rather than
+%counter names. Limited multilingual support is available.
+%
+%\section{Installation}
+%
+%This package is distributed with the files \texttt{fmtcount.dtx}
+%and \texttt{fmtcount.ins}. To extract the code do:
+%\begin{verbatim}
+%latex fmtcount.ins
+%\end{verbatim}
+%This will create the files \texttt{fmtcount.sty} and
+%\texttt{fmtcount.perl}, along with several \texttt{.def} files.
+%Place \texttt{fmtcount.sty} and the \texttt{.def} files somewhere
+%where \LaTeX\ will find them (e.g.\ \texttt{texmf/tex/latex/fmtcount/}) and place \texttt{fmtcount.perl} somewhere where \LaTeX2HTML
+%will find it (e.g.\ latex2html/styles). Remember to refresh
+%the \TeX\ database (using \texttt{texhash} under Linux, for
+%other operating systems check the manual.)
+%
+%\section{Available Commands}
+%
+%The commands can be divided into two categories: those that
+%take the name of a counter as the argument, and those
+%that take a number as the argument.
+%
+% \DescribeMacro{\ordinal}
+% The macro \verb"\ordinal{"\meta{counter}\verb!}! will
+% print the value of a \LaTeX\ counter \meta{counter} as an ordinal,
+% \DescribeMacro{\fmtord}
+% where the macro \verb"\fmtord{"\meta{text}\verb!}! is used to format the st,nd,rd,th bit.
+% By default the ordinal is formatted as a superscript, if the package option \texttt{level}
+% is used, it is level with the text.
+% For example, if the current section is 3, then \verb"\ordinal{section}" will produce
+% the output: 3\textsuperscript{rd}.
+%
+%\DescribeMacro{\ordinalnum}
+%The macro \verb"\ordinalnum" is like \verb!\ordinal!
+%but takes an actual number rather than a counter as the
+%argument. For example: \verb"\ordinalnum{3}" will
+%produce: 3\textsuperscript{rd}.
+%
+% \DescribeMacro{\numberstring}
+% The macro \verb"\numberstring{"\meta{counter}\verb!}! will print the value
+% of \meta{counter} as text. E.g.\ \verb"\numberstring{section}" will produce:
+% three.
+% \DescribeMacro{\Numberstring}
+% The macro \verb"\Numberstring{"\meta{counter}\verb!}! does the same as
+% \verb"\numberstring", but with initial letters in uppercase. For
+% example, \verb"\Numberstring{section}" will produce: Three.
+%
+%\DescribeMacro{\numberstringnum}
+%\DescribeMacro{\Numberstringnum}
+%The macros \verb!\numberstringnum! and
+%\verb!\Numberstringnum! work like
+%\verb!\numberstring! and
+%\verb!\Numberstring!, respectively, but take an actual number
+%rather than a counter as the argument. For example:
+%\verb'\Numberstringnum{105}' will produce: One Hundred and Five.
+%
+% \DescribeMacro{\ordinalstring}
+% The macro \verb"\ordinalstring{"\meta{counter}\verb!}! will print the
+% value of \meta{counter} as a textual ordinal. E.g.\
+% \verb"\ordinalstring{section}" will produce: third.
+% \DescribeMacro{\Ordinalstring}
+% The macro \verb"\Ordinalstring{"\meta{counter}\verb!}! does the same as
+% \verb"\ordinalstring", but with initial letters in uppercase. For example,
+% \verb"\Ordinalstring{section}" will produce: Third.
+%
+%\DescribeMacro{\ordinalstringnum}
+%\DescribeMacro{\Ordinalstringnum}
+%The macros \verb!\ordinalstringnum! and
+%\verb!\Ordinalstringnum! work like
+%\verb!\Ordinalstring! and
+%\verb!\Ordinalstring!, respectively, but take an actual number
+%rather than a counter as the argument. For example,
+%\verb"\ordinalstringnum{3}" will produce: third.
+%
+% \DescribeMacro{\binary}
+%\changes{v2.4}{25 Sept 2004}{'binary added}
+% The macro \verb"\binary{"\meta{counter}\verb!}! will print the
+%value of \meta{counter} as a binary number.
+%E.g.\ \verb"\binary{section}" will produce: 11. The declaration
+%\DescribeMacro{\padzeroes}\verb"\padzeroes["\meta{n}\verb!]!
+%will ensure numbers are written to \meta{n} digits, padding with
+%zeroes if necessary. E.g.\ \verb"\padzeroes[8]\binary{section}"
+%will produce: 00000011.
+% The default value for \meta{n} is 17.
+%
+%\DescribeMacro{\binarynum}
+%The macro \verb"\binarynum" is like \verb!\binary!
+%but takes an actual number rather than a counter as the
+%argument. For example: \verb"\binarynum{5}" will
+%produce: 101.
+%
+% \DescribeMacro{\octal}
+%\changes{v2.4}{25 Sept 2004}{'octal added}
+% The macro \verb"\octal{"\meta{counter}\verb!}! will print the
+%value of \meta{counter} as an octal number. For example, if you
+%have a counter called, say \texttt{mycounter}, and you set the
+%value to 125, then \verb"\octal{mycounter}" will produce: 177.
+% Again, the number will be padded with zeroes if necessary,
+%depending on whether \verb"\padzeroes" has been used.
+%
+%\DescribeMacro{\octalnum}
+%The macro \verb"\octalnum" is like \verb!\octal!
+%but takes an actual number rather than a counter as the
+%argument. For example: \verb"\octalnum{125}" will
+%produce: 177.
+%
+% \DescribeMacro{\hexadecimal}
+%\changes{v2.4}{25 Sept 2004}{'hexadecimal added}
+% The macro \verb"\hexadecimal{"\meta{counter}\verb!}! will print
+%the value of \meta{counter} as a hexadecimal number. Going back
+%to the previous example, \verb"\hexadecimal{mycounter}" will
+% produce: 7d. Again, the number will be padded with zeroes if
+%necessary, depending on whether \verb"\padzeroes" has been used.
+% \DescribeMacro{\Hexadecimal}
+% \verb"\Hexadecimal{"\meta{counter}\verb!}! does the same thing,
+%but uses uppercase characters, e.g.\
+% \verb"\Hexadecimal{mycounter}" will produce: 7D.
+%
+%\DescribeMacro{\hexadecimalnum}
+%\DescribeMacro{\Hexadecimalnum}
+%The macros \verb"\hexadecimalnum" and
+%\verb"\Hexadecimalnum" are like
+%\verb!\hexadecimal! and \verb"\Hexadecimal"
+%but take an actual number rather than a counter as the
+%argument. For example: \verb"\hexadecimalnum{125}" will
+%produce: 7d, and \verb"\Hexadecimalnum{125}" will
+%produce: 7D.
+%
+%\DescribeMacro{\decimal}
+%\changes{v2.41}{22 Oct 2004}{'decimal added}
+%The macro \verb"\decimal{"\meta{counter}\verb!}! is similar to
+%\verb"\arabic" but the number can be padded with zeroes
+% depending on whether \verb"\padzeroes" has been used.
+%For example: \verb"\padzeroes[8]\decimal{section}" will
+% produce: 00000005.
+%
+%\DescribeMacro{\decimalnum}
+%The macro \verb"\decimalnum" is like \verb!\decimal!
+%but takes an actual number rather than a counter as the
+%argument. For example: \verb"\padzeroes[8]\decimalnum{5}" will
+%produce: 00000005.
+%
+% \DescribeMacro{\aaalph}
+%\changes{v2.4}{25 Sept 2004}{'aaalph added}
+% The macro \verb"\aaalph{"\meta{counter}\verb!}! will print the
+%value of \meta{counter} as: a b \ldots\ z aa bb \ldots\ zz etc.
+% For example, \verb"\aaalpha{mycounter}" will produce: uuuuu if
+%\texttt{mycounter} is set to 125.
+% \DescribeMacro{\AAAlph}
+% \verb"\AAAlph{"\meta{counter}\verb!}! does the same thing, but
+%uses uppercase characters, e.g.\
+% \verb"\AAAlph{mycounter}" will produce: UUUUU.
+%
+%\DescribeMacro{\aaalphnum}
+%\DescribeMacro{\AAAlphnum}
+%The macros \verb"\aaalphnum" and
+%\verb"\AAAlphnum" are like
+%\verb!\aaalph! and \verb"\AAAlph"
+%but take an actual number rather than a counter as the
+%argument. For example: \verb"\aaalphnum{125}" will
+%produce: uuuuu, and \verb"\AAAlphnum{125}" will
+%produce: UUUUU.
+%
+% \DescribeMacro{\abalph}
+%\changes{v2.4}{25 Sept 2004}{'abalph added}
+% The macro \verb"\abalph{"\meta{counter}\verb!}! will print the
+%value of \meta{counter} as: a b \ldots\ z aa ab \ldots\ az etc.
+% For example, \verb"\abalpha{mycounter}" will produce: du if
+%\texttt{mycounter} is set to 125.
+% \DescribeMacro{\ABAlph}
+% \verb"\ABAlph{"\meta{counter}\verb!}! does the same thing, but
+%uses uppercase characters, e.g.\
+% \verb"\ABAlph{mycounter}" will produce: DU.
+%
+%\DescribeMacro{\abalphnum}
+%\DescribeMacro{\ABAlphnum}
+%The macros \verb"\abalphnum" and
+%\verb"\ABAlphnum" are like
+%\verb!\abalph! and \verb"\ABAlph"
+%but take an actual number rather than a counter as the
+%argument. For example: \verb"\abalphnum{125}" will
+%produce: du, and \verb"\ABAlphnum{125}" will
+%produce: DU.
+%
+%\section{Package Options}
+%
+%The following options can be passed to this package:
+%
+%\begin{tabular}{ll}
+% raise & make ordinal st,nd,rd,th appear as superscript\\
+% level & make ordinal st,nd,rd,th appear level with rest of
+%text
+%\end{tabular}
+%
+%\noindent These can also be set using the command:
+%
+%\DescribeMacro{\fmtcountsetoptions}
+%\verb"\fmtcountsetoptions{fmtord="\meta{type}\verb'}'
+%
+%\noindent where \meta{type} is either \texttt{level} or
+%\texttt{raise}.
+%
+%\section{Multilingual Support}
+%
+%Version 1.02 of the \stynamefmt{fmtcount} package now has
+%limited multilingual support. The following languages are
+%implemented: English, Spanish, Portuguese, French, French (Swiss)
+%and French (Belgian). The package checks to see if the
+%command \verb"\date"\meta{language} is defined\footnote{this
+%will be true if you have loaded \stynamefmt{babel}}, and will
+%load the code for those languages. The commands \verb"\ordinal",
+%\verb"\ordinalstring" and \verb'\numberstring' (and their
+%variants) will then be formatted in the currently
+%selected language.
+%
+%If the French language is selected, the French (France) version
+%will be used by default (e.g.\ soxiante-dix for 70). To
+%select the Swiss or Belgian variants (e.g.\ septente for 70) use:
+%\verb"\fmtcountsetoptions{french="\meta{dialect}\verb'}'
+%where \meta{dialect} is either \texttt{swiss} or \texttt{belgian}.
+%You can also use this command to change the action of
+%\verb"\ordinal".
+%\verb"\fmtcountsetoptions{abbrv=true}" to produce ordinals
+%of the form 2\textsuperscript{e} or
+%\verb"\fmtcountsetoptions{abbrv=false}" to produce ordinals
+%of the form 2\textsuperscript{eme} (default).
+%
+%The \texttt{french} and \texttt{abbrv} settings only have an
+%effect if the French language has been defined.
+%
+%The male gender for all languages is used by default, however
+%the feminine form can be obtained by passing \texttt{f} as
+%an optional argument to \verb"\ordinal", \verb!\ordinalnum! etc.
+%For example: \verb"\numberstring{section}[f]". Note that the
+%optional argument comes \emph{after} the compulsory argument.
+%
+%Let me know if you find any spelling mistakes (has been known
+%to happen in English, let alone other languages I'm not so
+%familiar with.)
+%
+%\section{Configuration File \texttt{fmtcount.cfg}}
+%
+%You can save your preferred default settings to a file called
+%\texttt{fmtcount.cfg}, and place it on the \TeX\ path. These
+%settings will then be loaded by the \stynamefmt{fmtcount}
+%package.
+%
+%Note that if you are using the \stynamefmt{datetime} package,
+%the \texttt{datetime.cfg} configuration file will override
+%the \texttt{fmtcount.cfg} configuration file.
+%For example, if \texttt{datetime.cfg} has the line:
+%\begin{verbatim}
+%\renewcommand{\fmtord}[1]{\textsuperscript{\underline{#1}}}
+%\end{verbatim}
+%and if \texttt{fmtcount.cfg} has the line:
+%\begin{verbatim}
+%\fmtcountsetoptions{fmtord=level}
+%\end{verbatim}
+%then the former definition of \verb"\fmtord" will take
+%precedence.
+%
+%\section{LaTeX2HTML style}
+%
+%The \LaTeX2HTML\ style file \texttt{fmtcount.perl} is provided.
+%The following limitations apply:
+%
+%\begin{itemize}
+%\item \verb"\padzeroes" only has an effect in the preamble.
+%
+%\item The configuration file
+%\texttt{fmtcount.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{fmtcount}
+%\html{\input{fmtcount.cfg}}
+%\end{verbatim}
+%This, I agree, is an unpleasant cludge.
+%
+%\end{itemize}
+%
+%\section{Acknowledgements}
+%
+%I would like to thank my mother for the French and Portuguese
+%support and my Spanish dictionary for the Spanish support.
+%
+% \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}
+%<*fc-english.def>
+% \end{macrocode}
+% English definitions
+% \begin{macrocode}
+\ProvidesFile{fc-english}[2005/04/29]
+% \end{macrocode}
+% Define macro that prints the value of the \TeX\ count
+% register as an ordinal.
+% \begin{macrocode}
+\newcommand{\@ordinalMenglish}[1]{%
+\@orgargctr=#1\relax
+\@ordinalctr=#1%
+\@modulo{\@ordinalctr}{100}%
+\ifnum\@ordinalctr=11
+\the\@orgargctr\fmtord{th}%
+\else
+\ifnum\@ordinalctr=12
+\the\@orgargctr\fmtord{th}%
+\else
+\ifnum\@ordinalctr=13
+\the\@orgargctr\fmtord{th}%
+\else
+\@modulo{\@ordinalctr}{10}%
+\ifcase\@ordinalctr
+\the\@orgargctr\fmtord{th}% case 0
+\or \the\@orgargctr\fmtord{st}% case 1
+\or \the\@orgargctr\fmtord{nd}% case 2
+\or \the\@orgargctr\fmtord{rd}% case 3
+\else
+\the\@orgargctr\fmtord{th}% default case
+\fi
+\fi
+\fi
+\fi
+}
+\let\@ordinalFenglish=\@ordinalMenglish
+% \end{macrocode}
+% Define the macro that prints the value of a \TeX\ count register
+% as text
+% \begin{macrocode}
+\providecommand{\andname}{and}
+
+\newcommand{\@@unitstringenglish}[1]{%
+\ifcase#1\relax
+zero%
+\or one%
+\or two%
+\or three%
+\or four%
+\or five%
+\or six%
+\or seven%
+\or eight%
+\or nine%
+\fi
+}
+
+\newcommand{\@@tenstringenglish}[1]{%
+\ifcase#1\relax
+\or ten%
+\or twenty%
+\or thirty%
+\or forty%
+\or fifty%
+\or sixty%
+\or seventy%
+\or eighty%
+\or ninety%
+\fi
+}
+
+\newcommand{\@@teenstringenglish}[1]{%
+\ifcase#1\relax
+ten%
+\or eleven%
+\or twelve%
+\or thirteen%
+\or fourteen%
+\or fifteen%
+\or sixteen%
+\or seventeen%
+\or eighteen%
+\or nineteen%
+\fi
+}
+
+\newcommand{\@@Unitstringenglish}[1]{%
+\ifcase#1\relax
+Zero%
+\or One%
+\or Two%
+\or Three%
+\or Four%
+\or Five%
+\or Six%
+\or Seven%
+\or Eight%
+\or Nine%
+\fi
+}
+
+\newcommand{\@@Tenstringenglish}[1]{%
+\ifcase#1\relax
+\or Ten%
+\or Twenty%
+\or Thirty%
+\or Forty%
+\or Fifty%
+\or Sixty%
+\or Seventy%
+\or Eighty%
+\or Ninety%
+\fi
+}
+
+\newcommand{\@@Teenstringenglish}[1]{%
+\ifcase#1\relax
+Ten%
+\or Eleven%
+\or Twelve%
+\or Thirteen%
+\or Fourteen%
+\or Fifteen%
+\or Sixteen%
+\or Seventeen%
+\or Eighteen%
+\or Nineteen%
+\fi
+}
+
+\newcommand{\@@numberstringenglish}[1]{%
+\ifnum#1>99999
+\PackageError{fmtcount}{Out of range}%
+{This macro only works for values less than 100000}%
+\else
+\ifnum#1<0
+\PackageError{fmtcount}{Negative numbers not permitted}%
+{This macro does not work for negative numbers, however
+you can try typing "minus" first, and then pass the modulus of
+this number}%
+\fi
+\fi
+\@strctr=#1\relax \divide\@strctr by 1000\relax
+\ifnum\@strctr>9
+% #1 is greater or equal to 10000
+\divide\@strctr by 10
+\ifnum\@strctr>1
+\@tenstring{\@strctr}%
+\@strctr=#1 \divide\@strctr by 1000\relax
+\@modulo{\@strctr}{10}%
+\ifnum\@strctr>0 -\@unitstring{\@strctr}\fi
+\else
+\@strctr=#1\relax
+\divide\@strctr by 1000
+\@modulo{\@strctr}{10}%
+\@teenstring{\@strctr}%
+\fi
+\ \@thousand%
+\else
+\ifnum\@strctr>0 \@unitstring{\@strctr}\ \@thousand\fi
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{1000}%
+\divide\@strctr by 100
+\ifnum\@strctr>0
+\ifnum#1>1000 \ \fi\@unitstring{\@strctr}\ \@hundred%
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{100}%
+\ifnum#1>100 \ifnum\@strctr>0 \ \andname\ \fi\fi
+\ifnum\@strctr>19
+\divide\@strctr by 10
+\@tenstring{\@strctr}%
+\@strctr=#1\relax \@modulo{\@strctr}{10}%
+\ifnum\@strctr>0
+-\@unitstring{\@strctr}%
+\fi
+\else
+\ifnum\@strctr<10
+\ifnum\@strctr=0
+\ifnum#1<100 \@unitstring{\@strctr}\fi
+\else
+\@unitstring{\@strctr}%
+\fi
+\else
+\@modulo{\@strctr}{10}%
+\@teenstring{\@strctr}%
+\fi
+\fi
+}
+
+\newcommand{\@numberstringMenglish}[1]{%
+\let\@unitstring=\@@unitstringenglish
+\let\@teenstring=\@@teenstringenglish
+\let\@tenstring=\@@tenstringenglish
+\def\@hundred{hundred}\def\@thousand{thousand}%
+\@@numberstringenglish{#1}}
+
+\let\@numberstringFenglish=\@numberstringMenglish
+
+\newcommand{\@NumberstringMenglish}[1]{%
+\let\@unitstring=\@@Unitstringenglish
+\let\@teenstring=\@@Teenstringenglish
+\let\@tenstring=\@@Tenstringenglish
+\def\@hundred{Hundred}\def\@thousand{Thousand}%
+\@@numberstringenglish{#1}}
+
+\let\@NumberstringFenglish=\@NumberstringMenglish
+% \end{macrocode}
+% Define a macro that produces an ordinal as a string.
+% \begin{macrocode}
+\newcommand{\@@unitthstringenglish}[1]{%
+\ifcase#1\relax
+zeroth%
+\or first%
+\or second%
+\or third%
+\or fourth%
+\or fifth%
+\or sixth%
+\or seventh%
+\or eighth%
+\or ninth%
+\fi
+}
+
+\newcommand{\@@tenthstringenglish}[1]{%
+\ifcase#1\relax
+\or tenth%
+\or twentieth%
+\or thirtieth%
+\or fortieth%
+\or fiftieth%
+\or sixtieth%
+\or seventieth%
+\or eightieth%
+\or ninetieth%
+\fi
+}
+
+\newcommand{\@@teenthstringenglish}[1]{%
+\ifcase#1\relax
+tenth%
+\or eleventh%
+\or twelfth%
+\or thirteenth%
+\or fourteenth%
+\or fifteenth%
+\or sixteenth%
+\or seventeenth%
+\or eighteenth%
+\or nineteenth%
+\fi
+}
+
+\newcommand{\@@Unitthstringenglish}[1]{%
+\ifcase#1\relax
+Zeroth%
+\or First%
+\or Second%
+\or Third%
+\or Fourth%
+\or Fifth%
+\or Sixth%
+\or Seventh%
+\or Eighth%
+\or Ninth%
+\fi
+}
+
+\newcommand{\@@Tenthstringenglish}[1]{%
+\ifcase#1\relax
+\or Tenth%
+\or Twentieth%
+\or Thirtieth%
+\or Fortieth%
+\or Fiftieth%
+\or Sixtieth%
+\or Seventieth%
+\or Eightieth%
+\or Ninetieth%
+\fi
+}
+
+\newcommand{\@@Teenthstringenglish}[1]{%
+\ifcase#1\relax
+Tenth%
+\or Eleventh%
+\or Twelfth%
+\or Thirteenth%
+\or Fourteenth%
+\or Fifteenth%
+\or Sixteenth%
+\or Seventeenth%
+\or Eighteenth%
+\or Nineteenth%
+\fi
+}
+
+\newcommand{\@@ordinalstringenglish}[1]{%
+\@strctr=#1\relax
+\ifnum#1>99999
+\PackageError{fmtcount}{Out of range}%
+{This macro only works for values less than 100000 (value given: \number\@strctr)}%
+\else
+\ifnum#1<0
+\PackageError{fmtcount}{Negative numbers not permitted}%
+{This macro does not work for negative numbers, however
+you can try typing "minus" first, and then pass the modulus of
+this number}%
+\fi
+\fi
+\@strctr=#1\relax \divide\@strctr by 1000\relax
+\ifnum\@strctr>9
+% #1 is greater or equal to 10000
+\divide\@strctr by 10
+\ifnum\@strctr>1\relax
+ \@tenstring{\@strctr}%
+ \@strctr=#1\relax
+ \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0 -\@unitstring{\@strctr}\fi
+\else
+ \@strctr=#1\relax \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \@teenstring{\@strctr}%
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{1000}%
+\ifnum\@strctr=0\ \@thousandth\else\ \@thousand \fi
+\else
+\ifnum\@strctr>0\relax
+\@unitstring{\@strctr}%
+\@strctr=#1\relax \@modulo{\@strctr}{1000}%
+\ifnum\@strctr=0\ \@thousandth\else\ \@thousand\fi
+\fi
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{1000}%
+\divide\@strctr by 100
+\ifnum\@strctr>0
+\ifnum#1>1000 \ \fi\@unitstring{\@strctr}%
+\@strctr=#1\relax \@modulo{\@strctr}{100}%
+\ifnum\@strctr=0\ \@hundredth\else\ \@hundred\fi
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{100}%
+\ifnum#1>100 \ifnum\@strctr>0\ and \fi\fi
+\ifnum\@strctr>19
+\@tmpstrctr=\@strctr
+\divide\@strctr by 10
+\@modulo{\@tmpstrctr}{10}%
+\ifnum\@tmpstrctr=0 \@tenthstring{\@strctr}\else \@tenstring{\@strctr}\fi
+\@strctr=#1\relax \@modulo{\@strctr}{10}%
+\ifnum\@strctr>0
+-\@unitthstring{\@strctr}%
+\fi
+\else
+\ifnum\@strctr<10
+\ifnum\@strctr=0
+\ifnum#1<100 \@unitthstring{\@strctr}\fi
+\else
+\@unitthstring{\@strctr}%
+\fi
+\else
+\@modulo{\@strctr}{10}%
+\@teenthstring{\@strctr}%
+\fi
+\fi
+}
+
+\newcommand{\@ordinalstringMenglish}[1]{%
+\let\@unitthstring=\@@unitthstringenglish
+\let\@teenthstring=\@@teenthstringenglish
+\let\@tenthstring=\@@tenthstringenglish
+\let\@unitstring=\@@unitstringenglish
+\let\@teenstring=\@@teenstringenglish
+\let\@tenstring=\@@tenstringenglish
+\def\@hundred{hundred}\def\@thousand{thousand}%
+\def\@hundredth{hundredth}\def\@thousandth{thousandth}%
+\@@ordinalstringenglish{#1}}
+
+\let\@ordinalstringFenglish=\@ordinalstringMenglish
+
+\newcommand{\@OrdinalstringMenglish}[1]{%
+\let\@unitthstring=\@@Unitthstringenglish
+\let\@teenthstring=\@@Teenthstringenglish
+\let\@tenthstring=\@@Tenthstringenglish
+\let\@unitstring=\@@Unitstringenglish
+\let\@teenstring=\@@Teenstringenglish
+\let\@tenstring=\@@Tenstringenglish
+\def\@hundred{Hundred}\def\@thousand{Thousand}%
+\def\@hundredth{Hundredth}\def\@thousandth{Thousandth}%
+\@@ordinalstringenglish{#1}}
+
+\let\@OrdinalstringFenglish=\@OrdinalstringMenglish
+
+% \end{macrocode}
+% \begin{macrocode}
+%</fc-english.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*fc-french.def>
+% \end{macrocode}
+% French
+% \begin{macrocode}
+\ProvidesFile{fc-french.def}[2005/04/29]
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\@@unitstringfrench}[1]{%
+\ifcase#1\relax
+zero%
+\or un%
+\or deux%
+\or trois%
+\or quatre%
+\or cinq%
+\or six%
+\or sept%
+\or huit%
+\or neuf%
+\fi
+}
+
+\newcommand{\@@unitstringFfrench}[1]{%
+\ifnum#1=1\relax
+une%
+\else\@@unitstringfrench{#1}%
+\fi
+}
+
+\newcommand{\@@tenstringfrench}[1]{%
+\ifcase#1\relax
+\or dix%
+\or vingt%
+\or trente%
+\or quarante%
+\or cinquante%
+\or soixante%
+\or septente%
+\or huitante%
+\or nonente%
+\or cent%
+\fi
+}
+
+\newcommand{\@@teenstringfrench}[1]{%
+\ifcase#1\relax
+dix%
+\or onze%
+\or douze%
+\or treize%
+\or quatorze%
+\or quinze%
+\or seize%
+\or dix-sept%
+\or dix-huit%
+\or dix-neuf%
+\fi
+}
+
+\newcommand{\@@seventiesfrench}[1]{%
+\@tenstring{6}%
+\ifnum#1=1\relax
+\ \@andname\
+\else
+-%
+\fi
+\@teenstring{#1}%
+}
+
+\newcommand{\@@eightiesfrench}[1]{%
+\@unitstring{4}-\@tenstring{2}%
+\ifnum#1>0
+-\@unitstring{#1}%
+\else
+s%
+\fi
+}
+
+\newcommand{\@@ninetiesfrench}[1]{%
+\@unitstring{4}-\@tenstring{2}-\@teenstring{#1}%
+}
+
+\newcommand{\@@seventiesfrenchswiss}[1]{%
+\@tenstring{7}%
+\ifnum#1=1\ \@andname\ \fi
+\ifnum#1>1-\fi
+\ifnum#1>0\@unitstring{#1}\fi
+}
+
+\newcommand{\@@eightiesfrenchswiss}[1]{%
+\@tenstring{8}%
+\ifnum#1=1\ \@andname\ \fi
+\ifnum#1>1-\fi
+\ifnum#1>0\@unitstring{#1}\fi
+}
+
+\newcommand{\@@ninetiesfrenchswiss}[1]{%
+\@tenstring{9}%
+\ifnum#1=1\ \@andname\ \fi
+\ifnum#1>1-\fi
+\ifnum#1>0\@unitstring{#1}\fi
+}
+
+\newcommand{\@@Unitstringfrench}[1]{%
+\ifcase#1\relax
+Zero%
+\or Un%
+\or Deux%
+\or Trois%
+\or Quatre%
+\or Cinq%
+\or Six%
+\or Sept%
+\or Huit%
+\or Neuf%
+\fi
+}
+
+\newcommand{\@@UnitstringFfrench}[1]{%
+\ifnum#1=1\relax
+Une%
+\else \@@Unitstringfrench{#1}%
+\fi
+}
+
+\newcommand{\@@Tenstringfrench}[1]{%
+\ifcase#1\relax
+\or Dix%
+\or Vingt%
+\or Trente%
+\or Quarante%
+\or Cinquante%
+\or Soixante%
+\or Septente%
+\or Huitante%
+\or Nonente%
+\or Cent%
+\fi
+}
+
+\newcommand{\@@Teenstringfrench}[1]{%
+\ifcase#1\relax
+Dix%
+\or Onze%
+\or Douze%
+\or Treize%
+\or Quatorze%
+\or Quinze%
+\or Seize%
+\or Dix-Sept%
+\or Dix-Huit%
+\or Dix-Neuf%
+\fi
+}
+
+\newcommand{\@numberstringMfrenchswiss}[1]{%
+\let\@unitstring=\@@unitstringfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrenchswiss
+\let\@nineties=\@@ninetiesfrenchswiss
+\def\@hundred{cent}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\newcommand{\@numberstringMfrenchfrance}[1]{%
+\let\@unitstring=\@@unitstringfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\def\@hundred{cent}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\newcommand{\@numberstringMfrenchbelgian}[1]{%
+\let\@unitstring=\@@unitstringfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\def\@hundred{cent}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\let\@numberstringMfrench=\@numberstringMfrenchfrance
+
+\newcommand{\@numberstringFfrenchswiss}[1]{%
+\let\@unitstring=\@@unitstringFfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrenchswiss
+\let\@nineties=\@@ninetiesfrenchswiss
+\def\@hundred{cent}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\newcommand{\@numberstringFfrenchfrance}[1]{%
+\let\@unitstring=\@@unitstringFfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\def\@hundred{cent}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\newcommand{\@numberstringFfrenchbelgian}[1]{%
+\let\@unitstring=\@@unitstringFfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\def\@hundred{cent}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\let\@numberstringFfrench=\@numberstringFfrenchfrance
+
+\newcommand{\@NumberstringMfrenchswiss}[1]{%
+\let\@unitstring=\@@Unitstringfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrenchswiss
+\let\@nineties=\@@ninetiesfrenchswiss
+\def\@hundred{Cent}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\newcommand{\@NumberstringMfrenchfrance}[1]{%
+\let\@unitstring=\@@Unitstringfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\def\@hundred{Cent}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\newcommand{\@NumberstringMfrenchbelgian}[1]{%
+\let\@unitstring=\@@Unitstringfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\def\@hundred{Cent}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\let\@NumberstringMfrench=\@NumberstringMfrenchfrance
+
+\newcommand{\@NumberstringFfrenchswiss}[1]{%
+\let\@unitstring=\@@UnitstringFfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrenchswiss
+\let\@nineties=\@@ninetiesfrenchswiss
+\def\@hundred{Cent}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\newcommand{\@NumberstringFfrenchfrance}[1]{%
+\let\@unitstring=\@@UnitstringFfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\def\@hundred{Cent}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\newcommand{\@NumberstringFfrenchbelgian}[1]{%
+\let\@unitstring=\@@UnitstringFfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\def\@hundred{Cent}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@numberstringfrench{#1}}
+
+\let\@NumberstringFfrench=\@NumberstringFfrenchfrance
+
+\newcommand{\@ordinalstringMfrenchswiss}[1]{%
+\ifnum#1=1\relax
+premier%
+\else
+\let\@unitthstring=\@@unitthstringfrench
+\let\@unitstring=\@@unitstringfrench
+\let\@teenthstring=\@@teenthstringfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenthstring=\@@tenthstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventieths=\@@seventiethsfrenchswiss
+\let\@eightieths=\@@eightiethsfrenchswiss
+\let\@ninetieths=\@@ninetiethsfrenchswiss
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrenchswiss
+\let\@nineties=\@@ninetiesfrenchswiss
+\def\@hundredth{centi\`eme}\def\@hundred{cent}%
+\def\@thousandth{mili\`eme}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\newcommand{\@ordinalstringMfrenchfrance}[1]{%
+\ifnum#1=1\relax
+premier%
+\else
+\let\@unitthstring=\@@unitthstringfrench
+\let\@unitstring=\@@unitstringfrench
+\let\@teenthstring=\@@teenthstringfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenthstring=\@@tenthstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventieths=\@@seventiethsfrench
+\let\@eightieths=\@@eightiethsfrench
+\let\@ninetieths=\@@ninetiethsfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\let\@teenstring=\@@teenstringfrench
+\def\@hundredth{centi\`eme}\def\@hundred{cent}%
+\def\@thousandth{mili\`eme}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\newcommand{\@ordinalstringMfrenchbelgian}[1]{%
+\ifnum#1=1\relax
+premier%
+\else
+\let\@unitthstring=\@@unitthstringfrench
+\let\@unitstring=\@@unitstringfrench
+\let\@teenthstring=\@@teenthstringfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenthstring=\@@tenthstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventieths=\@@seventiethsfrenchswiss
+\let\@eightieths=\@@eightiethsfrench
+\let\@ninetieths=\@@ninetiethsfrenchswiss
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\let\@teenstring=\@@teenstringfrench
+\def\@hundredth{centi\`eme}\def\@hundred{cent}%
+\def\@thousandth{mili\`eme}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\let\@ordinalstringMfrench=\@ordinalstringMfrenchfrance
+
+\newcommand{\@ordinalstringFfrenchswiss}[1]{%
+\ifnum#1=1\relax
+premi\`ere%
+\else
+\let\@unitthstring=\@@unitthstringfrench
+\let\@unitstring=\@@unitstringFfrench
+\let\@teenthstring=\@@teenthstringfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenthstring=\@@tenthstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventieths=\@@seventiethsfrenchswiss
+\let\@eightieths=\@@eightiethsfrenchswiss
+\let\@ninetieths=\@@ninetiethsfrenchswiss
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrenchswiss
+\let\@nineties=\@@ninetiesfrenchswiss
+\def\@hundredth{centi\`eme}\def\@hundred{cent}%
+\def\@thousandth{mili\`eme}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\newcommand{\@ordinalstringFfrenchfrance}[1]{%
+\ifnum#1=1\relax
+premi\`ere%
+\else
+\let\@unitthstring=\@@unitthstringfrench
+\let\@unitstring=\@@unitstringFfrench
+\let\@teenthstring=\@@teenthstringfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenthstring=\@@tenthstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventieths=\@@seventiethsfrench
+\let\@eightieths=\@@eightiethsfrench
+\let\@ninetieths=\@@ninetiethsfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\let\@teenstring=\@@teenstringfrench
+\def\@hundredth{centi\`eme}\def\@hundred{cent}%
+\def\@thousandth{mili\`eme}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\newcommand{\@ordinalstringFfrenchbelgian}[1]{%
+\ifnum#1=1\relax
+premi\`ere%
+\else
+\let\@unitthstring=\@@unitthstringfrench
+\let\@unitstring=\@@unitstringFfrench
+\let\@teenthstring=\@@teenthstringfrench
+\let\@teenstring=\@@teenstringfrench
+\let\@tenthstring=\@@tenthstringfrench
+\let\@tenstring=\@@tenstringfrench
+\let\@seventieths=\@@seventiethsfrenchswiss
+\let\@eightieths=\@@eightiethsfrench
+\let\@ninetieths=\@@ninetiethsfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\let\@teenstring=\@@teenstringfrench
+\def\@hundredth{centi\`eme}\def\@hundred{cent}%
+\def\@thousandth{mili\`eme}\def\@thousand{mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\let\@ordinalstringFfrench=\@ordinalstringFfrenchfrance
+
+\newcommand{\@OrdinalstringMfrenchswiss}[1]{%
+\ifnum#1=1\relax
+Premi\`ere%
+\else
+\let\@unitthstring=\@@Unitthstringfrench
+\let\@unitstring=\@@Unitstringfrench
+\let\@teenthstring=\@@Teenthstringfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenthstring=\@@Tenthstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventieths=\@@seventiethsfrenchswiss
+\let\@eightieths=\@@eightiethsfrenchswiss
+\let\@ninetieths=\@@ninetiethsfrenchswiss
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrenchswiss
+\let\@nineties=\@@ninetiesfrenchswiss
+\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
+\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\newcommand{\@OrdinalstringMfrenchfrance}[1]{%
+\ifnum#1=1\relax
+Premi\`ere%
+\else
+\let\@unitthstring=\@@Unitthstringfrench
+\let\@unitstring=\@@Unitstringfrench
+\let\@teenthstring=\@@Teenthstringfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenthstring=\@@Tenthstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventieths=\@@seventiethsfrench
+\let\@eightieths=\@@eightiethsfrench
+\let\@ninetieths=\@@ninetiethsfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\let\@teenstring=\@@Teenstringfrench
+\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
+\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\newcommand{\@OrdinalstringMfrenchbelgian}[1]{%
+\ifnum#1=1\relax
+Premi\`ere%
+\else
+\let\@unitthstring=\@@Unitthstringfrench
+\let\@unitstring=\@@Unitstringfrench
+\let\@teenthstring=\@@Teenthstringfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenthstring=\@@Tenthstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventieths=\@@seventiethsfrenchswiss
+\let\@eightieths=\@@eightiethsfrench
+\let\@ninetieths=\@@ninetiethsfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\let\@teenstring=\@@Teenstringfrench
+\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
+\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\let\@OrdinalstringMfrench=\@OrdinalstringMfrenchfrance
+
+\newcommand{\@OrdinalstringFfrenchswiss}[1]{%
+\ifnum#1=1\relax
+Premi\`ere%
+\else
+\let\@unitthstring=\@@Unitthstringfrench
+\let\@unitstring=\@@UnitstringFfrench
+\let\@teenthstring=\@@Teenthstringfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenthstring=\@@Tenthstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventieths=\@@seventiethsfrenchswiss
+\let\@eightieths=\@@eightiethsfrenchswiss
+\let\@ninetieths=\@@ninetiethsfrenchswiss
+\let\@seventies=\@@seventiesfrenchswiss
+\let\@eighties=\@@eightiesfrenchswiss
+\let\@nineties=\@@ninetiesfrenchswiss
+\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
+\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\newcommand{\@OrdinalstringFfrenchfrance}[1]{%
+\ifnum#1=1\relax
+Premi\`ere%
+\else
+\let\@unitthstring=\@@Unitthstringfrench
+\let\@unitstring=\@@UnitstringFfrench
+\let\@teenthstring=\@@Teenthstringfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenthstring=\@@Tenthstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventieths=\@@seventiethsfrench
+\let\@eightieths=\@@eightiethsfrench
+\let\@ninetieths=\@@ninetiethsfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\let\@teenstring=\@@Teenstringfrench
+\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
+\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\newcommand{\@OrdinalstringFfrenchbelgian}[1]{%
+\ifnum#1=1\relax
+Premi\`ere%
+\else
+\let\@unitthstring=\@@Unitthstringfrench
+\let\@unitstring=\@@UnitstringFfrench
+\let\@teenthstring=\@@Teenthstringfrench
+\let\@teenstring=\@@Teenstringfrench
+\let\@tenthstring=\@@Tenthstringfrench
+\let\@tenstring=\@@Tenstringfrench
+\let\@seventieths=\@@seventiethsfrenchswiss
+\let\@eightieths=\@@eightiethsfrench
+\let\@ninetieths=\@@ninetiethsfrench
+\let\@seventies=\@@seventiesfrench
+\let\@eighties=\@@eightiesfrench
+\let\@nineties=\@@ninetiesfrench
+\let\@teenstring=\@@Teenstringfrench
+\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
+\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
+\def\@andname{et}%
+\@@ordinalstringfrench{#1}%
+\fi}
+
+\let\@OrdinalstringFfrench=\@OrdinalstringFfrenchfrance
+
+\newcommand{\@ordinalMfrench}[1]{%
+\iffmtord@abbrv
+#1\fmtord{e}%
+\else
+#1\ifnum#1=1\fmtord{er}\else\fmtord{eme}\fi
+\fi}
+
+\newcommand{\@ordinalFfrench}[1]{%
+\iffmtord@abbrv
+#1\fmtord{e}%
+\else
+#1\ifnum#1=1\fmtord{ere}\else\fmtord{eme}\fi
+\fi}
+
+\newcommand{\@@unitthstringfrench}[1]{%
+\ifcase#1\relax
+zero%
+\or uni\`eme%
+\or deuxi\`eme%
+\or troisi\`eme%
+\or quatri\`eme%
+\or cinqui\`eme%
+\or sixi\`eme%
+\or septi\`eme%
+\or huiti\`eme%
+\or neuvi\`eme%
+\fi
+}
+
+\newcommand{\@@tenthstringfrench}[1]{%
+\ifcase#1\relax
+\or dixi\`eme%
+\or vingti\`eme%
+\or trentri\`eme%
+\or quaranti\`eme%
+\or cinquanti\`eme%
+\or soixanti\`eme%
+\or septenti\`eme%
+\or huitanti\`eme%
+\or nonenti\`eme%
+\fi
+}
+
+\newcommand{\@@teenthstringfrench}[1]{%
+\ifcase#1\relax
+dixi\`eme%
+\or onzi\`eme%
+\or douzi\`eme%
+\or treizi\`eme%
+\or quatorzi\`eme%
+\or quinzi\`eme%
+\or seizi\`eme%
+\or dix-septi\`eme%
+\or dix-huiti\`eme%
+\or dix-neuvi\`eme%
+\fi
+}
+
+\newcommand{\@@seventiethsfrenchswiss}[1]{%
+\ifcase#1\relax
+\@tenthstring{7}%
+\or
+\@tenstring{7} \@andname\ \@unitthstring{1}%
+\else
+\@tenstring{7}-\@unitthstring{#1}%
+\fi}
+
+\newcommand{\@@eightiethsfrenchswiss}[1]{%
+\ifcase#1\relax
+\@tenthstring{8}%
+\or
+\@tenstring{8} \@andname\ \@unitthstring{1}%
+\else
+\@tenstring{8}-\@unitthstring{#1}%
+\fi}
+
+\newcommand{\@@ninetiethsfrenchswiss}[1]{%
+\ifcase#1\relax
+\@tenthstring{9}%
+\or
+\@tenstring{9} \@andname\ \@unitthstring{1}%
+\else
+\@tenstring{9}-\@unitthstring{#1}%
+\fi}
+
+\newcommand{\@@seventiethsfrench}[1]{%
+\ifnum#1=0\relax
+\@tenstring{6}%
+-%
+\else
+\@tenstring{6}%
+\ \@andname\
+\fi
+\@teenthstring{#1}%
+}
+
+\newcommand{\@@eightiethsfrench}[1]{%
+\ifnum#1>0\relax
+\@unitstring{4}-\@tenstring{2}%
+-\@unitthstring{#1}%
+\else
+\@unitstring{4}-\@tenthstring{2}%
+\fi
+}
+
+\newcommand{\@@ninetiethsfrench}[1]{%
+\@unitstring{4}-\@tenstring{2}-\@teenthstring{#1}%
+}
+
+\newcommand{\@@Unitthstringfrench}[1]{%
+\ifcase#1\relax
+Zero%
+\or Uni\`eme%
+\or Deuxi\`eme%
+\or Troisi\`eme%
+\or Quatri\`eme%
+\or Cinqui\`eme%
+\or Sixi\`eme%
+\or Septi\`eme%
+\or Huiti\`eme%
+\or Neuvi\`eme%
+\fi
+}
+
+\newcommand{\@@Tenthstringfrench}[1]{%
+\ifcase#1\relax
+\or Dixi\`eme%
+\or Vingti\`eme%
+\or Trentri\`eme%
+\or Quaranti\`eme%
+\or Cinquanti\`eme%
+\or Soixanti\`eme%
+\or Septenti\`eme%
+\or Huitanti\`eme%
+\or Nonenti\`eme%
+\fi
+}
+
+\newcommand{\@@Teenthstringfrench}[1]{%
+\ifcase#1\relax
+Dixi\`eme%
+\or Onzi\`eme%
+\or Douzi\`eme%
+\or Treizi\`eme%
+\or Quatorzi\`eme%
+\or Quinzi\`eme%
+\or Seizi\`eme%
+\or Dix-Septi\`eme%
+\or Dix-Huiti\`eme%
+\or Dix-Neuvi\`eme%
+\fi
+}
+
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\@@numberstringfrench}[1]{%
+\ifnum#1>99999
+\PackageError{fmtcount}{Out of range}%
+{This macro only works for values less than 100000}%
+\else
+\ifnum#1<0
+\PackageError{fmtcount}{Negative numbers not permitted}%
+{This macro does not work for negative numbers, however
+you can try typing "minus" first, and then pass the modulus of
+this number}%
+\fi
+\fi
+\@strctr=#1\relax \divide\@strctr by 1000\relax
+\ifnum\@strctr>9
+% #1 is greater or equal to 10000
+ \@tmpstrctr=\@strctr
+ \divide\@strctr by 10
+ \ifnum\@strctr>1
+ \ifthenelse{\(\@strctr>6\)\and\(\@strctr<10\)}{%
+ \@modulo{\@tmpstrctr}{10}%
+ \ifnum\@strctr<8\relax
+ \@seventies{\@tmpstrctr}%
+ \else
+ \ifnum\@strctr<9\relax
+ \@eighties{\@tmpstrctr}%
+ \else
+ \ifnum\@strctr<10\@nineties{\@tmpstrctr}\fi
+ \fi
+ \fi
+ }{%
+ \@tenstring{\@strctr}%
+ \@strctr=#1\relax
+ \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0\relax
+% \ifnum\@strctr=1\ \@andname\fi
+ \ \@unitstring{\@strctr}%
+ \fi
+ }%
+ \else
+ \@strctr=#1\relax
+ \divide\@strctr by 1000
+ \@modulo{\@strctr}{10}%
+ \@teenstring{\@strctr}%
+ \fi
+ \ \@thousand%
+\else
+ \ifnum\@strctr>0
+ \ifnum\@strctr>1\@unitstring{\@strctr}\ \fi
+ \@thousand
+ \fi
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{1000}%
+\divide\@strctr by 100
+\ifnum\@strctr>0\relax
+ \ifnum#1>1000 \ \fi
+ \@tmpstrctr=#1\relax
+ \@modulo{\@tmpstrctr}{1000}\relax
+ \ifnum\@tmpstrctr=100\relax
+ \@tenstring{10}\relax
+ \else
+ \ifnum\@strctr>1\@unitstring{\@strctr}\ \fi
+ \@hundred
+ \fi
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{100}%
+%\@tmpstrctr=#1\relax
+%\divide\@tmpstrctr by 100\relax
+\ifnum#1>100\relax
+ \ifnum\@strctr>0\relax
+\ % \ \@andname\
+ \else
+ \ifnum\@tmpstrctr>0s\fi%
+ \fi
+\fi
+\ifnum\@strctr>19
+\@tmpstrctr=\@strctr
+\divide\@strctr by 10
+\ifthenelse{\@strctr>6}{%
+\@modulo{\@tmpstrctr}{10}%
+\ifnum\@strctr<8
+\@seventies{\@tmpstrctr}%
+\else
+\ifnum\@strctr<9
+\@eighties{\@tmpstrctr}%
+\else
+\@nineties{\@tmpstrctr}%
+\fi
+\fi
+}{%
+\@tenstring{\@strctr}%
+\@strctr=#1\relax \@modulo{\@strctr}{10}%
+\ifnum\@strctr>0\relax
+ \ifnum\@strctr=1\ \@andname\ \else-\fi
+ \@unitstring{\@strctr}%
+\fi
+}%
+\else
+\ifnum\@strctr<10
+\ifnum\@strctr=0
+\ifnum#1<100 \@unitstring{\@strctr}\fi
+\else%(>0,<10)
+\@unitstring{\@strctr}%
+\fi
+\else%>10
+\@modulo{\@strctr}{10}%
+\@teenstring{\@strctr}%
+\fi
+\fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\@@ordinalstringfrench}[1]{%
+\ifnum#1>99999
+\PackageError{fmtcount}{Out of range}%
+{This macro only works for values less than 100000}%
+\else
+\ifnum#1<0
+\PackageError{fmtcount}{Negative numbers not permitted}%
+{This macro does not work for negative numbers, however
+you can try typing "minus" first, and then pass the modulus of
+this number}%
+\fi
+\fi
+\@strctr=#1\relax \divide\@strctr by 1000\relax
+\ifnum\@strctr>9
+% #1 is greater or equal to 10000
+ \@tmpstrctr=\@strctr
+ \divide\@strctr by 10\relax
+ \ifnum\@strctr>1\relax
+ \ifthenelse{\@strctr>6}{%
+ \@modulo{\@tmpstrctr}{10}%
+ \ifnum\@strctr=7\relax
+ \@seventies{\@tmpstrctr}%
+ \else
+ \ifnum\@strctr=8\relax
+ \@eighties{\@tmpstrctr}%
+ \else
+ \@nineties{\@tmpstrctr}%
+ \fi
+ \fi
+ }{%
+ \@tenstring{\@strctr}%
+ \@strctr=#1\relax
+ \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \ifnum\@strctr=1\ \@andname\fi
+ \ifnum\@strctr>0\ \@unitstring{\@strctr}\fi
+ }%
+ \else
+ \@strctr=#1\relax
+ \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \@teenstring{\@strctr}%
+ \fi
+ \@strctr=#1\relax \@modulo{\@strctr}{1000}%
+ \ifnum\@strctr=0\ \@thousandth\else\ \@thousand \fi
+\else
+ \ifnum\@strctr>0\relax
+ \@unitstring{\@strctr}%
+ \@strctr=#1\relax \@modulo{\@strctr}{1000}%
+ \ifnum\@strctr=0\ \@thousandth\else\ \@thousand\fi
+ \fi
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{1000}%
+\divide\@strctr by 100
+\ifnum\@strctr>0
+\ifnum#1>1000 \ \fi\@unitstring{\@strctr}%
+\@strctr=#1\relax \@modulo{\@strctr}{100}%
+\ifnum\@strctr=0\ \@hundredth\else\ \@hundred\fi
+\fi
+\@tmpstrctr=\@strctr
+\@strctr=#1\relax \@modulo{\@strctr}{100}%
+\ifnum#1>100\relax
+\ifnum\@strctr>0\ \@andname\ \fi\fi
+\ifnum\@strctr>19
+\@tmpstrctr=\@strctr
+\divide\@strctr by 10
+\@modulo{\@tmpstrctr}{10}%
+\ifthenelse{\@strctr>6}{%
+\ifnum\@strctr=7\relax
+\@seventieths{\@tmpstrctr}%
+\else
+\ifnum\@strctr=8\relax
+\@eightieths{\@tmpstrctr}%
+\else
+\@ninetieths{\@tmpstrctr}%
+\fi
+\fi
+}{%
+\ifnum\@tmpstrctr=0\relax
+ \@tenthstring{\@strctr}%
+\else
+ \@tenstring{\@strctr}%
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{10}%
+\ifnum\@strctr=1\ \@andname\fi
+\ifnum\@strctr>0
+\ \@unitthstring{\@strctr}%
+\fi
+}%
+\else
+\ifnum\@strctr<10
+\ifnum\@strctr=0
+\ifnum#1<100 \@unitthstring{\@strctr}\fi
+\else
+\@unitthstring{\@strctr}%
+\fi
+\else
+\@modulo{\@strctr}{10}%
+\@teenthstring{\@strctr}%
+\fi
+\fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</fc-french.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*fc-portuges.def>
+% \end{macrocode}
+% Portuguse
+% \begin{macrocode}
+\ProvidesFile{fc-portuges.def}[2005/04/29]
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\@@unitstringportuges}[1]{%
+\ifcase#1\relax
+zero%
+\or um%
+\or dois%
+\or tr\`es%
+\or quatro%
+\or cinco%
+\or seis%
+\or sete%
+\or oito%
+\or nove%
+\fi
+}
+
+\newcommand{\@@unitstringFportuges}[1]{%
+\ifcase#1\relax
+zero%
+\or uma%
+\or duas%
+\or tr\`es%
+\or quatro%
+\or cinco%
+\or seis%
+\or sete%
+\or oito%
+\or nove%
+\fi
+}
+
+\newcommand{\@@tenstringportuges}[1]{%
+\ifcase#1\relax
+\or dez%
+\or vinte%
+\or trinta%
+\or quarenta%
+\or cinq\"uenta%
+\or sessenta%
+\or setenta%
+\or oitenta%
+\or noventa%
+\or cem%
+\fi
+}
+
+\newcommand{\@@teenstringportuges}[1]{%
+\ifcase#1\relax
+dez%
+\or onze%
+\or doze%
+\or treze%
+\or quatorze%
+\or quinze%
+\or dezesseis%
+\or dezessete%
+\or dezoito%
+\or dezenove%
+\fi
+}
+
+\newcommand{\@@hundredstringportuges}[1]{%
+\ifcase#1\relax
+\or cento%
+\or duzentos%
+\or trezentos%
+\or quatrocentos%
+\or quinhentos%
+\or seiscentos%
+\or setecentos%
+\or oitocentos%
+\or novecentos%
+\fi}
+
+\newcommand{\@@hundredstringFportuges}[1]{%
+\ifcase#1\relax
+\or centa%
+\or duzentas%
+\or trezentas%
+\or quatrocentas%
+\or quinhentas%
+\or seiscentas%
+\or setecentas%
+\or oitocentas%
+\or novecentas%
+\fi}
+
+\newcommand{\@@Unitstringportuges}[1]{%
+\ifcase#1\relax
+Zero%
+\or Um%
+\or Dois%
+\or Tr\`es%
+\or Quatro%
+\or Cinco%
+\or Seis%
+\or Sete%
+\or Oito%
+\or Nove%
+\fi
+}
+
+\newcommand{\@@UnitstringFportuges}[1]{%
+\ifcase#1\relax
+Zera%
+\or Uma%
+\or Duas%
+\or Tr\`es%
+\or Quatro%
+\or Cinco%
+\or Seis%
+\or Sete%
+\or Oito%
+\or Nove%
+\fi
+}
+
+\newcommand{\@@Tenstringportuges}[1]{%
+\ifcase#1\relax
+\or Dez%
+\or Vinte%
+\or Trinta%
+\or Quarenta%
+\or Cinq\"uenta%
+\or Sessenta%
+\or Setenta%
+\or Oitenta%
+\or Noventa%
+\or Cem%
+\fi
+}
+
+\newcommand{\@@Teenstringportuges}[1]{%
+\ifcase#1\relax
+Dez%
+\or Onze%
+\or Doze%
+\or Treze%
+\or Quatorze%
+\or Quinze%
+\or Dezesseis%
+\or Dezessete%
+\or Dezoito%
+\or Dezenove%
+\fi
+}
+
+\newcommand{\@@Hundredstringportuges}[1]{%
+\ifcase#1\relax
+\or Cento%
+\or Duzentos%
+\or Trezentos%
+\or Quatrocentos%
+\or Quinhentos%
+\or Seiscentos%
+\or Setecentos%
+\or Oitocentos%
+\or Novecentos%
+\fi}
+
+\newcommand{\@@HundredstringFportuges}[1]{%
+\ifcase#1\relax
+\or Centa%
+\or Duzentas%
+\or Trezentas%
+\or Quatrocentas%
+\or Quinhentas%
+\or Seiscentas%
+\or Setecentas%
+\or Oitocentas%
+\or Novecentas%
+\fi}
+
+\newcommand{\@numberstringMportuges}[1]{%
+\let\@unitstring=\@@unitstringportuges
+\let\@teenstring=\@@teenstringportuges
+\let\@tenstring=\@@tenstringportuges
+\let\@hundredstring=\@@hundredstringportuges
+\def\@hundred{cem}\def\@thousand{mil}%
+\def\@andname{e}%
+\@@numberstringportuges{#1}}
+
+\newcommand{\@numberstringFportuges}[1]{%
+\let\@unitstring=\@@unitstringFportuges
+\let\@teenstring=\@@teenstringportuges
+\let\@tenstring=\@@tenstringportuges
+\let\@hundredstring=\@@hundredstringFportuges
+\def\@hundred{cem}\def\@thousand{mil}%
+\def\@andname{e}%
+\@@numberstringportuges{#1}}
+
+\newcommand{\@NumberstringMportuges}[1]{%
+\let\@unitstring=\@@Unitstringportuges
+\let\@teenstring=\@@Teenstringportuges
+\let\@tenstring=\@@Tenstringportuges
+\let\@hundredstring=\@@Hundredstringportuges
+\def\@hundred{Cem}\def\@thousand{Mil}%
+\def\@andname{e}%
+\@@numberstringportuges{#1}}
+
+\newcommand{\@NumberstringFportuges}[1]{%
+\let\@unitstring=\@@UnitstringFportuges
+\let\@teenstring=\@@Teenstringportuges
+\let\@tenstring=\@@Tenstringportuges
+\let\@hundredstring=\@@HundredstringFportuges
+\def\@hundred{Cem}\def\@thousand{Mil}%
+\def\@andname{e}%
+\@@numberstringportuges{#1}}
+
+\newcommand{\@ordinalstringMportuges}[1]{%
+\let\@unitthstring=\@@unitthstringportuges
+\let\@unitstring=\@@unitstringportuges
+\let\@teenthstring=\@@teenthstringportuges
+\let\@tenthstring=\@@tenthstringportuges
+\let\@hundredthstring=\@@hundredthstringportuges
+\def\@thousandth{mil\'esimo}%
+\@@ordinalstringportuges{#1}}
+
+\newcommand{\@ordinalstringFportuges}[1]{%
+\let\@unitthstring=\@@unitthstringFportuges
+\let\@unitstring=\@@unitstringFportuges
+\let\@teenthstring=\@@teenthstringportuges
+\let\@tenthstring=\@@tenthstringFportuges
+\let\@hundredthstring=\@@hundredthstringFportuges
+\def\@thousandth{mil\'esima}%
+\@@ordinalstringportuges{#1}}
+
+\newcommand{\@OrdinalstringMportuges}[1]{%
+\let\@unitthstring=\@@Unitthstringportuges
+\let\@unitstring=\@@Unitstringportuges
+\let\@teenthstring=\@@teenthstringportuges
+\let\@tenthstring=\@@Tenthstringportuges
+\let\@hundredthstring=\@@Hundredthstringportuges
+\def\@thousandth{Mil\'esimo}%
+\@@ordinalstringportuges{#1}}
+
+\newcommand{\@OrdinalstringFportuges}[1]{%
+\let\@unitthstring=\@@UnitthstringFportuges
+\let\@unitstring=\@@UnitstringFportuges
+\let\@teenthstring=\@@teenthstringportuges
+\let\@tenthstring=\@@TenthstringFportuges
+\let\@hundredthstring=\@@HundredthstringFportuges
+\def\@thousandth{Mil\'esima}%
+\@@ordinalstringportuges{#1}}
+
+\newcommand{\@ordinalMportuges}[1]{%
+#1\ifnum#1=0\else\fmtord{o}\fi}
+\newcommand{\@ordinalFportuges}[1]{%
+#1\ifnum#1=0\else\fmtord{a}\fi}
+
+\newcommand{\@@unitthstringportuges}[1]{%
+\ifcase#1\relax
+zero%
+\or primeiro%
+\or segundo%
+\or terceiro%
+\or quarto%
+\or quinto%
+\or sexto%
+\or s\'etimo%
+\or oitavo%
+\or nono%
+\fi
+}
+
+\newcommand{\@@tenthstringportuges}[1]{%
+\ifcase#1\relax
+\or d\'ecimo%
+\or vig\'esimo%
+\or trig\'esimo%
+\or quadrag\'esimo%
+\or q\"uinquag\'esimo%
+\or sexag\'esimo%
+\or setuag\'esimo%
+\or octog\'esimo%
+\or nonag\'esimo%
+\fi
+}
+
+\newcommand{\@@teenthstringportuges}[1]{%
+\@tenthstring{1}%
+\ifnum#1>0\relax
+-\@unitthstring{#1}%
+\fi}
+
+\newcommand{\@@hundredthstringportuges}[1]{%
+\ifcase#1\relax
+\or cent\'esimo%
+\or ducent\'esimo%
+\or trecent\'esimo%
+\or quadringent\'esimo%
+\or q\"uingent\'esimo%
+\or seiscent\'esimo%
+\or setingent\'esimo%
+\or octingent\'esimo%
+\or nongent\'esimo%
+\fi}
+
+\newcommand{\@@unitthstringFportuges}[1]{%
+\ifcase#1\relax
+zero%
+\or primeira%
+\or segunda%
+\or terceira%
+\or quarta%
+\or quinta%
+\or sexta%
+\or s\'etima%
+\or oitava%
+\or nona%
+\fi
+}
+
+\newcommand{\@@tenthstringFportuges}[1]{%
+\ifcase#1\relax
+\or d\'ecima%
+\or vig\'esima%
+\or trig\'esima%
+\or quadrag\'esima%
+\or q\"uinquag\'esima%
+\or sexag\'esima%
+\or setuag\'esima%
+\or octog\'esima%
+\or nonag\'esima%
+\fi
+}
+
+\newcommand{\@@hundredthstringFportuges}[1]{%
+\ifcase#1\relax
+\or cent\'esima%
+\or ducent\'esima%
+\or trecent\'esima%
+\or quadringent\'esima%
+\or q\"uingent\'esima%
+\or seiscent\'esima%
+\or setingent\'esima%
+\or octingent\'esima%
+\or nongent\'esima%
+\fi}
+
+\newcommand{\@@Unitthstringportuges}[1]{%
+\ifcase#1\relax
+Zero%
+\or Primeiro%
+\or Segundo%
+\or Terceiro%
+\or Quarto%
+\or Quinto%
+\or Sexto%
+\or S\'etimo%
+\or Oitavo%
+\or Nono%
+\fi
+}
+
+\newcommand{\@@Tenthstringportuges}[1]{%
+\ifcase#1\relax
+\or D\'ecimo%
+\or Vig\'esimo%
+\or Trig\'esimo%
+\or Quadrag\'esimo%
+\or Q\"uinquag\'esimo%
+\or Sexag\'esimo%
+\or Setuag\'esimo%
+\or Octog\'esimo%
+\or Nonag\'esimo%
+\fi
+}
+
+\newcommand{\@@Hundredthstringportuges}[1]{%
+\ifcase#1\relax
+\or Cent\'esimo%
+\or Ducent\'esimo%
+\or Trecent\'esimo%
+\or Quadringent\'esimo%
+\or Q\"uingent\'esimo%
+\or Seiscent\'esimo%
+\or Setingent\'esimo%
+\or Octingent\'esimo%
+\or Nongent\'esimo%
+\fi}
+
+\newcommand{\@@UnitthstringFportuges}[1]{%
+\ifcase#1\relax
+Zera%
+\or Primeira%
+\or Segunda%
+\or Terceira%
+\or Quarta%
+\or Quinta%
+\or Sexta%
+\or S\'etima%
+\or Oitava%
+\or Nona%
+\fi
+}
+
+\newcommand{\@@TenthstringFportuges}[1]{%
+\ifcase#1\relax
+\or D\'ecima%
+\or Vig\'esima%
+\or Trig\'esima%
+\or Quadrag\'esima%
+\or Q\"uinquag\'esima%
+\or Sexag\'esima%
+\or Setuag\'esima%
+\or Octog\'esima%
+\or Nonag\'esima%
+\fi
+}
+
+\newcommand{\@@HundredthstringFportuges}[1]{%
+\ifcase#1\relax
+\or Cent\'esima%
+\or Ducent\'esima%
+\or Trecent\'esima%
+\or Quadringent\'esima%
+\or Q\"uingent\'esima%
+\or Seiscent\'esima%
+\or Setingent\'esima%
+\or Octingent\'esima%
+\or Nongent\'esima%
+\fi}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\@@numberstringportuges}[1]{%
+\ifnum#1>99999
+\PackageError{fmtcount}{Out of range}%
+{This macro only works for values less than 100000}%
+\else
+\ifnum#1<0
+\PackageError{fmtcount}{Negative numbers not permitted}%
+{This macro does not work for negative numbers, however
+you can try typing "minus" first, and then pass the modulus of
+this number}%
+\fi
+\fi
+\@strctr=#1\relax \divide\@strctr by 1000\relax
+\ifnum\@strctr>9
+% #1 is greater or equal to 10000
+ \divide\@strctr by 10
+ \ifnum\@strctr>1
+ \@tenstring{\@strctr}%
+ \@strctr=#1 \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0
+ \ifnum\@strctr=1\ \@andname\fi
+ \ \@unitstring{\@strctr}%
+ \fi
+ \else
+ \@strctr=#1\relax
+ \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \@teenstring{\@strctr}%
+ \fi
+ \ \@thousand%
+\else
+ \ifnum\@strctr>0
+ \ifnum\@strctr>1\@unitstring{\@strctr}\ \fi
+ \@thousand
+ \fi
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{1000}%
+\divide\@strctr by 100
+\ifnum\@strctr>0
+\ifnum#1>1000 \ \fi
+\@tmpstrctr=#1\relax
+\@modulo{\@tmpstrctr}{1000}%
+\ifnum\@tmpstrctr=100\@tenstring{10}\else\@hundredstring{\@strctr}\fi%
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{100}%
+\ifnum#1>100 \ifnum\@strctr>0\ \@andname\ \fi\fi
+\ifnum\@strctr>19
+\divide\@strctr by 10
+\@tenstring{\@strctr}%
+\@strctr=#1\relax \@modulo{\@strctr}{10}%
+\ifnum\@strctr>0
+\ifnum\@strctr=1\ \@andname\else\ifnum#1>100\ \@andname\fi\fi
+\ \@unitstring{\@strctr}%
+\fi
+\else
+\ifnum\@strctr<10
+\ifnum\@strctr=0
+\ifnum#1<100 \@unitstring{\@strctr}\fi
+\else%(>0,<10)
+\@unitstring{\@strctr}%
+\fi
+\else%>10
+\@modulo{\@strctr}{10}%
+\@teenstring{\@strctr}%
+\fi
+\fi
+}
+
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\@@ordinalstringportuges}[1]{%
+\@strctr=#1\relax
+\ifnum#1>99999
+\PackageError{fmtcount}{Out of range}%
+{This macro only works for values less than 100000}%
+\else
+\ifnum#1<0
+\PackageError{fmtcount}{Negative numbers not permitted}%
+{This macro does not work for negative numbers, however
+you can try typing "minus" first, and then pass the modulus of
+this number}%
+\else
+\ifnum\@strctr>999\relax
+ \divide\@strctr by 1000\relax
+ \ifnum\@strctr>1\relax
+ \ifnum\@strctr>9\relax
+ \@tmpstrctr=\@strctr
+ \ifnum\@strctr<20
+ \@modulo{\@tmpstrctr}{10}%
+ \@teenthstring{\@tmpstrctr}
+ \else
+ \divide\@tmpstrctr by 10\relax
+ \@tenthstring{\@tmpstrctr}
+ \@tmpstrctr=\@strctr
+ \@modulo{\@tmpstrctr}{10}%
+ \ifnum\@tmpstrctr>0\@unitthstring{\@tmpstrctr} \fi
+ \fi
+ \else
+ \@unitstring{\@strctr}
+ \fi
+ \fi
+ \@thousandth
+\fi
+\@strctr=#1\relax
+\@modulo{\@strctr}{1000}%
+\ifnum\@strctr>99\relax
+\@tmpstrctr=\@strctr
+\divide\@tmpstrctr by 100\relax
+\ifnum#1>1000-\fi
+\@hundredthstring{\@tmpstrctr}%
+\fi
+\@modulo{\@strctr}{100}%
+\ifnum#1>99\ifnum\@strctr>0-\fi\fi
+\ifnum\@strctr>9\relax
+\@tmpstrctr=\@strctr
+\divide\@tmpstrctr by 10\relax
+\@tenthstring{\@tmpstrctr}%
+\@tmpstrctr=\@strctr
+\@modulo{\@tmpstrctr}{10}%
+\ifnum\@tmpstrctr>0-\@unitthstring{\@tmpstrctr}\fi
+\else
+\ifnum\@strctr=0\relax
+\ifnum#1=0\@unitstring{0}\fi
+\else
+\@unitthstring{\@strctr}%
+\fi
+\fi
+\fi
+\fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</fc-portuges.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*fc-spanish.def>
+% \end{macrocode}
+% Spanish
+% \begin{macrocode}
+\ProvidesFile{fc-spanish.def}[2005/04/29]
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\@@unitstringspanish}[1]{%
+\ifcase#1\relax
+cero%
+\or uno%
+\or dos%
+\or tres%
+\or cuatro%
+\or cinco%
+\or seis%
+\or siete%
+\or ocho%
+\or nueve%
+\fi
+}
+
+\newcommand{\@@unitstringFspanish}[1]{%
+\ifcase#1\relax
+cera%
+\or una%
+\or dos%
+\or tres%
+\or cuatro%
+\or cinco%
+\or seis%
+\or siete%
+\or ocho%
+\or nueve%
+\fi
+}
+
+\newcommand{\@@tenstringspanish}[1]{%
+\ifcase#1\relax
+\or diez%
+\or viente%
+\or treinta%
+\or cuarenta%
+\or cincuenta%
+\or sesenta%
+\or setenta%
+\or ochenta%
+\or noventa%
+\or cien%
+\fi
+}
+
+\newcommand{\@@teenstringspanish}[1]{%
+\ifcase#1\relax
+diez%
+\or once%
+\or doce%
+\or trece%
+\or catorce%
+\or quince%
+\or diecis\'eis%
+\or diecisiete%
+\or dieciocho%
+\or diecinueve%
+\fi
+}
+
+\newcommand{\@@twentystringspanish}[1]{%
+\ifcase#1\relax
+veinte%
+\or veintiuno%
+\or veintid\'os%
+\or veintitr\'es%
+\or veinticuatro%
+\or veinticinco%
+\or veintis\'eis%
+\or veintisiete%
+\or veintiocho%
+\or veintinueve%
+\fi}
+
+\newcommand{\@@twentystringFspanish}[1]{%
+\ifcase#1\relax
+veinte%
+\or veintiuna%
+\or veintid\'os%
+\or veintitr\'es%
+\or veinticuatro%
+\or veinticinco%
+\or veintis\'eis%
+\or veintisiete%
+\or veintiocho%
+\or veintinueve%
+\fi}
+
+\newcommand{\@@hundredstringspanish}[1]{%
+\ifcase#1\relax
+\or ciento%
+\or doscientos%
+\or trescientos%
+\or cuatrocientos%
+\or quinientos%
+\or seiscientos%
+\or setecientos%
+\or ochocientos%
+\or novecientos%
+\fi}
+
+\newcommand{\@@hundredstringFspanish}[1]{%
+\ifcase#1\relax
+\or cienta%
+\or doscientas%
+\or trescientas%
+\or cuatrocientas%
+\or quinientas%
+\or seiscientas%
+\or setecientas%
+\or ochocientas%
+\or novecientas%
+\fi}
+
+\newcommand{\@@Unitstringspanish}[1]{%
+\ifcase#1\relax
+Cero%
+\or Uno%
+\or Dos%
+\or Tres%
+\or Cuatro%
+\or Cinco%
+\or Seis%
+\or Siete%
+\or Ocho%
+\or Nueve%
+\fi
+}
+
+\newcommand{\@@UnitstringFspanish}[1]{%
+\ifcase#1\relax
+Cera%
+\or Una%
+\or Dos%
+\or Tres%
+\or Cuatro%
+\or Cinco%
+\or Seis%
+\or Siete%
+\or Ocho%
+\or Nueve%
+\fi
+}
+
+\newcommand{\@@Tenstringspanish}[1]{%
+\ifcase#1\relax
+\or Diez%
+\or Viente%
+\or Treinta%
+\or Cuarenta%
+\or Cincuenta%
+\or Sesenta%
+\or Setenta%
+\or Ochenta%
+\or Noventa%
+\or Cien%
+\fi
+}
+
+\newcommand{\@@Teenstringspanish}[1]{%
+\ifcase#1\relax
+Diez%
+\or Once%
+\or Doce%
+\or Trece%
+\or Catorce%
+\or Quince%
+\or Diecis\'eis%
+\or Diecisiete%
+\or Dieciocho%
+\or Diecinueve%
+\fi
+}
+
+\newcommand{\@@Twentystringspanish}[1]{%
+\ifcase#1\relax
+Veinte%
+\or Veintiuno%
+\or Veintid\'os%
+\or Veintitr\'es%
+\or Veinticuatro%
+\or Veinticinco%
+\or Veintis\'eis%
+\or Veintisiete%
+\or Veintiocho%
+\or Veintinueve%
+\fi}
+
+\newcommand{\@@TwentystringFspanish}[1]{%
+\ifcase#1\relax
+Veinte%
+\or Veintiuna%
+\or Veintid\'os%
+\or Veintitr\'es%
+\or Veinticuatro%
+\or Veinticinco%
+\or Veintis\'eis%
+\or Veintisiete%
+\or Veintiocho%
+\or Veintinueve%
+\fi}
+
+\newcommand{\@@Hundredstringspanish}[1]{%
+\ifcase#1\relax
+\or Ciento%
+\or Doscientos%
+\or Trescientos%
+\or Cuatrocientos%
+\or Quinientos%
+\or Seiscientos%
+\or Setecientos%
+\or Ochocientos%
+\or Novecientos%
+\fi}
+
+\newcommand{\@@HundredstringFspanish}[1]{%
+\ifcase#1\relax
+\or Cienta%
+\or Doscientas%
+\or Trescientas%
+\or Cuatrocientas%
+\or Quinientas%
+\or Seiscientas%
+\or Setecientas%
+\or Ochocientas%
+\or Novecientas%
+\fi}
+
+\newcommand{\@numberstringMspanish}[1]{%
+\let\@unitstring=\@@unitstringspanish
+\let\@teenstring=\@@teenstringspanish
+\let\@tenstring=\@@tenstringspanish
+\let\@twentystring=\@@twentystringspanish
+\let\@hundredstring=\@@hundredstringspanish
+\def\@hundred{cien}\def\@thousand{mil}%
+\def\@andname{y}%
+\@@numberstringspanish{#1}}
+
+\newcommand{\@numberstringFspanish}[1]{%
+\let\@unitstring=\@@unitstringFspanish
+\let\@teenstring=\@@teenstringspanish
+\let\@tenstring=\@@tenstringspanish
+\let\@twentystring=\@@twentystringFspanish
+\let\@hundredstring=\@@hundredstringFspanish
+\def\@hundred{cien}\def\@thousand{mil}%
+\def\@andname{y}%
+\@@numberstringspanish{#1}}
+
+\newcommand{\@NumberstringMspanish}[1]{%
+\let\@unitstring=\@@Unitstringspanish
+\let\@teenstring=\@@Teenstringspanish
+\let\@tenstring=\@@Tenstringspanish
+\let\@twentystring=\@@Twentystringspanish
+\let\@hundredstring=\@@Hundredstringspanish
+\def\@andname{y}%
+\def\@hundred{Cien}\def\@thousand{Mil}%
+\@@numberstringspanish{#1}}
+
+\newcommand{\@NumberstringFspanish}[1]{%
+\let\@unitstring=\@@UnitstringFspanish
+\let\@teenstring=\@@Teenstringspanish
+\let\@tenstring=\@@Tenstringspanish
+\let\@twentystring=\@@TwentystringFspanish
+\let\@hundredstring=\@@HundredstringFspanish
+\def\@andname{y}%
+\def\@hundred{Cien}\def\@thousand{Mil}%
+\@@numberstringspanish{#1}}
+
+\newcommand{\@ordinalstringMspanish}[1]{%
+\let\@unitthstring=\@@unitthstringspanish
+\let\@unitstring=\@@unitstringspanish
+\let\@teenthstring=\@@teenthstringspanish
+\let\@tenthstring=\@@tenthstringspanish
+\let\@hundredthstring=\@@hundredthstringspanish
+\def\@thousandth{mil\'esimo}%
+\@@ordinalstringspanish{#1}}
+
+\newcommand{\@ordinalstringFspanish}[1]{%
+\let\@unitthstring=\@@unitthstringFspanish
+\let\@unitstring=\@@unitstringFspanish
+\let\@teenthstring=\@@teenthstringFspanish
+\let\@tenthstring=\@@tenthstringFspanish
+\let\@hundredthstring=\@@hundredthstringFspanish
+\def\@thousandth{mil\'esima}%
+\@@ordinalstringspanish{#1}}
+
+\newcommand{\@OrdinalstringMspanish}[1]{%
+\let\@unitthstring=\@@Unitthstringspanish
+\let\@unitstring=\@@Unitstringspanish
+\let\@teenthstring=\@@Teenthstringspanish
+\let\@tenthstring=\@@Tenthstringspanish
+\let\@hundredthstring=\@@Hundredthstringspanish
+\def\@thousandth{Mil\'esimo}%
+\@@ordinalstringspanish{#1}}
+
+\newcommand{\@OrdinalstringFspanish}[1]{%
+\let\@unitthstring=\@@UnitthstringFspanish
+\let\@unitstring=\@@UnitstringFspanish
+\let\@teenthstring=\@@TeenthstringFspanish
+\let\@tenthstring=\@@TenthstringFspanish
+\let\@hundredthstring=\@@HundredthstringFspanish
+\def\@thousandth{Mil\'esima}%
+\@@ordinalstringspanish{#1}}
+
+\newcommand{\@ordinalMspanish}[1]{#1\fmtord{o}}
+\newcommand{\@ordinalFspanish}[1]{#1\fmtord{a}}
+
+\newcommand{\@@unitthstringspanish}[1]{%
+\ifcase#1\relax
+cero%
+\or primero%
+\or segundo%
+\or tercero%
+\or cuarto%
+\or quinto%
+\or sexto%
+\or s\'eptimo%
+\or octavo%
+\or noveno%
+\fi
+}
+
+\newcommand{\@@tenthstringspanish}[1]{%
+\ifcase#1\relax
+\or d\'ecimo%
+\or vig\'esimo%
+\or trig\'esimo%
+\or cuadrag\'esimo%
+\or quincuag\'esimo%
+\or sexag\'esimo%
+\or septuag\'esimo%
+\or octog\'esimo%
+\or nonag\'esimo%
+\fi
+}
+
+\newcommand{\@@teenthstringspanish}[1]{%
+\ifcase#1\relax
+d\'ecimo%
+\or und\'ecimo%
+\or duod\'ecimo%
+\or decimotercero%
+\or decimocuarto%
+\or decimoquinto%
+\or decimosexto%
+\or decimos\'eptimo%
+\or decimoctavo%
+\or decimonoveno%
+\fi
+}
+
+\newcommand{\@@hundredthstringspanish}[1]{%
+\ifcase#1\relax
+\or cent\'esimo%
+\or ducent\'esimo%
+\or tricent\'esimo%
+\or cuadringent\'esimo%
+\or quingent\'esimo%
+\or sexcent\'esimo%
+\or septing\'esimo%
+\or octingent\'esimo%
+\or noningent\'esimo%
+\fi}
+
+\newcommand{\@@unitthstringFspanish}[1]{%
+\ifcase#1\relax
+cera%
+\or primera%
+\or segunda%
+\or tercera%
+\or cuarta%
+\or quinta%
+\or sexta%
+\or s\'eptima%
+\or octava%
+\or novena%
+\fi
+}
+
+\newcommand{\@@tenthstringFspanish}[1]{%
+\ifcase#1\relax
+\or d\'ecima%
+\or vig\'esima%
+\or trig\'esima%
+\or cuadrag\'esima%
+\or quincuag\'esima%
+\or sexag\'esima%
+\or septuag\'esima%
+\or octog\'esima%
+\or nonag\'esima%
+\fi
+}
+
+\newcommand{\@@teenthstringFspanish}[1]{%
+\ifcase#1\relax
+d\'ecima%
+\or und\'ecima%
+\or duod\'ecima%
+\or decimotercera%
+\or decimocuarta%
+\or decimoquinta%
+\or decimosexta%
+\or decimos\'eptima%
+\or decimoctava%
+\or decimonovena%
+\fi
+}
+
+\newcommand{\@@hundredthstringFspanish}[1]{%
+\ifcase#1\relax
+\or cent\'esima%
+\or ducent\'esima%
+\or tricent\'esima%
+\or cuadringent\'esima%
+\or quingent\'esima%
+\or sexcent\'esima%
+\or septing\'esima%
+\or octingent\'esima%
+\or noningent\'esima%
+\fi}
+
+\newcommand{\@@Unitthstringspanish}[1]{%
+\ifcase#1\relax
+Cero%
+\or Primero%
+\or Segundo%
+\or Tercero%
+\or Cuarto%
+\or Quinto%
+\or Sexto%
+\or S\'eptimo%
+\or Octavo%
+\or Noveno%
+\fi
+}
+
+\newcommand{\@@Tenthstringspanish}[1]{%
+\ifcase#1\relax
+\or D\'ecimo%
+\or Vig\'esimo%
+\or Trig\'esimo%
+\or Cuadrag\'esimo%
+\or Quincuag\'esimo%
+\or Sexag\'esimo%
+\or Septuag\'esimo%
+\or Octog\'esimo%
+\or Nonag\'esimo%
+\fi
+}
+
+\newcommand{\@@Teenthstringspanish}[1]{%
+\ifcase#1\relax
+D\'ecimo%
+\or Und\'ecimo%
+\or Duod\'ecimo%
+\or Decimotercero%
+\or Decimocuarto%
+\or Decimoquinto%
+\or Decimosexto%
+\or Decimos\'eptimo%
+\or Decimoctavo%
+\or Decimonoveno%
+\fi
+}
+
+\newcommand{\@@Hundredthstringspanish}[1]{%
+\ifcase#1\relax
+\or Cent\'esimo%
+\or Ducent\'esimo%
+\or Tricent\'esimo%
+\or Cuadringent\'esimo%
+\or Quingent\'esimo%
+\or Sexcent\'esimo%
+\or Septing\'esimo%
+\or Octingent\'esimo%
+\or Noningent\'esimo%
+\fi}
+
+\newcommand{\@@UnitthstringFspanish}[1]{%
+\ifcase#1\relax
+Cera%
+\or Primera%
+\or Segunda%
+\or Tercera%
+\or Cuarta%
+\or Quinta%
+\or Sexta%
+\or S\'eptima%
+\or Octava%
+\or Novena%
+\fi
+}
+
+\newcommand{\@@TenthstringFspanish}[1]{%
+\ifcase#1\relax
+\or D\'ecima%
+\or Vig\'esima%
+\or Trig\'esima%
+\or Cuadrag\'esima%
+\or Quincuag\'esima%
+\or Sexag\'esima%
+\or Septuag\'esima%
+\or Octog\'esima%
+\or Nonag\'esima%
+\fi
+}
+
+\newcommand{\@@TeenthstringFspanish}[1]{%
+\ifcase#1\relax
+D\'ecima%
+\or Und\'ecima%
+\or Duod\'ecima%
+\or Decimotercera%
+\or Decimocuarta%
+\or Decimoquinta%
+\or Decimosexta%
+\or Decimos\'eptima%
+\or Decimoctava%
+\or Decimonovena%
+\fi
+}
+
+\newcommand{\@@HundredthstringFspanish}[1]{%
+\ifcase#1\relax
+\or Cent\'esima%
+\or Ducent\'esima%
+\or Tricent\'esima%
+\or Cuadringent\'esima%
+\or Quingent\'esima%
+\or Sexcent\'esima%
+\or Septing\'esima%
+\or Octingent\'esima%
+\or Noningent\'esima%
+\fi}
+
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\@@numberstringspanish}[1]{%
+\ifnum#1>99999
+\PackageError{fmtcount}{Out of range}%
+{This macro only works for values less than 100000}%
+\else
+\ifnum#1<0
+\PackageError{fmtcount}{Negative numbers not permitted}%
+{This macro does not work for negative numbers, however
+you can try typing "minus" first, and then pass the modulus of
+this number}%
+\fi
+\fi
+\@strctr=#1\relax \divide\@strctr by 1000\relax
+\ifnum\@strctr>9
+% #1 is greater or equal to 10000
+ \divide\@strctr by 10
+ \ifnum\@strctr>1
+ \@tenstring{\@strctr}%
+ \@strctr=#1 \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0\ \@andname\ \@unitstring{\@strctr}\fi
+ \else
+ \@strctr=#1\relax
+ \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \@teenstring{\@strctr}%
+ \fi
+ \ \@thousand%
+\else
+ \ifnum\@strctr>0
+ \ifnum\@strctr>1\@unitstring{\@strctr}\ \fi
+ \@thousand
+ \fi
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{1000}%
+\divide\@strctr by 100
+\ifnum\@strctr>0
+\ifnum#1>1000\ \fi
+\@tmpstrctr=#1\relax
+\@modulo{\@tmpstrctr}{1000}%
+\ifnum\@tmpstrctr=100\@tenstring{10}\else\@hundredstring{\@strctr}\fi%
+\fi
+\@strctr=#1\relax \@modulo{\@strctr}{100}%
+\ifnum#1>100 \ifnum\@strctr>0\ \@andname\ \fi\fi
+\ifnum\@strctr>29
+\divide\@strctr by 10
+\@tenstring{\@strctr}%
+\@strctr=#1\relax \@modulo{\@strctr}{10}%
+\ifnum\@strctr>0
+\ \@andname\ \@unitstring{\@strctr}%
+\fi
+\else
+\ifnum\@strctr<10
+\ifnum\@strctr=0
+\ifnum#1<100 \@unitstring{\@strctr}\fi
+\else
+\@unitstring{\@strctr}%
+\fi
+\else
+\ifnum\@strctr>19
+\@modulo{\@strctr}{10}%
+\@twentystring{\@strctr}%
+\else
+\@modulo{\@strctr}{10}%
+\@teenstring{\@strctr}%
+\fi
+\fi
+\fi
+}
+
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\@@ordinalstringspanish}[1]{%
+\@strctr=#1\relax
+\ifnum#1>99999
+\PackageError{fmtcount}{Out of range}%
+{This macro only works for values less than 100000}%
+\else
+\ifnum#1<0
+\PackageError{fmtcount}{Negative numbers not permitted}%
+{This macro does not work for negative numbers, however
+you can try typing "minus" first, and then pass the modulus of
+this number}%
+\else
+\ifnum\@strctr>999\relax
+ \divide\@strctr by 1000\relax
+ \ifnum\@strctr>1\relax
+ \ifnum\@strctr>9\relax
+ \@tmpstrctr=\@strctr
+ \ifnum\@strctr<20
+ \@modulo{\@tmpstrctr}{10}%
+ \@teenthstring{\@tmpstrctr}
+ \else
+ \divide\@tmpstrctr by 10\relax
+ \@tenthstring{\@tmpstrctr}
+ \@tmpstrctr=\@strctr
+ \@modulo{\@tmpstrctr}{10}%
+ \ifnum\@tmpstrctr>0\@unitthstring{\@tmpstrctr} \fi
+ \fi
+ \else
+ \@unitstring{\@strctr}
+ \fi
+ \fi
+ \@thousandth
+\fi
+\@strctr=#1\relax
+\@modulo{\@strctr}{1000}%
+\ifnum\@strctr>99\relax
+\@tmpstrctr=\@strctr
+\divide\@tmpstrctr by 100\relax
+\ifnum#1>1000\ \fi
+\@hundredthstring{\@tmpstrctr}%
+\fi
+\@modulo{\@strctr}{100}%
+\ifnum#1>99\ifnum\@strctr>0\ \fi\fi
+\ifnum\@strctr>19\relax
+\@tmpstrctr=\@strctr
+\divide\@tmpstrctr by 10\relax
+\@tenthstring{\@tmpstrctr}%
+\@tmpstrctr=\@strctr
+\@modulo{\@tmpstrctr}{10}%
+\ifnum\@tmpstrctr>0\ \@unitthstring{\@tmpstrctr}\fi
+\else
+\ifnum\@strctr>9
+\@modulo{\@strctr}{10}%
+\@teenthstring{\@strctr}%
+\else
+\ifnum\@strctr=0\relax
+\ifnum#1=0\@unitstring{0}\fi
+\else
+\@unitthstring{\@strctr}%
+\fi
+\fi
+\fi
+\fi
+\fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</fc-spanish.def>
+% \end{macrocode}
+% \begin{macrocode}
+%<*fmtcount.sty>
+% \end{macrocode}
+%\subsection{fmtcount.sty}
+% This section deals with the code for |fmtcount.sty|
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{fmtcount}[2005/06/20 v1.03]
+\RequirePackage{ifthen}
+\RequirePackage{keyval}
+% \end{macrocode}
+% These commands need to be defined before the
+% configuration file is loaded.
+% \begin{macrocode}
+\providecommand{\fmtord}[1]{\textsuperscript{#1}}
+
+\newcount\c@padzeroesN
+\c@padzeroesN=1\relax
+\providecommand{\padzeroes}[1][17]{\c@padzeroesN=#1}
+% \end{macrocode}
+% Load appropriate language definition files (I don't
+% know if there is a standard way of detecting which
+% languages are defined, so I'm just going to check
+% if \verb"\date"\meta{language} is defined):
+% \begin{macrocode}
+\@ifundefined{dateenglish}{}{\input{fc-english.def}}
+\@ifundefined{datespanish}{}{\input{fc-spanish.def}}
+\@ifundefined{dateportuges}{}{\input{fc-portuges.def}}
+\@ifundefined{datefrench}{}{\input{fc-french.def}}
+% \end{macrocode}
+%Provide Command to switch dialects (Does babel store
+%this kind of information?)
+% \begin{macrocode}
+\def\fmtcount@french{france}
+\define@key{fmtcount}{french}[france]{%
+\@ifundefined{datefrench}{%
+\PackageError{fmtcount}{Language `french' not defined}{You need
+to load babel before loading fmtcount}}{
+\ifthenelse{\equal{#1}{france}
+ \or\equal{#1}{swiss}
+ \or\equal{#1}{belgian}}{%
+ \def\fmtcount@french{#1}}{%
+\PackageError{fmtcount}{Invalid value `#1' to french key}
+{Option `french' can only take the values `france',
+`belgian' or `swiss'}}
+}}
+
+\define@key{fmtcount}{fmtord}{%
+\ifthenelse{\equal{#1}{level}
+ \or\equal{#1}{raise}
+ \or\equal{#1}{user}}{
+ \def\fmtcount@fmtord{#1}}{%
+\PackageError{fmtcount}{Invalid value `#1' to fmtord key}
+{Option `fmtord' can only take the values `level', `raise'
+or `user'}}}
+
+\newif\iffmtord@abbrv
+\fmtord@abbrvfalse
+\define@key{fmtcount}{abbrv}[true]{%
+\ifthenelse{\equal{#1}{true}\or\equal{#1}{false}}{
+ \csname fmtord@abbrv#1\endcsname}{%
+\PackageError{fmtcount}{Invalid value `#1' to fmtord key}
+{Option `fmtord' can only take the values `true' or
+`false'}}}
+
+\newcommand{\fmtcountsetoptions}[1]{%
+\def\fmtcount@fmtord{}%
+\setkeys{fmtcount}{#1}%
+\@ifundefined{datefrench}{}{%
+\edef\@ordinalstringMfrench{\noexpand\csname @ordinalstringMfrench\fmtcount@french\noexpand\endcsname}%
+\edef\@ordinalstringFfrench{\noexpand\csname @ordinalstringFfrench\fmtcount@french\noexpand\endcsname}%
+\edef\@OrdinalstringMfrench{\noexpand\csname @OrdinalstringMfrench\fmtcount@french\noexpand\endcsname}%
+\edef\@OrdinalstringFfrench{\noexpand\csname @OrdinalstringFfrench\fmtcount@french\noexpand\endcsname}%
+\edef\@numberstringMfrench{\noexpand\csname @numberstringMfrench\fmtcount@french\noexpand\endcsname}%
+\edef\@numberstringFfrench{\noexpand\csname @numberstringFfrench\fmtcount@french\noexpand\endcsname}%
+\edef\@NumberstringMfrench{\noexpand\csname @NumberstringMfrench\fmtcount@french\noexpand\endcsname}%
+\edef\@NumberstringFfrench{\noexpand\csname @NumberstringFfrench\fmtcount@french\noexpand\endcsname}%
+}%
+%
+\ifthenelse{\equal{\fmtcount@fmtord}{level}}{%
+\renewcommand{\fmtord}[1]{##1}}{%
+\ifthenelse{\equal{\fmtcount@fmtord}{raise}}{%
+\renewcommand{\fmtord}[1]{\textsuperscript{##1}}}{%
+}}
+}
+% \end{macrocode}
+% Load confguration file if it exists. This needs to be done
+% before the package options, to allow the user to override
+% the settings in the configuration file.
+% \begin{macrocode}
+\InputIfFileExists{fmtcount.cfg}{%
+\typeout{Using configuration file fmtcount.cfg}}{%
+\typeout{No configuration file fmtcount.cfg found.}}
+% \end{macrocode}
+%Declare options
+% \begin{macrocode}
+\DeclareOption{level}{\def\fmtcount@fmtord{level}%
+\def\fmtord#1{#1}}
+\DeclareOption{raise}{\def\fmtcount@fmtord{raise}%
+\def\fmtord#1{\textsuperscript{#1}}}
+
+\ProcessOptions
+
+% \end{macrocode}
+% Define macro that performs modulo arthmetic. This is used for the
+% date, time, ordinal and numberstring commands.
+% \begin{macrocode}
+\newcount\@DT@modctr
+\def\@modulo#1#2{%
+\@DT@modctr=#1\relax
+\divide \@DT@modctr by #2\relax
+\multiply \@DT@modctr by #2\relax
+\advance #1 by -\@DT@modctr}
+% \end{macrocode}
+% Define the macro to format the |st|, |nd|, |rd| or |th| of an ordinal.
+% The following registers are needed by |\@ordinal| etc
+% \begin{macrocode}
+\newcount\@ordinalctr
+\newcount\@orgargctr
+\newcount\@strctr
+\newcount\@tmpstrctr
+% \end{macrocode}
+%Define commands that display numbers in different bases.
+% \begin{macrocode}
+\newif\if@DT@padzeroes
+\newcount\@DT@loopN
+\newcount\@DT@X
+\newcommand{\@binary}[1]{%
+\@DT@padzeroestrue
+\@DT@loopN=17\relax
+\@strctr=\@DT@loopN
+\whiledo{\@strctr<\c@padzeroesN}{0\advance\@strctr by 1}%
+\@strctr=65536\relax
+\@DT@X=#1\relax
+\loop
+\@DT@modctr=\@DT@X
+\divide\@DT@modctr by \@strctr
+\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=0\) \and \(\@DT@loopN>\c@padzeroesN\)}{}{\the\@DT@modctr}%
+\ifnum\@DT@modctr=0\else\@DT@padzeroesfalse\fi
+\multiply\@DT@modctr by \@strctr
+\advance\@DT@X by -\@DT@modctr
+\divide\@strctr by 2\relax
+\advance\@DT@loopN by -1\relax
+\ifnum\@strctr>1
+\repeat
+\the\@DT@X}
+
+\let\binarynum=\@binary
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\@octal}[1]{%
+\ifnum#1>32768
+\PackageError{fmtcount}{Value of counter too large for \protect\@octal}{Maximum value 32768}
+\else
+\@DT@padzeroestrue
+\@DT@loopN=6\relax
+\@strctr=\@DT@loopN
+\whiledo{\@strctr<\c@padzeroesN}{0\advance\@strctr by 1}%
+\@strctr=32768\relax
+\@DT@X=#1\relax
+\loop
+\@DT@modctr=\@DT@X
+\divide\@DT@modctr by \@strctr
+\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=0\) \and \(\@DT@loopN>\c@padzeroesN\)}{}{\the\@DT@modctr}%
+\ifnum\@DT@modctr=0\else\@DT@padzeroesfalse\fi
+\multiply\@DT@modctr by \@strctr
+\advance\@DT@X by -\@DT@modctr
+\divide\@strctr by 8\relax
+\advance\@DT@loopN by -1\relax
+\ifnum\@strctr>1
+\repeat
+\the\@DT@X
+\fi}
+\let\octalnum=\@octal
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\@@hexadecimal}[1]{\ifcase#10\or1\or2\or3\or4\or5\or6\or7\or8\or9\or a\or b\or c\or d\or e\or f\fi}
+
+\newcommand{\@hexadecimal}[1]{%
+\@DT@padzeroestrue
+\@DT@loopN=5\relax
+\@strctr=\@DT@loopN
+\whiledo{\@strctr<\c@padzeroesN}{0\advance\@strctr by 1}%
+\@strctr=65536\relax
+\@DT@X=#1\relax
+\loop
+\@DT@modctr=\@DT@X
+\divide\@DT@modctr by \@strctr
+\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=0\) \and \(\@DT@loopN>\c@padzeroesN\)}{}{\@@hexadecimal\@DT@modctr}%
+\ifnum\@DT@modctr=0\else\@DT@padzeroesfalse\fi
+\multiply\@DT@modctr by \@strctr
+\advance\@DT@X by -\@DT@modctr
+\divide\@strctr by 16\relax
+\advance\@DT@loopN by -1\relax
+\ifnum\@strctr>1
+\repeat
+\@@hexadecimal\@DT@X}
+
+\let\hexadecimalnum=\@hexadecimal
+
+\newcommand{\@@Hexadecimal}[1]{\ifcase#10\or1\or2\or3\or4\or5\or6\or7\or8\or9\or A\or B\or C\or D\or E\or F\fi}
+
+\newcommand{\@Hexadecimal}[1]{%
+\@DT@padzeroestrue
+\@DT@loopN=5\relax
+\@strctr=\@DT@loopN
+\whiledo{\@strctr<\c@padzeroesN}{0\advance\@strctr by 1}%
+\@strctr=65536\relax
+\@DT@X=#1\relax
+\loop
+\@DT@modctr=\@DT@X
+\divide\@DT@modctr by \@strctr
+\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=0\) \and \(\@DT@loopN>\c@padzeroesN\)}{}{\@@Hexadecimal\@DT@modctr}%
+\ifnum\@DT@modctr=0\else\@DT@padzeroesfalse\fi
+\multiply\@DT@modctr by \@strctr
+\advance\@DT@X by -\@DT@modctr
+\divide\@strctr by 16\relax
+\advance\@DT@loopN by -1\relax
+\ifnum\@strctr>1
+\repeat
+\@@Hexadecimal\@DT@X}
+
+\let\Hexadecimalnum=\@Hexadecimal
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\@aaalph}[1]{%
+\@DT@loopN=#1\relax
+\advance\@DT@loopN by -1\relax
+\divide\@DT@loopN by 26\relax
+\@DT@modctr=\@DT@loopN
+\multiply\@DT@modctr by 26\relax
+\@DT@X=#1\relax
+\advance\@DT@X by -1\relax
+\advance\@DT@X by -\@DT@modctr
+\advance\@DT@loopN by 1\relax
+\advance\@DT@X by 1\relax
+\loop
+\@alph\@DT@X
+\advance\@DT@loopN by -1\relax
+\ifnum\@DT@loopN>0
+\repeat
+}
+
+\let\aaalphnum=\@aaalph
+
+\newcommand{\@AAAlph}[1]{%
+\@DT@loopN=#1\relax
+\advance\@DT@loopN by -1\relax
+\divide\@DT@loopN by 26\relax
+\@DT@modctr=\@DT@loopN
+\multiply\@DT@modctr by 26\relax
+\@DT@X=#1\relax
+\advance\@DT@X by -1\relax
+\advance\@DT@X by -\@DT@modctr
+\advance\@DT@loopN by 1\relax
+\advance\@DT@X by 1\relax
+\loop
+\@Alph\@DT@X
+\advance\@DT@loopN by -1\relax
+\ifnum\@DT@loopN>0
+\repeat
+}
+
+\let\AAAlphnum=\@AAAlph
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\@abalph}[1]{%
+\ifnum#1>17576
+\PackageError{fmtcount}{Value of counter too large for \protect\@abalph}{Maximum value 17576}
+\else
+\@DT@padzeroestrue
+\@strctr=17576\relax
+\@DT@X=#1\relax
+\advance\@DT@X by -1\relax
+\loop
+\@DT@modctr=\@DT@X
+\divide\@DT@modctr by \@strctr
+\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=1\)}{}{\@alph\@DT@modctr}%
+\ifnum\@DT@modctr=1\else\@DT@padzeroesfalse\fi
+\multiply\@DT@modctr by \@strctr
+\advance\@DT@X by -\@DT@modctr
+\divide\@strctr by 26\relax
+\ifnum\@strctr>1
+\repeat
+\advance\@DT@X by 1\relax
+\@alph\@DT@X
+\fi}
+
+\let\abalphnum=\@abalph
+
+\newcommand{\@ABAlph}[1]{%
+\ifnum#1>17576
+\PackageError{fmtcount}{Value of counter too large for \protect\@ABAlph}{Maximum value 17576}
+\else
+\@DT@padzeroestrue
+\@strctr=17576\relax
+\@DT@X=#1\relax
+\advance\@DT@X by -1\relax
+\loop
+\@DT@modctr=\@DT@X
+\divide\@DT@modctr by \@strctr
+\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=1\)}{}{\@Alph\@DT@modctr}%
+\ifnum\@DT@modctr=1\else\@DT@padzeroesfalse\fi
+\multiply\@DT@modctr by \@strctr
+\advance\@DT@X by -\@DT@modctr
+\divide\@strctr by 26\relax
+\ifnum\@strctr>1
+\repeat
+\advance\@DT@X by 1\relax
+\@Alph\@DT@X
+\fi}
+
+\let\ABAlphnum=\@ABAlph
+
+\newcommand{\@decimal}[1]{%
+\ifnum#1>10000
+\PackageError{fmtcount}{Value of counter too large for \protect\@decimal}{Maximum value 10000}\number#1\relax
+\else
+\@DT@padzeroestrue
+\@DT@loopN=6\relax
+\@strctr=\@DT@loopN
+\whiledo{\(\@strctr<\c@padzeroesN\) \TE@or \(\@strctr=\c@padzeroesN\)}{0\advance\@strctr by 1}%
+\@strctr=10000\relax
+\@DT@X=#1\relax
+\loop
+\@DT@modctr=\@DT@X
+\divide\@DT@modctr by \@strctr
+\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=0\) \and \(\@DT@loopN>\c@padzeroesN\)}{}{\the\@DT@modctr}%
+\ifnum\@DT@modctr=0\else\@DT@padzeroesfalse\fi
+\multiply\@DT@modctr by \@strctr
+\advance\@DT@X by -\@DT@modctr
+\divide\@strctr by 10\relax
+\advance\@DT@loopN by -1\relax
+\ifnum\@strctr>1
+\repeat
+\the\@DT@X
+\fi}
+
+\let\decimalnum=\@decimal
+% \end{macrocode}
+% This is a bit cumbersome. Previously \verb"\@ordinal"
+% was defined in a similar way to \verb"\abalph" etc.
+% This ensured that the actual value of the counter was
+% written in the new label stuff in the .aux file. However
+% adding in an optional argument to determine the gender
+% for multilingual compatibility messed things up somewhat.
+% This was the only work around I could get to keep the
+% the cross-referencing stuff working, which is why
+% the optional argument comes \emph{after} the compulsory
+% argument, instead of the usual manner of placing it before.
+% \begin{macrocode}
+\newcommand{\ordinal}[1]{%
+\expandafter\protect\expandafter\ordinalnum{%
+\expandafter\the\csname c@#1\endcsname}}
+
+\newcommand{\ordinalnum}[1]{\@ifnextchar[{\@ordinalnum{#1}}{%
+\@ordinalnum{#1}[m]}}
+
+\def\@ordinalnum#1[#2]{%
+\ifthenelse{\equal{#2}{f}}{%
+\protect\@ordinalF{#1}}{%
+\ifthenelse{\equal{#2}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#2' to
+\string\ordinal}{Available options are m or f}}%
+\protect\@ordinalM{#1}}}
+
+\newcommand{\ordinalstring}[1]{%
+\expandafter\protect\expandafter\ordinalstringnum{%
+\expandafter\the\csname c@#1\endcsname}}
+
+\newcommand{\ordinalstringnum}[1]{%
+\@ifnextchar[{\@ordinal@string{#1}}{\@ordinal@string{#1}[m]}}
+
+\def\@ordinal@string#1[#2]{%
+\ifthenelse{\equal{#2}{f}}{%
+\protect\@ordinalstringF{#1}}{%
+\ifthenelse{\equal{#2}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#2' to
+\string\ordinalstring}{Available options are m or f}}%
+\protect\@ordinalstringM{#1}}}
+
+\newcommand{\Ordinalstring}[1]{%
+\expandafter\protect\expandafter\Ordinalstringnum{%
+\expandafter\the\csname c@#1\endcsname}}
+
+\newcommand{\Ordinalstringnum}[1]{%
+\@ifnextchar[{\@Ordinal@string{#1}}{\@Ordinal@string{#1}[m]}}
+
+\def\@Ordinal@string#1[#2]{%
+\ifthenelse{\equal{#2}{f}}{%
+\protect\@OrdinalstringF{#1}}{%
+\ifthenelse{\equal{#2}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#2' to
+\string\Ordinalstring}{Available options are m or f}}%
+\protect\@OrdinalstringM{#1}}}
+
+\newcommand{\numberstring}[1]{%
+\expandafter\protect\expandafter\numberstringnum{%
+\expandafter\the\csname c@#1\endcsname}}
+
+\newcommand{\numberstringnum}[1]{%
+\@ifnextchar[{\@number@string{#1}}{\@number@string{#1}[m]}}
+
+\def\@number@string#1[#2]{%
+\ifthenelse{\equal{#2}{f}}{%
+\protect\@numberstringF{#1}}{%
+\ifthenelse{\equal{#2}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#2' to
+\string\numberstring}{Available options are m or f}}%
+\protect\@numberstringM{#1}}}
+
+\newcommand{\Numberstring}[1]{%
+\expandafter\protect\expandafter\Numberstringnum{%
+\expandafter\the\csname c@#1\endcsname}}
+
+\newcommand{\Numberstringnum}[1]{%
+\@ifnextchar[{\@Number@string{#1}}{\@Number@string{#1}[m]}}
+
+\def\@Number@string#1[#2]{%
+\ifthenelse{\equal{#2}{f}}{%
+\protect\@NumberstringF{#1}}{%
+\ifthenelse{\equal{#2}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#2' to
+\string\Numberstring}{Available options are m or f}}%
+\protect\@NumberstringM{#1}}}
+
+\providecommand{\binary}[1]{\expandafter\protect\expandafter\@binary{\expandafter\the\csname c@#1\endcsname}}
+\providecommand{\aaalph}[1]{\expandafter\protect\expandafter\@aaalph{\expandafter\the\csname c@#1\endcsname}}
+\providecommand{\AAAlph}[1]{\expandafter\protect\expandafter\@AAAlph{\expandafter\the\csname c@#1\endcsname}}
+\providecommand{\abalph}[1]{\expandafter\protect\expandafter\@abalph{\expandafter\the\csname c@#1\endcsname}}
+\providecommand{\ABAlph}[1]{\expandafter\protect\expandafter\@ABAlph{\expandafter\the\csname c@#1\endcsname}}
+\providecommand{\hexadecimal}[1]{\expandafter\protect\expandafter\@hexadecimal{\expandafter\the\csname c@#1\endcsname}}
+\providecommand{\Hexadecimal}[1]{\expandafter\protect\expandafter\@Hexadecimal{\expandafter\the\csname c@#1\endcsname}}
+\providecommand{\octal}[1]{\expandafter\protect\expandafter\@octal{\expandafter\the\csname c@#1\endcsname}}
+\providecommand{\decimal}[1]{\expandafter\protect\expandafter\@decimal{\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+%\subsubsection{Multilinguage Definitions}
+% If multilingual support is provided, make \verb"\@numberstring"
+% etc use the correct language (if defined).
+% Otherwise use English definitions.
+% \begin{macrocode}
+\def\@setdef@ultfmtcount{
+\@ifundefined{@ordinalenglish}{\input{fc-english.def}}{}
+\def\@ordinalstringM{\@ordinalstringMenglish}
+\let\@ordinalstringF=\@ordinalstringMenglish
+\def\@OrdinalstringM{\@OrdinalstringMenglish}
+\let\@OrdinalstringF=\@OrdinalstringMenglish
+\def\@numberstringM{\@numberstringMenglish}
+\let\@numberstringF=\@numberstringMenglish
+\def\@NumberstringM{\@NumberstringMenglish}
+\let\@NumberstringF=\@NumberstringMenglish
+\def\@ordinalM{\@ordinalMenglish}
+\let\@ordinalF=\@ordinalM}
+
+\@ifundefined{languagename}{%
+\@setdef@ultfmtcount}{
+\ifthenelse{\equal{\languagename}{nohyphenation}}{\@setdef@ultfmtcount}{
+\def\@numberstringM{\@ifundefined{@numberstringM\languagename}{%
+\PackageError{fmtcount}{No support for language '\languagename'}{%
+The fmtcount package currently does not support language
+'\languagename' for command \string\@numberstringM}}{%
+\csname @numberstringM\languagename\endcsname}}
+
+\def\@numberstringF{\@ifundefined{@numberstringF\languagename}{%
+\PackageError{fmtcount}{No support for language '\languagename'}{%
+The fmtcount package currently does not support language
+'\languagename' for command \string\@numberstringF}}{%
+\csname @numberstringF\languagename\endcsname}}
+
+\def\@NumberstringM{\@ifundefined{@NumberstringM\languagename}{%
+\PackageError{fmtcount}{No support for language '\languagename'}{%
+The fmtcount package currently does not support language
+'\languagename' for command \string\@NumberstringM}}{%
+\csname @NumberstringM\languagename\endcsname}}
+
+\def\@NumberstringF{\@ifundefined{@NumberstringF\languagename}{%
+\PackageError{fmtcount}{No support for language '\languagename'}{%
+The fmtcount package currently does not support language
+'\languagename' for command \string\@NumberstringF}}{%
+\csname @NumberstringF\languagename\endcsname}}
+
+\def\@ordinalM{\@ifundefined{@ordinalM\languagename}{%
+\PackageError{fmtcount}{No support for language '\languagename'}{%
+The fmtcount package currently does not support language
+'\languagename' for command \string\@ordinalM}}{%
+\csname @ordinalM\languagename\endcsname}}
+
+\def\@ordinalF{\@ifundefined{@ordinalF\languagename}{%
+\PackageError{fmtcount}{No support for language '\languagename'}{%
+The fmtcount package currently does not support language
+'\languagename' for command \string\@ordinalF}}{%
+\csname @ordinalF\languagename\endcsname}}
+
+\def\@ordinalstringM{\@ifundefined{@ordinalstringM\languagename}{%
+\PackageError{fmtcount}{No support for language '\languagename'}{%
+The fmtcount package currently does not support language
+'\languagename' for command \string\@ordinalstringM}}{%
+\csname @ordinalstringM\languagename\endcsname}}
+
+\def\@ordinalstringF{\@ifundefined{@ordinalstringF\languagename}{%
+\PackageError{fmtcount}{No support for language '\languagename'}{%
+The fmtcount package currently does not support language
+'\languagename' for command \string\@ordinalstringF}}{%
+\csname @ordinalstringF\languagename\endcsname}}
+
+\def\@OrdinalstringM{\@ifundefined{@OrdinalstringM\languagename}{%
+\PackageError{fmtcount}{No support for language '\languagename'}{%
+The fmtcount package currently does not support language
+'\languagename' for command \string\@OrdinalstringM}}{%
+\csname @OrdinalstringM\languagename\endcsname}}
+
+\def\@OrdinalstringF{\@ifundefined{@OrdinalstringF\languagename}{%
+\PackageError{fmtcount}{No support for language '\languagename'}{%
+The fmtcount package currently does not support language
+'\languagename' for command \string\@OrdinalstringF}}{%
+\csname @OrdinalstringF\languagename\endcsname}}
+}}
+% \end{macrocode}
+% Backwards compatibility:
+% \begin{macrocode}
+\let\@ordinal=\@ordinalM
+\let\@ordinalstring=\@ordinalstringM
+\let\@Ordinalstring=\@OrdinalstringM
+\let\@numberstring=\@numberstringM
+\let\@Numberstring=\@NumberstringM
+% \end{macrocode}
+% \begin{macrocode}
+%</fmtcount.sty>
+% \end{macrocode}
+% \begin{macrocode}
+%<*fmtcount.perl>
+% \end{macrocode}
+% \begin{macrocode}
+# File : fmtcount.perl
+# Author : Nicola Talbot
+# Date : 3 Mar 2005
+# Version : 1.02
+# Description : LaTeX2HTML implementation of fmtcount package
+
+package main;
+
+sub do_fmtcount_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_fmtcount_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);
+}
+
+if (not defined &do_cmd_fmtord)
+{
+ &do_fmtcount_raise(@_);
+}
+
+$frenchdialect = 'france';
+$ordinalabbrv = 0;
+
+sub get_ordinal_suffix_english{
+ local($num,$gender) = @_;
+ local($suffix);
+
+ if ((($num % 10) == 1) && ($num%100 != 11))
+ {
+ $suffix = 'st';
+ }
+ elsif ((($num % 10) == 2) && ($num%100 != 12))
+ {
+ $suffix = 'nd';
+ }
+ elsif ((($num % 10) == 3) && ($num%100 != 13))
+ {
+ $suffix = 'rd';
+ }
+ else
+ {
+ $suffix = 'th';
+ }
+
+ $suffix;
+}
+
+sub get_ordinal_suffix_french{
+ local($num,$gender) = @_;
+ local($_);
+
+ if ($ordinalabbrv > 0)
+ {
+ $_ = 'e';
+ }
+ else
+ {
+ if ($num == 1)
+ {
+ $_ = ($gender eq 'f' ? 'ere' : 'er');
+ }
+ else
+ {
+ $_ = 'eme';
+ }
+ }
+}
+
+sub get_ordinal_suffix_spanish{
+ local($num,$gender) = @_;
+
+ ($gender eq 'f' ? 'a' : 'o');
+}
+
+sub get_ordinal_suffix_portuges{
+ local($num,$gender) = @_;
+
+ ($gender eq 'f' ? 'a' : 'o');
+}
+
+sub get_ordinal_suffix{
+ local($num,$gender) = @_;
+ local($suffix,$suffixsub);
+
+ $suffixsub = "get_ordinal_suffix_$default_language";
+
+ if (defined ($suffixsub))
+ {
+ $suffix = &$suffixsub($num,$gender);
+ }
+ else
+ {
+ $suffix = &get_ordinal_suffix_english($num,$gender);
+ }
+
+ $suffix;
+}
+
+sub getordinal{
+ local($num,$gender) = @_;
+ local($suffix) = &get_ordinal_suffix($num,$gender);
+
+ if ($suffix eq '')
+ {
+ $num;
+ }
+ else
+ {
+ local($br_id) = ++$global{'max_id'};
+ $num . "\\fmtord${OP}$br_id${CP}$suffix${OP}$br_id${CP}";
+ }
+}
+
+sub do_cmd_ordinalnum{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+ local($gender)='m';
+ local($suffix)='';
+
+ if ($_[0]=~s/\[([mf])\]//)
+ {
+ $gender = $1;
+ }
+
+ $suffix = &get_ordinal_suffix($num,$gender);
+
+ local($br_id) = ++$global{'max_id'};
+ join('', $num, "\\fmtord${OP}$br_id${CP}$suffix${OP}$br_id${CP}", $_[0]);
+}
+
+sub do_cmd_ordinal{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+ local($gender)='m';
+
+ $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_[0]=~s/\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $str eq 'YEAR')
+ {
+ # this is a cludge to make it work with newdateformat
+ join('', '{ORDINAL{', $ctr, '}}', $_[0]);
+ }
+ else
+ {
+ join('', &getordinal($val, $gender), $_[0]);
+ }
+}
+
+@unitthstring = ('zeroth',
+ 'first',
+ 'second',
+ 'third',
+ 'fourth',
+ 'fifth',
+ 'sixth',
+ 'seventh',
+ 'eighth',
+ 'ninth');
+
+@tenthstring = ('',
+ 'tenth',
+ 'twentieth',
+ 'thirtieth',
+ 'fortieth',
+ 'fiftieth',
+ 'sixtieth',
+ 'seventieth',
+ 'eightieth',
+ 'ninetieth');
+
+@teenthstring = ('tenth',
+ 'eleventh',
+ 'twelfth',
+ 'thirteenth',
+ 'fourteenth',
+ 'fifteenth',
+ 'sixteenth',
+ 'seventeenth',
+ 'eighteenth',
+ 'nineteenth');
+
+@unitstring = ('zero',
+ 'one',
+ 'two',
+ 'three',
+ 'four',
+ 'five',
+ 'six',
+ 'seven',
+ 'eight',
+ 'nine');
+
+@teenstring = ('ten',
+ 'eleven',
+ 'twelve',
+ 'thirteen',
+ 'fourteen',
+ 'fifteen',
+ 'sixteen',
+ 'seventeen',
+ 'eighteen',
+ 'nineteen');
+@tenstring = ('',
+ 'ten',
+ 'twenty',
+ 'thirty',
+ 'forty',
+ 'fifty',
+ 'sixty',
+ 'seventy',
+ 'eighty',
+ 'ninety');
+
+$hundredname = "hundred";
+$hundredthname = "hundredth";
+$thousandname = "thousand";
+$thousandthname = "thousandth";
+
+sub get_numberstringenglish{
+ local($num) = @_;
+ local($name)="";
+
+ unless (($num >= 1000000) || ($num < 0))
+ {
+ if ($num >= 1000)
+ {
+ local($thousands) = &get_numberstringenglish($num/1000);
+ $name .= $thousands . " $thousandname";
+ $num = $num%1000;
+ }
+
+ if ($num >= 100)
+ {
+ if ($_[0] >= 1000) { $name .= " "; }
+
+ local($hundreds) = &get_numberstringenglish($num/100);
+ $name .= $hundreds . " $hundredname";
+ $num = $num%100;
+ }
+
+ if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " and "; }
+
+ if ($num >= 20)
+ {
+ $name .= $tenstring[$num/10];
+
+ if ($num%10 > 0) { $name .= '-'; }
+ }
+
+ if (($num >= 10) && ($num < 20))
+ {
+ $name .= $teenstring[$num%10];
+ }
+ elsif (($num%10 > 0) || ($_[0] == 0))
+ {
+ $name .= $unitstring[$num%10];
+ }
+ }
+
+ $name;
+}
+
+@unitthstringfrench = ('zeroi\`eme',
+ 'uni\`eme',
+ 'deuxi\`eme',
+ 'troisi\`eme',
+ 'quatri\`eme',
+ 'cinqui\`eme',
+ 'sixi\`eme',
+ 'septi\`eme',
+ 'huiti\`eme',
+ 'neuvi\`eme');
+
+@tenthstringfrench = ('',
+ 'dixi\`eme',
+ 'vingti\`eme',
+ 'trentri\`eme',
+ 'quaranti\`eme',
+ 'cinquanti\`eme',
+ 'soixanti\`eme',
+ 'septenti\`eme',
+ 'huitanti\`eme',
+ 'nonenti\`eme');
+
+@teenthstringfrench = ('dixi\`eme',
+ 'onzi\`eme',
+ 'douzi\`eme',
+ 'treizi\`eme',
+ 'quatorzi\`eme',
+ 'quinzi\`eme',
+ 'seizi\`eme',
+ 'dix-septi\`eme',
+ 'dix-huiti\`eme',
+ 'dix-neuvi\`eme');
+
+@unitstringfrench = ('zero',
+ 'un',
+ 'deux',
+ 'trois',
+ 'quatre',
+ 'cinq',
+ 'six',
+ 'sept',
+ 'huit',
+ 'neuf');
+
+@teenstringfrench = ('dix',
+ 'onze',
+ 'douze',
+ 'treize',
+ 'quatorze',
+ 'quinze',
+ 'seize',
+ 'dix-sept',
+ 'dix-huit',
+ 'dix-neuf');
+
+@tenstringfrench = ('',
+ 'dix',
+ 'vingt',
+ 'trente',
+ 'quarante',
+ 'cinquante',
+ 'soixante',
+ 'septente',
+ 'huitante',
+ 'nonente');
+
+$hundrednamefrench = "cent";
+$hundredthnamefrench = "centi\\`eme";
+$thousandnamefrench = "mille";
+$thousandthnamefrench = "mili\\`eme";
+
+@unitthstringspanish = ('cero',
+ 'primero',
+ 'segundo',
+ 'tercero',
+ 'cuarto',
+ 'quinto',
+ 'sexto',
+ 's\\\'eptimo',
+ 'octavo',
+ 'noveno');
+
+@tenthstringspanish = ('',
+ 'd\\\'ecimo',
+ 'vig\\\'esimo',
+ 'trig\\\'esimo',
+ 'cuadrag\\\'esimo',
+ 'quincuag\\\'esimo',
+ 'sexag\\\'esimo',
+ 'septuag\\\'esimo',
+ 'octog\\\'esimo',
+ 'nonag\\\'esimo');
+
+@teenthstringspanish = ('d\\\'ecimo',
+ 'und\\\'ecimo',
+ 'duod\\\'ecimo',
+ 'decimotercero',
+ 'decimocuarto',
+ 'decimoquinto',
+ 'decimosexto',
+ 'decimos\\\'eptimo',
+ 'decimoctavo',
+ 'decimonoveno');
+
+@hundredthstringspanish = ('',
+ 'cent\\\'esimo',
+ 'ducent\\\'esimo',
+ 'tricent\\\'esimo',
+ 'cuadringent\\\'esimo',
+ 'quingent\\\'esimo',
+ 'sexcent\\\'esimo',
+ 'septing\\\'esimo',
+ 'octingent\\\'esimo',
+ 'noningent\\\'esimo');
+
+@unitstringspanish = ('cero',
+ 'uno',
+ 'dos',
+ 'tres',
+ 'cuatro',
+ 'cinco',
+ 'seis',
+ 'siete',
+ 'ocho',
+ 'nueve');
+
+@teenstringspanish = ('diez',
+ 'once',
+ 'doce',
+ 'trece',
+ 'catorce',
+ 'quince',
+ 'diecis\\\'eis',
+ 'diecisiete',
+ 'dieciocho',
+ 'diecinueve');
+
+@twentystringspanish = ('viente',
+ 'vientiuno',
+ 'vientid\\\'os',
+ 'vientitr\\\'es',
+ 'vienticuatro',
+ 'vienticinco',
+ 'vientis\\\'eis',
+ 'vientisiete',
+ 'vientiocho',
+ 'vientinueve');
+
+@tenstringspanish = ('',
+ 'diez',
+ 'viente',
+ 'treinta',
+ 'cuarenta',
+ 'cincuenta',
+ 'sesenta',
+ 'setenta',
+ 'ochenta',
+ 'noventa');
+
+@hundredstringspanish = ('',
+ 'ciento',
+ 'doscientos',
+ 'trescientos',
+ 'cuatrocientos',
+ 'quinientos',
+ 'seiscientos',
+ 'setecientos',
+ 'ochocientos',
+ 'novecientos');
+
+$hundrednamespanish = "cien";
+$hundredthnamespanish = "centi\\`eme";
+$thousandnamespanish = "mil";
+$thousandthnamespanish = "mil\\'esimo";
+
+@unitthstringportuges = ('zero',
+ 'primeiro',
+ 'segundo',
+ 'terceiro',
+ 'quatro',
+ 'quinto',
+ 'sexto',
+ 's\\\'etimo',
+ 'oitavo',
+ 'nono');
+
+@tenthstringportuges = ('',
+ 'd\\\'ecimo',
+ 'vig\\\'esimo',
+ 'trig\\\'esimo',
+ 'quadrag\\\'esimo',
+ 'q\"uinquag\\\'esimo',
+ 'sexag\\\'esimo',
+ 'setuag\\\'esimo',
+ 'octog\\\'esimo',
+ 'nonag\\\'esimo');
+
+@hundredthstringportuges = ('',
+ 'cent\\\'esimo',
+ 'ducent\\\'esimo',
+ 'trecent\\\'esimo',
+ 'quadringent\\\'esimo',
+ 'q\"uingent\\\'esimo',
+ 'seiscent\\\'esimo',
+ 'setingent\\\'esimo',
+ 'octingent\\\'esimo',
+ 'nongent\\\'esimo');
+
+@unitstringportuges = ('zero',
+ 'um',
+ 'dois',
+ 'tr\`es',
+ 'quatro',
+ 'cinco',
+ 'seis',
+ 'sete',
+ 'oito',
+ 'nove');
+
+@teenstringportuges = ('dez',
+ 'onze',
+ 'doze',
+ 'treze',
+ 'quatorze',
+ 'quinze',
+ 'dezesseis',
+ 'dezessete',
+ 'dezoito',
+ 'dezenove');
+
+@tenstringportuges = ('',
+ 'dez',
+ 'vinte',
+ 'trinta',
+ 'quaranta',
+ 'cinq\"uenta',
+ 'sessenta',
+ 'setenta',
+ 'oitenta',
+ 'noventa');
+
+@hundredstringportuges = ('',
+ 'cento',
+ 'duzentos',
+ 'trezentos',
+ 'quatrocentos',
+ 'quinhentos',
+ 'seiscentos',
+ 'setecentos',
+ 'oitocentos',
+ 'novecentos');
+
+$hundrednameportuges = "cem";
+$thousandnameportuges = "mil";
+$thousandthnameportuges = "mil\\'esimo";
+
+sub get_numberstringfrench{
+ local($num,$gender) = @_;
+ local($name)="";
+
+ if ($gender eq 'f')
+ {
+ $unitstringfrench[1] = 'une';
+ }
+ else
+ {
+ $unitstringfrench[1] = 'un';
+ }
+
+ unless (($num >= 1000000) || ($num < 0))
+ {
+ if ($num >= 1000)
+ {
+ local($thousands) = '';
+
+ if ($num >= 2000)
+ {
+ $thousands = &get_numberstringfrench($num/1000,$gender).' ';
+ }
+
+ $name .= $thousands . $thousandnamefrench;
+ $num = $num%1000;
+ }
+
+ if ($num >= 100)
+ {
+ if ($_[0] >= 1000) { $name .= " "; }
+
+ local($hundreds) = '';
+
+ if ($num >= 200)
+ {
+ $hundreds = &get_numberstringfrench($num/100,$gender).' ';
+ }
+
+ $name .= $hundreds . $hundrednamefrench;
+ $num = $num%100;
+
+ if (($_[0]%100 == 0) && ($_[0]/100 > 1))
+ {
+ $name .= 's';
+ }
+ }
+
+ if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " "; }
+
+ if ($num >= 20)
+ {
+ if ($frenchdialect eq 'france' and $num >= 70)
+ {
+ if ($num < 80)
+ {
+ $name .= $tenstringfrench[6];
+
+ if ($num%10 == 1)
+ {
+ $name .= ' et ';
+ }
+ else
+ {
+ $name .= '-';
+ }
+
+ $num = 10+($num%10);
+ }
+ else
+ {
+ $name .= 'quatre-vingt' . ($num==80?'s':'-');
+
+ if ($num >= 90)
+ {
+ $num = 10+($num%10);
+ }
+ }
+ }
+ elsif ($frenchdialect eq 'belgian'
+ && ($num >= 80) && ($num < 90))
+ {
+ $name .= 'quatre-vingt' . ($num==80?'s':'-');
+ }
+ else
+ {
+ $name .= $tenstringfrench[$num/10];
+
+ if ($num%10 == 1) { $name .= ' et ';}
+ elsif ($num%10 > 0) { $name .= '-'; }
+ }
+ }
+
+ if (($num >= 10) && ($num < 20))
+ {
+ $name .= $teenstringfrench[$num%10];
+ }
+ elsif (($num%10 > 0) || ($_[0] == 0))
+ {
+ $name .= $unitstringfrench[$num%10];
+ }
+ }
+
+ $name;
+}
+
+sub get_numberstringspanish{
+ local($num,$gender) = @_;
+ local($name)="";
+
+ if ($gender eq 'f')
+ {
+ $unitstringspanish[1] = 'una';
+ }
+ else
+ {
+ $unitstringspanish[1] = 'uno';
+ }
+
+ unless (($num >= 1000000) || ($num < 0))
+ {
+ if ($num >= 1000)
+ {
+ local($thousands) = '';
+
+ if ($num >= 2000)
+ {
+ $thousands = &get_numberstringspanish($num/1000,$gender).' ';
+ }
+
+ $name .= $thousands . $thousandnamespanish;
+ $num = $num%1000;
+ }
+
+ if ($num >= 100)
+ {
+ if ($_[0] >= 1000) { $name .= " "; }
+
+ local($hundreds) = '';
+
+ if ($num > 100)
+ {
+ $hundreds = $hundredstringspanish[$num/100];
+ }
+ else
+ {
+ $hundreds = 'cien';
+ }
+
+ $name .= $hundreds;
+ $num = $num%100;
+ }
+
+ if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " y "; }
+
+
+ if ($num >= 30)
+ {
+ $name .= $tenstringspanish[$num/10];
+
+ if ($num%10 > 0) { $name .= ' y '; }
+ }
+
+ if (($num >=20) && ($num < 30))
+ {
+ $name .= $twentystringspanish[$num%10];
+ }
+ elsif (($num >= 10) && ($num < 20))
+ {
+ $name .= $teenstringspanish[$num%10];
+ }
+ elsif (($num%10 > 0) || ($_[0] == 0))
+ {
+ $name .= $unitstringspanish[$num%10];
+ }
+ }
+
+ $name;
+}
+
+sub get_numberstringportuges{
+ local($num,$gender) = @_;
+ local($name)="";
+
+ if ($gender eq 'f')
+ {
+ $unitstringportuges[0] = 'zera';
+ $unitstringportuges[1] = 'uma';
+ $unitstringportuges[2] = 'duas';
+ }
+ else
+ {
+ $unitstringportuges[0] = 'zero';
+ $unitstringportuges[1] = 'um';
+ $unitstringportuges[2] = 'dois';
+ }
+
+ unless (($num >= 1000000) || ($num < 0))
+ {
+ if ($num >= 1000)
+ {
+ local($thousands) = '';
+
+ if ($num >= 2000)
+ {
+ $thousands = &get_numberstringportuges($num/1000,$gender).' ';
+ }
+
+ $name .= $thousands . $thousandnameportuges;
+ $num = $num%1000;
+ }
+
+ if ($num >= 100)
+ {
+ if ($_[0] >= 1000) { $name .= " "; }
+
+ local($hundreds) = '';
+
+ if ($num > 100)
+ {
+ $hundreds = $hundredstringportuges[$num/100];
+
+ if ($gender eq 'f')
+ {
+ $hundreds =~s/o(s?)$/a\1/;
+ }
+ }
+ else
+ {
+ $hundreds = $hundrednameportuges;
+ }
+
+ $name .= $hundreds;
+ $num = $num%100;
+ }
+
+ if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " e "; }
+
+ if ($num >= 20)
+ {
+ $name .= $tenstringportuges[$num/10];
+
+ if ($num%10 == 1) { $name .= ' e ';}
+ elsif ($num%10 > 0) { $name .= ' '; }
+ }
+
+ if (($num >= 10) && ($num < 20))
+ {
+ $name .= $teenstringportuges[$num%10];
+ }
+ elsif (($num%10 > 0) || ($_[0] == 0))
+ {
+ $name .= $unitstringportuges[$num%10];
+ }
+ }
+
+ $name;
+}
+
+sub get_numberstring{
+ local($val,$gender) = @_;
+
+ if ($default_language eq 'french')
+ {
+ &get_numberstringfrench($val,$gender);
+ }
+ elsif ($default_language eq 'spanish')
+ {
+ &get_numberstringspanish($val,$gender);
+ }
+ elsif ($default_language eq 'portuges')
+ {
+ &get_numberstringportuges($val,$gender);
+ }
+ else
+ {
+ &get_numberstringenglish($val);
+ }
+}
+
+sub do_cmd_numberstringnum{
+ local($_) = @_;
+ local($num,$gender);
+ $num = &missing_braces
+ unless (($_[0]=~s/$next_pair_pr_rx//o)&&($num=$2));
+
+ if ($_[0] =~ s/\[(m|f)\]//)
+ {
+ $gender = $1;
+ }
+ else
+ {
+ $gender = 'm';
+ }
+
+ join('', &get_numberstring($num,$gender), $_[0]);
+}
+
+sub do_cmd_numberstring{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+ local($gender)='m';
+
+ $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_[0]=~s/\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR')
+ {
+ # this is a cludge to make it work with newdateformat
+ join('', '{NUMBERSTRING{', $ctr, '}}', $_[0]);
+ }
+ else
+ {
+ join('', &get_numberstring($val, $gender), $_[0]);
+ }
+}
+
+sub get_Numberstring{
+ local($val,$gender) = @_;
+ local($string) = &get_numberstring($val,$gender);
+ $string =~ s/([a-z])([^\s\-]+)/\u\1\2/g;
+
+ if ($default_language eq 'french')
+ {
+ $string =~ s/ Et / et /g;
+ }
+ elsif ($default_language eq 'spanish')
+ {
+ $string =~ s/ Y / y /g;
+ }
+ elsif ($default_language eq 'portuges')
+ {
+ $string =~ s/ E / e /g;
+ }
+ else
+ {
+ $string =~ s/ And / and /g;
+ }
+
+ $string;
+}
+
+sub do_cmd_Numberstringnum{
+ local($_) = @_;
+ local($num,$gender);
+ $num = &missing_braces
+ unless (($_[0]=~s/$next_pair_pr_rx//o)&&($num=$2));
+
+ if ($_[0] =~ s/\[(m|f)\]//)
+ {
+ $gender = $1;
+ }
+ else
+ {
+ $gender = 'm';
+ }
+
+ join('', &get_Numberstring($num,$gender), $_[0]);
+}
+
+sub do_cmd_Numberstring{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+ local($gender)='m';
+
+ $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_[0]=~s/\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR')
+ {
+ # this is a cludge to make it work with newdateformat
+ join('', '{NNUMBERSTRING{', $ctr, '}}', $_[0]);
+ }
+ else
+ {
+ join('', &get_Numberstring($val, $gender), $_[0]);
+ }
+}
+
+sub get_ordinalstringenglish{
+ local($num) = @_;
+ local($name)="";
+
+ unless (($num >= 1000000) || ($num < 0))
+ {
+ if ($num >= 1000)
+ {
+ local($thousands) = &get_numberstring($num/1000);
+ $name .= $thousands;
+
+ if ($num%1000 > 0)
+ {
+ $name .= " $thousandname";
+ }
+ else
+ {
+ $name .= " $thousandthname";
+ }
+
+ $num = $num%1000;
+ }
+
+ if ($num >= 100)
+ {
+ if ($_[0] >= 1000) { $name .= " "; }
+
+ local($hundreds) = &get_numberstring($num/100);
+ $name .= $hundreds;
+
+ if ($num%100 > 0)
+ {
+ $name .= " $hundredname";
+ }
+ else
+ {
+ $name .= " $hundredthname";
+ }
+
+ $num = $num%100;
+ }
+
+ if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " and "; }
+
+ if ($num >= 20)
+ {
+ if ($num%10 > 0)
+ {
+ $name .= $tenstring[$num/10] . '-';
+ }
+ else
+ {
+ $name .= $tenthstring[$num/10];
+ }
+ }
+
+ if (($num >= 10) && ($num < 20))
+ {
+ $name .= $teenthstring[$num%10];
+ }
+ elsif (($num%10 > 0) || ($_[0] == 0))
+ {
+ $name .= $unitthstring[$num%10];
+ }
+ }
+
+ $name;
+}
+
+sub get_ordinalstringfrench{
+ local($num,$gender) = @_;
+ local($name)="";
+
+ unless (($num >= 1000000) || ($num < 0))
+ {
+ if ($num >= 1000)
+ {
+ local($thousands) = '';
+
+ if ($num >= 2000)
+ {
+ $thousands = &get_numberstringfrench($num/1000,$gender).' ';
+ }
+
+ $num = $num%1000;
+
+ if ($num > 0)
+ {
+ $name .= $thousands . $thousandnamefrench;
+ }
+ else
+ {
+ $name .= $thousands . $thousandthnamefrench;
+ }
+ }
+
+ if ($num >= 100)
+ {
+ if ($_[0] >= 1000) { $name .= " "; }
+
+ local($hundreds) = '';
+
+ if ($num >= 200)
+ {
+ $hundreds = &get_numberstringfrench($num/100,$gender).' ';
+ }
+
+ $num = $num%100;
+
+ if ($num > 0)
+ {
+ $name .= $hundreds . $hundrednamefrench;
+ }
+ else
+ {
+ $name .= $hundreds . $hundredthnamefrench;
+ }
+ }
+
+ if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " "; }
+
+ if ($num >= 20)
+ {
+ if ($frenchdialect eq 'france' and $num >= 70)
+ {
+ if ($num < 80)
+ {
+ if ($num%10 > 0)
+ {
+ $name .= $tenstringfrench[6];
+ }
+ else
+ {
+ $name .= $tenthstringfrench[6];
+ }
+
+ if ($num%10 == 1)
+ {
+ $name .= ' et ';
+ }
+ else
+ {
+ $name .= '-';
+ }
+
+ $num = 10+($num%10);
+ }
+ else
+ {
+ $name .= 'quatre-vingt' . ($num==80?'i\`eme':'-');
+
+ if ($num >= 90)
+ {
+ $num = 10+($num%10);
+ }
+ }
+ }
+ elsif ($frenchdialect eq 'belgian' and $num >= 80)
+ {
+ $name .= 'quatre-vingt' . ($num==80?'i\`eme':'-');
+
+ if ($num >= 90)
+ {
+ $num = 10+($num%10);
+ }
+ }
+ else
+ {
+ if ($num%10 > 0)
+ {
+ $name .= $tenstringfrench[$num/10];
+ }
+ else
+ {
+ $name .= $tenthstringfrench[$num/10];
+ }
+
+ if ($num%10 == 1) { $name .= ' et ';}
+ elsif ($num%10 > 0) { $name .= '-'; }
+ }
+ }
+
+ if (($num >= 10) && ($num < 20))
+ {
+ $name .= $teenthstringfrench[$num%10];
+ }
+ elsif ($_[0] == 1)
+ {
+ $name = 'premi\`ere';
+ }
+ elsif (($num%10 > 0) || ($_[0] == 0))
+ {
+ $name .= $unitthstringfrench[$num%10];
+ }
+ }
+
+ $name;
+}
+
+sub get_ordinalstringspanish{
+ local($num,$gender) = @_;
+ local($name)="";
+ local($str);
+
+ unless (($num >= 1000000) || ($num < 0))
+ {
+ if ($num >= 1000)
+ {
+ if ($num >= 2000)
+ {
+ local($thousands) = &get_ordinalstringspanish($num/1000);
+
+ if ($gender eq 'f')
+ {
+ $thousands =~s/o(s?)$/a\1/;
+ }
+
+ $name .= $thousands. " ";
+ }
+ else
+ {
+ $name = "";
+ }
+
+ $name .= "$thousandthnamespanish";
+
+ if ($gender eq 'f')
+ {
+ $name =~s/o$/a/;
+ }
+
+ $num = $num%1000;
+ }
+
+ if ($num >= 100)
+ {
+ if ($_[0] >= 1000) { $name .= " "; }
+
+ local($hundreds) = $hundredthstringspanish[$num/100];
+
+ if ($gender eq 'f')
+ {
+ $hundreds =~s/o$/a/;
+ }
+
+ $name .= $hundreds;
+
+ $num = $num%100;
+ }
+
+ if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " "; }
+
+ local($lastbit)="";
+
+ if ($num >= 20)
+ {
+ $lastbit = $tenthstringspanish[$num/10];
+
+ if ($num%10 > 0)
+ {
+ $lastbit .= ' ';
+ }
+
+ if ($gender eq 'f')
+ {
+ $lastbit =~s/o([ s]*)$/a\1/;
+ }
+
+ $name .= $lastbit;
+
+ $lastbit = "";
+ }
+
+ if (($num >= 10) && ($num < 20))
+ {
+ $lastbit = $teenthstringspanish[$num%10];
+ }
+ elsif (($num%10 > 0) || ($_[0] == 0))
+ {
+ $lastbit = $unitthstringspanish[$num%10];
+ }
+
+ if ($gender eq 'f')
+ {
+ $lastbit =~s/o([ s]*)$/a\1/;
+ }
+
+ $name .= $lastbit;
+ }
+
+ $name;
+}
+
+sub get_ordinalstringportuges{
+ local($num,$gender) = @_;
+ local($name)="";
+ local($str);
+
+ unless (($num >= 1000000) || ($num < 0))
+ {
+ if ($num >= 1000)
+ {
+ if ($num >= 2000)
+ {
+ local($thousands) = &get_ordinalstringportuges($num/1000);
+
+ if ($gender eq 'f')
+ {
+ $thousands =~s/o(s?)$/a\1/;
+ }
+
+ $name .= $thousands. " ";
+ }
+ else
+ {
+ $name = "";
+ }
+
+ $name .= "$thousandthnameportuges";
+
+ if ($gender eq 'f')
+ {
+ $name =~s/o$/a/;
+ }
+
+ $num = $num%1000;
+ }
+
+ if ($num >= 100)
+ {
+ if ($_[0] >= 1000) { $name .= " "; }
+
+ local($hundreds) = $hundredthstringportuges[$num/100];
+
+ if ($gender eq 'f')
+ {
+ $hundreds =~s/o$/a/;
+ }
+
+ $name .= $hundreds;
+
+ $num = $num%100;
+ }
+
+ if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= "-"; }
+
+ local($lastbit)="";
+
+ if ($num >= 10)
+ {
+ $lastbit = $tenthstringportuges[$num/10];
+
+ if ($num%10 > 0)
+ {
+ $lastbit .= '-';
+ }
+
+ if ($gender eq 'f')
+ {
+ $lastbit =~s/o([ s]*)$/a\1/;
+ }
+
+ $name .= $lastbit;
+
+ $lastbit = "";
+ }
+
+ if (($num%10 > 0) || ($_[0] == 0))
+ {
+ $lastbit = $unitthstringportuges[$num%10];
+ }
+
+ if ($gender eq 'f')
+ {
+ $lastbit =~s/o([ s]*)$/a\1/;
+ }
+
+ $name .= $lastbit;
+ }
+
+ $name;
+}
+
+sub get_ordinalstring{
+ local($val,$gender) = @_;
+
+ if ($default_language eq 'french')
+ {
+ &get_ordinalstringfrench($val,$gender);
+ }
+ elsif ($default_language eq 'spanish')
+ {
+ &get_ordinalstringspanish($val,$gender);
+ }
+ elsif ($default_language eq 'portuges')
+ {
+ &get_ordinalstringportuges($val,$gender);
+ }
+ else
+ {
+ &get_ordinalstringenglish($val);
+ }
+}
+
+sub do_cmd_ordinalstringnum{
+ local($_) = @_;
+ local($num,$gender);
+ $num = &missing_braces
+ unless (($_[0]=~s/$next_pair_pr_rx//o)&&($num=$2));
+
+ if ($_[0] =~ s/\[(m|f)\]//)
+ {
+ $gender = $1;
+ }
+ else
+ {
+ $gender = 'm';
+ }
+
+ join('', &get_ordinalstring($num,$gender), $_[0]);
+}
+
+sub do_cmd_ordinalstring{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+ local($gender)='m';
+
+ $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_[0]=~s/\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR')
+ {
+ # this is a cludge to make it work with newdateformat
+ join('', '{ORDINALSTRING{', $ctr, '}}', $_[0]);
+ }
+ else
+ {
+ join('', &get_ordinalstring($val, $gender), $_[0]);
+ }
+}
+
+sub get_Ordinalstring{
+ local($val,$gender) = @_;
+ local($string) = &get_ordinalstring($val,$gender);
+ $string =~ s/([a-z])([^\s\-]+)/\u\1\2/g;
+
+ if ($default_language eq 'french')
+ {
+ $string =~ s/ Et / et /g;
+ }
+ else
+ {
+ $string =~ s/ And / and /g;
+ }
+
+ $string;
+}
+
+sub do_cmd_Ordinalstringnum{
+ local($_) = @_;
+ local($num,$gender);
+ $num = &missing_braces
+ unless (($_[0]=~s/$next_pair_pr_rx//o)&&($num=$2));
+
+ if ($_[0] =~ s/\[(m|f)\]//)
+ {
+ $gender = $1;
+ }
+ else
+ {
+ $gender = 'm';
+ }
+
+ join('', &get_Ordinalstring($num,$gender), $_[0]);
+}
+
+sub do_cmd_Ordinalstring{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+ local($gender)='m';
+
+ $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_[0]=~s/\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR')
+ {
+ # this is a cludge to make it work with newdateformat
+ join('', '{OORDINALSTRING{', $ctr, '}}', $_[0]);
+ }
+ else
+ {
+ join('', &get_Ordinalstring($val, $gender), $_[0]);
+ }
+}
+
+
+sub do_cmd_fmtcountsetoptions{
+ local($_) = @_;
+ local($options) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($options=$2));
+
+ if ($options =~ m/french=?(\w*)(,|$)/)
+ {
+ if ($1 eq 'france' or $1 eq 'swiss' or $1 eq 'belgian')
+ {
+ $frenchdialect = $1;
+
+ print "Using French dialect: $1" if ($VERBOSITY > 0) ;
+ }
+ elsif ($1 eq '')
+ {
+ $frenchdialect = 'france';
+
+ print "Using French dialect: france" if ($VERBOSITY > 0);
+ }
+ else
+ {
+ &write_warnings("unknown french dialect '$1'");
+ }
+ }
+
+ if ($options =~ m/abbrv=?(\w*)(,|$)/)
+ {
+ if ($1 eq 'true' or $1 eq '')
+ {
+ $ordinalabbrv = 1;
+
+ print "Setting abbrv=true" if ($VERBOSITY > 0);
+ }
+ elsif ($1 eq 'false')
+ {
+ $ordinalabbrv = 0;
+
+ print "Setting abbrv=false" if ($VERBOSITY > 0);
+ }
+ else
+ {
+ &write_warnings("fmtcountsetoptions key abbrv: unknown value '$1'.");
+ }
+ }
+
+ if ($options =~ m/fmtord=(\w*)(,|$)/)
+ {
+ if ($1 eq 'raise')
+ {
+ &do_fmtcount_raise();
+
+ print "Using raised ordinals" if ($VERBOSITY > 0);
+ }
+ elsif ($1 eq 'level')
+ {
+ &do_fmtcount_level();
+
+ print "Using level ordinals" if ($VERBOSITY > 0);
+ }
+ elsif ($1 eq 'user')
+ {
+ # do nothing
+
+ print "Using user defined fmtord" if ($VERBOSITY > 0);
+ }
+ else
+ {
+ &write_warnings("unknown fmtcount option fmtord=$1");
+ }
+ }
+
+ $_[0];
+}
+
+$padzeroes = 0;
+
+sub do_cmd_padzeroes{
+ local($_) = @_;
+ local($val,$pat) = &get_next_optional_argument;
+
+ if ($val eq '')
+ {
+ $padzeroes = 17;
+ }
+ else
+ {
+ $padzeroes = $val;
+ }
+
+ $_;
+}
+
+sub get_binary{
+ local($num) = @_;
+ local($val) = "";
+
+ for (my $i=17; $i>=0; $i--)
+ {
+ if (($i < $padzeroes) || ($num & (1 << $i)) || !($val eq ""))
+ {
+ $val .= ($num & (1 << $i) ? 1 : 0);
+ }
+ }
+
+ $val;
+}
+
+sub do_cmd_binary{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+
+ join('', &get_binary($val), $_);
+}
+
+sub do_cmd_binarynum{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ join('', &get_binary($num), $_);
+}
+
+sub get_decimal{
+ local($num) = @_;
+
+ sprintf "%0${padzeroes}d", $num;
+}
+
+sub do_cmd_decimal{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+
+ join('', &get_decimal($val), $_);
+}
+
+sub do_cmd_decimalnum{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ join('', &get_decimal($num), $_);
+}
+
+sub get_hexadecimal{
+ local($num) = @_;
+
+ sprintf "%0${padzeroes}lx", $num;
+}
+
+sub do_cmd_hexadecimal{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+
+ join('', &get_hexadecimal($val), $_);
+}
+
+sub do_cmd_hexadecimalnum{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ join('', &get_hexadecimal($num), $_);
+}
+
+sub get_Hexadecimal{
+ local($num) = @_;
+
+ sprintf "%0${padzeroes}lX", $num;
+}
+
+sub do_cmd_Hexadecimal{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+
+ join('', &get_Hexadecimal($val), $_);
+}
+
+sub do_cmd_Hexadecimalnum{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ join('', &get_Hexadecimal($num), $_);
+}
+
+sub get_octal{
+ local($num) = @_;
+
+ sprintf "%0${padzeroes}lo", $num;
+}
+
+sub do_cmd_octal{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+
+ join('', &get_octal($val), $_);
+}
+
+sub do_cmd_octalnum{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ join('', &get_octal($num), $_);
+}
+
+sub get_aaalph{
+ local($num) = @_;
+ local($rep) = int($num/26) + 1;
+ local($c) = chr(ord('a')-1+$num%26);
+
+ local($_) = $c x $rep;
+}
+
+sub do_cmd_aaalph{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+
+ join('', &get_aaalph($val), $_);
+}
+
+sub get_AAAlph{
+ local($num) = @_;
+ local($rep) = int($num/26) + 1;
+ local($c) = chr(ord('A')-1+$num%26);
+
+ local($_) = $c x $rep;
+}
+
+sub do_cmd_AAAlph{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+
+ join('', &get_AAAlph($val), $_);
+}
+
+sub do_cmd_aaalphnum{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ join('', (sprintf "%${padzeroes}s", &get_aaalph($num)), $_);
+}
+
+sub do_cmd_AAAlphnum{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ join('', uc(sprintf "%${padzeroes}s", &get_aaalph($num)), $_);
+}
+
+sub get_abalph{
+ local($num) = @_;
+ local($str);
+
+ if ($num == 0)
+ {
+ $str = '';
+ }
+ elsif ($num > 0 && $num <= 26)
+ {
+ $str = chr(ord('a')-1+$num);
+ }
+ else
+ {
+ $str = &get_abalph(int($num/26)) . chr(ord('a')-1+($num%26));
+ }
+
+ $str;
+}
+
+sub do_cmd_abalph{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+
+ join('', (sprintf "%${padzeroes}s", &get_abalph($val)), $_);
+}
+
+sub do_cmd_abalphnum{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ join('', (sprintf "%${padzeroes}s", &get_abalph($num)), $_);
+}
+
+sub do_cmd_ABAlph{
+ local($ctr, $val, $id, $_) = &read_counter_value($_[0]);
+
+ join('', uc(sprintf "%${padzeroes}s", &get_abalph($val)), $_);
+}
+
+sub do_cmd_ABAlphnum{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ join('', uc(sprintf "%${padzeroes}s", &get_abalph($num)), $_);
+}
+
+sub get_twodigit{
+ local($num) = @_;
+
+ sprintf "%02d", $num;
+}
+
+sub do_cmd_twodigit{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ # this is a cludge
+ if ($num eq "THEDAY" or $num eq "THEYEAR" or $num eq "THEMONTH")
+ {
+ join('', 'TWODIGIT{', $num, '}', $_[0]);
+ }
+ else
+ {
+ join('', get_twodigit($num), $_[0]);
+ }
+}
+
+# this was put here to help with the definition of \datelatin
+
+sub do_cmd_romannumeral{
+ local($_) = @_;
+ local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));
+
+ # this is a cludge
+ if ($num eq "THEDAY" or $num eq "THEYEAR" or $num eq "THEMONTH")
+ {
+ join('', 'ROMANNUMERAL{', $num, '}', $_[0]);
+ }
+ else
+ {
+ join('', &froman($num), $_[0]);
+ }
+}
+
+# load configuration file if it exists
+# Note: The configuration file should be loaded before
+# the package options are executed.
+
+# why doesn't this work? If I call this subroutine it
+# causes an infinite loop.
+
+sub load_fmtcount_cfg{
+ local($file,$found);
+
+ $file = &fulltexpath('fmtcount.cfg');
+
+ $found = (-f $file);
+
+ if (!$found)
+ {
+ foreach $texpath (split /$envkey/, $TEXINPUTS)
+ {
+ $file = "$texpath${dd}fmtcount.cfg";
+
+ last if ($found = (-f $file));
+ }
+ }
+
+ if ($found)
+ {
+ print "\nusing configuration file $file\n";
+
+ &slurp_input($file);
+ &pre_process;
+ &substitute_meta_cmds if (%new_command || %new_environment);
+ &wrap_shorthand_environments;
+ $_ = &translate_commands(&translate_environments($_));
+
+ print "\n processed size: ".length($_)."\n" if ($VERBOSITY>1)
+ }
+ else
+ {
+ print "\nNo configuation file fmtcount.cfg found\n" if ($VERBOSITY>1)
+ }
+}
+
+1;
+% \end{macrocode}
+% \begin{macrocode}
+%</fmtcount.perl>
+% \end{macrocode}
+% \begin{macrocode}
+%<*fc-samp.tex>
+% \end{macrocode}
+\documentclass[a4paper]{article}
+
+\usepackage[french]{babel}
+\usepackage{fmtcount}
+\newcounter{N}
+
+\newcommand{\printrow}[1]{%
+\newline
+\setcounter{N}{#1}
+\makebox[0.25in][r]{\theN\quad}
+\makebox[0.75in][r]{\hexadecimal{N}\quad}
+\makebox[0.75in][r]{\ordinal{N}\quad}
+\makebox[2in][l]{\numberstring{N}}
+}
+
+\renewcommand{\thesection}{\ordinal{section}}
+
+\begin{document}
+
+\section{Displaying the value of a counter}
+\label{ex}
+
+\begin{ttfamily}
+\noindent
+\makebox[0.25in][c]{N}
+\makebox[0.75in][c]{hexadecimal}
+\makebox[0.75in][c]{ordinal}
+numberstring
+\printrow{0}
+\printrow{1}
+\printrow{2}
+\printrow{3}
+\printrow{4}
+\printrow{5}
+\printrow{6}
+\printrow{7}
+\printrow{8}
+\printrow{9}
+\printrow{10}
+\printrow{11}
+\printrow{12}
+\printrow{13}
+\printrow{14}
+\printrow{15}
+\printrow{16}
+\printrow{17}
+\printrow{18}
+\printrow{19}
+\printrow{20}
+\printrow{21}
+\printrow{22}
+\printrow{23}
+\printrow{24}
+\printrow{25}
+\printrow{30}
+\printrow{40}
+\printrow{50}
+\printrow{60}
+\printrow{70}
+\printrow{71}
+\printrow{75}
+\printrow{80}
+\printrow{81}
+\printrow{85}
+\printrow{90}
+\printrow{91}
+\printrow{95}
+\printrow{100}
+\printrow{101}
+\printrow{110}
+\printrow{125}
+\printrow{150}
+\printrow{170}
+\printrow{180}
+\printrow{190}
+\printrow{200}
+\printrow{250}
+\printrow{300}
+\printrow{400}
+\printrow{500}
+\printrow{600}
+\printrow{700}
+\printrow{800}
+\printrow{900}
+\printrow{1000}
+\printrow{99999}
+\end{ttfamily}
+
+\section{Cross-Referencing}
+
+Referencing a label: \ref{ex}.
+
+Passing numbers explicitly: \ordinalnum{10},
+\Numberstringnum{10}, \Ordinalstringnum{10}.
+
+\end{document}
+% \begin{macrocode}
+%</fc-samp.tex>
+% \end{macrocode}
+% \begin{macrocode}
+%<*fc-lang.tex>
+% \end{macrocode}
+ % This is an interactive script. Run it through \LaTeX
+ % and enter appropriate responses.
+
+\documentclass[a4paper]{article}
+
+\usepackage[french,english,spanish,portuges]{babel}
+\usepackage{fmtcount}
+
+\newcounter{startval}
+\newcounter{endval}
+\newcounter{stepsize}
+\newcounter{N}
+\newcount\myctr
+\newcount\langid
+
+\begin{document}
+
+\section{Displaying the value of a counter}
+
+\typeout{This is an interactive script, testing the fmtcount package.}
+
+\langid=-1
+
+\loop
+\typeout{Which language?^^J}
+\typeout{[1] English}
+\typeout{[2] Portuguese}
+\typeout{[3] Spanish}
+\typeout{[4] French}
+\typeout{[5] French (Swiss)}
+\typeout{[6] French (Belgium)}
+
+\typein[\response]{}
+
+\ifthenelse{\equal{\response}{1}}{\langid=1}{
+\ifthenelse{\equal{\response}{2}}{\langid=2}{
+\ifthenelse{\equal{\response}{3}}{\langid=3}{
+\ifthenelse{\equal{\response}{4}}{\langid=4\fmtcountsetoptions{french}}{
+\ifthenelse{\equal{\response}{5}}{\langid=5\fmtcountsetoptions{french=swiss}}{
+\ifthenelse{\equal{\response}{6}}{\langid=6\fmtcountsetoptions{french=belgian}}
+{\langid=-1
+\typeout{Invalid response '\response', please select a number from 1 to 6}}}}}}}
+\ifnum\langid=-1
+\repeat
+
+\ifcase\langid
+\or \selectlanguage{english}
+Current language: English.
+\or \selectlanguage{portuges}
+Current language: Portuguese.
+\or \selectlanguage{spanish}
+Current language: Spanish.
+\or \selectlanguage{french}
+Current language: French.
+\or \selectlanguage{french}
+Current language: French (Swiss).
+\or \selectlanguage{french}
+Current language: French (Belgium).
+\fi
+
+\def\startval{-1}
+
+\loop
+\typein[\startval]{Start value? (Integer from 0 to 99000)
+[Default 1]}
+\ifthenelse{\equal{\startval}{}}{\def\startval{1}}{}
+\ifnum\startval<0\def\startval{-1}\fi
+\ifnum\startval>99999\def\startval{-1}\fi
+\ifnum\startval=-1
+\repeat
+
+\def\endval{-1}
+
+\loop
+\typein[\endval]{End value? (Integer from 0 to 99999)
+[Default 1000]}
+\ifthenelse{\equal{\endval}{}}{\def\endval{1000}}{}
+\ifnum\endval<0\def\endval{-1}\fi
+\ifnum\endval>99000\def\endval{-1}\fi
+\ifnum\endval=-1
+\repeat
+
+\def\stepsize{0}
+
+\loop
+\typein[\stepsize]{Step size? (Non zero integer)
+[Default 1]}
+\ifthenelse{\equal{\stepsize}{}}{\def\stepsize{1}}{}
+\ifnum\stepsize=0
+\repeat
+
+\typeout{From {\startval} to {\endval} step {\stepsize}}
+
+\ifnum\startval<\endval
+\ifnum\stepsize<0
+\PackageError{fc-lang}{Infinite loop not permitted!}{}
+\def\endval{\startval}
+\fi
+\fi
+
+\ifnum\startval>\endval
+\ifnum\stepsize>0
+\PackageError{fc-lang}{Infinite loop not permitted!}{}
+\def\endval{\startval}
+\fi
+\fi
+
+\myctr=-1
+\loop
+\typeout{Which format?^^J}
+\typeout{[1] ordinalstring}
+\typeout{[2] Ordinalstring}
+\typeout{[3] numberstring}
+\typeout{[4] Numberstring}
+
+\typein[\response]{Default: 1}
+
+\ifthenelse{\equal{\response}{}}{\def\response{1}}{}%default val
+\ifthenelse{\equal{\response}{1}}{\myctr=1}{
+\ifthenelse{\equal{\response}{2}}{\myctr=2}{
+\ifthenelse{\equal{\response}{3}}{\myctr=3}{
+\ifthenelse{\equal{\response}{4}}{\myctr=4}{\myctr=-1
+\typeout{Invalid response '\response', please select a number from 1 to 4}}}}}
+\ifnum\myctr=-1
+\repeat
+
+\ifcase\myctr
+\or\def\stringtype{ordinalstring}
+\or\def\stringtype{Ordinalstring}
+\or\def\stringtype{numberstring}
+\or\def\stringtype{Numberstring}
+\fi
+
+\ifnum\langid>3
+\myctr=-1
+\loop
+\typeout{Ordinal type?^^J}
+\typeout{[1] eme}
+\typeout{[2] e}
+\typein[\response]{Default: 1}
+\ifthenelse{\equal{\response}{}}{\def\response{1}}{}%default
+\ifthenelse{\equal{\response}{1}}{%
+\fmtcountsetoptions{abbrv=false}\myctr=1}{%
+\ifthenelse{\equal{\response}{2}}{%
+\fmtcountsetoptions{abbrv}\myctr=2}{%
+\myctr=-1}}
+\ifnum\myctr=-1
+\repeat
+\fi
+
+\myctr=-1
+\loop
+\typeout{Ordinal format?^^J}
+\typeout{[1] raised}
+\typeout{[2] level}
+\typein[\response]{Default: 1}
+\ifthenelse{\equal{\response}{1}\or\equal{\response}{}}{%
+\fmtcountsetoptions{fmtord=raise}\myctr=1}{%
+\ifthenelse{\equal{\response}{2}}{%
+\fmtcountsetoptions{fmtord=level}\myctr=2}{%
+\myctr=-1}}
+\ifnum\myctr=-1
+\repeat
+
+\ifnum\langid=1
+\myctr=1
+\else
+\loop
+\typein[\response]{Gender? (m or f) [Default: m]}
+\ifthenelse{\equal{\response}{m}\or\equal{\response}{}}{\myctr=1}{
+\ifthenelse{\equal{\response}{f}}{\myctr=2}{\myctr=-1
+\typeout{Invalid response '\response'}}}
+\ifnum\myctr=-1
+\repeat
+\fi
+
+\ifcase\myctr
+\or \def\gender{m}
+\or \def\gender{f}
+\fi
+
+\setcounter{startval}{\startval}
+\setcounter{endval}{\endval}
+\setcounter{stepsize}{\stepsize}
+
+\stepcounter{endval}
+\begin{ttfamily}
+\noindent
+\makebox[0.25in][c]{N}
+\makebox[0.5in][c]{ordinal}\quad
+\stringtype
+\par
+\myctr=\value{startval}
+\loop
+\noindent
+\setcounter{N}{\myctr}
+\makebox[0.25in][r]{\arabic{N}}
+\makebox[0.5in][r]{\ordinal{N}[\gender]}\quad
+\csname\stringtype\endcsname{N}[\gender].
+\par
+\advance\myctr by \value{stepsize}\relax
+\ifnum\myctr<\value{endval}
+\repeat
+
+\end{ttfamily}
+
+\end{document}
+% \begin{macrocode}
+%</fc-lang.tex>
+% \end{macrocode}
+%\Finale
+\endinput
diff --git a/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins b/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins
new file mode 100644
index 00000000000..c1ed2c10e64
--- /dev/null
+++ b/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins
@@ -0,0 +1,32 @@
+% fmtcount.ins generated using makedtx version 0.9b 2005/7/1 14:39
+\input docstrip
+
+\preamble
+Copyright (C) 2005 Nicola Talbot, all rights reserved.
+If you modify this file, you must change its name first.
+You are NOT ALLOWED to distribute this file alone. You are NOT
+ALLOWED to take money for the distribution or use of either this
+file or a changed version, except for a nominal charge for copying
+etc.
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{fc-english.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-english.def,package}}
+\file{fc-samp.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-samp.tex,package}}
+\file{fmtcount.perl}{\nopreamble\nopostamble\from{fmtcount.dtx}{fmtcount.perl}}
+\file{fmtcount.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{fmtcount.dtx}{fmtcount.sty,package}}
+\file{fc-portuges.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-portuges.def,package}}
+\file{fc-french.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-french.def,package}}
+\file{fc-lang.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-lang.tex,package}}
+\file{fc-spanish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-spanish.def,package}}
+}
+
+\endbatchfile