UNPKG

@telerik/kendo-intl

Version:

A package exporting functions for date and number parsing and formatting

64 lines (54 loc) 2.46 kB
import { cldr } from './info'; import { CURRENCY, ACCOUNTING, DECIMAL, CURRENCY_PLACEHOLDER, NUMBER_PLACEHOLDER, LIST_SEPARATOR, GROUP_SEPARATOR, POINT } from '../common/constants'; var LATIN_NUMBER_FORMATS = "Formats-numberSystem-latn"; var LATIN_NUMBER_SYMBOLS = "symbols-numberSystem-latn"; var patternRegExp = /([#,0.]+)/g; var cldrCurrencyRegExp = /¤/g; function getPatterns(pattern) { patternRegExp.lastIndex = 0; return pattern.replace(cldrCurrencyRegExp, CURRENCY_PLACEHOLDER).replace(patternRegExp, NUMBER_PLACEHOLDER).split(LIST_SEPARATOR); } function getGroupSize(pattern) { patternRegExp.lastIndex = 0; var numberPatterns = patternRegExp.exec(pattern.split(LIST_SEPARATOR)[0])[0].split(POINT); var integer = numberPatterns[0]; var groupSize = integer.split(GROUP_SEPARATOR).slice(1).map(function(group) { return group.length; }).reverse(); return groupSize; } function loadCurrencyUnitPatterns(currencyInfo, currencyFormats) { for (var field in currencyFormats) { if (field.startsWith("unitPattern")) { currencyInfo[field] = currencyFormats[field].replace("{0}", NUMBER_PLACEHOLDER).replace("{1}", CURRENCY_PLACEHOLDER); } } } export default function loadNumbersInfo(locale, info) { var localeInfo = cldr[locale]; var numbers = localeInfo.numbers = localeInfo.numbers || {}; numbers.symbols = numbers.symbols || {}; for (var field in info) { if (field === LATIN_NUMBER_SYMBOLS) { Object.assign(numbers.symbols, info[field]); } else if (field.includes(LATIN_NUMBER_FORMATS)) { var style = field.substr(0, field.indexOf(LATIN_NUMBER_FORMATS)); var pattern = info[field].standard; numbers[style] = { patterns: getPatterns(pattern) }; if (style === CURRENCY) { numbers[style].groupSize = getGroupSize((info[DECIMAL + LATIN_NUMBER_FORMATS] || info[field]).standard); loadCurrencyUnitPatterns(numbers[style], info[field]); numbers[ACCOUNTING] = { patterns: getPatterns(info[field][ACCOUNTING]), groupSize: numbers[style].groupSize }; } else { numbers[style].groupSize = getGroupSize(pattern); } } else if (field === "currencies") { numbers.currencies = info[field]; } } }