UNPKG

@phensley/cldr-core

Version:
262 lines 12.1 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var numbers_1 = require("../../types/numbers"); var StringValue = /** @class */ (function () { function StringValue() { this.str = ''; } StringValue.prototype.length = function () { return this.str.length; }; StringValue.prototype.get = function (i) { return this.str[i] || ''; }; StringValue.prototype.add = function (type, value) { this.str += value; }; StringValue.prototype.append = function (value) { this.str += value; }; StringValue.prototype.insert = function (i, type, value) { var prefix = this.str.substring(0, i); var suffix = this.str.substring(i); this.str = "" + prefix + value + suffix; }; StringValue.prototype.render = function () { return this.str; }; StringValue.prototype.reset = function () { this.str = ''; }; return StringValue; }()); exports.StringValue = StringValue; var PartsValue = /** @class */ (function () { function PartsValue() { this.parts = []; } PartsValue.prototype.length = function () { return this.parts.length; }; PartsValue.prototype.get = function (i) { var p = this.parts[i]; return p ? p.value : ''; }; PartsValue.prototype.add = function (type, value) { this.parts.push({ type: type, value: value }); }; PartsValue.prototype.append = function (value) { for (var _i = 0, value_1 = value; _i < value_1.length; _i++) { var p = value_1[_i]; this.parts.push(p); } }; PartsValue.prototype.insert = function (i, type, value) { this.parts.splice(i, 0, { type: type, value: value }); }; PartsValue.prototype.render = function () { return this.parts; }; PartsValue.prototype.reset = function () { this.parts = []; }; return PartsValue; }()); exports.PartsValue = PartsValue; var NumberFormatter = /** @class */ (function () { function NumberFormatter(params) { this.params = params; } NumberFormatter.prototype.render = function (n, pattern, currencySymbol, percentSymbol, minInt, grouping) { if (grouping === void 0) { grouping = false; } var symbols = this.params.symbols; var currency = currencySymbol !== ''; var decimal = currency ? symbols.currencyDecimal || symbols.decimal : symbols.decimal; var group = ''; if (grouping) { group = symbols.group; if (currency) { group = symbols.currencyGroup || group; } } var priGroup = pattern.priGroup, secGroup = pattern.secGroup; if (priGroup <= 0) { priGroup = this.params.primaryGroupingSize; } if (secGroup <= 0) { secGroup = this.params.secondaryGroupingSize; } var formatter = this.formatter(decimal, group); n.format(formatter, decimal, group, minInt, this.params.minimumGroupingDigits, priGroup, secGroup, this.params.digits); var formatted = formatter.render(); var res = this.value(); var haveNumber = false; var currencyBefore = false; var currencyIdx = -1; for (var _i = 0, _a = pattern.nodes; _i < _a.length; _i++) { var node = _a[_i]; if (typeof node === 'string') { res.add('literal', node); } else { switch (node) { case 2 /* CURRENCY */: { // Save the offset to the segment before or after the currency symbol. currencyBefore = !haveNumber; var i = res.length(); res.add('currency', currencySymbol); var j = res.length(); currencyIdx = currencyBefore ? j : i - 1; break; } case 0 /* MINUS */: res.add('minus', this.params.symbols.minusSign); break; case 3 /* NUMBER */: res.append(formatted); haveNumber = true; break; case 1 /* PERCENT */: res.add('percent', percentSymbol); break; } } } // Adjust spacing between currency symbol based on surrounding characters. if (currencyIdx !== -1) { var spacing = this.params.currencySpacing; var curr = res.get(currencyIdx); if (currencyBefore) { if (insertBetween(spacing.after, currencySymbol[currencySymbol.length - 1], curr[0])) { res.insert(currencyIdx, 'spacer', spacing.after.insertBetween); } } else { if (insertBetween(spacing.before, currencySymbol[0], curr[curr.length - 1])) { res.insert(currencyIdx + 1, 'spacer', spacing.before.insertBetween); } } } return res.render(); }; NumberFormatter.prototype.empty = function () { return this.value().render(); }; NumberFormatter.prototype.make = function (type, value) { var v = this.value(); v.add(type, value); return v.render(); }; NumberFormatter.prototype.wrap = function (internal, raw) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } var res = this.value(); var pattern = internal.parseWrapper(raw); for (var _a = 0, pattern_1 = pattern; _a < pattern_1.length; _a++) { var n = pattern_1[_a]; if (typeof n === 'string') { res.add('literal', n); } else { var v = args[n]; if (v !== undefined) { res.append(v); } } } return res.render(); }; return NumberFormatter; }()); exports.NumberFormatter = NumberFormatter; var StringNumberFormatter = /** @class */ (function (_super) { __extends(StringNumberFormatter, _super); function StringNumberFormatter() { return _super !== null && _super.apply(this, arguments) || this; } StringNumberFormatter.prototype.value = function () { return new StringValue(); }; StringNumberFormatter.prototype.formatter = function (decimal, group) { return new numbers_1.StringDecimalFormatter(); }; return StringNumberFormatter; }(NumberFormatter)); exports.StringNumberFormatter = StringNumberFormatter; var PartsNumberFormatter = /** @class */ (function (_super) { __extends(PartsNumberFormatter, _super); function PartsNumberFormatter() { return _super !== null && _super.apply(this, arguments) || this; } PartsNumberFormatter.prototype.value = function () { return new PartsValue(); }; PartsNumberFormatter.prototype.formatter = function (decimal, group) { return new numbers_1.PartsDecimalFormatter(decimal, group); }; return PartsNumberFormatter; }(NumberFormatter)); exports.PartsNumberFormatter = PartsNumberFormatter; // Unicode ranges generated in Java from general categories, and translating the // corresponding Unicode sets. // https://www.unicode.org/reports/tr18/#General_Category_Property // https://www.unicode.org/reports/tr44/#General_Category_Values // https://www.unicode.org/reports/tr18/#digit // https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt var MATH_SYMBOL = ('\u002b\u003c-\u003e\u007c\u007e\u00ac\u00b1\u00d7\u00f7\u03f6\u0606-\u0608\u2044\u2052' + '\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3' + '\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2308-\u230b\u2320\u2321\u237c\u239b-\u23b3' + '\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982' + '\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66' + '\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec'); var CURRENCY_SYMBOL = ('\u0024\u00a2-\u00a5\u058f\u060b\u09f2\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20ba' + '\ua838\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6'); var MODIFIER_SYMBOL = ('\u005e\u0060\u00a8\u00af\u00b4\u00b8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff' + '\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b' + '\u309c\ua700-\ua716\ua720\ua721\ua789\ua78a\ufbb2-\ufbc1\uff3e\uff40\uffe3'); var OTHER_SYMBOL = ('\u00a6\u00a9\u00ae\u00b0\u0482\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70' + '\u0bf3-\u0bf8\u0bfa\u0c7f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36' + '\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u1940' + '\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116' + '\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u214f\u2195-\u2199' + '\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3' + '\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23f3' + '\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e' + '\u2670-\u26ff\u2701-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45\u2b46\u2b50-\u2b59' + '\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036' + '\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250' + '\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b' + '\ua836\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd'); // See Nd general category here: // https://www.unicode.org/Public/UCD/latest/ucd/extracted/DerivedNumericType.txt var DECIMAL_DIGIT_NUMBER = ('\u0030-\u0039\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f' + '\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59' + '\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f' + '\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59' + '\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19'); var RE_SYMBOL = new RegExp("^[" + MATH_SYMBOL + CURRENCY_SYMBOL + MODIFIER_SYMBOL + OTHER_SYMBOL + "]", 'u'); var RE_DIGIT = new RegExp("^[" + DECIMAL_DIGIT_NUMBER + "]", 'u'); // Exhaustive list of currency spacing matchers from scanning. // find cldr-data -name numbers.json -exec egrep -e '(currencyMatch|surroundingMatch)' {} \;|sort |uniq -c exports.CURRENCY_SPACING_MATCHERS = { '[:digit:]': function (s) { return RE_DIGIT.test(s); }, '[:^S:]': function (s) { return !RE_SYMBOL.test(s); } }; var insertBetween = function (spacing, currency, surrounding) { return exports.CURRENCY_SPACING_MATCHERS[spacing.currencyMatch](currency) && exports.CURRENCY_SPACING_MATCHERS[spacing.surroundingMatch](surrounding); }; //# sourceMappingURL=render.js.map