UNPKG

rosaenlg-n2words

Version:

Convert numbers to words, in multiple languages

118 lines (109 loc) 3.06 kB
// Copyright Wael TELLAT // SPDX-License-Identifier: MIT import N2WordsBase from '../classes/N2WordsBase.mjs'; export default function (options) { N2WordsBase.call(this); this.negative_word = 'min'; this.separator_word = 'komma'; this.ZERO = 'nul'; const defaultOptions = { includeOptionalAnd: false, noHundredPairs: false, }; const localOptions = Object.assign({}, defaultOptions, options); this.cards = [ { '1000000000000000000000000000': 'quadriljard' }, { '1000000000000000000000000': 'quadriljoen' }, { '1000000000000000000000': 'triljard' }, { 1000000000000000000: 'triljoen' }, { 1000000000000000: 'biljard' }, { 1000000000000: 'biljoen' }, { 1000000000: 'miljard' }, { 1000000: 'miljoen' }, { 1000: 'duizend' }, { 100: 'honderd' }, { 90: 'negentig' }, { 80: 'tachtig' }, { 70: 'zeventig' }, { 60: 'zestig' }, { 50: 'vijftig' }, { 40: 'veertig' }, { 30: 'dertig' }, { 20: 'twintig' }, { 19: 'negentien' }, { 18: 'achtien' }, { 17: 'zeventien' }, { 16: 'zestien' }, { 15: 'vijftien' }, { 14: 'veertien' }, { 13: 'dertien' }, { 12: 'twaalf' }, { 11: 'elf' }, { 10: 'tien' }, { 9: 'negen' }, { 8: 'acht' }, { 7: 'zeven' }, { 6: 'zes' }, { 5: 'vijf' }, { 4: 'vier' }, { 3: 'drie' }, { 2: 'twee' }, { 1: 'een' }, { 0: 'nul' }, ]; this.merge = (curr, next) => { let ctext = Object.keys(curr)[0]; const cnum = parseInt(Object.values(curr)[0]); let ntext = Object.keys(next)[0]; const nnum = parseInt(Object.values(next)[0]); if (cnum == 1) { if (nnum < 1000000) { return { [ntext]: nnum }; } ctext = 'een'; } let val = 0; if (nnum > cnum) { if (nnum >= 1000000) { ctext += ' '; } else if (nnum > 100) { ntext += ' '; } val = cnum * nnum; } else { if (nnum < 10 && cnum > 10 && cnum < 100) { const temp = ntext; ntext = ctext; const andtxt = temp.endsWith('e') ? 'ën' : 'en'; ctext = `${temp}${andtxt}`; } else if (nnum < 13 && cnum < 1000 && localOptions.includeOptionalAnd) { ctext = `${ctext}en`; } else if (nnum < 13 && cnum >= 1000 && localOptions.includeOptionalAnd) { ntext = ` en ${ntext}`; } else if (cnum >= 1000000) { ctext += ' '; } else { if (cnum === 1000) { ctext += ' '; } } val = cnum + nnum; } return { [`${ctext}${ntext}`]: val }; }; const old_toCardinal = this.toCardinal; this.toCardinal = (value) => { if (value >= 1100 && value < 10000 && !localOptions.noHundredPairs) { const high = Math.floor(value / 100); const low = value % 100; if (high % 10 !== 0) { return ( old_toCardinal(high) + 'honderd' + (low ? (localOptions.includeOptionalAnd ? ' en ' : ' ') + old_toCardinal(low) : '') ); } } return old_toCardinal(value); }; }