Source lang/es.js

(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/es
 * @description  Spanish numbers
 *  
 *      require("wolsey/lang/es");
 *      var cardinal = new Wolsey("es", Wolsey.ES());
 *
 * Adds {@link module:lang/es.ES} method to {@link module:wolsey}
 * 
 */

    /**
     * @method ES
     * @static
     * @param  {object} [options]
     * @param {object} [options.powers=powers] Powers to use as units
     * @param {boolean} [options.milliardstyle=false] Whether to use milliard-style units
     * @param {function} [options.lowest=lowest] Method to handle non-power units 
     * @param {object} [options.numerals=numerals] Lookup map of numerals
     * @param {object} [options.ordinals=ordinals] Lookup map of ordinals
     * @param {function} [options.ordinal=ordinal] Ordinal method 
     * @param {function} [options.ordinalAsNumber=ordinalAsNumber] Ordinal as number method
     * @param {string} [options.unitone=un] Value to use when unit quotient is one  
     * @param {string} [options.space=] Character to use for generic spaces between number words  
     * @param {string} [options.conjoin=] String to conjoin word parts together 
     * @param {string} [options.separator=] String to separate unit phrases
     * @description  Generic Spanish lang number generator
     *
     * Calls {@link module:wolsey.LANG}
     * @return {object} LANG instance
     */
    function ES (options) {

        options = options || {};
        options.pluralize = true;
        options.conjoin = options.conjoin || "";
        options.unitone = options.unitone || "un";
        options.space = options.space || " ";
        if (options.hyphenatecompound === undefined) {
            // /options.hyphenatecompound = true;
        }
        if (options.separator === undefined) {
            options.separator = "";
        }
        if (!options.powers) {
            options.powers = {
                2: { power: 2, unit: "ciento", skiponeunit: true },
                3: { power: 3, unit: "mil", ordinal: "milésimo", skiponeunit: true, invariable: true },
                6: { power: 6, unit: "millón", ordinal: "millonésimo", plural: "millones" },
                12: { power: 12, unit: "billón", ordinal: "billonésimo", plural: "billones" },
                18: { power: 18, unit: "trillón", ordinal: "trillonésimo", plural: "trillones" }
            };
            if (options.milliardstyle) {
                options.powers["9"] = { unit: "millardo", plural: "millardos" };
                options.powers["15"] = { unit: "billardo", plural: "billardos" };
            }
        }
        if (!options.numerals) {
            options.numerals = {
                "0": "cero",
                "1": "uno",
                "2": "dos",
                "3": "tres",
                "4": "cuatro",
                "5": "cinco",
                "6": "seis",
                "7": "siete",
                "8": "ocho",
                "9": "nueve",
                "10": "diez",
                "11": "once",
                "12": "doce",
                "13": "trece",
                "14": "catorce",
                "15": "quince",
                "16": "dieciséis",
                "17": "diecisiete",
                "18": "dieciocho",
                "19": "diecinueve",
                "20": "veinte",
                "21": "veintiuno",
                "22": "veintidós",
                "23": "veintitrés",
                "24": "veinticuatro",
                "25": "veinticinco",
                "26": "veintiséis",
                "27": "veintisiete",
                "28": "veintiocho",
                "29": "veintinueve",
                "30": "treinta",
                "40": "cuarenta",
                "50": "cincuenta",
                "60": "sesenta",
                "70": "setenta",
                "80": "ochenta",
                "90": "noventa",
                "100": "ciento",
                "100=": "cien",
                "200": "doscientos",
                "300": "trescientos",
                "400": "cuatrocientos",
                "500": "quinientos",
                "600": "seiscientos",
                "700": "setecientos",
                "800": "ochocientos",
                "900": "novecientos"
            };
        }
        if (!options.ordinals) {
            options.ordinals = {
                "0": "cero",
                "1": "primero",
                "2": "segundo",
                "3": "tercero",
                "4": "cuarto",
                "5": "quinto",
                "6": "sexto",
                "7": "séptimo",
                "8": "octavo",
                "9": "noveno",
                "10": "décimo",
                "11": "undécimo",
                "12": "duodécimo",
                "13": "decimotercero",
                "14": "decimocuarto",
                "15": "decimoquinto",
                "16": "decimosexto",
                "17": "decimoséptimo",
                "18": "decimoctavo",
                "19": "decimonoveno",
                "20": "vigésimo",
                "30": "trigésimo",
                "40": "cuadragésimo",
                "50": "quincuagésimo",
                "60": "sexagésimo",
                "70": "septuagésimo",
                "80": "octogésimo",
                "90": "nonagésimo",
                "100": "centésimo",
                "200": "ducentésimo",
                "300": "tricentésimo",
                "400": "cuadringentésimo",
                "500": "quingentésimo",
                "600": "sexcentésimo",
                "700": "septingentésimo",
                "800": "octingentésimo",
                "900": "noningentésimo",
                "1000": "milésimo",
                "1000000": "millonésimo"
            };
        }
        if (!options.lowest) {
            options.lowest = function lowestES (num, numerals, numeral) {
                var converted;
                if (!num) {
                    converted = "";
                } else if (numerals[num]) {
                    converted = numerals[num];
                } else {
                    converted = numerals[Math.floor(num/10) * 10] + " y " + numerals[num % 10];
                }
                return converted;
            };
        }
        if (!options.ordinal) {
            options.ordinal = function (num, ooptions) {
                ooptions = ooptions || {};
                ooptions.lookup = options.ordinals;
                ooptions.unitkind = "ordinal";
                ooptions.invariable = true;
                var ordString = this.numeral(num, ooptions);
                ordString = ordString.replace(/ y /g, " ");
                ordString = ordString.replace(/^un /, "");
                if (ooptions.plural) {
                    ordString = ordString.replace(/(er|und|art|int|xt|im|av|en)o/g, "$1os");
                }
                if (ooptions.gender === "f") {
                    ordString = ordString.replace(/(er|und|art|int|xt|im|av|en)o/g, "$1a");
                }
                // primer, tercer
                ordString = ordString.replace(/ero\b/g, "er");
                return ordString;
            };
        }
        if (!options.ordinalAsNumber) {
            options.ordinalAsNumber = function (num, options) {
                options = options || {};
                var superscript = "a"; //"ª";
                if (options.gender !== "f") {
                    superscript = "o"; //"º";
                    var rem = num % 10;
                    if (rem === 1 || rem === 3) {
                        superscript = "er";
                    }
                }
                return Wolsey.util.superscriptOridnal(num + "." + superscript, options);
            };
        }
        return Wolsey.LANG(options);
    }

    Wolsey.ES = ES;
    return Wolsey;

}));