blob: 6d1fbd50686e74ab9a1c9cb937b62a78bbd4b6a6 [file] [log] [blame]
// ***************************************************************************
// *
// * Copyright (C) 2004, International Business Machines
// * Corporation and others. All Rights Reserved.
// *
// ***************************************************************************
//
fr {
//------------------------------------------------------------
// Rule Based Number Format Support
//------------------------------------------------------------
// * Spellout rules for French. French adds some interesting quirks of its
// * own: 1) The word "et" is interposed between the tens and ones digits,
// * but only if the ones digit if 1: 20 is "vingt," and 2 is "vingt-deux,"
// * but 21 is "vingt-et-un." 2) There are no words for 70, 80, or 90.
// * "quatre-vingts" ("four twenties") is used for 80, and values proceed
// * by score from 60 to 99 (e.g., 73 is "soixante-treize" ["sixty-thirteen"]).
// * Numbers from 1,100 to 1,199 are rendered as hundreds rather than
// * thousands: 1,100 is "onze cents" ("eleven hundred"), rather than
// * "mille cent" ("one thousand one hundred")
SpelloutRules {
// the main rule set
"%main:\n"
"-x: moins >>;\n"
"x.x: << virgule >>;\n"
// words for numbers from 0 to 10
"z\u00e9ro; un; deux; trois; quatre; cinq; six; sept; huit; neuf;\n"
"dix; onze; douze; treize; quatorze; quinze; seize;\n"
" dix-sept; dix-huit; dix-neuf;\n"
// ords for the multiples of 10: %%alt-ones inserts "et"
// when needed
"20: vingt[->%%alt-ones>];\n"
"30: trente[->%%alt-ones>];\n"
"40: quarante[->%%alt-ones>];\n"
"50: cinquante[->%%alt-ones>];\n"
// rule for 60. The /20 causes this rule's multiplier to be
// 20 rather than 10, allowinhg us to recurse for all values
// from 60 to 79...
"60/20: soixante[->%%alt-ones>];\n"
// ...except for 71, which must be special-cased
"71: soixante et onze;\n"
// at 72, we have to repeat the rule for 60 to get us to 79
"72/20: soixante->%%alt-ones>;\n"
// at 80, we state a new rule with the phrase for 80. Since
// it changes form when there's a ones digit, we need a second
// rule at 81. This rule also includes "/20," allowing it to
// be used correctly for all values up to 99
"80: quatre-vingts; 81/20: quatre-vingt->>;\n"
// "cent" becomes plural when preceded by a multiplier, and
// the multiplier is omitted from the singular form
"100: cent[ >>];\n"
"200: << cents[ >>];\n"
"1000: mille[ >>];\n"
// values from 1,100 to 1,199 are rendered as "onze cents..."
// instead of "mille cent..." The > after "1000" decreases
// the rule's exponent, causing its multiplier to be 100 instead
// of 1,000. This prevents us from getting "onze cents cent
// vingt-deux" ("eleven hundred one hundred twenty-two").
"1100>: onze cents[ >>];\n"
// at 1,200, we go back to formating in thousands, so we
// repeat the rule for 1,000
"1200: mille >>;\n"
// at 2,000, the multiplier is added
"2000: << mille[ >>];\n"
"1,000,000: << million[ >>];\n"
"1,000,000,000: << milliard[ >>];\n"
"1,000,000,000,000: << billion[ >>];\n"
"1,000,000,000,000,000: =#,##0=;\n"
// %%alt-ones is used to insert "et" when the ones digit is 1
"%%alt-ones:\n"
"; et-un; =%main=;\n"
"%%lenient-parse:\n"
"&\u0000 << ' ' << ',' << '-';\n"
}
}