diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/fmtcount/fc-french.def')
-rw-r--r-- | Master/texmf-dist/tex/latex/fmtcount/fc-french.def | 1616 |
1 files changed, 876 insertions, 740 deletions
diff --git a/Master/texmf-dist/tex/latex/fmtcount/fc-french.def b/Master/texmf-dist/tex/latex/fmtcount/fc-french.def index dedfca9b0c3..2d268659dd4 100644 --- a/Master/texmf-dist/tex/latex/fmtcount/fc-french.def +++ b/Master/texmf-dist/tex/latex/fmtcount/fc-french.def @@ -7,7 +7,7 @@ %% fmtcount.dtx (with options: `fc-french.def,package') %% %% fmtcount.dtx -%% Copyright 2009 Nicola Talbot +%% Copyright 2012 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fcnumparser.sty, fcprefix.sty, fmtcount.sty, fc-american.def, fc-british.def, fc-english.def, fc-francais.def, fc-french.def, fc-frenchb.def, fc-german.def, fc-germanb.def, fc-italian.def, fc-ngerman.def, fc-ngermanb.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def. %% %% \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 @@ -38,7 +38,156 @@ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} -\ProvidesFile{fc-french.def}[2007/05/26] +%%\subsection{Prefixes} +%%\label{sec:latin-prefixes} +%% +%%\begin{definition}[\DescribeMacro{\latinnumeralstring}] +%%\cs{latinnumeralstring}\marg{counter}\oarg{prefix options} +%%\end{definition} +%% +%%\begin{definition}[\DescribeMacro{\latinnumeralstringnum}] +%%\cs{latinnumeralstringnum}\marg{number}\oarg{prefix options} +%%\end{definition} +\ProvidesFCLanguage{french}[2012/06/18] +\RequirePackage{fcprefix} +\def\fc@french@set@plural#1#2#3#4#5#6{% + \ifthenelse{\equal{#2}{reformed}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{#3}% + }{% + \ifthenelse{\equal{#2}{traditional}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{#4}% + }{% + \ifthenelse{\equal{#2}{reformed o}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{#5}% + }{% + \ifthenelse{\equal{#2}{traditional o}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{#6}% + }{% + \ifthenelse{\equal{#2}{always}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{0}% + }{% + \ifthenelse{\equal{#2}{never}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{1}% + }{% + \ifthenelse{\equal{#2}{multiple}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{2}% + }{% + \ifthenelse{\equal{#2}{multiple g-last}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{3}% + }{% + \ifthenelse{\equal{#2}{multiple l-last}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{4}% + }{% + \ifthenelse{\equal{#2}{multiple lng-last}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{5}% + }{% + \ifthenelse{\equal{#2}{multiple ng-last}}{% + \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{6}% + }{% + \PackageError{fmtcount}{Unexpected argument}{% + `#2' was unexpected: french option `#1 plural' expects `reformed', `traditional', + `reformed o', `traditional o', `always', `never', `multiple', `multiple g-last', + `multiple l-last', `multiple lng-last', or `multiple ng-last'.% + }}}}}}}}}}}}} +\def\@tempa#1#2#3{% + \define@key{fcfrench}{#1 plural}[reformed]{% + \fc@french@set@plural{#1}{##1}{#2}{#2}{#3}{#3}% + }% +} +\@tempa{vingt}{4}{5} +\@tempa{cent}{4}{5} +\@tempa{mil}{0}{0} +\@tempa{n-illion}{2}{6} +\@tempa{n-illiard}{2}{6} +\define@key{fcfrench}{all plural}[reformed]{% + \csname KV@fcfrench@vingt plural\endcsname{#1}% + \csname KV@fcfrench@cent plural\endcsname{#1}% + \csname KV@fcfrench@mil plural\endcsname{#1}% + \csname KV@fcfrench@n-illion plural\endcsname{#1}% + \csname KV@fcfrench@n-illiard plural\endcsname{#1}% +} +\define@key{fcfrench}{dash or space}[reformed]{% + \ifthenelse{\equal{#1}{traditional}}{% + \let\fc@frenchoptions@supermillion@dos\space% + \let\fc@frenchoptions@submillion@dos\space + }{% + \ifthenelse{\equal{#1}{reformed}\or\equal{#1}{1990}}{% + \let\fc@frenchoptions@supermillion@dos\space + \def\fc@frenchoptions@submillion@dos{-}% + }{% + \ifthenelse{\equal{#1}{always}}{% + \def\fc@frenchoptions@supermillion@dos{-}% + \def\fc@frenchoptions@submillion@dos{-}% + }{% + \PackageError{fmtcount}{Unexpected argument}{% + French option `dash or space' expects `always', `reformed' or `traditional' + } + }% + }% + }% +} +\define@key{fcfrench}{scale}[recursive]{% + \ifthenelse{\equal{#1}{long}}{% + \let\fc@poweroften\fc@@pot@longscalefrench + }{% + \ifthenelse{\equal{#1}{recursive}}{% + \let\fc@poweroften\fc@@pot@recursivefrench + }{% + \ifthenelse{\equal{#1}{short}}{% + \let\fc@poweroften\fc@@pot@shortscalefrench + }{% + \PackageError{fmtcount}{Unexpected argument}{% + French option `scale' expects `long', `recursive' or `short' + } + }% + }% + }% +} +\define@key{fcfrench}{n-illiard upto}[infinity]{% + \ifthenelse{\equal{#1}{infinity}}{% + \def\fc@longscale@nilliard@upto{0}% + }{% + \ifthenelse{\equal{#1}{infty}}{% + \def\fc@longscale@nilliard@upto{0}% + }{% + \if Q\ifnum9<1#1Q\fi\else + \PackageError{fmtcount}{Unexpected argument}{% + French option `milliard threshold' expects `infinity', or equivalently `infty', or a non negative + integer.}% + \fi + \def\fc@longscale@nilliard@upto{#1}% + }}% +} +\def\@tempa#1{% + \define@key{fcfrench}{#1}[]{% + \PackageError{fmtcount}{Unexpected argument}{French option with key `#1' does not take + any value}}% + \expandafter\def\csname KV@fcfrench@#1@default\endcsname{% + \def\fmtcount@french{#1}}% +}% +\@tempa{france}\@tempa{swiss}\@tempa{belgian}% +\define@key{fcfrench}{dialect}[france]{% + \ifthenelse{\equal{#1}{france} + \or\equal{#1}{swiss} + \or\equal{#1}{belgian}}{% + \def\fmtcount@french{#1}}{% + \PackageError{fmtcount}{Invalid value `#1' to french option dialect key} + {Option `french' can only take the values `france', + `belgian' or `swiss'}}} +\define@key{fcfrench}{mil plural mark}[le]{% + \def\fc@frenchoptions@mil@plural@mark{#1}} +\def\fc@UpperCaseFirstLetter#1#2\@nil{% + \uppercase{#1}#2} + +\def\fc@CaseIden#1\@nil{% + #1% +} +\def\fc@UpperCaseAll#1\@nil{% + \uppercase{#1}% +} + +\let\fc@case\fc@CaseIden + \newcommand*{\@ordinalMfrench}[2]{% \iffmtord@abbrv \edef#2{\number#1\relax\noexpand\fmtord{e}}% @@ -53,16 +202,17 @@ \iffmtord@abbrv \edef#2{\number#1\relax\noexpand\fmtord{e}}% \else - \ifnum#1=1\relax - \edef#2{\number#1\relax\noexpand\fmtord{ere}}% + \ifnum#1=1 % + \edef#2{\number#1\relax\noexpand\fmtord{i\`ere}}% \else - \edef#2{\number#1\relax\noexpand\fmtord{eme}}% + \edef#2{\number#1\relax\noexpand\fmtord{i\`eme}}% \fi \fi} \let\@ordinalNfrench\@ordinalMfrench \newcommand*{\@@unitstringfrench}[1]{% -\ifcase#1\relax -zero% +\noexpand\fc@case +\ifcase#1 % +z\'ero% \or un% \or deux% \or trois% @@ -73,947 +223,933 @@ zero% \or huit% \or neuf% \fi -} -\newcommand*{\@@unitstringFfrench}[1]{% -\ifnum#1=1\relax -une% -\else\@@unitstringfrench{#1}% -\fi +\noexpand\@nil } \newcommand*{\@@tenstringfrench}[1]{% -\ifcase#1\relax +\noexpand\fc@case +\ifcase#1 % \or dix% \or vingt% \or trente% \or quarante% \or cinquante% \or soixante% -\or septente% +\or septante% \or huitante% -\or nonente% +\or nonante% \or cent% \fi +\noexpand\@nil } \newcommand*{\@@teenstringfrench}[1]{% -\ifcase#1\relax -dix% +\noexpand\fc@case +\ifcase#1 % + dix% \or onze% \or douze% \or treize% \or quatorze% \or quinze% \or seize% -\or dix-sept% -\or dix-huit% -\or dix-neuf% +\or dix\noexpand\@nil-\noexpand\fc@case sept% +\or dix\noexpand\@nil-\noexpand\fc@case huit% +\or dix\noexpand\@nil-\noexpand\fc@case neuf% \fi +\noexpand\@nil } \newcommand*{\@@seventiesfrench}[1]{% \@tenstring{6}% -\ifnum#1=1\relax -\ \@andname\ +\ifnum#1=1 % +\fc@frenchoptions@submillion@dos\@andname\fc@frenchoptions@submillion@dos \else -% \fi \@teenstring{#1}% } -\newcommand*{\@@eightiesfrench}[1]{% -\@unitstring{4}-\@tenstring{2}% -\ifnum#1>0 --\@unitstring{#1}% +\newcommand*\@@eightiesfrench[1]{% +\fc@case quatre\@nil-\noexpand\fc@case vingt% +\ifnum#1>0 % + \ifnum\fc@frenchoptions@vingt@plural=0 % vingt plural=always + s% + \fi + \noexpand\@nil + -\@unitstring{#1}% \else -s% + \ifcase\fc@frenchoptions@vingt@plural\space + s% 0: always + \or + % 1: never + \or + s% 2: multiple + \or + % 3: multiple g-last + \ifnum\count0=\count6\ifnum\count9=0 s\fi\fi + \or + % 4: multiple l-last + \ifnum\count9=1 % + \else + s% + \fi + \or + % 5: multiple lng-last + \ifnum\count9=1 % + \else + \ifnum\count0>0 % + s% + \fi + \fi + \or + % or 6: multiple ng-last + \ifnum\count0>0 % + s% + \fi + \fi + \noexpand\@nil \fi } \newcommand*{\@@ninetiesfrench}[1]{% -\@unitstring{4}-\@tenstring{2}-\@teenstring{#1}% +\fc@case quatre\@nil-\noexpand\fc@case vingt% +\ifnum\fc@frenchoptions@vingt@plural=0 % vingt plural=always + s% +\fi +\noexpand\@nil +-\@teenstring{#1}% } \newcommand*{\@@seventiesfrenchswiss}[1]{% \@tenstring{7}% \ifnum#1=1\ \@andname\ \fi \ifnum#1>1-\fi -\ifnum#1>0\@unitstring{#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 +\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 +\ifnum#1>0 \@unitstring{#1}\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*\fc@french@common{% + \let\@unitstring=\@@unitstringfrench + \let\@teenstring=\@@teenstringfrench + \let\@tenstring=\@@tenstringfrench + \def\@hundred{cent}% + \def\@andname{et}% } \DeclareRobustCommand{\@numberstringMfrenchswiss}[2]{% -\let\@unitstring=\@@unitstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench +\let\fc@case\fc@CaseIden +\fc@french@common \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\@empty +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \DeclareRobustCommand{\@numberstringMfrenchfrance}[2]{% -\let\@unitstring=\@@unitstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench +\let\fc@case\fc@CaseIden +\fc@french@common \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\@empty +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \DeclareRobustCommand{\@numberstringMfrenchbelgian}[2]{% -\let\@unitstring=\@@unitstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench +\let\fc@case\fc@CaseIden +\fc@french@common \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\@empty +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \let\@numberstringMfrench=\@numberstringMfrenchfrance \DeclareRobustCommand{\@numberstringFfrenchswiss}[2]{% -\let\@unitstring=\@@unitstringFfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench +\let\fc@case\fc@CaseIden +\fc@french@common \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \DeclareRobustCommand{\@numberstringFfrenchfrance}[2]{% -\let\@unitstring=\@@unitstringFfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench +\let\fc@case\fc@CaseIden +\fc@french@common \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \DeclareRobustCommand{\@numberstringFfrenchbelgian}[2]{% -\let\@unitstring=\@@unitstringFfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench +\let\fc@case\fc@CaseIden +\fc@french@common \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \let\@numberstringFfrench=\@numberstringFfrenchfrance \let\@ordinalstringNfrench\@ordinalstringMfrench \DeclareRobustCommand{\@NumberstringMfrenchswiss}[2]{% -\let\@unitstring=\@@Unitstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench +\let\fc@case\fc@UpperCaseFirstLetter +\fc@french@common \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\@empty +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \DeclareRobustCommand{\@NumberstringMfrenchfrance}[2]{% -\let\@unitstring=\@@Unitstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench +\let\fc@case\fc@UpperCaseFirstLetter +\fc@french@common \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\@empty +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \DeclareRobustCommand{\@NumberstringMfrenchbelgian}[2]{% -\let\@unitstring=\@@Unitstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench +\let\fc@case\fc@UpperCaseFirstLetter +\fc@french@common \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\@empty +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \let\@NumberstringMfrench=\@NumberstringMfrenchfrance \DeclareRobustCommand{\@NumberstringFfrenchswiss}[2]{% -\let\@unitstring=\@@UnitstringFfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench +\let\fc@case\fc@UpperCaseFirstLetter +\fc@french@common \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \DeclareRobustCommand{\@NumberstringFfrenchfrance}[2]{% -\let\@unitstring=\@@UnitstringFfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench +\let\fc@case\fc@UpperCaseFirstLetter +\fc@french@common \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \DeclareRobustCommand{\@NumberstringFfrenchbelgian}[2]{% -\let\@unitstring=\@@UnitstringFfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench +\let\fc@case\fc@UpperCaseFirstLetter +\fc@french@common \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% +\let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble +\let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} \let\@NumberstringFfrench=\@NumberstringFfrenchfrance \let\@NumberstringNfrench\@NumberstringMfrench \DeclareRobustCommand{\@ordinalstringMfrenchswiss}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@CaseIden +\let\fc@first=\fc@@firstfrench +\fc@french@common \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}{#2}% -\fi} +} +\newcommand*\fc@@firstfrench{premier} +\newcommand*\fc@@firstFfrench{premi\`ere} \DeclareRobustCommand{\@ordinalstringMfrenchfrance}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@CaseIden +\let\fc@first=\fc@@firstfrench +\fc@french@common \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}{#2}% -\fi} +\@@ordinalstringfrench{#1}{#2}} \DeclareRobustCommand{\@ordinalstringMfrenchbelgian}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@CaseIden +\let\fc@first=\fc@@firstfrench +\fc@french@common \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}{#2}% -\fi} +} \let\@ordinalstringMfrench=\@ordinalstringMfrenchfrance \DeclareRobustCommand{\@ordinalstringFfrenchswiss}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@CaseIden +\let\fc@first=\fc@@firstFfrench +\fc@french@common \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}{#2}% -\fi} +} \DeclareRobustCommand{\@ordinalstringFfrenchfrance}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@CaseIden +\let\fc@first=\fc@@firstFfrench +\fc@french@common \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}{#2}% -\fi} +} \DeclareRobustCommand{\@ordinalstringFfrenchbelgian}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@CaseIden +\let\fc@first=\fc@@firstFfrench +\fc@french@common \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}{#2}% -\fi} +} \let\@ordinalstringFfrench=\@ordinalstringFfrenchfrance \let\@ordinalstringNfrench\@ordinalstringMfrench \DeclareRobustCommand{\@OrdinalstringMfrenchswiss}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@UpperCaseFirstLetter +\let\fc@first=\fc@@firstfrench +\fc@french@common \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}{#2}% -\fi} +} \DeclareRobustCommand{\@OrdinalstringMfrenchfrance}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@UpperCaseFirstLetter +\let\fc@first=\fc@@firstfrench +\fc@french@common \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}{#2}% -\fi} +} \DeclareRobustCommand{\@OrdinalstringMfrenchbelgian}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@UpperCaseFirstLetter +\let\fc@first=\fc@@firstfrench +\fc@french@common \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}{#2}% -\fi} +} \let\@OrdinalstringMfrench=\@OrdinalstringMfrenchfrance \DeclareRobustCommand{\@OrdinalstringFfrenchswiss}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@UpperCaseFirstLetter +\let\fc@first=\fc@@firstfrench +\fc@french@common \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}{#2}% -\fi} +} \DeclareRobustCommand{\@OrdinalstringFfrenchfrance}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@UpperCaseFirstLetter +\let\fc@first=\fc@@firstFfrench +\fc@french@common \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}{#2}% -\fi} +} \DeclareRobustCommand{\@OrdinalstringFfrenchbelgian}[2]{% -\ifnum#1=1\relax -\def#2{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\fc@case\fc@UpperCaseFirstLetter +\let\fc@first=\fc@@firstFfrench +\fc@french@common \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}{#2}% -\fi} +} \let\@OrdinalstringFfrench=\@OrdinalstringFfrenchfrance \let\@OrdinalstringNfrench\@OrdinalstringMfrench -\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 +\@ifundefined{fc@@do@plural@mark}{}{\PackageError{fmtcount}{Duplicate definition}{Redefinition of macro + `fc@@do@plural@mark'}} +\def\fc@@do@plural@mark#1{% + \ifcase\count10 % + #1% 0=always + \or% 1=never + \or% 2=multiple + \ifnum\count1>1 % + #1% + \fi + \or% 3= multiple g-last + \ifnum\count1>1 % + \ifnum\count0=\count6 % + #1% + \fi + \fi + \or% 4= multiple l-last + \ifnum\count1>1 % + \ifnum\count9=1 % + \else + #1% + \fi + \fi + \or% 5= multiple lng-last + \ifnum\count1>1 % + \ifnum\count9=1 % + \else + \if\count0>\count6 % + #1% + \fi + \fi + \fi + \or% 6= multiple ng-last + \ifnum\count1>1 % + \ifnum\count0>\count6 % + #1% + \fi + \fi + \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 +\@ifundefined{fc@@nbrstr@Fpreamble}{}{% + \PackageError{fmtcount}{Duplicate definition}{Redefinition of macro + `fc@@nbrstr@Fpreamble'}} +\def\fc@@nbrstr@Fpreamble{% + \fc@read@unit{\count1}{0}% + \ifnum\count1=1 % + \let\fc@case@save\fc@case + \def\fc@case{\noexpand\fc@case}% + \def\@nil{\noexpand\@nil}% + \let\fc@nbrstr@postamble\fc@@nbrstr@Fpostamble + \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 +\def\fc@@nbrstr@Fpostamble{% + \let\fc@case\fc@case@save + \expandafter\fc@get@last@word\expandafter{\@tempa}\@tempb\@tempc + \def\@tempd{un}% + \ifx\@tempc\@tempd + \let\@tempc\@tempa + \edef\@tempa{\@tempb\fc@case une\@nil}% + \fi } -\newcommand*{\@@numberstringfrench}[2]{% -\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 -\def#2{}% -\@strctr=#1\relax \divide\@strctr by 1000\relax -\ifnum\@strctr>9\relax - \@tmpstrctr=\@strctr - \divide\@strctr by 10\relax - \ifnum\@strctr>1\relax - \ifthenelse{\(\@strctr>6\)\and\(\@strctr<10\)}{% - \@modulo{\@tmpstrctr}{10}% - \ifnum\@strctr<8\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@seventies{\@tmpstrctr}}% - \else - \ifnum\@strctr<9\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@eighties{\@tmpstrctr}}% +\@ifundefined{fc@@pot@longscalefrench}{}{% + \PackageError{fmtcount}{Duplicate definition}{Redefinition of macro + `fc@@pot@longscalefrench'}} +\def\fc@@pot@longscalefrench#1#2#3{% + {% + \edef\@tempb{\number#1}% + \count1=\@tempb + \count2\count0 % + \divide\count2 by 6 % + \count3\count2 % + \multiply\count3 by 6 % + \count3-\count3 % + \advance\count3 by \count0 % + \ifnum\count0>0 % + \ifnum\count1>0 % + \edef\@temph{% + \ifnum\count2=0 % weight=3 + 1% + \else + \ifnum\count3>2 % + \ifnum\fc@longscale@nilliard@upto=0 % + 2% + \else + \ifnum\count2>\fc@longscale@nilliard@upto + 1% + \else + 2% + \fi + \fi + \else + 2% + \fi + \fi + }% + \ifnum\@temph=1 % + \count10=\fc@frenchoptions@mil@plural\space + \edef\@tempe{% + \noexpand\fc@case + mil% + \fc@@do@plural@mark\fc@frenchoptions@mil@plural@mark + \noexpand\@nil + }% \else - \ifnum\@strctr<10\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@nineties{\@tmpstrctr}}% + % weight >= 6 + \expandafter\fc@@latin@cardinal@pefix\expandafter{\the\count2}\@tempg + % now form the xxx-illion(s) or xxx-illiard(s) word + \ifnum\count3>2 % + \toks10{illiard}% + \count10=\csname fc@frenchoptions@n-illiard@plural\endcsname\space + \else + \toks10{illion}% + \count10=\csname fc@frenchoptions@n-illion@plural\endcsname\space \fi + \edef\@tempe{% + \noexpand\fc@case + \@tempg + \the\toks10 % + \fc@@do@plural@mark s% + \noexpand\@nil + }% \fi - \fi - }{% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@strctr}}% - \@strctr=#1\relax - \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@unitstring{\@strctr}}% - \fi - }% - \else - \@strctr=#1\relax - \divide\@strctr by 1000 - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@strctr}}% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@thousand}% -\else - \ifnum\@strctr>0\relax - \ifnum\@strctr>1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ }% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@thousand}% - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{1000}% -\divide\@strctr by 100 -\ifnum\@strctr>0\relax - \ifnum#1>1000\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ }% - \fi - \@tmpstrctr=#1\relax - \@modulo{\@tmpstrctr}{1000}\relax - \ifnum\@tmpstrctr=100\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{10}}% - \else - \ifnum\@strctr>1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ }% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@hundred}% - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{100}% -\ifnum#1>100\relax - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ }% - \else - \ifnum\@tmpstrctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr s}% - \fi% - \fi -\fi -\ifnum\@strctr>19\relax - \@tmpstrctr=\@strctr - \divide\@strctr by 10\relax - \ifthenelse{\@strctr>6}{% - \@modulo{\@tmpstrctr}{10}% - \ifnum\@strctr<8\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@seventies{\@tmpstrctr}}% - \else - \ifnum\@strctr<9\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@eighties{\@tmpstrctr}}% \else - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@nineties{\@tmpstrctr}}% + \let\@tempe\@empty + \def\@temph{0}% \fi + \else + \let\@tempe\@empty + \def\@temph{0}% \fi - }{% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{10}% - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \ifnum\@strctr=1\relax - \edef#2{\@@fc@numstr\ \@andname\ }% + \expandafter\toks\expandafter1\expandafter{\@tempe}% + \toks0{#2}% + \edef\@tempa{\the\toks0 \@temph \def\noexpand#3{\the\toks1}}% + \expandafter + }\@tempa +} +\@ifundefined{fc@@pot@shortscalefrench}{}{% + \PackageError{fmtcount}{Duplicate definition}{Redefinition of macro + `fc@@pot@shortscalefrench'}} +\def\fc@@pot@shortscalefrench#1#2#3{% + {% + \edef\@tempb{\number#1}% + \count1=\@tempb + \count2\count0 % + \divide\count2 by 3 % + \advance\count2 by -1 % + \ifnum\count0>0 % If weight>=3, i.e we do have to append thousand or n-illion(s)/n-illiard(s) + \ifnum\count1>0 % we have at least one thousand/n-illion/n-illiard + \ifnum\count2=0 % + \def\@temph{1}% + \count1=\fc@frenchoptions@mil@plural\space + \edef\@tempe{% + mil% + \fc@@do@plural@mark\fc@frenchoptions@mil@plural@mark + }% + \else + \def\@temph{2}% + % weight >= 6 + \expandafter\fc@@latin@cardinal@pefix\expandafter{\the\count2}\@tempg + \count10=\csname fc@frenchoptions@n-illion@plural\endcsname\space + \edef\@tempe{% + \noexpand\fc@case + \@tempg + illion% + \fc@@do@plural@mark s% + \noexpand\@nil + }% + \fi \else - \edef#2{\@@fc@numstr-}% + \def\@temph{0}% + \let\@tempe\@empty \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% + \else + \def\@temph{0}% + \let\@tempe\@empty \fi - }% -\else - \ifnum\@strctr<10\relax - \ifnum\@strctr=0\relax - \ifnum#1<100\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% + \expandafter\toks\expandafter1\expandafter{\@tempe}% + \toks0{#2}% + \edef\@tempa{\the\toks0 \@temph \def\noexpand#3{\the\toks1}}% + \expandafter + }\@tempa +} +\@ifundefined{fc@@pot@recursivefrench}{}{% + \PackageError{fmtcount}{Duplicate definition}{Redefinition of macro + `fc@@pot@recursivefrench'}} +\def\fc@@pot@recursivefrench#1#2#3{% + {% + \edef\@tempb{\number#1}% + \let\@tempa\@@tempa + \count1=\@tempb\space + \ifnum\count1>0 % + \count2\count0 % + \divide\count2 by 9 % + \advance\count2 by -1 % + \let\@tempe\@empty + \edef\@tempf{\fc@frenchoptions@supermillion@dos + de\fc@frenchoptions@supermillion@dos\fc@case milliards\@nil}% + \count11\count0 % + \ifnum\count2>0 % + \count3\count2 % + \count3-\count3 % + \multiply\count3 by 9 % + \advance\count11 by \count3 % + \loop + % (\count2, \count3) <- (\count2 div 2, \count2 mod 2) + \count3\count2 % + \divide\count3 by 2 % + \multiply\count3 by 2 % + \count3-\count3 % + \advance\count3 by \count2 % + \divide\count2 by 2 % + \ifnum\count3=1 % + \let\@tempg\@tempe + \edef\@tempe{\@tempg\@tempf}% + \fi + \let\@tempg\@tempf + \edef\@tempf{\@tempg\@tempg}% + \ifnum\count2>0 % + \repeat + \fi + \divide\count11 by 3 % + \ifcase\count11 % 0 .. 5 + % 0 => d milliard(s) (de milliards)* + \def\@temph{2}% + \count10=\csname fc@frenchoptions@n-illiard@plural\endcsname\space + \or % 1 => d mille milliard(s) (de milliards)* + \def\@temph{1}% + \count10=\fc@frenchoptions@mil@plural\space + \or % 2 => d million(s) (de milliards)* + \def\@temph{2}% + \count10=\csname fc@frenchoptions@n-illion@plural\endcsname\space + \or % 3 => d milliard(s) (de milliards)* + \def\@temph{2}% + \count10=\csname fc@frenchoptions@n-illiard@plural\endcsname\space + \or % 4 => d mille milliards (de milliards)* + \def\@temph{1}% + \count10=\fc@frenchoptions@mil@plural\space + \else % 5 => d million(s) (de milliards)* + \def\@temph{2}% + \count10=\csname fc@frenchoptions@n-illion@plural\endcsname\space \fi - \else%(>0,<10) - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% + \let\@tempg\@tempe + \edef\@tempf{% + \ifcase\count11 % 0 .. 5 + \or + mil\fc@@do@plural@mark \fc@frenchoptions@mil@plural@mark + \or + million\fc@@do@plural@mark s% + \or + milliard\fc@@do@plural@mark s% + \or + mil\fc@@do@plural@mark\fc@frenchoptions@mil@plural@mark + \noexpand\@nil\fc@frenchoptions@supermillion@dos + \noexpand\fc@case milliards% 4 + \or + million\fc@@do@plural@mark s% + \noexpand\@nil\fc@frenchoptions@supermillion@dos + de\fc@frenchoptions@supermillion@dos\noexpand\fc@case milliards% 5 + \fi + }% + \edef\@tempe{% + \ifx\@tempf\@empty\else + \expandafter\fc@case\@tempf\@nil + \fi + \@tempg + }% + \else + \def\@temph{0}% + \let\@tempe\@empty \fi - \else%>10 - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@strctr}}% - \fi -\fi + \expandafter\toks\expandafter1\expandafter{\@tempe}% + \toks0{#2}% + \edef\@tempa{\the\toks0 \@temph \def\noexpand#3{\the\toks1}}% + \expandafter + }\@tempa } -\newcommand*{\@@ordinalstringfrench}[2]{% -\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 -\def#2{}% -\@strctr=#1\relax \divide\@strctr by 1000\relax -\ifnum\@strctr>9 - \@tmpstrctr=\@strctr - \divide\@strctr by 10\relax - \ifnum\@strctr>1\relax - \ifthenelse{\@strctr>6}{% - \@modulo{\@tmpstrctr}{10}% - \ifnum\@strctr=7\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@seventies{\@tmpstrctr}}% +\@ifundefined{fc@muladdfrench}{}{% + \PackageError{fmtcount}{Duplicate definition}{Redefinition of macro + `fc@muladdfrench'}} +\def\fc@muladdfrench#1#2#3{% + {% + \edef\@@tempc{#1}% + \edef\@@tempd{#2}% + \edef\@tempf{#3}% + \let\@tempc\@@tempc + \let\@tempd\@@tempd + \ifnum\@tempc=1 % + \ifnum\count9=1 % + \let\@tempd\@empty + \fi + \fi + \edef\@tempg{% + \@tempd + \ifx\@tempd\@empty\else + \ifx\@tempf\@empty\else + \ifcase\count9 % + \or + \fc@frenchoptions@submillion@dos + \or + \fc@frenchoptions@supermillion@dos + \fi + \fi + \fi + \@tempf + }% + \edef\@temph{% + \@tempa + \ifx\@tempa\@empty\else + \ifx\@tempg\@empty\else + \ifcase\count8 % + \or + \fc@frenchoptions@submillion@dos + \or + \fc@frenchoptions@supermillion@dos + \fi + \fi + \fi + \@tempg + }% + \def\@tempb##1{\def\@tempa{\def\@tempa{##1}}}% + \expandafter\@tempb\expandafter{\@temph}% + \expandafter + }\@tempa +}% +\@ifundefined{fc@lthundredstringfrench}{}{% + \PackageError{fmtcount}{Duplicate definition}{Redefinition of macro + `fc@lthundredstringfrench'}} +\def\fc@lthundredstringfrench#1{% + {% + \let\@tempc#1% + \fc@read@unit{\count1}{\count0}% + \count3\count0 % + \advance\count3 1 % + \fc@read@unit{\count2}{\count3}% + \edef\@tempa{% + \@tempc + \ifnum\count2>1 % + % 20 .. 99 + \ifnum\count2>6 % + % 70 .. 99 + \ifnum\count2<8 % + % 70 .. 79 + \@seventies{\count1}% + \else + % 80..99 + \ifnum\count2<9 % + % 80 .. 89 + \@eighties{\count1}% + \else + % 90 .. 99 + \@nineties{\count1}% + \fi + \fi + \else + % 20..69 + \@tenstring{\count2}% + \ifnum\count1>0 % + % x1 .. x0 + \ifnum\count1=1 % + % x1 + \fc@frenchoptions@submillion@dos\@andname\fc@frenchoptions@submillion@dos + \else + % x2 .. x9 + -% + \fi + \@unitstring{\count1}% + \fi + \fi \else - \ifnum\@strctr=8\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@eighties{\@tmpstrctr}}% + % 0 .. 19 + \ifnum\count2=0 % when tens = 0 + % 0 .. 9 + \ifnum\count1=0 % when units = 0 + % \count3=1 when #1 = 0, i.e. only for the unit of the top level number + \ifnum\count3=1 % + \ifnum\fc@max@weight=0 % + \@unitstring{0}% + \fi + \fi + \else + % 1 .. 9 + \@unitstring{\count1}% + \fi \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@nineties{\@tmpstrctr}}% + % 10 .. 19 + \@teenstring{\count1}% \fi \fi - }{% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenstring{\@strctr}}% - \@strctr=#1\relax - \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \ifnum\@strctr=1\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@andname}% - \fi - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@unitstring{\@strctr}}% + }% + \def\@tempb##1{\def\@tempa{\def#1{##1}}}% + \expandafter\@tempb\expandafter{\@tempa}% + \expandafter + }\@tempa +} +\@ifundefined{fc@ltthousandstringfrench}{}{% + \PackageError{fmtcount}{Duplicate definition}{Redefinition of macro + `fc@ltthousandstringfrench'}} +\def\fc@ltthousandstringfrench#1{% + {% + \count4\count0 % + \advance\count4 by 2 % + \fc@read@unit{\count2 }{\count4 }% + \advance\count4 by -1 % + \count3\count4 % + \advance\count3 by -1 % + \fc@check@nonzeros{\count3 }{\count4 }\@tempa + \edef\@temps{% + \ifcase\fc@frenchoptions@cent@plural\space + % 0 => always + s% + \or + % 1 => never + \or + % 2 => multiple + \ifnum\count2>1s\fi + \or + % 3 => multiple g-last + \ifnum\count2>1 \ifnum\@tempa=0 \ifnum\count0=\count6s\fi\fi\fi + \or + % 4 => multiple l-last + \ifnum\count2>1 \ifnum\@tempa=0 \ifnum\count9=0s\else\ifnum\count9=2s\fi\fi\fi\fi \fi }% - \else - \@strctr=#1\relax - \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@teenstring{\@strctr}}% - \fi - \@strctr=#1\relax \@modulo{\@strctr}{1000}% - \ifnum\@strctr=0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@thousandth}% - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@thousand}% - \fi -\else - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{1000}% - \ifnum\@strctr=0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@thousandth}% - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@thousand}% + % compute spacing after cent(s?) into \@tempb + \expandafter\let\expandafter\@tempb + \ifnum\@tempa>0 \fc@frenchoptions@submillion@dos\else\@empty\fi + % now place into \@tempa the hundreds + \edef\@tempa{% + \ifnum\count2=0 % + \else + \ifnum\count2=1 % + \expandafter\fc@case\@hundred\@nil + \else + \@unitstring{\count2}\fc@frenchoptions@submillion@dos + \noexpand\fc@case\@hundred\@temps\noexpand\@nil + \fi + \@tempb + \fi + }% + % now append to \@tempa the ten and unit + \fc@lthundredstringfrench\@tempa + \def\@tempb##1{\def\@tempa{\def#1{##1}}}% + \expandafter\@tempb\expandafter{\@tempa}% + \expandafter + }\@tempa +} +\@ifundefined{@@numberstringfrench}{}{% + \PackageError{fmtcount}{Duplicate definition}{Redefinition of macro `@@numberstringfrench'}} +\def\@@numberstringfrench#1#2{% + {% + \edef\@tempa{#1}% + \expandafter\fc@number@parser\expandafter{\@tempa}% + \ifnum\fc@min@weight<0 % + \PackageError{fmtcount}{Out of range}% + {This macro does not work with fractional numbers}% \fi - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{1000}% -\divide\@strctr by 100\relax -\ifnum\@strctr>0\relax - \ifnum#1>1000\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ }% - \fi - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{100}% - \let\@@fc@ordstr#2\relax - \ifnum\@strctr=0\relax - \edef#2{\@@fc@ordstr\ \@hundredth}% - \else - \edef#2{\@@fc@ordstr\ \@hundred}% - \fi -\fi -\@tmpstrctr=\@strctr -\@strctr=#1\relax \@modulo{\@strctr}{100}% -\ifnum#1>100\relax - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@andname\ }% - \fi -\fi -\ifnum\@strctr>19\relax - \@tmpstrctr=\@strctr - \divide\@strctr by 10\relax - \@modulo{\@tmpstrctr}{10}% - \ifthenelse{\@strctr>6}{% - \ifnum\@strctr=7\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@seventieths{\@tmpstrctr}}% - \else - \ifnum\@strctr=8\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@eightieths{\@tmpstrctr}}% + \edef\@tempa{\ifcase\fc@sign@case\space\or\fc@case plus\@nil\or\fc@case moins\@nil\fi}% + \fc@nbrstr@preamble + \fc@@nbrstrfrench@inner + \fc@nbrstr@postamble + \def\@tempb##1{\def\@tempa{\def#2{##1}}}% + \expandafter\@tempb\expandafter{\@tempa}% + \expandafter + }\@tempa +} +\def\fc@@nbrstrfrench@inner{% + \count0=\fc@max@weight + \divide\count0 by 3 % + \multiply\count0 by 3 % + \fc@intpart@find@last{\count5 }% + \count6\count5 % + \divide\count6 3 % + \multiply\count6 3 % + \count8=0 % + \loop + \count1\count0 % + \advance\count1 by 2 % + \fc@check@nonzeros{\count0 }{\count1 }\@tempt + \fc@poweroften\@tempt{\count9 }\@tempb + \fc@ltthousandstringfrench\@tempd + \fc@muladdfrench\@tempt\@tempd\@tempb + \count8\count9 % + \advance\count0 by -3 % + \ifnum\count6>\count0 \else + \repeat +} +\@ifundefined{@@ordinalstringfrench}{}{% + \PackageError{fmtcount}{Duplicate definition}{Redefinition of macro + `@@ordinalstringfrench'}} +\def\@@ordinalstringfrench#1#2{% + {% + \edef\@tempa{#1}% + \expandafter\fc@number@parser\expandafter{\@tempa}% + \ifnum\fc@min@weight<0 % + \PackageError{fmtcount}{Out of range}% + {This macro does not work with fractional numbers}% + \fi + \ifnum\fc@sign@case>0 % + \PackageError{fmtcount}{Out of range}% + {This macro does with negative or explicitly marked as positive numbers}% + \fi + \ifnum\fc@max@weight=0 % + \ifnum\csname fc@digit@0\endcsname=1 % + \count0=1 % \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@ninetieths{\@tmpstrctr}}% + \count0=0 % \fi - \fi - }{% - \ifnum\@tmpstrctr=0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenthstring{\@strctr}}% \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenstring{\@strctr}}% + \count0=0 % \fi - \@strctr=#1\relax \@modulo{\@strctr}{10}% - \ifnum\@strctr=1\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@andname}% - \fi - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@unitthstring{\@strctr}}% - \fi - }% -\else - \ifnum\@strctr<10\relax - \ifnum\@strctr=0\relax - \ifnum#1<100\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}% - \fi + \ifnum\count0=1 % + \edef\@tempa{\expandafter\fc@case\fc@first\@nil}% \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}% + \def\@tempa##1{% + \expandafter\edef\csname fc@frenchoptions@##1@plural\endcsname{% + \ifcase\csname fc@frenchoptions@##1@plural\endcsname\space + 0% 0: always => always + \or + 1% 1: never => never + \or + 6% 2: multiple => multiple ng-last + \or + 1% 3: multiple g-last => never + \or + 5% 4: multiple l-last => multiple lng-last + \or + 5% 5: multiple lng-last => multiple lng-last + \or + 6% 6: multiple ng-last => multiple ng-last + \fi + }% + }% + \@tempa{vingt}% + \@tempa{cent}% + \@tempa{mil}% + \@tempa{n-illion}% + \@tempa{n-illiard}% + \let\fc@case@save\fc@case + \def\fc@case{\noexpand\fc@case}% + \def\@nil{\noexpand\@nil}% + \let\@tempa\@empty + \fc@@nbrstrfrench@inner + \let\fc@case\fc@case@save + \expandafter\fc@get@last@word\expandafter{\@tempa}\@tempb\@tempc + \expandafter\fc@get@last@letter\expandafter{\@tempc}\@tempd\@tempe + \def\@tempf{e}% + \ifx\@tempe\@tempf + \edef\@tempa{\@tempb\expandafter\fc@case\@tempd i\`eme\@nil}% + \else + \def\@tempf{q}% + \ifx\@tempe\@tempf + \edef\@tempa{\@tempb\expandafter\fc@case\@tempd qui\`eme\@nil}% + \else + \def\@tempf{f}% + \ifx\@tempe\@tempf + \edef\@tempa{\@tempb\expandafter\fc@case\@tempd vi\`eme\@nil}% + \else + \edef\@tempa{\@tempb\expandafter\fc@case\@tempc i\`eme\@nil}% + \fi + \fi + \fi \fi - \else - \@modulo{\@strctr}{10}% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@teenthstring{\@strctr}}% - \fi -\fi + \def\@tempb##1{\def\@tempa{\def#2{##1}}}% + \expandafter\@tempb\expandafter{\@tempa}% + \expandafter + }\@tempa +} +\newcommand*\fc@frenchoptions@setdefaults{% + \csname KV@fcfrench@all plural\endcsname{reformed}% + \def\fc@frenchoptions@submillion@dos{-}% + \let\fc@frenchoptions@supermillion@dos\space + \let\fc@u@in@duo\@empty% Could be `u' + % \let\fc@poweroften\fc@@pot@longscalefrench + \let\fc@poweroften\fc@@pot@recursivefrench + \def\fc@longscale@nilliard@upto{0}% infinity + \def\fc@frenchoptions@mil@plural@mark{le}% } +\fc@frenchoptions@setdefaults +\iffalse Local variables: \fi +\iffalse mode: docTeX \fi +\iffalse End: \fi%\iffalse \endinput %% %% End of file `fc-french.def'. |