(function (moduleFactory) {
if(typeof exports === "object") {
module.exports = moduleFactory(
require("../wolsey")
);
} else if (typeof define === "function" && define.amd) {
define(["wolsey"], moduleFactory);
}
}(function (Wolsey) {
/**
* @module lang/fr
* @description French numbers
*
* require("wolsey/lang/fr");
* var cardinal = new Wolsey("fr", Wolsey.FR());
*
* Adds {@link module:lang/fr.FR} method to {@link module:wolsey}
*
*/
/**
* @method FR
* @static
* @param {object} [options]
* @param {object} [options.powers=powers] Powers to use as units
* @param {function} [options.lowest=lowest] Method to handle non-power units
* @param {object} [options.numerals=numerals] Lookup map of numerals
* @param {function} [options.ordinal=ordinal] Ordinal method
* @param {function} [options.ordinalAsNumber=ordinalAsNumber] Ordinal as number method
* @param {string} [options.conjoin=] String to conjoin word parts together
* @param {string} [options.separator=] String to separate unit phrases
* @param {string} [options.oneconjoin=et] Value to use when final part of remnant is one
* @param {string} [options.hyphenatecompound=true] Whether to hyphenate unit phrases
* @description Generic French lang number generator
*
* Calls {@link module:wolsey.LANG}
* @return {object} LANG instance
*/
function FR (options) {
options = options || {};
options.conjoin = options.conjoin || "";
options.oneconjoin = options.oneconjoin || "et";
options.space = options.space || "-";
if (options.hyphenatecompound === undefined) {
options.hyphenatecompound = true;
}
if (options.separator === undefined) {
options.separator = "";
}
if (!options.powers) {
options.powers = {
2: { unit: "cent", skiponeunit: true },
3: { unit: "mille", skiponeunit: true, invariable: true },
6: "million",
9: "milliard",
12: "billion",
15: "billiard",
18: "trillion"
};
}
if (options.pluralizeunitexact === undefined) {
options.pluralizeunitexact = true;
}
if (!options.numerals) {
options.numerals = {
"0": "zéro",
"1": "un",
"2": "deux",
"3": "trois",
"4": "quatre",
"5": "cinq",
"6": "six",
"7": "sept",
"8": "huit",
"9": "neuf",
"10": "dix",
"11": "onze",
"12": "douze",
"13": "treize",
"14": "quatorze",
"15": "quinze",
"16": "seize",
"17": "dix-sept",
"18": "dix-huit",
"19": "dix-neuf",
"20": "vingt",
"30": "trente",
"40": "quarante",
"50": "cinquante",
"60": "soixante",
"80": "quatre-vingts",
"81": "quatre-vingt-un",
"80-": "quatre-vingt"
};
}
if (!options.lowest) {
options.lowest = function lowestFR (num, numerals, numeral) {
function addDigits (num) {
if (!num) {
return "";
}
if (num === 1 || num === 11) {
return options.space + options.oneconjoin + options.space + numerals[num];
} else {
return "-" + numerals[num];
}
}
var converted;
if (!num) {
converted = "";
} else if (numerals[num]) {
converted = numerals[num];
} else {
if (num === 71) {
converted = numerals[60] + addDigits(11);
} else if (num > 80) {
converted = numerals["80-"] + addDigits(num % 80 % 20);
} else if (num > 60) {
converted = numerals[60] + addDigits(num % 60 % 20);
} else {
converted = numerals[Math.floor(num/10) * 10] + addDigits(num % 10);
}
}
return converted;
};
}
if (!options.ordinal) {
options.ordinal = function (num, options) {
options = options || {};
var numString = this.numeral(num);
if (num === 1) {
return options.gender === "f" ? "première" : "premier";
}
numString = numString.replace(/neuf$/, "neuv")
.replace(/s$/, "")
.replace(/troi$/, "trois")
.replace(/e$/, "")
.replace(/^un[ -]/, "");
numString += "ième";
return numString;
};
}
if (!options.ordinalAsNumber) {
options.ordinalAsNumber = function (num, options) {
options = options || {};
var ordString = "";
if (num === 1) {
ordString = options.gender === "f" ? "1re" : "1er";
} else {
ordString = "e";
}
if (options.plural) {
ordString += "s";
}
return Wolsey.util.superscriptOridnal(num + ordString, options);
};
}
return Wolsey.LANG(options);
}
Wolsey.FR = FR;
return Wolsey;
}));