summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/fmtcount
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-04-24 23:55:24 +0000
committerKarl Berry <karl@freefriends.org>2007-04-24 23:55:24 +0000
commitc65c25c59074eaa09621f4fd782362b2c5227e32 (patch)
tree70d64612457606868bfbc0f31af7dc82dde56ab5 /Master/texmf-dist/source/latex/fmtcount
parent0f300547ff60c57ac58422c1d92660da8bf5efb0 (diff)
fmtcount 1.09 (24apr07)
git-svn-id: svn://tug.org/texlive/trunk@4182 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/fmtcount')
-rw-r--r--Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx3058
-rw-r--r--Master/texmf-dist/source/latex/fmtcount/fmtcount.ins2
2 files changed, 2306 insertions, 754 deletions
diff --git a/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx b/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx
index ba813b38d30..4a1bf4eb979 100644
--- a/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx
+++ b/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx
@@ -12,7 +12,7 @@
% -author "Nicola Talbot"
% -dir "source"
% fmtcount
-% Created on 2007/1/6 16:52
+% Created on 2007/4/21 19:25
%\fi
%\iffalse
%<*package>
@@ -50,7 +50,8 @@
-\newcommand{\styname}[1]{\textsf{#1}}\newcommand{\clsname}[1]{\textsf{#1}}
+\newcommand{\styname}[1]{\textsf{#1}}\newcommand{\clsname}[1]{\textsf{#1}}\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}}
+
\begin{document}
\DocInput{fmtcount.dtx}
\end{document}
@@ -58,11 +59,12 @@
%\fi
%
%\RecordChanges
+%\CheckSum{7392}
%\OnlyDescription
-%\def\filedate{6 January 2007}
-%\def\fileversion{1.06}
+%\def\filedate{20 April 2007}
+%\def\fileversion{1.09}
%\def\filename{fmtcount.dtx}
-%\def\docdate{6 January 2007}
+%\def\docdate{21st April 2007}
%
% \title{fmtcount.sty v\fileversion: Displaying the Values of
%\LaTeX\ Counters}
@@ -129,16 +131,27 @@
% 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{\NUMBERstring}
+%The macro \verb"\NUMBERstring{"\meta{counter}\verb'}' does the same
+%as \verb"\numberstring", but converted to upper case. Note that
+%\verb"\MakeUppercase{\NUMBERstring{"\meta{counter}\verb'}}' doesn't
+%work, due to the way that \verb"\MakeUppercase" expands its
+%argument\footnote{See all the various postings to
+%\texttt{comp.text.tex} about \cmdname{MakeUppercase}}.
%
%\DescribeMacro{\numberstringnum}
%\DescribeMacro{\Numberstringnum}
-%The macros \verb!\numberstringnum! and
-%\verb!\Numberstringnum! work like
-%\verb!\numberstring! and
-%\verb!\Numberstring!, respectively, but take an actual number
+%\DescribeMacro{\NUMBERstringnum}
+%The macros \verb!\numberstringnum!,
+%\verb!\Numberstringnum! and
+%\verb"\NUMBERstringnum" work like
+%\verb!\numberstring!,
+%\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.\
@@ -147,16 +160,78 @@
% 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{\ORDINALstring}
+% The macro \verb"\ORDINALstring{"\meta{counter}\verb!}! does the same as
+%\verb"\ordinalstring", but with all words in upper case (see previous
+%note about \cmdname{MakeUppercase}).
%
%\DescribeMacro{\ordinalstringnum}
%\DescribeMacro{\Ordinalstringnum}
-%The macros \verb!\ordinalstringnum! and
-%\verb!\Ordinalstringnum! work like
-%\verb!\Ordinalstring! and
-%\verb!\Ordinalstring!, respectively, but take an actual number
+%\DescribeMacro{\ORDINALstringnum}
+%The macros \verb!\ordinalstringnum!,
+%\verb!\Ordinalstringnum! and \cmdname{ORDINALstringnum} work like
+%\verb!\ordinalstring!,
+%\verb!\Ordinalstring! and \cmdname{ORDINALstring}, respectively, but take an actual number
%rather than a counter as the argument. For example,
%\verb"\ordinalstringnum{3}" will produce: third.
%
+%\changes{v.1.09}{21 Apr 2007}{store facility added}
+%As from version 1.09, textual representations can be stored for
+%later use. This overcomes the problems encountered when you
+%attempt to use one of the above commands in \cmdname{edef}.
+%
+%Each of the following commands takes a label as the first argument,
+%the other arguments are as the analogous commands above. These
+%commands do not display anything, but store the textual
+%representation. This can later be retrieved using
+%\DescribeMacro{\FMCuse}\cmdname{FMCuse}\{\meta{label}\}.
+%Note: with \cmdname{storeordinal} and \cmdname{storeordinalnum}, the
+%only bit that doesn't get expanded is \cmdname{fmtord}. So, for
+%example, \verb"\storeordinalnum{mylabel}{3}" will be stored as
+%\verb"3\relax \fmtord{rd}".
+%
+%\DescribeMacro{\storeordinal}
+%\cmdname{storeordinal}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeordinalstring}
+%\cmdname{storeordinalstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeOrdinalstring}
+%\cmdname{storeOrdinalstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeORDINALstring}
+%\cmdname{storeORDINALstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storenumberstring}
+%\cmdname{storenumberstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeNumberstring}
+%\cmdname{storeNumberstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeNUMBERstring}
+%\cmdname{storeNUMBERstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeordinalnum}
+%\cmdname{storeordinalnum}\{\meta{label}\}\{\meta{number}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeordinalstringnum}
+%\cmdname{storeordinalstring}\{\meta{label}\}\{\meta{number}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeOrdinalstringnum}
+%\cmdname{storeOrdinalstringnum}\{\meta{label}\}\{\meta{number}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeORDINALstringnum}
+%\cmdname{storeORDINALstringnum}\{\meta{label}\}\{\meta{number}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storenumberstringnum}
+%\cmdname{storenumberstring}\{\meta{label}\}\{\meta{number}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeNumberstringnum}
+%\cmdname{storeNumberstring}\{\meta{label}\}\{\meta{number}\}[\meta{gender}]
+%\par
+%\DescribeMacro{\storeNUMBERstringnum}
+%\cmdname{storeNUMBERstring}\{\meta{label}\}\{\meta{number}\}[\meta{gender}]
+%
% \DescribeMacro{\binary}
%\changes{v2.4}{25 Sept 2004}{'binary added}
% The macro \verb"\binary{"\meta{counter}\verb!}! will print the
@@ -390,47 +465,55 @@
%<*fc-english.def>
% \end{macrocode}
%\fi
+% \subsection{fc-english.def}
% English definitions
% \begin{macrocode}
-\ProvidesFile{fc-english}[2005/04/29]
+\ProvidesFile{fc-english}[2007/04/20]
% \end{macrocode}
-% Define macro that prints the value of the \TeX\ count
-% register as an ordinal.
+% Define macro that converts a number or count register (first
+% argument) to an ordinal, and stores the result in the
+% second argument, which should be a control sequence.
% \begin{macrocode}
-\newcommand{\@ordinalMenglish}[1]{%
+\newcommand*{\@ordinalMenglish}[2]{%
+\def\@fc@ord{}%
\@orgargctr=#1\relax
\@ordinalctr=#1%
\@modulo{\@ordinalctr}{100}%
-\ifnum\@ordinalctr=11
-\the\@orgargctr\fmtord{th}%
+\ifnum\@ordinalctr=11\relax
+ \def\@fc@ord{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
+ \ifnum\@ordinalctr=12\relax
+ \def\@fc@ord{th}%
+ \else
+ \ifnum\@ordinalctr=13\relax
+ \def\@fc@ord{th}%
+ \else
+ \@modulo{\@ordinalctr}{10}%
+ \ifcase\@ordinalctr
+ \def\@fc@ord{th}% case 0
+ \or \def\@fc@ord{st}% case 1
+ \or \def\@fc@ord{nd}% case 2
+ \or \def\@fc@ord{rd}% case 3
+ \else
+ \def\@fc@ord{th}% default case
+ \fi
+ \fi
+ \fi
\fi
+\edef#2{\number#1\relax\noexpand\fmtord{\@fc@ord}}%
}
+% \end{macrocode}
+% There is no gender difference in English, so make feminine
+% the same as the masculine.
+% \begin{macrocode}
\let\@ordinalFenglish=\@ordinalMenglish
% \end{macrocode}
% Define the macro that prints the value of a \TeX\ count register
-% as text
+% as text. To make it easier, break it up into units, teens and
+% tens. First, the units: the argument should be between 0 and 9
+% inclusive.
% \begin{macrocode}
-\providecommand{\andname}{and}
-
-\newcommand{\@@unitstringenglish}[1]{%
+\newcommand*{\@@unitstringenglish}[1]{%
\ifcase#1\relax
zero%
\or one%
@@ -444,8 +527,11 @@ zero%
\or nine%
\fi
}
-
-\newcommand{\@@tenstringenglish}[1]{%
+% \end{macrocode}
+% Next the tens, again the argument should be between 0 and 9
+% inclusive.
+% \begin{macrocode}
+\newcommand*{\@@tenstringenglish}[1]{%
\ifcase#1\relax
\or ten%
\or twenty%
@@ -458,8 +544,11 @@ zero%
\or ninety%
\fi
}
-
-\newcommand{\@@teenstringenglish}[1]{%
+% \end{macrocode}
+% Finally the teens, again the argument should be between 0 and 9
+% inclusive.
+% \begin{macrocode}
+\newcommand*{\@@teenstringenglish}[1]{%
\ifcase#1\relax
ten%
\or eleven%
@@ -473,8 +562,10 @@ ten%
\or nineteen%
\fi
}
-
-\newcommand{\@@Unitstringenglish}[1]{%
+% \end{macrocode}
+% As above, but with the initial letter in uppercase. The units:
+% \begin{macrocode}
+\newcommand*{\@@Unitstringenglish}[1]{%
\ifcase#1\relax
Zero%
\or One%
@@ -488,8 +579,10 @@ Zero%
\or Nine%
\fi
}
-
-\newcommand{\@@Tenstringenglish}[1]{%
+% \end{macrocode}
+% The tens:
+% \begin{macrocode}
+\newcommand*{\@@Tenstringenglish}[1]{%
\ifcase#1\relax
\or Ten%
\or Twenty%
@@ -502,8 +595,10 @@ Zero%
\or Ninety%
\fi
}
-
-\newcommand{\@@Teenstringenglish}[1]{%
+% \end{macrocode}
+% The teens:
+% \begin{macrocode}
+\newcommand*{\@@Teenstringenglish}[1]{%
\ifcase#1\relax
Ten%
\or Eleven%
@@ -517,8 +612,14 @@ Ten%
\or Nineteen%
\fi
}
-
-\newcommand{\@@numberstringenglish}[1]{%
+% \end{macrocode}
+% This has changed in version 1.09, so that it now stores
+% the result in the second argument, but doesn't display anything.
+% Since it only affects internal macros, it shouldn't affect
+% documents created with older versions. (These internal macros are
+% not meant for use in documents.)
+% \begin{macrocode}
+\newcommand*{\@@numberstringenglish}[2]{%
\ifnum#1>99999
\PackageError{fmtcount}{Out of range}%
{This macro only works for values less than 100000}%
@@ -530,74 +631,118 @@ you can try typing "minus" first, and then pass the modulus of
this number}%
\fi
\fi
+\def#2{}%
\@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%
+ \divide\@strctr by 10
+ \ifnum\@strctr>1\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@tenstring{\@strctr}}%
+ \@strctr=#1 \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr-\@unitstring{\@strctr}}%
+ \fi
+ \else
+ \@strctr=#1\relax
+ \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@teenstring{\@strctr}}%
+ \fi
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@thousand}%
\else
-\ifnum\@strctr>0 \@unitstring{\@strctr}\ \@thousand\fi
+ \ifnum\@strctr>0\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@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%
+\ifnum\@strctr>0\relax
+ \ifnum#1>1000\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ }%
+ \fi
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@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}%
+\ifnum#1>100\relax
+ \ifnum\@strctr>0\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@andname\ }%
+ \fi
\fi
+\ifnum\@strctr>19\relax
+ \divide\@strctr by 10\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@tenstring{\@strctr}}%
+ \@strctr=#1\relax \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr-\@unitstring{\@strctr}}%
+ \fi
\else
-\@modulo{\@strctr}{10}%
-\@teenstring{\@strctr}%
-\fi
+ \ifnum\@strctr<10\relax
+ \ifnum\@strctr=0\relax
+ \ifnum#1<100\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}}%
+ \fi
+ \else
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}}%
+ \fi
+ \else
+ \@modulo{\@strctr}{10}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@teenstring{\@strctr}}%
+ \fi
\fi
}
-
-\newcommand{\@numberstringMenglish}[1]{%
+% \end{macrocode}
+% All lower case version, the second argument must be a
+% control sequence.
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringMenglish}[2]{%
\let\@unitstring=\@@unitstringenglish
\let\@teenstring=\@@teenstringenglish
\let\@tenstring=\@@tenstringenglish
\def\@hundred{hundred}\def\@thousand{thousand}%
-\@@numberstringenglish{#1}}
-
+\def\@andname{and}%
+\@@numberstringenglish{#1}{#2}%
+}
+% \end{macrocode}
+% There is no gender in English, so make feminine form the same
+% as the masculine.
+% \begin{macrocode}
\let\@numberstringFenglish=\@numberstringMenglish
-
-\newcommand{\@NumberstringMenglish}[1]{%
+% \end{macrocode}
+% This version makes the first letter of each word an uppercase
+% character (except ``and''). The second argument must be a control
+% sequence.
+% \begin{macrocode}
+\newcommand*{\@NumberstringMenglish}[2]{%
\let\@unitstring=\@@Unitstringenglish
\let\@teenstring=\@@Teenstringenglish
\let\@tenstring=\@@Tenstringenglish
\def\@hundred{Hundred}\def\@thousand{Thousand}%
-\@@numberstringenglish{#1}}
-
+\def\@andname{and}%
+\@@numberstringenglish{#1}{#2}}
+% \end{macrocode}
+% There is no gender in English, so make feminine form the same
+% as the masculine.
+% \begin{macrocode}
\let\@NumberstringFenglish=\@NumberstringMenglish
% \end{macrocode}
-% Define a macro that produces an ordinal as a string.
+% Define a macro that produces an ordinal as a string. Again, break
+% it up into units, teens and tens. First the units:
% \begin{macrocode}
-\newcommand{\@@unitthstringenglish}[1]{%
+\newcommand*{\@@unitthstringenglish}[1]{%
\ifcase#1\relax
zeroth%
\or first%
@@ -611,8 +756,10 @@ zeroth%
\or ninth%
\fi
}
-
-\newcommand{\@@tenthstringenglish}[1]{%
+% \end{macrocode}
+% Next the tens:
+% \begin{macrocode}
+\newcommand*{\@@tenthstringenglish}[1]{%
\ifcase#1\relax
\or tenth%
\or twentieth%
@@ -625,8 +772,10 @@ zeroth%
\or ninetieth%
\fi
}
-
-\newcommand{\@@teenthstringenglish}[1]{%
+% \end{macrocode}
+% The teens:
+% \begin{macrocode}
+\newcommand*{\@@teenthstringenglish}[1]{%
\ifcase#1\relax
tenth%
\or eleventh%
@@ -640,8 +789,10 @@ tenth%
\or nineteenth%
\fi
}
-
-\newcommand{\@@Unitthstringenglish}[1]{%
+% \end{macrocode}
+% As before, but with the first letter in upper case. The units:
+% \begin{macrocode}
+\newcommand*{\@@Unitthstringenglish}[1]{%
\ifcase#1\relax
Zeroth%
\or First%
@@ -655,8 +806,10 @@ Zeroth%
\or Ninth%
\fi
}
-
-\newcommand{\@@Tenthstringenglish}[1]{%
+% \end{macrocode}
+% The tens:
+% \begin{macrocode}
+\newcommand*{\@@Tenthstringenglish}[1]{%
\ifcase#1\relax
\or Tenth%
\or Twentieth%
@@ -669,8 +822,10 @@ Zeroth%
\or Ninetieth%
\fi
}
-
-\newcommand{\@@Teenthstringenglish}[1]{%
+% \end{macrocode}
+% The teens:
+% \begin{macrocode}
+\newcommand*{\@@Teenthstringenglish}[1]{%
\ifcase#1\relax
Tenth%
\or Eleventh%
@@ -684,8 +839,13 @@ Tenth%
\or Nineteenth%
\fi
}
-
-\newcommand{\@@ordinalstringenglish}[1]{%
+% \end{macrocode}
+% Again, as from version 1.09, this has been changed to take two
+% arguments, where the second argument is a control sequence.
+% The resulting text is stored in the control sequence, and nothing
+% is displayed.
+% \begin{macrocode}
+\newcommand*{\@@ordinalstringenglish}[2]{%
\@strctr=#1\relax
\ifnum#1>99999
\PackageError{fmtcount}{Out of range}%
@@ -697,89 +857,143 @@ Tenth%
you can try typing "minus" first, and then pass the modulus of
this number}%
\fi
+\def#2{}%
\fi
\@strctr=#1\relax \divide\@strctr by 1000\relax
-\ifnum\@strctr>9
+\ifnum\@strctr>9\relax
% #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
+ \divide\@strctr by 10
+ \ifnum\@strctr>1\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@tenstring{\@strctr}}%
+ \@strctr=#1\relax
+ \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr-\@unitstring{\@strctr}}%
+ \fi
+ \else
+ \@strctr=#1\relax \divide\@strctr by 1000\relax
+ \@modulo{\@strctr}{10}%
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@teenstring{\@strctr}}%
+ \fi
+ \@strctr=#1\relax \@modulo{\@strctr}{1000}%
+ \ifnum\@strctr=0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@thousandth}%
+ \else
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@thousand}%
+ \fi
\else
-\ifnum\@strctr>0\relax
-\@unitstring{\@strctr}%
-\@strctr=#1\relax \@modulo{\@strctr}{1000}%
-\ifnum\@strctr=0\ \@thousandth\else\ \@thousand\fi
-\fi
+ \ifnum\@strctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}%
+ \@strctr=#1\relax \@modulo{\@strctr}{1000}%
+ \let\@@fc@ordstr#2\relax
+ \ifnum\@strctr=0\relax
+ \edef#2{\@@fc@ordstr\ \@thousandth}%
+ \else
+ \edef#2{\@@fc@ordstr\ \@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
+\ifnum\@strctr>0\relax
+ \ifnum#1>1000\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ }%
+ \fi
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}%
+ \@strctr=#1\relax \@modulo{\@strctr}{100}%
+ \let\@@fc@ordstr#2\relax
+ \ifnum\@strctr=0\relax
+ \edef#2{\@@fc@ordstr\ \@hundredth}%
+ \else
+ \edef#2{\@@fc@ordstr\ \@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}%
+\ifnum#1>100\relax
+ \ifnum\@strctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@andname\ }%
+ \fi
\fi
+\ifnum\@strctr>19\relax
+ \@tmpstrctr=\@strctr
+ \divide\@strctr by 10\relax
+ \@modulo{\@tmpstrctr}{10}%
+ \let\@@fc@ordstr#2\relax
+ \ifnum\@tmpstrctr=0\relax
+ \edef#2{\@@fc@ordstr\@tenthstring{\@strctr}}%
+ \else
+ \edef#2{\@@fc@ordstr\@tenstring{\@strctr}}%
+ \fi
+ \@strctr=#1\relax \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr-\@unitthstring{\@strctr}}%
+ \fi
\else
-\@modulo{\@strctr}{10}%
-\@teenthstring{\@strctr}%
-\fi
+ \ifnum\@strctr<10\relax
+ \ifnum\@strctr=0\relax
+ \ifnum#1<100\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}%
+ \fi
+ \else
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}%
+ \fi
+ \else
+ \@modulo{\@strctr}{10}%
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@teenthstring{\@strctr}}%
+ \fi
\fi
}
-
-\newcommand{\@ordinalstringMenglish}[1]{%
+% \end{macrocode}
+% All lower case version. Again, the second argument must be a
+% control sequence in which the resulting text is stored.
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringMenglish}[2]{%
\let\@unitthstring=\@@unitthstringenglish
\let\@teenthstring=\@@teenthstringenglish
\let\@tenthstring=\@@tenthstringenglish
\let\@unitstring=\@@unitstringenglish
\let\@teenstring=\@@teenstringenglish
\let\@tenstring=\@@tenstringenglish
+\def\@andname{and}%
\def\@hundred{hundred}\def\@thousand{thousand}%
\def\@hundredth{hundredth}\def\@thousandth{thousandth}%
-\@@ordinalstringenglish{#1}}
-
+\@@ordinalstringenglish{#1}{#2}}
+% \end{macrocode}
+% No gender in English, so make feminine form same as masculine:
+% \begin{macrocode}
\let\@ordinalstringFenglish=\@ordinalstringMenglish
-
-\newcommand{\@OrdinalstringMenglish}[1]{%
+% \end{macrocode}
+% First letter of each word in upper case:
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringMenglish}[2]{%
\let\@unitthstring=\@@Unitthstringenglish
\let\@teenthstring=\@@Teenthstringenglish
\let\@tenthstring=\@@Tenthstringenglish
\let\@unitstring=\@@Unitstringenglish
\let\@teenstring=\@@Teenstringenglish
\let\@tenstring=\@@Tenstringenglish
+\def\@andname{and}%
\def\@hundred{Hundred}\def\@thousand{Thousand}%
\def\@hundredth{Hundredth}\def\@thousandth{Thousandth}%
-\@@ordinalstringenglish{#1}}
-
+\@@ordinalstringenglish{#1}{#2}}
+% \end{macrocode}
+% No gender in English, so make feminine form same as masculine:
+% \begin{macrocode}
\let\@OrdinalstringFenglish=\@OrdinalstringMenglish
-
% \end{macrocode}
%\iffalse
% \begin{macrocode}
@@ -791,12 +1005,43 @@ this number}%
%<*fc-french.def>
% \end{macrocode}
%\fi
-% French
+% \subsection{fc-french.def}
+% French definitions
+% \begin{macrocode}
+\ProvidesFile{fc-french.def}[2007/04/20]
+% \end{macrocode}
+% Define macro that converts a number or count register (first
+% argument) to an ordinal, and store the result in the second
+% argument, which must be a control sequence. Masculine:
% \begin{macrocode}
-\ProvidesFile{fc-french.def}[2005/04/29]
+\newcommand*{\@ordinalMfrench}[2]{%
+\iffmtord@abbrv
+ \edef#2{\number#1\relax\noexpand\fmtord{e}}%
+\else
+ \ifnum#1=1\relax
+ \edef#2{\number#1\relax\noexpand\fmtord{er}}%
+ \else
+ \edef#2{\number#1\relax\noexpand\fmtord{eme}}%
+ \fi
+\fi}
% \end{macrocode}
+% Feminine:
% \begin{macrocode}
-\newcommand{\@@unitstringfrench}[1]{%
+\newcommand*{\@ordinalFfrench}[2]{%
+\iffmtord@abbrv
+ \edef#2{\number#1\relax\noexpand\fmtord{e}}%
+\else
+ \ifnum#1=1\relax
+ \edef#2{\number#1\relax\noexpand\fmtord{ere}}%
+ \else
+ \edef#2{\number#1\relax\noexpand\fmtord{eme}}%
+ \fi
+\fi}
+% \end{macrocode}
+% Textual representation of a number. To make it easier break it
+% into units, tens and teens. First the units:
+% \begin{macrocode}
+\newcommand*{\@@unitstringfrench}[1]{%
\ifcase#1\relax
zero%
\or un%
@@ -810,15 +1055,20 @@ zero%
\or neuf%
\fi
}
-
-\newcommand{\@@unitstringFfrench}[1]{%
+% \end{macrocode}
+% Feminine only changes for 1:
+% \begin{macrocode}
+\newcommand*{\@@unitstringFfrench}[1]{%
\ifnum#1=1\relax
une%
\else\@@unitstringfrench{#1}%
\fi
}
-
-\newcommand{\@@tenstringfrench}[1]{%
+% \end{macrocode}
+% Tens (this includes the Belgian and Swiss variants, special
+% cases employed lower down.)
+% \begin{macrocode}
+\newcommand*{\@@tenstringfrench}[1]{%
\ifcase#1\relax
\or dix%
\or vingt%
@@ -832,8 +1082,10 @@ une%
\or cent%
\fi
}
-
-\newcommand{\@@teenstringfrench}[1]{%
+% \end{macrocode}
+% Teens:
+% \begin{macrocode}
+\newcommand*{\@@teenstringfrench}[1]{%
\ifcase#1\relax
dix%
\or onze%
@@ -847,8 +1099,10 @@ dix%
\or dix-neuf%
\fi
}
-
-\newcommand{\@@seventiesfrench}[1]{%
+% \end{macrocode}
+% Seventies are a special case, depending on dialect:
+% \begin{macrocode}
+\newcommand*{\@@seventiesfrench}[1]{%
\@tenstring{6}%
\ifnum#1=1\relax
\ \@andname\
@@ -857,8 +1111,10 @@ dix%
\fi
\@teenstring{#1}%
}
-
-\newcommand{\@@eightiesfrench}[1]{%
+% \end{macrocode}
+% Eighties are a special case, depending on dialect:
+% \begin{macrocode}
+\newcommand*{\@@eightiesfrench}[1]{%
\@unitstring{4}-\@tenstring{2}%
\ifnum#1>0
-\@unitstring{#1}%
@@ -866,33 +1122,43 @@ dix%
s%
\fi
}
-
-\newcommand{\@@ninetiesfrench}[1]{%
+% \end{macrocode}
+% Nineties are a special case, depending on dialect:
+% \begin{macrocode}
+\newcommand*{\@@ninetiesfrench}[1]{%
\@unitstring{4}-\@tenstring{2}-\@teenstring{#1}%
}
-
-\newcommand{\@@seventiesfrenchswiss}[1]{%
+% \end{macrocode}
+% Swiss seventies:
+% \begin{macrocode}
+\newcommand*{\@@seventiesfrenchswiss}[1]{%
\@tenstring{7}%
\ifnum#1=1\ \@andname\ \fi
\ifnum#1>1-\fi
\ifnum#1>0\@unitstring{#1}\fi
}
-
-\newcommand{\@@eightiesfrenchswiss}[1]{%
+% \end{macrocode}
+% Swiss eighties:
+% \begin{macrocode}
+\newcommand*{\@@eightiesfrenchswiss}[1]{%
\@tenstring{8}%
\ifnum#1=1\ \@andname\ \fi
\ifnum#1>1-\fi
\ifnum#1>0\@unitstring{#1}\fi
}
-
-\newcommand{\@@ninetiesfrenchswiss}[1]{%
+% \end{macrocode}
+% Swiss nineties:
+% \begin{macrocode}
+\newcommand*{\@@ninetiesfrenchswiss}[1]{%
\@tenstring{9}%
\ifnum#1=1\ \@andname\ \fi
\ifnum#1>1-\fi
\ifnum#1>0\@unitstring{#1}\fi
}
-
-\newcommand{\@@Unitstringfrench}[1]{%
+% \end{macrocode}
+% Units with initial letter in upper case:
+% \begin{macrocode}
+\newcommand*{\@@Unitstringfrench}[1]{%
\ifcase#1\relax
Zero%
\or Un%
@@ -906,15 +1172,20 @@ Zero%
\or Neuf%
\fi
}
-
-\newcommand{\@@UnitstringFfrench}[1]{%
+% \end{macrocode}
+% As above, but feminine:
+% \begin{macrocode}
+\newcommand*{\@@UnitstringFfrench}[1]{%
\ifnum#1=1\relax
Une%
\else \@@Unitstringfrench{#1}%
\fi
}
-
-\newcommand{\@@Tenstringfrench}[1]{%
+% \end{macrocode}
+% Tens, with initial letter in upper case (includes Swiss and
+% Belgian variants):
+% \begin{macrocode}
+\newcommand*{\@@Tenstringfrench}[1]{%
\ifcase#1\relax
\or Dix%
\or Vingt%
@@ -928,8 +1199,10 @@ Une%
\or Cent%
\fi
}
-
-\newcommand{\@@Teenstringfrench}[1]{%
+% \end{macrocode}
+% Teens, with initial letter in upper case:
+% \begin{macrocode}
+\newcommand*{\@@Teenstringfrench}[1]{%
\ifcase#1\relax
Dix%
\or Onze%
@@ -943,8 +1216,15 @@ Dix%
\or Dix-Neuf%
\fi
}
-
-\newcommand{\@numberstringMfrenchswiss}[1]{%
+% \end{macrocode}
+% This has changed in version 1.09, so that it now stores the
+% result in the second argument, but doesn't display anything.
+% Since it only affects internal macros, it shouldn't affect
+% documents created with older versions. (These internal macros
+% are not defined for use in documents.) Firstly, the Swiss
+% version:
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringMfrenchswiss}[2]{%
\let\@unitstring=\@@unitstringfrench
\let\@teenstring=\@@teenstringfrench
\let\@tenstring=\@@tenstringfrench
@@ -953,9 +1233,11 @@ Dix%
\let\@nineties=\@@ninetiesfrenchswiss
\def\@hundred{cent}\def\@thousand{mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
-\newcommand{\@numberstringMfrenchfrance}[1]{%
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% Same as above, but for French as spoken in France:
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringMfrenchfrance}[2]{%
\let\@unitstring=\@@unitstringfrench
\let\@teenstring=\@@teenstringfrench
\let\@tenstring=\@@tenstringfrench
@@ -964,9 +1246,11 @@ Dix%
\let\@nineties=\@@ninetiesfrench
\def\@hundred{cent}\def\@thousand{mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
-\newcommand{\@numberstringMfrenchbelgian}[1]{%
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% Same as above, but for Belgian dialect:
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringMfrenchbelgian}[2]{%
\let\@unitstring=\@@unitstringfrench
\let\@teenstring=\@@teenstringfrench
\let\@tenstring=\@@tenstringfrench
@@ -975,11 +1259,15 @@ Dix%
\let\@nineties=\@@ninetiesfrench
\def\@hundred{cent}\def\@thousand{mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% Set default dialect:
+% \begin{macrocode}
\let\@numberstringMfrench=\@numberstringMfrenchfrance
-
-\newcommand{\@numberstringFfrenchswiss}[1]{%
+% \end{macrocode}
+% As above, but for feminine version. Swiss:
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringFfrenchswiss}[2]{%
\let\@unitstring=\@@unitstringFfrench
\let\@teenstring=\@@teenstringfrench
\let\@tenstring=\@@tenstringfrench
@@ -988,9 +1276,11 @@ Dix%
\let\@nineties=\@@ninetiesfrenchswiss
\def\@hundred{cent}\def\@thousand{mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
-\newcommand{\@numberstringFfrenchfrance}[1]{%
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% French:
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringFfrenchfrance}[2]{%
\let\@unitstring=\@@unitstringFfrench
\let\@teenstring=\@@teenstringfrench
\let\@tenstring=\@@tenstringfrench
@@ -999,9 +1289,11 @@ Dix%
\let\@nineties=\@@ninetiesfrench
\def\@hundred{cent}\def\@thousand{mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
-\newcommand{\@numberstringFfrenchbelgian}[1]{%
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% Belgian:
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringFfrenchbelgian}[2]{%
\let\@unitstring=\@@unitstringFfrench
\let\@teenstring=\@@teenstringfrench
\let\@tenstring=\@@tenstringfrench
@@ -1010,11 +1302,15 @@ Dix%
\let\@nineties=\@@ninetiesfrench
\def\@hundred{cent}\def\@thousand{mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% Set default dialect:
+% \begin{macrocode}
\let\@numberstringFfrench=\@numberstringFfrenchfrance
-
-\newcommand{\@NumberstringMfrenchswiss}[1]{%
+% \end{macrocode}
+% As above, but with initial letter in upper case. Swiss (masculine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@NumberstringMfrenchswiss}[2]{%
\let\@unitstring=\@@Unitstringfrench
\let\@teenstring=\@@Teenstringfrench
\let\@tenstring=\@@Tenstringfrench
@@ -1023,9 +1319,11 @@ Dix%
\let\@nineties=\@@ninetiesfrenchswiss
\def\@hundred{Cent}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
-\newcommand{\@NumberstringMfrenchfrance}[1]{%
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% French:
+% \begin{macrocode}
+\DeclareRobustCommand{\@NumberstringMfrenchfrance}[2]{%
\let\@unitstring=\@@Unitstringfrench
\let\@teenstring=\@@Teenstringfrench
\let\@tenstring=\@@Tenstringfrench
@@ -1034,9 +1332,11 @@ Dix%
\let\@nineties=\@@ninetiesfrench
\def\@hundred{Cent}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
-\newcommand{\@NumberstringMfrenchbelgian}[1]{%
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% Belgian:
+% \begin{macrocode}
+\DeclareRobustCommand{\@NumberstringMfrenchbelgian}[2]{%
\let\@unitstring=\@@Unitstringfrench
\let\@teenstring=\@@Teenstringfrench
\let\@tenstring=\@@Tenstringfrench
@@ -1045,11 +1345,15 @@ Dix%
\let\@nineties=\@@ninetiesfrench
\def\@hundred{Cent}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% Set default dialect:
+% \begin{macrocode}
\let\@NumberstringMfrench=\@NumberstringMfrenchfrance
-
-\newcommand{\@NumberstringFfrenchswiss}[1]{%
+% \end{macrocode}
+% As above, but feminine. Swiss:
+% \begin{macrocode}
+\DeclareRobustCommand{\@NumberstringFfrenchswiss}[2]{%
\let\@unitstring=\@@UnitstringFfrench
\let\@teenstring=\@@Teenstringfrench
\let\@tenstring=\@@Tenstringfrench
@@ -1058,9 +1362,11 @@ Dix%
\let\@nineties=\@@ninetiesfrenchswiss
\def\@hundred{Cent}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
-\newcommand{\@NumberstringFfrenchfrance}[1]{%
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% French (feminine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@NumberstringFfrenchfrance}[2]{%
\let\@unitstring=\@@UnitstringFfrench
\let\@teenstring=\@@Teenstringfrench
\let\@tenstring=\@@Tenstringfrench
@@ -1069,9 +1375,11 @@ Dix%
\let\@nineties=\@@ninetiesfrench
\def\@hundred{Cent}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
-\newcommand{\@NumberstringFfrenchbelgian}[1]{%
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% Belgian (feminine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@NumberstringFfrenchbelgian}[2]{%
\let\@unitstring=\@@UnitstringFfrench
\let\@teenstring=\@@Teenstringfrench
\let\@tenstring=\@@Tenstringfrench
@@ -1080,13 +1388,20 @@ Dix%
\let\@nineties=\@@ninetiesfrench
\def\@hundred{Cent}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@numberstringfrench{#1}}
-
+\@@numberstringfrench{#1}{#2}}
+% \end{macrocode}
+% Set default dialect:
+% \begin{macrocode}
\let\@NumberstringFfrench=\@NumberstringFfrenchfrance
-
-\newcommand{\@ordinalstringMfrenchswiss}[1]{%
+% \end{macrocode}
+% Again, as from version 1.09, this has been changed to take
+% two arguments, where the second argument is a control
+% sequence, and nothing is displayed. Store textual representation
+% of an ordinal in the given control sequence. Swiss dialect (masculine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringMfrenchswiss}[2]{%
\ifnum#1=1\relax
-premier%
+\def#2{premier}%
\else
\let\@unitthstring=\@@unitthstringfrench
\let\@unitstring=\@@unitstringfrench
@@ -1103,12 +1418,14 @@ premier%
\def\@hundredth{centi\`eme}\def\@hundred{cent}%
\def\@thousandth{mili\`eme}\def\@thousand{mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
-\newcommand{\@ordinalstringMfrenchfrance}[1]{%
+% \end{macrocode}
+% French (masculine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringMfrenchfrance}[2]{%
\ifnum#1=1\relax
-premier%
+\def#2{premier}%
\else
\let\@unitthstring=\@@unitthstringfrench
\let\@unitstring=\@@unitstringfrench
@@ -1126,12 +1443,14 @@ premier%
\def\@hundredth{centi\`eme}\def\@hundred{cent}%
\def\@thousandth{mili\`eme}\def\@thousand{mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
-\newcommand{\@ordinalstringMfrenchbelgian}[1]{%
+% \end{macrocode}
+% Belgian dialect (masculine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringMfrenchbelgian}[2]{%
\ifnum#1=1\relax
-premier%
+\def#2{premier}%
\else
\let\@unitthstring=\@@unitthstringfrench
\let\@unitstring=\@@unitstringfrench
@@ -1149,14 +1468,18 @@ premier%
\def\@hundredth{centi\`eme}\def\@hundred{cent}%
\def\@thousandth{mili\`eme}\def\@thousand{mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
+% \end{macrocode}
+% Set up default dialect:
+% \begin{macrocode}
\let\@ordinalstringMfrench=\@ordinalstringMfrenchfrance
-
-\newcommand{\@ordinalstringFfrenchswiss}[1]{%
+% \end{macrocode}
+% As above, but feminine. Swiss:
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringFfrenchswiss}[2]{%
\ifnum#1=1\relax
-premi\`ere%
+\def#2{premi\`ere}%
\else
\let\@unitthstring=\@@unitthstringfrench
\let\@unitstring=\@@unitstringFfrench
@@ -1173,12 +1496,14 @@ premi\`ere%
\def\@hundredth{centi\`eme}\def\@hundred{cent}%
\def\@thousandth{mili\`eme}\def\@thousand{mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
-\newcommand{\@ordinalstringFfrenchfrance}[1]{%
+% \end{macrocode}
+% French (feminine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringFfrenchfrance}[2]{%
\ifnum#1=1\relax
-premi\`ere%
+\def#2{premi\`ere}%
\else
\let\@unitthstring=\@@unitthstringfrench
\let\@unitstring=\@@unitstringFfrench
@@ -1196,12 +1521,14 @@ premi\`ere%
\def\@hundredth{centi\`eme}\def\@hundred{cent}%
\def\@thousandth{mili\`eme}\def\@thousand{mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
-\newcommand{\@ordinalstringFfrenchbelgian}[1]{%
+% \end{macrocode}
+% Belgian (feminine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringFfrenchbelgian}[2]{%
\ifnum#1=1\relax
-premi\`ere%
+\def#2{premi\`ere}%
\else
\let\@unitthstring=\@@unitthstringfrench
\let\@unitstring=\@@unitstringFfrench
@@ -1219,14 +1546,18 @@ premi\`ere%
\def\@hundredth{centi\`eme}\def\@hundred{cent}%
\def\@thousandth{mili\`eme}\def\@thousand{mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
+% \end{macrocode}
+% Set up default dialect:
+% \begin{macrocode}
\let\@ordinalstringFfrench=\@ordinalstringFfrenchfrance
-
-\newcommand{\@OrdinalstringMfrenchswiss}[1]{%
+% \end{macrocode}
+% As above, but with initial letters in upper case. Swiss (masculine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringMfrenchswiss}[2]{%
\ifnum#1=1\relax
-Premi\`ere%
+\def#2{Premi\`ere}%
\else
\let\@unitthstring=\@@Unitthstringfrench
\let\@unitstring=\@@Unitstringfrench
@@ -1243,12 +1574,14 @@ Premi\`ere%
\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
-\newcommand{\@OrdinalstringMfrenchfrance}[1]{%
+% \end{macrocode}
+% French (masculine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringMfrenchfrance}[2]{%
\ifnum#1=1\relax
-Premi\`ere%
+\def#2{Premi\`ere}%
\else
\let\@unitthstring=\@@Unitthstringfrench
\let\@unitstring=\@@Unitstringfrench
@@ -1266,12 +1599,14 @@ Premi\`ere%
\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
-\newcommand{\@OrdinalstringMfrenchbelgian}[1]{%
+% \end{macrocode}
+% Belgian (masculine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringMfrenchbelgian}[2]{%
\ifnum#1=1\relax
-Premi\`ere%
+\def#2{Premi\`ere}%
\else
\let\@unitthstring=\@@Unitthstringfrench
\let\@unitstring=\@@Unitstringfrench
@@ -1289,14 +1624,18 @@ Premi\`ere%
\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
+% \end{macrocode}
+% Set up default dialect:
+% \begin{macrocode}
\let\@OrdinalstringMfrench=\@OrdinalstringMfrenchfrance
-
-\newcommand{\@OrdinalstringFfrenchswiss}[1]{%
+% \end{macrocode}
+% As above, but feminine form. Swiss:
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringFfrenchswiss}[2]{%
\ifnum#1=1\relax
-Premi\`ere%
+\def#2{Premi\`ere}%
\else
\let\@unitthstring=\@@Unitthstringfrench
\let\@unitstring=\@@UnitstringFfrench
@@ -1313,12 +1652,14 @@ Premi\`ere%
\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
-\newcommand{\@OrdinalstringFfrenchfrance}[1]{%
+% \end{macrocode}
+% French (feminine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringFfrenchfrance}[2]{%
\ifnum#1=1\relax
-Premi\`ere%
+\def#2{Premi\`ere}%
\else
\let\@unitthstring=\@@Unitthstringfrench
\let\@unitstring=\@@UnitstringFfrench
@@ -1336,12 +1677,14 @@ Premi\`ere%
\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
-\newcommand{\@OrdinalstringFfrenchbelgian}[1]{%
+% \end{macrocode}
+% Belgian (feminine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringFfrenchbelgian}[2]{%
\ifnum#1=1\relax
-Premi\`ere%
+\def#2{Premi\`ere}%
\else
\let\@unitthstring=\@@Unitthstringfrench
\let\@unitstring=\@@UnitstringFfrench
@@ -1359,26 +1702,19 @@ Premi\`ere%
\def\@hundredth{Centi\`eme}\def\@hundred{Cent}%
\def\@thousandth{Mili\`eme}\def\@thousand{Mille}%
\def\@andname{et}%
-\@@ordinalstringfrench{#1}%
+\@@ordinalstringfrench{#1}{#2}%
\fi}
-
+% \end{macrocode}
+% Set up default dialect:
+% \begin{macrocode}
\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]{%
+% \end{macrocode}
+% In order to convert numbers into textual ordinals, need
+% to break it up into units, tens and teens. First the units.
+% The argument must be a number or count register between 0
+% and 9.
+% \begin{macrocode}
+\newcommand*{\@@unitthstringfrench}[1]{%
\ifcase#1\relax
zero%
\or uni\`eme%
@@ -1392,8 +1728,11 @@ zero%
\or neuvi\`eme%
\fi
}
-
-\newcommand{\@@tenthstringfrench}[1]{%
+% \end{macrocode}
+% Tens (includes Swiss and Belgian variants, special cases are
+% dealt with later.)
+% \begin{macrocode}
+\newcommand*{\@@tenthstringfrench}[1]{%
\ifcase#1\relax
\or dixi\`eme%
\or vingti\`eme%
@@ -1406,8 +1745,10 @@ zero%
\or nonenti\`eme%
\fi
}
-
-\newcommand{\@@teenthstringfrench}[1]{%
+% \end{macrocode}
+% Teens:
+% \begin{macrocode}
+\newcommand*{\@@teenthstringfrench}[1]{%
\ifcase#1\relax
dixi\`eme%
\or onzi\`eme%
@@ -1421,8 +1762,10 @@ dixi\`eme%
\or dix-neuvi\`eme%
\fi
}
-
-\newcommand{\@@seventiethsfrenchswiss}[1]{%
+% \end{macrocode}
+% Seventies vary depending on dialect. Swiss:
+% \begin{macrocode}
+\newcommand*{\@@seventiethsfrenchswiss}[1]{%
\ifcase#1\relax
\@tenthstring{7}%
\or
@@ -1430,8 +1773,10 @@ dixi\`eme%
\else
\@tenstring{7}-\@unitthstring{#1}%
\fi}
-
-\newcommand{\@@eightiethsfrenchswiss}[1]{%
+% \end{macrocode}
+% Eighties vary depending on dialect. Swiss:
+% \begin{macrocode}
+\newcommand*{\@@eightiethsfrenchswiss}[1]{%
\ifcase#1\relax
\@tenthstring{8}%
\or
@@ -1439,8 +1784,10 @@ dixi\`eme%
\else
\@tenstring{8}-\@unitthstring{#1}%
\fi}
-
-\newcommand{\@@ninetiethsfrenchswiss}[1]{%
+% \end{macrocode}
+% Nineties vary depending on dialect. Swiss:
+% \begin{macrocode}
+\newcommand*{\@@ninetiethsfrenchswiss}[1]{%
\ifcase#1\relax
\@tenthstring{9}%
\or
@@ -1448,8 +1795,10 @@ dixi\`eme%
\else
\@tenstring{9}-\@unitthstring{#1}%
\fi}
-
-\newcommand{\@@seventiethsfrench}[1]{%
+% \end{macrocode}
+% French (as spoken in France) version:
+% \begin{macrocode}
+\newcommand*{\@@seventiethsfrench}[1]{%
\ifnum#1=0\relax
\@tenstring{6}%
-%
@@ -1459,8 +1808,10 @@ dixi\`eme%
\fi
\@teenthstring{#1}%
}
-
-\newcommand{\@@eightiethsfrench}[1]{%
+% \end{macrocode}
+% Eighties (as spoken in France):
+% \begin{macrocode}
+\newcommand*{\@@eightiethsfrench}[1]{%
\ifnum#1>0\relax
\@unitstring{4}-\@tenstring{2}%
-\@unitthstring{#1}%
@@ -1468,12 +1819,16 @@ dixi\`eme%
\@unitstring{4}-\@tenthstring{2}%
\fi
}
-
-\newcommand{\@@ninetiethsfrench}[1]{%
+% \end{macrocode}
+% Nineties (as spoken in France):
+% \begin{macrocode}
+\newcommand*{\@@ninetiethsfrench}[1]{%
\@unitstring{4}-\@tenstring{2}-\@teenthstring{#1}%
}
-
-\newcommand{\@@Unitthstringfrench}[1]{%
+% \end{macrocode}
+% As above, but with initial letter in upper case. Units:
+% \begin{macrocode}
+\newcommand*{\@@Unitthstringfrench}[1]{%
\ifcase#1\relax
Zero%
\or Uni\`eme%
@@ -1487,8 +1842,10 @@ Zero%
\or Neuvi\`eme%
\fi
}
-
-\newcommand{\@@Tenthstringfrench}[1]{%
+% \end{macrocode}
+% Tens (includes Belgian and Swiss variants):
+% \begin{macrocode}
+\newcommand*{\@@Tenthstringfrench}[1]{%
\ifcase#1\relax
\or Dixi\`eme%
\or Vingti\`eme%
@@ -1501,8 +1858,10 @@ Zero%
\or Nonenti\`eme%
\fi
}
-
-\newcommand{\@@Teenthstringfrench}[1]{%
+% \end{macrocode}
+% Teens:
+% \begin{macrocode}
+\newcommand*{\@@Teenthstringfrench}[1]{%
\ifcase#1\relax
Dixi\`eme%
\or Onzi\`eme%
@@ -1516,10 +1875,11 @@ Dixi\`eme%
\or Dix-Neuvi\`eme%
\fi
}
-
% \end{macrocode}
+% Store textual representation of number (first argument) in given control
+% sequence (second argument).
% \begin{macrocode}
-\newcommand{\@@numberstringfrench}[1]{%
+\newcommand*{\@@numberstringfrench}[2]{%
\ifnum#1>99999
\PackageError{fmtcount}{Out of range}%
{This macro only works for values less than 100000}%
@@ -1531,57 +1891,78 @@ you can try typing "minus" first, and then pass the modulus of
this number}%
\fi
\fi
+\def#2{}%
\@strctr=#1\relax \divide\@strctr by 1000\relax
-\ifnum\@strctr>9
+\ifnum\@strctr>9\relax
% #1 is greater or equal to 10000
\@tmpstrctr=\@strctr
- \divide\@strctr by 10
- \ifnum\@strctr>1
+ \divide\@strctr by 10\relax
+ \ifnum\@strctr>1\relax
\ifthenelse{\(\@strctr>6\)\and\(\@strctr<10\)}{%
\@modulo{\@tmpstrctr}{10}%
\ifnum\@strctr<8\relax
- \@seventies{\@tmpstrctr}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@seventies{\@tmpstrctr}}%
\else
\ifnum\@strctr<9\relax
- \@eighties{\@tmpstrctr}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@eighties{\@tmpstrctr}}%
\else
- \ifnum\@strctr<10\@nineties{\@tmpstrctr}\fi
+ \ifnum\@strctr<10\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@nineties{\@tmpstrctr}}%
+ \fi
\fi
\fi
}{%
- \@tenstring{\@strctr}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@tenstring{\@strctr}}%
\@strctr=#1\relax
\divide\@strctr by 1000\relax
\@modulo{\@strctr}{10}%
\ifnum\@strctr>0\relax
-% \ifnum\@strctr=1\ \@andname\fi
- \ \@unitstring{\@strctr}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@unitstring{\@strctr}}%
\fi
}%
\else
\@strctr=#1\relax
\divide\@strctr by 1000
\@modulo{\@strctr}{10}%
- \@teenstring{\@strctr}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@teenstring{\@strctr}}%
\fi
- \ \@thousand%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@thousand}%
\else
- \ifnum\@strctr>0
- \ifnum\@strctr>1\@unitstring{\@strctr}\ \fi
- \@thousand
+ \ifnum\@strctr>0\relax
+ \ifnum\@strctr>1\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ }%
+ \fi
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@thousand}%
\fi
\fi
\@strctr=#1\relax \@modulo{\@strctr}{1000}%
\divide\@strctr by 100
\ifnum\@strctr>0\relax
- \ifnum#1>1000 \ \fi
+ \ifnum#1>1000\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ }%
+ \fi
\@tmpstrctr=#1\relax
\@modulo{\@tmpstrctr}{1000}\relax
\ifnum\@tmpstrctr=100\relax
- \@tenstring{10}\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@tenstring{10}}%
\else
- \ifnum\@strctr>1\@unitstring{\@strctr}\ \fi
- \@hundred
+ \ifnum\@strctr>1\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ }%
+ \fi
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@hundred}%
\fi
\fi
\@strctr=#1\relax \@modulo{\@strctr}{100}%
@@ -1589,49 +1970,71 @@ this number}%
%\divide\@tmpstrctr by 100\relax
\ifnum#1>100\relax
\ifnum\@strctr>0\relax
-\ % \ \@andname\
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ }%
\else
- \ifnum\@tmpstrctr>0s\fi%
+ \ifnum\@tmpstrctr>0\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr s}%
+ \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
-}%
+\ifnum\@strctr>19\relax
+ \@tmpstrctr=\@strctr
+ \divide\@strctr by 10\relax
+ \ifthenelse{\@strctr>6}{%
+ \@modulo{\@tmpstrctr}{10}%
+ \ifnum\@strctr<8\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@seventies{\@tmpstrctr}}%
+ \else
+ \ifnum\@strctr<9\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@eighties{\@tmpstrctr}}%
+ \else
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@nineties{\@tmpstrctr}}%
+ \fi
+ \fi
+ }{%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@tenstring{\@strctr}}%
+ \@strctr=#1\relax \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0\relax
+ \let\@@fc@numstr#2\relax
+ \ifnum\@strctr=1\relax
+ \edef#2{\@@fc@numstr\ \@andname\ }%
+ \else
+ \edef#2{\@@fc@numstr-}%
+ \fi
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@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
+ \ifnum\@strctr<10\relax
+ \ifnum\@strctr=0\relax
+ \ifnum#1<100\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}}%
+ \fi
+ \else%(>0,<10)
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}}%
+ \fi
+ \else%>10
+ \@modulo{\@strctr}{10}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@teenstring{\@strctr}}%
+ \fi
\fi
}
% \end{macrocode}
+% Store textual representation of an ordinal (from number
+% specified in first argument) in given control
+% sequence (second argument).
% \begin{macrocode}
-\newcommand{\@@ordinalstringfrench}[1]{%
+\newcommand*{\@@ordinalstringfrench}[2]{%
\ifnum#1>99999
\PackageError{fmtcount}{Out of range}%
{This macro only works for values less than 100000}%
@@ -1643,6 +2046,7 @@ you can try typing "minus" first, and then pass the modulus of
this number}%
\fi
\fi
+\def#2{}%
\@strctr=#1\relax \divide\@strctr by 1000\relax
\ifnum\@strctr>9
% #1 is greater or equal to 10000
@@ -1652,85 +2056,137 @@ this number}%
\ifthenelse{\@strctr>6}{%
\@modulo{\@tmpstrctr}{10}%
\ifnum\@strctr=7\relax
- \@seventies{\@tmpstrctr}%
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@seventies{\@tmpstrctr}}%
\else
\ifnum\@strctr=8\relax
- \@eighties{\@tmpstrctr}%
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@eighties{\@tmpstrctr}}%
\else
- \@nineties{\@tmpstrctr}%
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@nineties{\@tmpstrctr}}%
\fi
\fi
}{%
- \@tenstring{\@strctr}%
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@tenstring{\@strctr}}%
\@strctr=#1\relax
\divide\@strctr by 1000\relax
\@modulo{\@strctr}{10}%
- \ifnum\@strctr=1\ \@andname\fi
- \ifnum\@strctr>0\ \@unitstring{\@strctr}\fi
+ \ifnum\@strctr=1\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@andname}%
+ \fi
+ \ifnum\@strctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@unitstring{\@strctr}}%
+ \fi
}%
\else
\@strctr=#1\relax
\divide\@strctr by 1000\relax
\@modulo{\@strctr}{10}%
- \@teenstring{\@strctr}%
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@teenstring{\@strctr}}%
\fi
\@strctr=#1\relax \@modulo{\@strctr}{1000}%
- \ifnum\@strctr=0\ \@thousandth\else\ \@thousand \fi
+ \ifnum\@strctr=0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@thousandth}%
+ \else
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@thousand}%
+ \fi
\else
\ifnum\@strctr>0\relax
- \@unitstring{\@strctr}%
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}%
\@strctr=#1\relax \@modulo{\@strctr}{1000}%
- \ifnum\@strctr=0\ \@thousandth\else\ \@thousand\fi
+ \ifnum\@strctr=0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@thousandth}%
+ \else
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@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
+\divide\@strctr by 100\relax
+\ifnum\@strctr>0\relax
+ \ifnum#1>1000\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ }%
+ \fi
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}%
+ \@strctr=#1\relax \@modulo{\@strctr}{100}%
+ \let\@@fc@ordstr#2\relax
+ \ifnum\@strctr=0\relax
+ \edef#2{\@@fc@ordstr\ \@hundredth}%
+ \else
+ \edef#2{\@@fc@ordstr\ \@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}%
+ \ifnum\@strctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@andname\ }%
+ \fi
\fi
+\ifnum\@strctr>19\relax
+ \@tmpstrctr=\@strctr
+ \divide\@strctr by 10\relax
+ \@modulo{\@tmpstrctr}{10}%
+ \ifthenelse{\@strctr>6}{%
+ \ifnum\@strctr=7\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@seventieths{\@tmpstrctr}}%
+ \else
+ \ifnum\@strctr=8\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@eightieths{\@tmpstrctr}}%
+ \else
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@ninetieths{\@tmpstrctr}}%
+ \fi
+ \fi
+ }{%
+ \ifnum\@tmpstrctr=0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@tenthstring{\@strctr}}%
+ \else
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@tenstring{\@strctr}}%
+ \fi
+ \@strctr=#1\relax \@modulo{\@strctr}{10}%
+ \ifnum\@strctr=1\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@andname}%
+ \fi
+ \ifnum\@strctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@unitthstring{\@strctr}}%
+ \fi
+ }%
\else
-\@modulo{\@strctr}{10}%
-\@teenthstring{\@strctr}%
-\fi
+ \ifnum\@strctr<10\relax
+ \ifnum\@strctr=0\relax
+ \ifnum#1<100\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}%
+ \fi
+ \else
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}%
+ \fi
+ \else
+ \@modulo{\@strctr}{10}%
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@teenthstring{\@strctr}}%
+ \fi
\fi
}
% \end{macrocode}
@@ -1744,17 +2200,41 @@ this number}%
%<*fc-portuges.def>
% \end{macrocode}
%\fi
-% Portuguse
+% \subsection{fc-portuges.def}
+% Portuguse definitions
% \begin{macrocode}
-\ProvidesFile{fc-portuges.def}[2005/04/29]
+\ProvidesFile{fc-portuges.def}[2007/04/20]
+% \end{macrocode}
+% Define macro that converts a number or count register (first
+% argument) to an ordinal, and stores the result in the second
+% argument, which should be a control sequence. Masculine:
+% \begin{macrocode}
+\newcommand*{\@ordinalMportuges}[2]{%
+\ifnum#1=0\relax
+ \edef#2{\number#1}%
+\else
+ \edef#2{\number#1\relax\noexpand\fmtord{o}}%
+\fi}
% \end{macrocode}
+% Feminine:
% \begin{macrocode}
-\newcommand{\@@unitstringportuges}[1]{%
+\newcommand*{\@ordinalFportuges}[2]{%
+\ifnum#1=0\relax
+ \edef#2{\number#1}%
+\else
+ \edef#2{\number#1\relax\noexpand\fmtord{a}}%
+\fi}
+% \end{macrocode}
+% Convert a number to a textual representation. To make it easier,
+% split it up into units, tens, teens and hundreds. Units (argument must
+% be a number from 0 to 9):
+% \begin{macrocode}
+\newcommand*{\@@unitstringportuges}[1]{%
\ifcase#1\relax
zero%
\or um%
\or dois%
-\or tr\`es%
+\or tr\^es%
\or quatro%
\or cinco%
\or seis%
@@ -1763,13 +2243,15 @@ zero%
\or nove%
\fi
}
-
-\newcommand{\@@unitstringFportuges}[1]{%
+% \end{macrocode}
+% As above, but for feminine:
+% \begin{macrocode}
+\newcommand*{\@@unitstringFportuges}[1]{%
\ifcase#1\relax
zero%
\or uma%
\or duas%
-\or tr\`es%
+\or tr\^es%
\or quatro%
\or cinco%
\or seis%
@@ -1778,8 +2260,10 @@ zero%
\or nove%
\fi
}
-
-\newcommand{\@@tenstringportuges}[1]{%
+% \end{macrocode}
+% Tens (argument must be a number from 0 to 10):
+% \begin{macrocode}
+\newcommand*{\@@tenstringportuges}[1]{%
\ifcase#1\relax
\or dez%
\or vinte%
@@ -1793,8 +2277,10 @@ zero%
\or cem%
\fi
}
-
-\newcommand{\@@teenstringportuges}[1]{%
+% \end{macrocode}
+% Teens (argument must be a number from 0 to 9):
+% \begin{macrocode}
+\newcommand*{\@@teenstringportuges}[1]{%
\ifcase#1\relax
dez%
\or onze%
@@ -1808,8 +2294,10 @@ dez%
\or dezenove%
\fi
}
-
-\newcommand{\@@hundredstringportuges}[1]{%
+% \end{macrocode}
+% Hundreds:
+% \begin{macrocode}
+\newcommand*{\@@hundredstringportuges}[1]{%
\ifcase#1\relax
\or cento%
\or duzentos%
@@ -1821,10 +2309,12 @@ dez%
\or oitocentos%
\or novecentos%
\fi}
-
-\newcommand{\@@hundredstringFportuges}[1]{%
+% \end{macrocode}
+% Hundreds (feminine):
+% \begin{macrocode}
+\newcommand*{\@@hundredstringFportuges}[1]{%
\ifcase#1\relax
-\or centa%
+\or cento%
\or duzentas%
\or trezentas%
\or quatrocentas%
@@ -1834,13 +2324,15 @@ dez%
\or oitocentas%
\or novecentas%
\fi}
-
-\newcommand{\@@Unitstringportuges}[1]{%
+% \end{macrocode}
+% Units (initial letter in upper case):
+% \begin{macrocode}
+\newcommand*{\@@Unitstringportuges}[1]{%
\ifcase#1\relax
Zero%
\or Um%
\or Dois%
-\or Tr\`es%
+\or Tr\^es%
\or Quatro%
\or Cinco%
\or Seis%
@@ -1849,13 +2341,15 @@ Zero%
\or Nove%
\fi
}
-
-\newcommand{\@@UnitstringFportuges}[1]{%
+% \end{macrocode}
+% As above, but feminine:
+% \begin{macrocode}
+\newcommand*{\@@UnitstringFportuges}[1]{%
\ifcase#1\relax
Zera%
\or Uma%
\or Duas%
-\or Tr\`es%
+\or Tr\^es%
\or Quatro%
\or Cinco%
\or Seis%
@@ -1864,8 +2358,10 @@ Zera%
\or Nove%
\fi
}
-
-\newcommand{\@@Tenstringportuges}[1]{%
+% \end{macrocode}
+% Tens (with initial letter in upper case):
+% \begin{macrocode}
+\newcommand*{\@@Tenstringportuges}[1]{%
\ifcase#1\relax
\or Dez%
\or Vinte%
@@ -1879,8 +2375,10 @@ Zera%
\or Cem%
\fi
}
-
-\newcommand{\@@Teenstringportuges}[1]{%
+% \end{macrocode}
+% Teens (with initial letter in upper case):
+% \begin{macrocode}
+\newcommand*{\@@Teenstringportuges}[1]{%
\ifcase#1\relax
Dez%
\or Onze%
@@ -1894,8 +2392,10 @@ Dez%
\or Dezenove%
\fi
}
-
-\newcommand{\@@Hundredstringportuges}[1]{%
+% \end{macrocode}
+% Hundreds (with initial letter in upper case):
+% \begin{macrocode}
+\newcommand*{\@@Hundredstringportuges}[1]{%
\ifcase#1\relax
\or Cento%
\or Duzentos%
@@ -1907,10 +2407,12 @@ Dez%
\or Oitocentos%
\or Novecentos%
\fi}
-
-\newcommand{\@@HundredstringFportuges}[1]{%
+% \end{macrocode}
+% As above, but feminine:
+% \begin{macrocode}
+\newcommand*{\@@HundredstringFportuges}[1]{%
\ifcase#1\relax
-\or Centa%
+\or Cento%
\or Duzentas%
\or Trezentas%
\or Quatrocentas%
@@ -1920,85 +2422,103 @@ Dez%
\or Oitocentas%
\or Novecentas%
\fi}
-
-\newcommand{\@numberstringMportuges}[1]{%
+% \end{macrocode}
+% This has changed in version 1.08, so that it now stores
+% the result in the second argument, but doesn't display
+% anything. Since it only affects internal macros, it shouldn't
+% affect documents created with older versions. (These internal
+% macros are not meant for use in documents.)
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringMportuges}[2]{%
\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]{%
+\@@numberstringportuges{#1}{#2}}
+% \end{macrocode}
+% As above, but feminine form:
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringFportuges}[2]{%
\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]{%
+\@@numberstringportuges{#1}{#2}}
+% \end{macrocode}
+% As above, but initial letters in upper case:
+% \begin{macrocode}
+\DeclareRobustCommand{\@NumberstringMportuges}[2]{%
\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]{%
+\@@numberstringportuges{#1}{#2}}
+% \end{macrocode}
+% As above, but feminine form:
+% \begin{macrocode}
+\DeclareRobustCommand{\@NumberstringFportuges}[2]{%
\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]{%
+\@@numberstringportuges{#1}{#2}}
+% \end{macrocode}
+% As above, but for ordinals.
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringMportuges}[2]{%
\let\@unitthstring=\@@unitthstringportuges
\let\@unitstring=\@@unitstringportuges
\let\@teenthstring=\@@teenthstringportuges
\let\@tenthstring=\@@tenthstringportuges
\let\@hundredthstring=\@@hundredthstringportuges
\def\@thousandth{mil\'esimo}%
-\@@ordinalstringportuges{#1}}
-
-\newcommand{\@ordinalstringFportuges}[1]{%
+\@@ordinalstringportuges{#1}{#2}}
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringFportuges}[2]{%
\let\@unitthstring=\@@unitthstringFportuges
\let\@unitstring=\@@unitstringFportuges
\let\@teenthstring=\@@teenthstringportuges
\let\@tenthstring=\@@tenthstringFportuges
\let\@hundredthstring=\@@hundredthstringFportuges
\def\@thousandth{mil\'esima}%
-\@@ordinalstringportuges{#1}}
-
-\newcommand{\@OrdinalstringMportuges}[1]{%
+\@@ordinalstringportuges{#1}{#2}}
+% \end{macrocode}
+% As above, but initial letters in upper case (masculine):
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringMportuges}[2]{%
\let\@unitthstring=\@@Unitthstringportuges
\let\@unitstring=\@@Unitstringportuges
\let\@teenthstring=\@@teenthstringportuges
\let\@tenthstring=\@@Tenthstringportuges
\let\@hundredthstring=\@@Hundredthstringportuges
\def\@thousandth{Mil\'esimo}%
-\@@ordinalstringportuges{#1}}
-
-\newcommand{\@OrdinalstringFportuges}[1]{%
+\@@ordinalstringportuges{#1}{#2}}
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringFportuges}[2]{%
\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]{%
+\@@ordinalstringportuges{#1}{#2}}
+% \end{macrocode}
+% In order to do the ordinals, split into units, teens, tens
+% and hundreds. Units:
+% \begin{macrocode}
+\newcommand*{\@@unitthstringportuges}[1]{%
\ifcase#1\relax
zero%
\or primeiro%
@@ -2012,8 +2532,10 @@ zero%
\or nono%
\fi
}
-
-\newcommand{\@@tenthstringportuges}[1]{%
+% \end{macrocode}
+% Tens:
+% \begin{macrocode}
+\newcommand*{\@@tenthstringportuges}[1]{%
\ifcase#1\relax
\or d\'ecimo%
\or vig\'esimo%
@@ -2026,14 +2548,18 @@ zero%
\or nonag\'esimo%
\fi
}
-
-\newcommand{\@@teenthstringportuges}[1]{%
+% \end{macrocode}
+% Teens:
+% \begin{macrocode}
+\newcommand*{\@@teenthstringportuges}[1]{%
\@tenthstring{1}%
\ifnum#1>0\relax
-\@unitthstring{#1}%
\fi}
-
-\newcommand{\@@hundredthstringportuges}[1]{%
+% \end{macrocode}
+% Hundreds:
+% \begin{macrocode}
+\newcommand*{\@@hundredthstringportuges}[1]{%
\ifcase#1\relax
\or cent\'esimo%
\or ducent\'esimo%
@@ -2045,8 +2571,10 @@ zero%
\or octingent\'esimo%
\or nongent\'esimo%
\fi}
-
-\newcommand{\@@unitthstringFportuges}[1]{%
+% \end{macrocode}
+% Units (feminine):
+% \begin{macrocode}
+\newcommand*{\@@unitthstringFportuges}[1]{%
\ifcase#1\relax
zero%
\or primeira%
@@ -2060,8 +2588,10 @@ zero%
\or nona%
\fi
}
-
-\newcommand{\@@tenthstringFportuges}[1]{%
+% \end{macrocode}
+% Tens (feminine):
+% \begin{macrocode}
+\newcommand*{\@@tenthstringFportuges}[1]{%
\ifcase#1\relax
\or d\'ecima%
\or vig\'esima%
@@ -2074,8 +2604,10 @@ zero%
\or nonag\'esima%
\fi
}
-
-\newcommand{\@@hundredthstringFportuges}[1]{%
+% \end{macrocode}
+% Hundreds (feminine):
+% \begin{macrocode}
+\newcommand*{\@@hundredthstringFportuges}[1]{%
\ifcase#1\relax
\or cent\'esima%
\or ducent\'esima%
@@ -2087,8 +2619,10 @@ zero%
\or octingent\'esima%
\or nongent\'esima%
\fi}
-
-\newcommand{\@@Unitthstringportuges}[1]{%
+% \end{macrocode}
+% As above, but with initial letter in upper case. Units:
+% \begin{macrocode}
+\newcommand*{\@@Unitthstringportuges}[1]{%
\ifcase#1\relax
Zero%
\or Primeiro%
@@ -2102,8 +2636,10 @@ Zero%
\or Nono%
\fi
}
-
-\newcommand{\@@Tenthstringportuges}[1]{%
+% \end{macrocode}
+% Tens:
+% \begin{macrocode}
+\newcommand*{\@@Tenthstringportuges}[1]{%
\ifcase#1\relax
\or D\'ecimo%
\or Vig\'esimo%
@@ -2116,8 +2652,10 @@ Zero%
\or Nonag\'esimo%
\fi
}
-
-\newcommand{\@@Hundredthstringportuges}[1]{%
+% \end{macrocode}
+% Hundreds:
+% \begin{macrocode}
+\newcommand*{\@@Hundredthstringportuges}[1]{%
\ifcase#1\relax
\or Cent\'esimo%
\or Ducent\'esimo%
@@ -2129,8 +2667,10 @@ Zero%
\or Octingent\'esimo%
\or Nongent\'esimo%
\fi}
-
-\newcommand{\@@UnitthstringFportuges}[1]{%
+% \end{macrocode}
+% As above, but feminine. Units:
+% \begin{macrocode}
+\newcommand*{\@@UnitthstringFportuges}[1]{%
\ifcase#1\relax
Zera%
\or Primeira%
@@ -2144,8 +2684,10 @@ Zera%
\or Nona%
\fi
}
-
-\newcommand{\@@TenthstringFportuges}[1]{%
+% \end{macrocode}
+% Tens (feminine);
+% \begin{macrocode}
+\newcommand*{\@@TenthstringFportuges}[1]{%
\ifcase#1\relax
\or D\'ecima%
\or Vig\'esima%
@@ -2158,8 +2700,10 @@ Zera%
\or Nonag\'esima%
\fi
}
-
-\newcommand{\@@HundredthstringFportuges}[1]{%
+% \end{macrocode}
+% Hundreds (feminine):
+% \begin{macrocode}
+\newcommand*{\@@HundredthstringFportuges}[1]{%
\ifcase#1\relax
\or Cent\'esima%
\or Ducent\'esima%
@@ -2172,8 +2716,13 @@ Zera%
\or Nongent\'esima%
\fi}
% \end{macrocode}
+% This has changed in version 1.09, so that it now stores
+% the result in the second argument (a control sequence), but it
+% doesn't display anything. Since it only affects internal macros,
+% it shouldn't affect documents created with older versions.
+% (These internal macros are not meant for use in documents.)
% \begin{macrocode}
-\newcommand{\@@numberstringportuges}[1]{%
+\newcommand*{\@@numberstringportuges}[2]{%
\ifnum#1>99999
\PackageError{fmtcount}{Out of range}%
{This macro only works for values less than 100000}%
@@ -2185,66 +2734,106 @@ you can try typing "minus" first, and then pass the modulus of
this number}%
\fi
\fi
+\def#2{}%
\@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}%
+ \ifnum\@strctr>1\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@tenstring{\@strctr}}%
\@strctr=#1 \divide\@strctr by 1000\relax
\@modulo{\@strctr}{10}%
\ifnum\@strctr>0
- \ifnum\@strctr=1\ \@andname\fi
- \ \@unitstring{\@strctr}%
+ \ifnum\@strctr=1\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@andname}%
+ \fi
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@unitstring{\@strctr}}%
\fi
\else
\@strctr=#1\relax
\divide\@strctr by 1000\relax
\@modulo{\@strctr}{10}%
- \@teenstring{\@strctr}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@teenstring{\@strctr}}%
\fi
- \ \@thousand%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@thousand}%
\else
- \ifnum\@strctr>0
- \ifnum\@strctr>1\@unitstring{\@strctr}\ \fi
- \@thousand
+ \ifnum\@strctr>0\relax
+ \ifnum\@strctr>1\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ }%
+ \fi
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@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%
+\divide\@strctr by 100\relax
+\ifnum\@strctr>0\relax
+ \ifnum#1>1000 \relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ }%
+ \fi
+ \@tmpstrctr=#1\relax
+ \@modulo{\@tmpstrctr}{1000}%
+ \let\@@fc@numstr#2\relax
+ \ifnum\@tmpstrctr=100\relax
+ \edef#2{\@@fc@numstr\@tenstring{10}}%
+ \else
+ \edef#2{\@@fc@numstr\@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}%
+\ifnum#1>100\relax
+ \ifnum\@strctr>0\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@andname\ }%
+ \fi
\fi
+\ifnum\@strctr>19\relax
+ \divide\@strctr by 10\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@tenstring{\@strctr}}%
+ \@strctr=#1\relax \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0
+ \ifnum\@strctr=1\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@andname}%
+ \else
+ \ifnum#1>100\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@andname}%
+ \fi
+ \fi
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@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
+ \ifnum\@strctr<10\relax
+ \ifnum\@strctr=0\relax
+ \ifnum#1<100\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}}%
+ \fi
+ \else%(>0,<10)
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}}%
+ \fi
+ \else%>10
+ \@modulo{\@strctr}{10}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@teenstring{\@strctr}}%
+ \fi
\fi
}
-
% \end{macrocode}
+% As above, but for ordinals.
% \begin{macrocode}
-\newcommand{\@@ordinalstringportuges}[1]{%
+\newcommand*{\@@ordinalstringportuges}[2]{%
\@strctr=#1\relax
\ifnum#1>99999
\PackageError{fmtcount}{Out of range}%
@@ -2256,6 +2845,7 @@ this number}%
you can try typing "minus" first, and then pass the modulus of
this number}%
\else
+\def#2{}%
\ifnum\@strctr>999\relax
\divide\@strctr by 1000\relax
\ifnum\@strctr>1\relax
@@ -2263,43 +2853,67 @@ this number}%
\@tmpstrctr=\@strctr
\ifnum\@strctr<20
\@modulo{\@tmpstrctr}{10}%
- \@teenthstring{\@tmpstrctr}
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@teenthstring{\@tmpstrctr}}%
\else
\divide\@tmpstrctr by 10\relax
- \@tenthstring{\@tmpstrctr}
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@tenthstring{\@tmpstrctr}}%
\@tmpstrctr=\@strctr
\@modulo{\@tmpstrctr}{10}%
- \ifnum\@tmpstrctr>0\@unitthstring{\@tmpstrctr} \fi
+ \ifnum\@tmpstrctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitthstring{\@tmpstrctr}}%
+ \fi
\fi
\else
- \@unitstring{\@strctr}
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}%
\fi
\fi
- \@thousandth
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@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}%
+ \@tmpstrctr=\@strctr
+ \divide\@tmpstrctr by 100\relax
+ \ifnum#1>1000\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr-}%
+ \fi
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@hundredthstring{\@tmpstrctr}}%
\fi
\@modulo{\@strctr}{100}%
-\ifnum#1>99\ifnum\@strctr>0-\fi\fi
+\ifnum#1>99\relax
+ \ifnum\@strctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr-}%
+ \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
+ \@tmpstrctr=\@strctr
+ \divide\@tmpstrctr by 10\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@tenthstring{\@tmpstrctr}}%
+ \@tmpstrctr=\@strctr
+ \@modulo{\@tmpstrctr}{10}%
+ \ifnum\@tmpstrctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr-\@unitthstring{\@tmpstrctr}}%
+ \fi
\else
-\@unitthstring{\@strctr}%
-\fi
+ \ifnum\@strctr=0\relax
+ \ifnum#1=0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitstring{0}}%
+ \fi
+ \else
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}%
+ \fi
\fi
\fi
\fi
@@ -2315,10 +2929,27 @@ this number}%
%<*fc-spanish.def>
% \end{macrocode}
%\fi
-% Spanish
+% \subsection{fc-spanish.def}
+% Spanish definitions
% \begin{macrocode}
-\ProvidesFile{fc-spanish.def}[2005/04/29]
+\ProvidesFile{fc-spanish.def}[2007/04/20]
% \end{macrocode}
+% Define macro that converts a number or count register (first
+% argument) to an ordinal, and stores the result in the
+% second argument, which must be a control sequence.
+% Masculine:
+% \begin{macrocode}
+\newcommand{\@ordinalMspanish}[2]{%
+\edef#2{\number#1\relax\noexpand\fmtord{o}}}
+% \end{macrocode}
+% Feminine:
+% \begin{macrocode}
+\newcommand{\@ordinalFspanish}[2]{%
+\edef#2{\number#1\relax\noexpand\fmtord{a}}}
+% \end{macrocode}
+% Convert a number to text. The easiest way to do this is to
+% break it up into units, tens, teens, twenties and hundreds.
+% Units (argument must be a number from 0 to 9):
% \begin{macrocode}
\newcommand{\@@unitstringspanish}[1]{%
\ifcase#1\relax
@@ -2334,7 +2965,9 @@ cero%
\or nueve%
\fi
}
-
+% \end{macrocode}
+% Feminine:
+% \begin{macrocode}
\newcommand{\@@unitstringFspanish}[1]{%
\ifcase#1\relax
cera%
@@ -2349,7 +2982,9 @@ cera%
\or nueve%
\fi
}
-
+% \end{macrocode}
+% Tens (argument must go from 1 to 10):
+% \begin{macrocode}
\newcommand{\@@tenstringspanish}[1]{%
\ifcase#1\relax
\or diez%
@@ -2364,7 +2999,9 @@ cera%
\or cien%
\fi
}
-
+% \end{macrocode}
+% Teens:
+% \begin{macrocode}
\newcommand{\@@teenstringspanish}[1]{%
\ifcase#1\relax
diez%
@@ -2379,7 +3016,9 @@ diez%
\or diecinueve%
\fi
}
-
+% \end{macrocode}
+% Twenties:
+% \begin{macrocode}
\newcommand{\@@twentystringspanish}[1]{%
\ifcase#1\relax
veinte%
@@ -2393,7 +3032,9 @@ veinte%
\or veintiocho%
\or veintinueve%
\fi}
-
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
\newcommand{\@@twentystringFspanish}[1]{%
\ifcase#1\relax
veinte%
@@ -2407,7 +3048,9 @@ veinte%
\or veintiocho%
\or veintinueve%
\fi}
-
+% \end{macrocode}
+% Hundreds:
+% \begin{macrocode}
\newcommand{\@@hundredstringspanish}[1]{%
\ifcase#1\relax
\or ciento%
@@ -2420,7 +3063,9 @@ veinte%
\or ochocientos%
\or novecientos%
\fi}
-
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
\newcommand{\@@hundredstringFspanish}[1]{%
\ifcase#1\relax
\or cienta%
@@ -2433,7 +3078,9 @@ veinte%
\or ochocientas%
\or novecientas%
\fi}
-
+% \end{macrocode}
+% As above, but with initial letter uppercase:
+% \begin{macrocode}
\newcommand{\@@Unitstringspanish}[1]{%
\ifcase#1\relax
Cero%
@@ -2448,7 +3095,9 @@ Cero%
\or Nueve%
\fi
}
-
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
\newcommand{\@@UnitstringFspanish}[1]{%
\ifcase#1\relax
Cera%
@@ -2463,7 +3112,9 @@ Cera%
\or Nueve%
\fi
}
-
+% \end{macrocode}
+% Tens:
+% \begin{macrocode}
\newcommand{\@@Tenstringspanish}[1]{%
\ifcase#1\relax
\or Diez%
@@ -2478,7 +3129,9 @@ Cera%
\or Cien%
\fi
}
-
+% \end{macrocode}
+% Teens:
+% \begin{macrocode}
\newcommand{\@@Teenstringspanish}[1]{%
\ifcase#1\relax
Diez%
@@ -2493,7 +3146,9 @@ Diez%
\or Diecinueve%
\fi
}
-
+% \end{macrocode}
+% Twenties:
+% \begin{macrocode}
\newcommand{\@@Twentystringspanish}[1]{%
\ifcase#1\relax
Veinte%
@@ -2507,7 +3162,9 @@ Veinte%
\or Veintiocho%
\or Veintinueve%
\fi}
-
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
\newcommand{\@@TwentystringFspanish}[1]{%
\ifcase#1\relax
Veinte%
@@ -2521,7 +3178,9 @@ Veinte%
\or Veintiocho%
\or Veintinueve%
\fi}
-
+% \end{macrocode}
+% Hundreds:
+% \begin{macrocode}
\newcommand{\@@Hundredstringspanish}[1]{%
\ifcase#1\relax
\or Ciento%
@@ -2534,7 +3193,9 @@ Veinte%
\or Ochocientos%
\or Novecientos%
\fi}
-
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
\newcommand{\@@HundredstringFspanish}[1]{%
\ifcase#1\relax
\or Cienta%
@@ -2547,8 +3208,14 @@ Veinte%
\or Ochocientas%
\or Novecientas%
\fi}
-
-\newcommand{\@numberstringMspanish}[1]{%
+% \end{macrocode}
+% This has changed in version 1.09, so that it now stores the
+% result in the second argument, but doesn't display anything.
+% Since it only affects internal macros, it shouldn't affect
+% documents created with older versions. (These internal macros
+% are not meant for use in documents.)
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringMspanish}[2]{%
\let\@unitstring=\@@unitstringspanish
\let\@teenstring=\@@teenstringspanish
\let\@tenstring=\@@tenstringspanish
@@ -2556,9 +3223,11 @@ Veinte%
\let\@hundredstring=\@@hundredstringspanish
\def\@hundred{cien}\def\@thousand{mil}%
\def\@andname{y}%
-\@@numberstringspanish{#1}}
-
-\newcommand{\@numberstringFspanish}[1]{%
+\@@numberstringspanish{#1}{#2}}
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
+\DeclareRobustCommand{\@numberstringFspanish}[2]{%
\let\@unitstring=\@@unitstringFspanish
\let\@teenstring=\@@teenstringspanish
\let\@tenstring=\@@tenstringspanish
@@ -2566,9 +3235,11 @@ Veinte%
\let\@hundredstring=\@@hundredstringFspanish
\def\@hundred{cien}\def\@thousand{mil}%
\def\@andname{y}%
-\@@numberstringspanish{#1}}
-
-\newcommand{\@NumberstringMspanish}[1]{%
+\@@numberstringspanish{#1}{#2}}
+% \end{macrocode}
+% As above, but initial letters in upper case:
+% \begin{macrocode}
+\DeclareRobustCommand{\@NumberstringMspanish}[2]{%
\let\@unitstring=\@@Unitstringspanish
\let\@teenstring=\@@Teenstringspanish
\let\@tenstring=\@@Tenstringspanish
@@ -2576,9 +3247,11 @@ Veinte%
\let\@hundredstring=\@@Hundredstringspanish
\def\@andname{y}%
\def\@hundred{Cien}\def\@thousand{Mil}%
-\@@numberstringspanish{#1}}
-
-\newcommand{\@NumberstringFspanish}[1]{%
+\@@numberstringspanish{#1}{#2}}
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
+\DeclareRobustCommand{\@NumberstringFspanish}[2]{%
\let\@unitstring=\@@UnitstringFspanish
\let\@teenstring=\@@Teenstringspanish
\let\@tenstring=\@@Tenstringspanish
@@ -2586,47 +3259,56 @@ Veinte%
\let\@hundredstring=\@@HundredstringFspanish
\def\@andname{y}%
\def\@hundred{Cien}\def\@thousand{Mil}%
-\@@numberstringspanish{#1}}
-
-\newcommand{\@ordinalstringMspanish}[1]{%
+\@@numberstringspanish{#1}{#2}}
+% \end{macrocode}
+% As above, but for ordinals.
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringMspanish}[2]{%
\let\@unitthstring=\@@unitthstringspanish
\let\@unitstring=\@@unitstringspanish
\let\@teenthstring=\@@teenthstringspanish
\let\@tenthstring=\@@tenthstringspanish
\let\@hundredthstring=\@@hundredthstringspanish
\def\@thousandth{mil\'esimo}%
-\@@ordinalstringspanish{#1}}
-
-\newcommand{\@ordinalstringFspanish}[1]{%
+\@@ordinalstringspanish{#1}{#2}}
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
+\DeclareRobustCommand{\@ordinalstringFspanish}[2]{%
\let\@unitthstring=\@@unitthstringFspanish
\let\@unitstring=\@@unitstringFspanish
\let\@teenthstring=\@@teenthstringFspanish
\let\@tenthstring=\@@tenthstringFspanish
\let\@hundredthstring=\@@hundredthstringFspanish
\def\@thousandth{mil\'esima}%
-\@@ordinalstringspanish{#1}}
-
-\newcommand{\@OrdinalstringMspanish}[1]{%
+\@@ordinalstringspanish{#1}{#2}}
+% \end{macrocode}
+% As above, but with initial letters in upper case.
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringMspanish}[2]{%
\let\@unitthstring=\@@Unitthstringspanish
\let\@unitstring=\@@Unitstringspanish
\let\@teenthstring=\@@Teenthstringspanish
\let\@tenthstring=\@@Tenthstringspanish
\let\@hundredthstring=\@@Hundredthstringspanish
\def\@thousandth{Mil\'esimo}%
-\@@ordinalstringspanish{#1}}
-
-\newcommand{\@OrdinalstringFspanish}[1]{%
+\@@ordinalstringspanish{#1}{#2}}
+% \end{macrocode}
+% Feminine form:
+% \begin{macrocode}
+\DeclareRobustCommand{\@OrdinalstringFspanish}[2]{%
\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}}
-
+\@@ordinalstringspanish{#1}{#2}}
+% \end{macrocode}
+% Code for convert numbers into textual ordinals. As before,
+% it is easier to split it into units, tens, teens and hundreds.
+% Units:
+% \begin{macrocode}
\newcommand{\@@unitthstringspanish}[1]{%
\ifcase#1\relax
cero%
@@ -2641,7 +3323,9 @@ cero%
\or noveno%
\fi
}
-
+% \end{macrocode}
+% Tens:
+% \begin{macrocode}
\newcommand{\@@tenthstringspanish}[1]{%
\ifcase#1\relax
\or d\'ecimo%
@@ -2655,7 +3339,9 @@ cero%
\or nonag\'esimo%
\fi
}
-
+% \end{macrocode}
+% Teens:
+% \begin{macrocode}
\newcommand{\@@teenthstringspanish}[1]{%
\ifcase#1\relax
d\'ecimo%
@@ -2670,7 +3356,9 @@ d\'ecimo%
\or decimonoveno%
\fi
}
-
+% \end{macrocode}
+% Hundreds:
+% \begin{macrocode}
\newcommand{\@@hundredthstringspanish}[1]{%
\ifcase#1\relax
\or cent\'esimo%
@@ -2683,7 +3371,9 @@ d\'ecimo%
\or octingent\'esimo%
\or noningent\'esimo%
\fi}
-
+% \end{macrocode}
+% Units (feminine):
+% \begin{macrocode}
\newcommand{\@@unitthstringFspanish}[1]{%
\ifcase#1\relax
cera%
@@ -2698,7 +3388,9 @@ cera%
\or novena%
\fi
}
-
+% \end{macrocode}
+% Tens (feminine):
+% \begin{macrocode}
\newcommand{\@@tenthstringFspanish}[1]{%
\ifcase#1\relax
\or d\'ecima%
@@ -2712,7 +3404,9 @@ cera%
\or nonag\'esima%
\fi
}
-
+% \end{macrocode}
+% Teens (feminine)
+% \begin{macrocode}
\newcommand{\@@teenthstringFspanish}[1]{%
\ifcase#1\relax
d\'ecima%
@@ -2727,7 +3421,9 @@ d\'ecima%
\or decimonovena%
\fi
}
-
+% \end{macrocode}
+% Hundreds (feminine)
+% \begin{macrocode}
\newcommand{\@@hundredthstringFspanish}[1]{%
\ifcase#1\relax
\or cent\'esima%
@@ -2740,7 +3436,9 @@ d\'ecima%
\or octingent\'esima%
\or noningent\'esima%
\fi}
-
+% \end{macrocode}
+% As above, but with initial letters in upper case
+% \begin{macrocode}
\newcommand{\@@Unitthstringspanish}[1]{%
\ifcase#1\relax
Cero%
@@ -2755,7 +3453,9 @@ Cero%
\or Noveno%
\fi
}
-
+% \end{macrocode}
+% Tens:
+% \begin{macrocode}
\newcommand{\@@Tenthstringspanish}[1]{%
\ifcase#1\relax
\or D\'ecimo%
@@ -2769,7 +3469,9 @@ Cero%
\or Nonag\'esimo%
\fi
}
-
+% \end{macrocode}
+% Teens:
+% \begin{macrocode}
\newcommand{\@@Teenthstringspanish}[1]{%
\ifcase#1\relax
D\'ecimo%
@@ -2784,7 +3486,9 @@ D\'ecimo%
\or Decimonoveno%
\fi
}
-
+% \end{macrocode}
+% Hundreds
+% \begin{macrocode}
\newcommand{\@@Hundredthstringspanish}[1]{%
\ifcase#1\relax
\or Cent\'esimo%
@@ -2797,7 +3501,9 @@ D\'ecimo%
\or Octingent\'esimo%
\or Noningent\'esimo%
\fi}
-
+% \end{macrocode}
+% As above, but feminine.
+% \begin{macrocode}
\newcommand{\@@UnitthstringFspanish}[1]{%
\ifcase#1\relax
Cera%
@@ -2812,7 +3518,9 @@ Cera%
\or Novena%
\fi
}
-
+% \end{macrocode}
+% Tens (feminine)
+% \begin{macrocode}
\newcommand{\@@TenthstringFspanish}[1]{%
\ifcase#1\relax
\or D\'ecima%
@@ -2826,7 +3534,9 @@ Cera%
\or Nonag\'esima%
\fi
}
-
+% \end{macrocode}
+% Teens (feminine):
+% \begin{macrocode}
\newcommand{\@@TeenthstringFspanish}[1]{%
\ifcase#1\relax
D\'ecima%
@@ -2841,7 +3551,9 @@ D\'ecima%
\or Decimonovena%
\fi
}
-
+% \end{macrocode}
+% Hundreds (feminine):
+% \begin{macrocode}
\newcommand{\@@HundredthstringFspanish}[1]{%
\ifcase#1\relax
\or Cent\'esima%
@@ -2856,8 +3568,14 @@ D\'ecima%
\fi}
% \end{macrocode}
+% This has changed in version 1.09, so that it now stores the
+% results in the second argument (which must be a control
+% sequence), but it doesn't display anything. Since it only
+% affects internal macros, it shouldn't affect documnets created
+% with older versions. (These internal macros are not meant for
+% use in documents.)
% \begin{macrocode}
-\newcommand{\@@numberstringspanish}[1]{%
+\newcommand{\@@numberstringspanish}[2]{%
\ifnum#1>99999
\PackageError{fmtcount}{Out of range}%
{This macro only works for values less than 100000}%
@@ -2869,67 +3587,100 @@ you can try typing "minus" first, and then pass the modulus of
this number}%
\fi
\fi
+\def#2{}%
\@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}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@tenstring{\@strctr}}%
\@strctr=#1 \divide\@strctr by 1000\relax
\@modulo{\@strctr}{10}%
- \ifnum\@strctr>0\ \@andname\ \@unitstring{\@strctr}\fi
+ \ifnum\@strctr>0\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@andname\ \@unitstring{\@strctr}}%
+ \fi
\else
\@strctr=#1\relax
\divide\@strctr by 1000\relax
\@modulo{\@strctr}{10}%
- \@teenstring{\@strctr}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@teenstring{\@strctr}}%
\fi
- \ \@thousand%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@thousand}%
\else
- \ifnum\@strctr>0
- \ifnum\@strctr>1\@unitstring{\@strctr}\ \fi
- \@thousand
+ \ifnum\@strctr>0\relax
+ \ifnum\@strctr>1\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ }%
+ \fi
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@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%
+\divide\@strctr by 100\relax
+\ifnum\@strctr>0\relax
+ \ifnum#1>1000\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ }%
+ \fi
+ \@tmpstrctr=#1\relax
+ \@modulo{\@tmpstrctr}{1000}%
+ \ifnum\@tmpstrctr=100\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@tenstring{10}}%
+ \else
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@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}%
+\ifnum#1>100\relax
+ \ifnum\@strctr>0\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@andname\ }%
+ \fi
\fi
+\ifnum\@strctr>29\relax
+ \divide\@strctr by 10\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@tenstring{\@strctr}}%
+ \@strctr=#1\relax \@modulo{\@strctr}{10}%
+ \ifnum\@strctr>0\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\ \@andname\ \@unitstring{\@strctr}}%
+ \fi
\else
-\ifnum\@strctr>19
-\@modulo{\@strctr}{10}%
-\@twentystring{\@strctr}%
-\else
-\@modulo{\@strctr}{10}%
-\@teenstring{\@strctr}%
-\fi
-\fi
+ \ifnum\@strctr<10\relax
+ \ifnum\@strctr=0\relax
+ \ifnum#1<100\relax
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}}%
+ \fi
+ \else
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@unitstring{\@strctr}}%
+ \fi
+ \else
+ \ifnum\@strctr>19\relax
+ \@modulo{\@strctr}{10}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@twentystring{\@strctr}}%
+ \else
+ \@modulo{\@strctr}{10}%
+ \let\@@fc@numstr#2\relax
+ \edef#2{\@@fc@numstr\@teenstring{\@strctr}}%
+ \fi
+ \fi
\fi
}
-
% \end{macrocode}
+% As above, but for ordinals
% \begin{macrocode}
-\newcommand{\@@ordinalstringspanish}[1]{%
+\newcommand{\@@ordinalstringspanish}[2]{%
\@strctr=#1\relax
\ifnum#1>99999
\PackageError{fmtcount}{Out of range}%
@@ -2941,6 +3692,7 @@ this number}%
you can try typing "minus" first, and then pass the modulus of
this number}%
\else
+\def#2{}%
\ifnum\@strctr>999\relax
\divide\@strctr by 1000\relax
\ifnum\@strctr>1\relax
@@ -2948,48 +3700,73 @@ this number}%
\@tmpstrctr=\@strctr
\ifnum\@strctr<20
\@modulo{\@tmpstrctr}{10}%
- \@teenthstring{\@tmpstrctr}
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@teenthstring{\@tmpstrctr}}%
\else
\divide\@tmpstrctr by 10\relax
- \@tenthstring{\@tmpstrctr}
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@tenthstring{\@tmpstrctr}}%
\@tmpstrctr=\@strctr
\@modulo{\@tmpstrctr}{10}%
- \ifnum\@tmpstrctr>0\@unitthstring{\@tmpstrctr} \fi
+ \ifnum\@tmpstrctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitthstring{\@tmpstrctr}}%
+ \fi
\fi
\else
- \@unitstring{\@strctr}
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}%
\fi
\fi
- \@thousandth
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@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}%
+ \@tmpstrctr=\@strctr
+ \divide\@tmpstrctr by 100\relax
+ \ifnum#1>1000\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ }%
+ \fi
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@hundredthstring{\@tmpstrctr}}%
\fi
\@modulo{\@strctr}{100}%
-\ifnum#1>99\ifnum\@strctr>0\ \fi\fi
+\ifnum#1>99\relax
+ \ifnum\@strctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ }%
+ \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
+ \@tmpstrctr=\@strctr
+ \divide\@tmpstrctr by 10\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@tenthstring{\@tmpstrctr}}%
+ \@tmpstrctr=\@strctr
+ \@modulo{\@tmpstrctr}{10}%
+ \ifnum\@tmpstrctr>0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\ \@unitthstring{\@tmpstrctr}}%
+ \fi
\else
-\@unitthstring{\@strctr}%
-\fi
-\fi
+ \ifnum\@strctr>9\relax
+ \@modulo{\@strctr}{10}%
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@teenthstring{\@strctr}}%
+ \else
+ \ifnum\@strctr=0\relax
+ \ifnum#1=0\relax
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitstring{0}}%
+ \fi
+ \else
+ \let\@@fc@ordstr#2\relax
+ \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}%
+ \fi
+ \fi
\fi
\fi
\fi
@@ -3009,7 +3786,7 @@ this number}%
% This section deals with the code for |fmtcount.sty|
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{fmtcount}[2007/01/06 v1.06]
+\ProvidesPackage{fmtcount}[2007/04/20 v1.09]
\RequirePackage{ifthen}
\RequirePackage{keyval}
% \end{macrocode}
@@ -3230,9 +4007,9 @@ or `user'}}}
\@@hexadecimal\@DT@X}
\let\hexadecimalnum=\@hexadecimal
-% \begin{macrocode}
-% Uppercase hexadecimal
% \end{macrocode}
+% Uppercase hexadecimal
+% \begin{macrocode}
\newcommand{\@@Hexadecimal}[1]{\ifcase#10\or1\or2\or3\or4\or5\or6\or
7\or8\or9\or A\or B\or C\or D\or E\or F\fi}
@@ -3397,7 +4174,7 @@ or `user'}}}
\expandafter\protect\expandafter\ordinalnum{%
\expandafter\the\csname c@#1\endcsname}}
% \end{macrocode}
-% If \verb"\ordinal" isn't defined make "\ordinal" a synonym
+% If \verb"\ordinal" isn't defined make \verb"\ordinal" a synonym
% for \verb"\FCordinal" to maintain compatibility with previous
% versions.
% \begin{macrocode}
@@ -3405,87 +4182,397 @@ or `user'}}}
\PackageWarning{fmtcount}{\string\ordinal
\space already defined use \string\FCordinal \space instead.}}
% \end{macrocode}
+% Display ordinal where value is given as a number or
+% count register instead of a counter:
% \begin{macrocode}
\newcommand{\ordinalnum}[1]{\@ifnextchar[{\@ordinalnum{#1}}{%
\@ordinalnum{#1}[m]}}
-
-\def\@ordinalnum#1[#2]{%
+% \end{macrocode}
+% Display ordinal according to gender:
+% \begin{macrocode}
+\def\@ordinalnum#1[#2]{{%
\ifthenelse{\equal{#2}{f}}{%
-\protect\@ordinalF{#1}}{%
+\protect\@ordinalF{#1}{\@fc@ordstr}}{%
\ifthenelse{\equal{#2}{m}}{}{%
\PackageError{fmtcount}{Invalid gender option `#2'}{%
Available options are m or f}}%
-\protect\@ordinalM{#1}}}
-
+\protect\@ordinalM{#1}{\@fc@ordstr}}\@fc@ordstr}}
+% \end{macrocode}
+% Store the ordinal (first argument
+% is identifying name, second argument is a counter.)
+% \begin{macrocode}
+\newcommand*{\storeordinal}[2]{%
+\expandafter\protect\expandafter\storeordinalnum{#1}{%
+\expandafter\the\csname c@#2\endcsname}}
+% \end{macrocode}
+% Store ordinal (first argument
+% is identifying name, second argument is a number or
+% count register.)
+% \begin{macrocode}
+\newcommand*{\storeordinalnum}[2]{%
+\@ifnextchar[{\@storeordinalnum{#1}{#2}}{%
+\@storeordinalnum{#1}{#2}[m]}}
+% \end{macrocode}
+% Store ordinal according to gender:
+% \begin{macrocode}
+\def\@storeordinalnum#1#2[#3]{%
+\ifthenelse{\equal{#3}{f}}{%
+\protect\@ordinalF{#2}{\@fc@ord}}{%
+\ifthenelse{\equal{#3}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#3'}{%
+Available options are m or f}}%
+\protect\@ordinalM{#2}{\@fc@ord}}%
+\expandafter\let\csname @fcs@#1\endcsname\@fc@ord}
+% \end{macrocode}
+% Get stored information:
+% \begin{macrocode}
+\newcommand*{\FMCuse}[1]{\csname @fcs@#1\endcsname}
+% \end{macrocode}
+% Display ordinal as a string (argument is a counter)
+% \begin{macrocode}
\newcommand{\ordinalstring}[1]{%
\expandafter\protect\expandafter\ordinalstringnum{%
\expandafter\the\csname c@#1\endcsname}}
-
+% \end{macrocode}
+% Display ordinal as a string (argument is a count register or
+% number.)
+% \begin{macrocode}
\newcommand{\ordinalstringnum}[1]{%
\@ifnextchar[{\@ordinal@string{#1}}{\@ordinal@string{#1}[m]}}
-
-\def\@ordinal@string#1[#2]{%
+% \end{macrocode}
+% Display ordinal as a string according to gender.
+% \begin{macrocode}
+\def\@ordinal@string#1[#2]{{%
\ifthenelse{\equal{#2}{f}}{%
-\protect\@ordinalstringF{#1}}{%
+\protect\@ordinalstringF{#1}{\@fc@ordstr}}{%
\ifthenelse{\equal{#2}{m}}{}{%
\PackageError{fmtcount}{Invalid gender option `#2' to
\string\ordinalstring}{Available options are m or f}}%
-\protect\@ordinalstringM{#1}}}
-
+\protect\@ordinalstringM{#1}{\@fc@ordstr}}\@fc@ordstr}}
+% \end{macrocode}
+% Store textual representation of number. First argument is
+% identifying name, second argument is the counter set to the
+% required number.
+% \begin{macrocode}
+\newcommand{\storeordinalstring}[2]{%
+\expandafter\protect\expandafter\storeordinalstringnum{#1}{%
+\expandafter\the\csname c@#2\endcsname}}
+% \end{macrocode}
+% Store textual representation of number. First argument is
+% identifying name, second argument is a count register or number.
+% \begin{macrocode}
+\newcommand{\storeordinalstringnum}[2]{%
+\@ifnextchar[{\@store@ordinal@string{#1}{#2}}{%
+\@store@ordinal@string{#1}{#2}[m]}}
+% \end{macrocode}
+% Store textual representation of number according to gender.
+% \begin{macrocode}
+\def\@store@ordinal@string#1#2[#3]{%
+\ifthenelse{\equal{#3}{f}}{%
+\protect\@ordinalstringF{#2}{\@fc@ordstr}}{%
+\ifthenelse{\equal{#3}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#3' to
+\string\ordinalstring}{Available options are m or f}}%
+\protect\@ordinalstringM{#2}{\@fc@ordstr}}%
+\expandafter\let\csname @fcs@#1\endcsname\@fc@ordstr}
+% \end{macrocode}
+% Display ordinal as a string with initial letters in upper case
+% (argument is a counter)
+% \begin{macrocode}
\newcommand{\Ordinalstring}[1]{%
\expandafter\protect\expandafter\Ordinalstringnum{%
\expandafter\the\csname c@#1\endcsname}}
-
+% \end{macrocode}
+% Display ordinal as a string with initial letters in upper case
+% (argument is a number or count register)
+% \begin{macrocode}
\newcommand{\Ordinalstringnum}[1]{%
\@ifnextchar[{\@Ordinal@string{#1}}{\@Ordinal@string{#1}[m]}}
-
-\def\@Ordinal@string#1[#2]{%
+% \end{macrocode}
+% Display ordinal as a string with initial letters in upper case
+% according to gender
+% \begin{macrocode}
+\def\@Ordinal@string#1[#2]{{%
\ifthenelse{\equal{#2}{f}}{%
-\protect\@OrdinalstringF{#1}}{%
+\protect\@OrdinalstringF{#1}{\@fc@ordstr}}{%
\ifthenelse{\equal{#2}{m}}{}{%
-\PackageError{fmtcount}{Invalid gender option `#2' to
-\string\Ordinalstring}{Available options are m or f}}%
-\protect\@OrdinalstringM{#1}}}
-
+\PackageError{fmtcount}{Invalid gender option `#2'}{%
+Available options are m or f}}%
+\protect\@OrdinalstringM{#1}{\@fc@ordstr}}\@fc@ordstr}}
+% \end{macrocode}
+% Store textual representation of number, with initial letters in
+% upper case. First argument is identifying name, second argument
+% is the counter set to the
+% required number.
+% \begin{macrocode}
+\newcommand{\storeOrdinalstring}[2]{%
+\expandafter\protect\expandafter\storeOrdinalstringnum{#1}{%
+\expandafter\the\csname c@#2\endcsname}}
+% \end{macrocode}
+% Store textual representation of number, with initial letters in
+% upper case. First argument is identifying name, second argument
+% is a count register or number.
+% \begin{macrocode}
+\newcommand{\storeOrdinalstringnum}[2]{%
+\@ifnextchar[{\@store@Ordinal@string{#1}{#2}}{%
+\@store@Ordinal@string{#1}{#2}[m]}}
+% \end{macrocode}
+% Store textual representation of number according to gender,
+% with initial letters in upper case.
+% \begin{macrocode}
+\def\@store@Ordinal@string#1#2[#3]{%
+\ifthenelse{\equal{#3}{f}}{%
+\protect\@OrdinalstringF{#2}{\@fc@ordstr}}{%
+\ifthenelse{\equal{#3}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#3'}{%
+Available options are m or f}}%
+\protect\@OrdinalstringM{#2}{\@fc@ordstr}}%
+\expandafter\let\csname @fcs@#1\endcsname\@fc@ordstr}
+% \end{macrocode}
+% Store upper case textual representation of ordinal. The first
+% argument is identifying name, the second argument is a counter.
+% \begin{macrocode}
+\newcommand{\storeORDINALstring}[2]{%
+\expandafter\protect\expandafter\storeORDINALstringnum{#1}{%
+\expandafter\the\csname c@#2\endcsname}}
+% \end{macrocode}
+% As above, but the second argument is a count register or a
+% number.
+% \begin{macrocode}
+\newcommand{\storeORDINALstringnum}[2]{%
+\@ifnextchar[{\@store@ORDINAL@string{#1}{#2}}{%
+\@store@ORDINAL@string{#1}{#2}[m]}}
+% \end{macrocode}
+% Gender is specified as an optional argument at the end.
+% \begin{macrocode}
+\def\@store@ORDINAL@string#1#2[#3]{%
+\ifthenelse{\equal{#3}{f}}{%
+\protect\@ordinalstringF{#2}{\@fc@ordstr}}{%
+\ifthenelse{\equal{#3}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#3'}{%
+Available options are m or f}}%
+\protect\@ordinalstringM{#2}{\@fc@ordstr}}%
+\expandafter\edef\csname @fcs@#1\endcsname{%
+\noexpand\MakeUppercase{\@fc@ordstr}}}
+% \end{macrocode}
+% Display upper case textual representation of an ordinal. The
+% argument must be a counter.
+% \begin{macrocode}
+\newcommand{\ORDINALstring}[1]{%
+\expandafter\protect\expandafter\ORDINALstringnum{%
+\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+% As above, but the argument is a count register or a number.
+% \begin{macrocode}
+\newcommand{\ORDINALstringnum}[1]{%
+\@ifnextchar[{\@ORDINAL@string{#1}}{\@ORDINAL@string{#1}[m]}}
+% \end{macrocode}
+% Gender is specified as an optional argument at the end.
+% \begin{macrocode}
+\def\@ORDINAL@string#1[#2]{{%
+\ifthenelse{\equal{#2}{f}}{%
+\protect\@ordinalstringF{#1}{\@fc@ordstr}}{%
+\ifthenelse{\equal{#2}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#2'}{%
+Available options are m or f}}%
+\protect\@ordinalstringM{#1}{\@fc@ordstr}}%
+\MakeUppercase{\@fc@ordstr}}}
+% \end{macrocode}
+% Convert number to textual respresentation, and store. First
+% argument is the identifying name, second argument is a counter
+% containing the number.
+% \begin{macrocode}
+\newcommand{\storenumberstring}[2]{%
+\expandafter\protect\expandafter\storenumberstringnum{#1}{%
+\expandafter\the\csname c@#2\endcsname}}
+% \end{macrocode}
+% As above, but second argument is a number or count register.
+% \begin{macrocode}
+\newcommand{\storenumberstringnum}[2]{%
+\@ifnextchar[{\@store@number@string{#1}{#2}}{%
+\@store@number@string{#1}{#2}[m]}}
+% \end{macrocode}
+% Gender is given as optional argument, \emph{at the end}.
+% \begin{macrocode}
+\def\@store@number@string#1#2[#3]{%
+\ifthenelse{\equal{#3}{f}}{%
+\protect\@numberstringF{#2}{\@fc@numstr}}{%
+\ifthenelse{\equal{#3}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#3'}{%
+Available options are m or f}}%
+\protect\@numberstringM{#2}{\@fc@numstr}}%
+\expandafter\let\csname @fcs@#1\endcsname\@fc@numstr}
+% \end{macrocode}
+% Display textual representation of a number. The argument
+% must be a counter.
+% \begin{macrocode}
\newcommand{\numberstring}[1]{%
\expandafter\protect\expandafter\numberstringnum{%
\expandafter\the\csname c@#1\endcsname}}
-
+% \end{macrocode}
+% As above, but the argument is a count register or a number.
+% \begin{macrocode}
\newcommand{\numberstringnum}[1]{%
\@ifnextchar[{\@number@string{#1}}{\@number@string{#1}[m]}}
-
-\def\@number@string#1[#2]{%
+% \end{macrocode}
+% Gender is specified as an optional argument \emph{at the end}.
+% \begin{macrocode}
+\def\@number@string#1[#2]{{%
\ifthenelse{\equal{#2}{f}}{%
-\protect\@numberstringF{#1}}{%
+\protect\@numberstringF{#1}{\@fc@numstr}}{%
\ifthenelse{\equal{#2}{m}}{}{%
-\PackageError{fmtcount}{Invalid gender option `#2' to
-\string\numberstring}{Available options are m or f}}%
-\protect\@numberstringM{#1}}}
-
+\PackageError{fmtcount}{Invalid gender option `#2'}{%
+Available options are m or f}}%
+\protect\@numberstringM{#1}{\@fc@numstr}}\@fc@numstr}}
+% \end{macrocode}
+% Store textual representation of number. First argument is
+% identifying name, second argument is a counter.
+% \begin{macrocode}
+\newcommand{\storeNumberstring}[2]{%
+\expandafter\protect\expandafter\storeNumberstringnum{#1}{%
+\expandafter\the\csname c@#2\endcsname}}
+% \end{macrocode}
+% As above, but second argument is a count register or number.
+% \begin{macrocode}
+\newcommand{\storeNumberstringnum}[2]{%
+\@ifnextchar[{\@store@Number@string{#1}{#2}}{%
+\@store@Number@string{#1}{#2}[m]}}
+% \end{macrocode}
+% Gender is specified as an optional argument \emph{at the end}:
+% \begin{macrocode}
+\def\@store@Number@string#1#2[#3]{%
+\ifthenelse{\equal{#3}{f}}{%
+\protect\@NumberstringF{#2}{\@fc@numstr}}{%
+\ifthenelse{\equal{#3}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#3'}{%
+Available options are m or f}}%
+\protect\@NumberstringM{#2}{\@fc@numstr}}%
+\expandafter\let\csname @fcs@#1\endcsname\@fc@numstr}
+% \end{macrocode}
+% Display textual representation of number. The argument must be
+% a counter.
+% \begin{macrocode}
\newcommand{\Numberstring}[1]{%
\expandafter\protect\expandafter\Numberstringnum{%
\expandafter\the\csname c@#1\endcsname}}
-
+% \end{macrocode}
+% As above, but the argument is a count register or number.
+% \begin{macrocode}
\newcommand{\Numberstringnum}[1]{%
\@ifnextchar[{\@Number@string{#1}}{\@Number@string{#1}[m]}}
-
-\def\@Number@string#1[#2]{%
+% \end{macrocode}
+% Gender is specified as an optional argument at the end.
+% \begin{macrocode}
+\def\@Number@string#1[#2]{{%
\ifthenelse{\equal{#2}{f}}{%
-\protect\@NumberstringF{#1}}{%
+\protect\@NumberstringF{#1}{\@fc@numstr}}{%
\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}}
+\PackageError{fmtcount}{Invalid gender option `#2'}{%
+Available options are m or f}}%
+\protect\@NumberstringM{#1}{\@fc@numstr}}\@fc@numstr}}
+% \end{macrocode}
+% Store upper case textual representation of number. The first
+% argument is identifying name, the second argument is a counter.
+% \begin{macrocode}
+\newcommand{\storeNUMBERstring}[2]{%
+\expandafter\protect\expandafter\storeNUMBERstringnum{#1}{%
+\expandafter\the\csname c@#2\endcsname}}
+% \end{macrocode}
+% As above, but the second argument is a count register or a
+% number.
+% \begin{macrocode}
+\newcommand{\storeNUMBERstringnum}[2]{%
+\@ifnextchar[{\@store@NUMBER@string{#1}{#2}}{%
+\@store@NUMBER@string{#1}{#2}[m]}}
+% \end{macrocode}
+% Gender is specified as an optional argument at the end.
+% \begin{macrocode}
+\def\@store@NUMBER@string#1#2[#3]{%
+\ifthenelse{\equal{#3}{f}}{%
+\protect\@numberstringF{#2}{\@fc@numstr}}{%
+\ifthenelse{\equal{#3}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#3'}{%
+Available options are m or f}}%
+\protect\@numberstringM{#2}{\@fc@numstr}}%
+\expandafter\edef\csname @fcs@#1\endcsname{%
+\noexpand\MakeUppercase{\@fc@numstr}}}
+% \end{macrocode}
+% Display upper case textual representation of a number. The
+% argument must be a counter.
+% \begin{macrocode}
+\newcommand{\NUMBERstring}[1]{%
+\expandafter\protect\expandafter\NUMBERstringnum{%
+\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+% As above, but the argument is a count register or a number.
+% \begin{macrocode}
+\newcommand{\NUMBERstringnum}[1]{%
+\@ifnextchar[{\@NUMBER@string{#1}}{\@NUMBER@string{#1}[m]}}
+% \end{macrocode}
+% Gender is specified as an optional argument at the end.
+% \begin{macrocode}
+\def\@NUMBER@string#1[#2]{{%
+\ifthenelse{\equal{#2}{f}}{%
+\protect\@numberstringF{#1}{\@fc@numstr}}{%
+\ifthenelse{\equal{#2}{m}}{}{%
+\PackageError{fmtcount}{Invalid gender option `#2'}{%
+Available options are m or f}}%
+\protect\@numberstringM{#1}{\@fc@numstr}}%
+\MakeUppercase{\@fc@numstr}}}
+% \end{macrocode}
+% Number representations in other bases. Binary:
+% \begin{macrocode}
+\providecommand{\binary}[1]{%
+\expandafter\protect\expandafter\@binary{%
+\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+% Like \verb"\alph", but goes beyond 26. (a \ldots\ z aa \ldots zz \ldots)
+% \begin{macrocode}
+\providecommand{\aaalph}[1]{%
+\expandafter\protect\expandafter\@aaalph{%
+\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+% As before, but upper case.
+% \begin{macrocode}
+\providecommand{\AAAlph}[1]{%
+\expandafter\protect\expandafter\@AAAlph{%
+\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+% Like \verb"\alph", but goes beyond 26. (a \ldots\ z ab \ldots az \ldots)
+% \begin{macrocode}
+\providecommand{\abalph}[1]{%
+\expandafter\protect\expandafter\@abalph{%
+\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+% As above, but upper case.
+% \begin{macrocode}
+\providecommand{\ABAlph}[1]{%
+\expandafter\protect\expandafter\@ABAlph{%
+\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+% Hexadecimal:
+% \begin{macrocode}
+\providecommand{\hexadecimal}[1]{%
+\expandafter\protect\expandafter\@hexadecimal{%
+\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+% As above, but in upper case.
+% \begin{macrocode}
+\providecommand{\Hexadecimal}[1]{%
+\expandafter\protect\expandafter\@Hexadecimal{%
+\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+% Octal:
+% \begin{macrocode}
+\providecommand{\octal}[1]{%
+\expandafter\protect\expandafter\@octal{%
+\expandafter\the\csname c@#1\endcsname}}
+% \end{macrocode}
+% Decimal:
+% \begin{macrocode}
+\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"
@@ -3493,7 +4580,7 @@ Available options are m or f}}%
% Otherwise use English definitions.
% \begin{macrocode}
\def\@setdef@ultfmtcount{
-\@ifundefined{@ordinalenglish}{\input{fc-english.def}}{}
+\@ifundefined{@ordinalMenglish}{\input{fc-english.def}}{}
\def\@ordinalstringM{\@ordinalstringMenglish}
\let\@ordinalstringF=\@ordinalstringMenglish
\def\@OrdinalstringM{\@OrdinalstringMenglish}
@@ -3590,8 +4677,8 @@ The fmtcount package currently does not support language
% \begin{macrocode}
# File : fmtcount.perl
# Author : Nicola Talbot
-# Date : 3 Mar 2005
-# Version : 1.02
+# Date : 21 April 2007
+# Version : 1.04
# Description : LaTeX2HTML implementation of fmtcount package
package main;
@@ -3761,6 +4848,58 @@ sub do_cmd_ordinal{
}
}
+sub do_cmd_storeordinal{
+ local($_) = @_;
+ local($key);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ local($ctr, $val, $id, $_) = &read_counter_value($_);
+ local($gender)='m';
+
+ $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_ =~s/\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
+ $fmtcntvar{$key} = join('', '{ORDINAL{', $ctr, '}}');
+ }
+ else
+ {
+ $fmtcntvar{$key} = &getordinal($val, $gender);
+ }
+
+ $_;
+}
+
+sub do_cmd_storeordinalnum{
+ local($_) = @_;
+ local($key, $val);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ $val = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($val=$2));
+
+ local($gender)='m';
+
+ if ($_ =~s/\s*\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ $fmtcntvar{$key} = &getordinal($val, $gender);
+
+ $_;
+}
+
@unitthstring = ('zeroth',
'first',
'second',
@@ -4086,7 +5225,7 @@ $thousandthnamespanish = "mil\\'esimo";
@unitstringportuges = ('zero',
'um',
'dois',
- 'tr\`es',
+ 'tr\^es',
'quatro',
'cinco',
'seis',
@@ -4353,7 +5492,7 @@ sub get_numberstringportuges{
{
$hundreds = $hundredstringportuges[$num/100];
- if ($gender eq 'f')
+ if ($gender eq 'f' and $num >= 200)
{
$hundreds =~s/o(s?)$/a\1/;
}
@@ -4451,6 +5590,58 @@ sub do_cmd_numberstring{
}
}
+sub do_cmd_storenumberstring{
+ local($_) = @_;
+ local($key);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ local($ctr, $val, $id, $_) = &read_counter_value($_);
+ local($gender)='m';
+
+ $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_ =~s/\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
+ $fmtcntvar{$key} = join('', '{NUMBERSTRING{', $ctr, '}}');
+ }
+ else
+ {
+ $fmtcntvar{$key} = join('', &get_numberstring($val, $gender));
+ }
+
+ $_;
+}
+
+sub do_cmd_storenumberstringnum{
+ local($_) = @_;
+ local($key, $val);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ $val = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($val=$2));
+
+ local($gender)='m';
+
+ if ($_ =~s/\s*\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ $fmtcntvar{$key} = join('', &get_numberstring($val, $gender));
+
+ $_;
+}
+
sub get_Numberstring{
local($val,$gender) = @_;
local($string) = &get_numberstring($val,$gender);
@@ -4516,6 +5707,150 @@ sub do_cmd_Numberstring{
}
}
+sub do_cmd_storeNumberstring{
+ local($_) = @_;
+ local($key);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ local($ctr, $val, $id, $_) = &read_counter_value($_);
+ local($gender)='m';
+
+ $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_ =~s/\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
+ $fmtcntvar{$key} = join('', '{NNUMBERSTRING{', $ctr, '}}');
+ }
+ else
+ {
+ $fmtcntvar{$key} = join('', &get_Numberstring($val, $gender));
+ }
+
+ $_;
+}
+
+sub do_cmd_storeNumberstringnum{
+ local($_) = @_;
+ local($key, $val);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ $val = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($val=$2));
+
+ local($gender)='m';
+
+ if ($_ =~s/\s*\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ $fmtcntvar{$key} = join('', &get_Numberstring($val, $gender));
+
+ $_;
+}
+
+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('', uc(&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('', '{CAPNUMBERSTRING{', $ctr, '}}', $_);
+ }
+ else
+ {
+ join('', uc(&get_numberstring($val, $gender)), $_);
+ }
+}
+
+sub do_cmd_storeNUMBERstring{
+ local($_) = @_;
+ local($key);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ local($ctr, $val, $id, $_) = &read_counter_value($_);
+ local($gender)='m';
+
+ $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_ =~s/\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
+ $fmtcntvar{$key} = join('', '{CAPNUMBERSTRING{', $ctr, '}}');
+ }
+ else
+ {
+ $fmtcntvar{$key} = uc(&get_numberstring($val, $gender));
+ }
+
+ $_;
+}
+
+sub do_cmd_storeNUMBERstringnum{
+ local($_) = @_;
+ local($key, $val);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ $val = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($val=$2));
+
+ local($gender)='m';
+
+ if ($_ =~s/\s*\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ $fmtcntvar{$key} = uc(&get_numberstring($val, $gender));
+
+ $_;
+}
+
sub get_ordinalstringenglish{
local($num) = @_;
local($name)="";
@@ -4952,18 +6287,82 @@ sub do_cmd_ordinalstring{
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]);
+ join('', '{ORDINALSTRING{', $ctr, '}}', $_);
}
else
{
- join('', &get_ordinalstring($val, $gender), $_[0]);
+ join('', &get_ordinalstring($val, $gender), $_);
}
}
+ %fmtcntvar = ();
+
+sub do_cmd_FMCuse{
+ local($_) = @_;
+ local($key);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ $fmtcntvar{$key}.$_;
+}
+
+sub do_cmd_storeordinalstring{
+ local($_) = @_;
+ local($key);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ local($ctr, $val, $id, $_) = &read_counter_value($_);
+ local($gender)='m';
+
+ $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_ =~s/\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
+ $fmtcntvar{$key} = join('', '{ORDINALSTRING{', $ctr, '}}');
+ }
+ else
+ {
+ $fmtcntvar{$key} = join('', &get_ordinalstring($val, $gender));
+ }
+
+ $_;
+}
+
+sub do_cmd_storeordinalstringnum{
+ local($_) = @_;
+ local($key, $val);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ $val = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($val=$2));
+
+ local($gender)='m';
+
+ if ($_ =~s/\s*\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ $fmtcntvar{$key} = join('', &get_ordinalstring($val, $gender));
+
+ $_;
+}
+
sub get_Ordinalstring{
local($val,$gender) = @_;
local($string) = &get_ordinalstring($val,$gender);
- $string =~ s/([a-z])([^\s\-]+)/\u\1\2/g;
+ $string =~ s/\b([a-z])([^\s\-]+)/\u\1\2/g;
if ($default_language eq 'french')
{
@@ -5017,6 +6416,149 @@ sub do_cmd_Ordinalstring{
}
}
+sub do_cmd_storeOrdinalstring{
+ local($_) = @_;
+ local($key);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ local($ctr, $val, $id, $_) = &read_counter_value($_);
+ local($gender)='m';
+
+ $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_ =~s/\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
+ $fmtcntvar{$key} = join('', '{OORDINALSTRING{', $ctr, '}}');
+ }
+ else
+ {
+ $fmtcntvar{$key} = join('', &get_Ordinalstring($val, $gender));
+ }
+
+ $_;
+}
+
+sub do_cmd_storeOrdinalstringnum{
+ local($_) = @_;
+ local($key, $val);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ $val = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($val=$2));
+
+ local($gender)='m';
+
+ if ($_ =~s/\s*\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ $fmtcntvar{$key} = join('', &get_Ordinalstring($val, $gender));
+
+ $_;
+}
+
+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('', uc(&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('', '{CAPORDINALSTRING{', $ctr, '}}', $_);
+ }
+ else
+ {
+ join('', uc(&get_ordinalstring($val, $gender)), $_);
+ }
+}
+
+sub do_cmd_storeORDINALstring{
+ local($_) = @_;
+ local($key);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ local($ctr, $val, $id, $_) = &read_counter_value($_);
+ local($gender)='m';
+
+ $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//;
+
+ if ($_ =~s/\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
+ $fmtcntvar{$key} = join('', '{CAPORDINALSTRING{', $ctr, '}}');
+ }
+ else
+ {
+ $fmtcntvar{$key} = uc(&get_ordinalstring($val, $gender));
+ }
+
+ $_;
+}
+
+sub do_cmd_storeORDINALstringnum{
+ local($_) = @_;
+ local($key, $val);
+
+ $key = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($key=$2));
+
+ $val = &missing_braces
+ unless ((s/$next_pair_pr_rx//o)&&($val=$2));
+
+ local($gender)='m';
+
+ if ($_ =~s/\s*\[(.)\]//)
+ {
+ $gender = $1;
+ }
+
+ $fmtcntvar{$key} = uc(&get_ordinalstring($val, $gender));
+
+ $_;
+}
sub do_cmd_fmtcountsetoptions{
local($_) = @_;
@@ -5393,9 +6935,9 @@ sub load_fmtcount_cfg{
%<*fc-samp.tex>
% \end{macrocode}
%\fi
+% \begin{macrocode}
\documentclass[a4paper]{article}
-%\usepackage[french]{babel}
\usepackage{fmtcount}
\newcounter{N}
@@ -5488,9 +7030,11 @@ numberstring
Referencing a label: \ref{ex}.
Passing numbers explicitly: \ordinalnum{10},
-\Numberstringnum{10}, \Ordinalstringnum{10}.
+\Numberstringnum{10}, \NUMBERstringnum{10}, \Ordinalstringnum{10},
+\ORDINALstringnum{10}.
\end{document}
+% \end{macrocode}
%\iffalse
% \begin{macrocode}
%</fc-samp.tex>
@@ -5501,6 +7045,7 @@ Passing numbers explicitly: \ordinalnum{10},
%<*fc-lang.tex>
% \end{macrocode}
%\fi
+% \begin{macrocode}
% This is an interactive script. Run it through \LaTeX
% and enter appropriate responses.
@@ -5613,8 +7158,10 @@ Current language: French (Belgium).
\typeout{Which format?^^J}
\typeout{[1] ordinalstring}
\typeout{[2] Ordinalstring}
-\typeout{[3] numberstring}
-\typeout{[4] Numberstring}
+\typeout{[3] ORDINALstring}
+\typeout{[4] numberstring}
+\typeout{[5] Numberstring}
+\typeout{[6] NUMBERstring}
\typein[\response]{Default: 1}
@@ -5622,16 +7169,20 @@ Current language: French (Belgium).
\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}}}}}
+\ifthenelse{\equal{\response}{4}}{\myctr=4}{
+\ifthenelse{\equal{\response}{5}}{\myctr=5}{
+\ifthenelse{\equal{\response}{6}}{\myctr=6}{\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{ORDINALstring}
\or\def\stringtype{numberstring}
\or\def\stringtype{Numberstring}
+\or\def\stringtype{NUMBERstring}
\fi
\ifnum\langid>3
@@ -5708,6 +7259,7 @@ Current language: French (Belgium).
\end{ttfamily}
\end{document}
+% \end{macrocode}
%\iffalse
% \begin{macrocode}
%</fc-lang.tex>
diff --git a/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins b/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins
index 736dd9f169f..6138342bbe6 100644
--- a/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins
+++ b/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins
@@ -1,4 +1,4 @@
-% fmtcount.ins generated using makedtx version 0.91b 2007/1/6 16:52
+% fmtcount.ins generated using makedtx version 0.91b 2007/4/21 19:25
\input docstrip
\preamble