UNPKG

@true-directive/base

Version:

The set of base classes for the TrueDirective Grid

97 lines (96 loc) 3.58 kB
/** * 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 };