@phensley/cldr-core
Version:
Core library for @phensley/cldr
89 lines • 4.57 kB
JavaScript
"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