UNPKG

@phensley/cldr-core

Version:
89 lines 4.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var systems_1 = require("../../../systems"); var autogen_decimal_1 = require("../../../systems/numbering/autogen.decimal"); var cache_1 = require("../../../utils/cache"); var NumberParamsCache = /** @class */ (function () { function NumberParamsCache(bundle, internals) { var _this = this; this.bundle = bundle; this.internals = internals; this.numberParamsCache = new cache_1.Cache(function (s) { return _this.build(s); }, 20); this.numbers = internals.schema.Numbers; this.latnSystemInfo = this.numbers.numberSystem.get('latn'); this.latnSystem = this.buildNumberSystem('latn'); } NumberParamsCache.prototype.getNumberParams = function (numberSystem, defaultSystem) { // Default numbering system for a locale unless explicitly overridden // https://www.unicode.org/reports/tr35/tr35-33/tr35-numbers.html#defaultNumberingSystem if (defaultSystem === undefined) { defaultSystem = 'default'; } if (numberSystem === undefined) { var bundle = this.bundle.numberSystem(); numberSystem = bundle || defaultSystem; } var realName = this.select(numberSystem); // Handle invalid number systems by returning the specified default // TODO: include algorithmic number system check if (autogen_decimal_1.decimalNumberingDigits[realName] === undefined) { realName = this.select(defaultSystem); // TODO: temporary double-check to default for zh finance until we // have rbnf implemented. if (autogen_decimal_1.decimalNumberingDigits[realName] === undefined) { realName = this.select('default'); } } return this.numberParamsCache.get(realName); }; NumberParamsCache.prototype.select = function (numberSystem) { switch (numberSystem) { case 'default': case 'native': case 'finance': case 'traditional': // Dereference to find real name of number system return this.numbers.numberSystems.get(this.bundle, numberSystem); default: return numberSystem; } }; NumberParamsCache.prototype.build = function (name) { var latnSystem = this.latnSystem; var system = name === 'latn' ? latnSystem : this.buildNumberSystem(name); var info = this.numbers.numberSystem.get(name) || this.latnSystemInfo; var currencySpacing = info.currencyFormats.spacing.exists(this.bundle) ? info.currencyFormats.spacing.mapping(this.bundle) : this.latnSystemInfo.currencyFormats.spacing.mapping(this.bundle); var minimumGroupingDigits = system.minimumGroupingDigits, primaryGroupingSize = system.primaryGroupingSize, secondaryGroupingSize = system.secondaryGroupingSize, symbols = system.symbols; return { numberSystemName: name, system: system, latnSystem: latnSystem, digits: autogen_decimal_1.decimalNumberingDigits[name], latinDigits: autogen_decimal_1.decimalNumberingDigits.latn, symbols: symbols, minimumGroupingDigits: minimumGroupingDigits, primaryGroupingSize: primaryGroupingSize, secondaryGroupingSize: secondaryGroupingSize, currencySpacing: currencySpacing }; }; NumberParamsCache.prototype.buildNumberSystem = function (name) { var bundle = this.bundle; var system = this.numbers.numberSystem; var info = system.get(name) || this.latnSystemInfo; var symbols = info.symbols.exists(bundle) ? info.symbols.mapping(bundle) : this.latnSystemInfo.symbols.mapping(bundle); var standardRaw = info.decimalFormats.standard.get(bundle) || this.latnSystemInfo.decimalFormats.standard.get(bundle); // Fetch standard pattern to determine grouping digits var standard = this.internals.numbers.getNumberPattern(standardRaw, false); var minimumGroupingDigits = Number(this.numbers.minimumGroupingDigits.get(this.bundle)); return new systems_1.DecimalNumberingSystem(name, autogen_decimal_1.decimalNumberingDigits[name], symbols, minimumGroupingDigits, standard.priGroup, standard.secGroup); }; return NumberParamsCache; }()); exports.NumberParamsCache = NumberParamsCache; //# sourceMappingURL=params.js.map