@true-directive/base
Version:
The set of base classes for the TrueDirective Grid
97 lines (96 loc) • 3.58 kB
JavaScript
/**
* Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company.
* @link https://truedirective.com/
* @license MIT
*/
var NumberFormat = /** @class */ (function () {
function NumberFormat() {
this.prefix = '';
this.postfix = '';
// D - десятичная, E - экспоненциальная, F - шестнадцатеричная
this.specifier = 'D';
this.intMin = 1;
this.intMax = 16;
this.fractionMin = 0;
this.fractionMax = 0;
}
NumberFormat.isDigit = function (char) {
if ('0123456789'.indexOf(char) >= 0) {
return true;
}
return false;
};
// Формат в виде '${1.2}' -- префикс [$ ], потом минимум одна цифра целого, затем только две цифры после точки
// Формат в виде '${1.2-5}' -- префикс [$ ], потом минимум одна цифра целого, затем от двух до пяти цифр дроби
// {E.4} - экспоненциальная форма с максимум 4 знаками после запятой
// {+E.4} - обязательно знак
NumberFormat.parseFormat = function (formatTxt) {
var splitted = formatTxt.split(/[\{\}]/);
if (splitted.length < 3) {
return null;
}
var res = new NumberFormat();
res.prefix = splitted[0];
var format = splitted[1].trim();
res.postfix = splitted[2];
var digits = { int: '', intMax: '', fMin: '', fMax: '' };
var part = 'spec';
for (var pos = 0; pos < format.length; pos++) {
var char = format[pos];
var isDigit = NumberFormat.isDigit(char);
if (!isDigit && 'EDFNedfn+-. '.indexOf(char) < 0) {
return null;
}
if (pos === 0 && '+-'.indexOf(char) >= 0) {
res.signum = true;
}
// Задается спецификатор
if (part === 'spec' && 'EDFNedfn'.indexOf(char) >= 0) {
res.specifier = char.toUpperCase();
part = 'int';
continue;
}
if ((part === 'spec' || part === 'int') && isDigit) {
digits.int += char;
part = 'int';
continue;
}
if (part === 'int' && char === '-') {
part = 'intmax';
}
if (part === 'intmax' && isDigit) {
digits.intMax += char;
}
if (char === '.') {
part = 'fmin';
}
if (part === 'fmin' && char === '-') {
part = 'fmax';
}
if (part === 'fmin' && isDigit) {
digits.fMin += char;
}
if (part === 'fmax' && isDigit) {
digits.fMax += char;
}
}
if (digits.int !== '') {
res.intMin = +digits.int;
}
if (digits.intMax !== '') {
res.intMax = +digits.intMax;
}
if (digits.fMin !== '') {
res.fractionMin = +digits.fMin;
}
if (digits.fMax !== '') {
res.fractionMax = +digits.fMax;
}
else {
res.fractionMax = res.fractionMin;
}
return res;
};
return NumberFormat;
}());
export { NumberFormat };