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