packages/core/src/format/DecimalStyle.js
/**
* @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper
* @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos
* @license BSD-3-Clause (see LICENSE in the root directory of this source tree)
*/
export class DecimalStyle {
/**
*
* @param zeroChar
* @param positiveSignChar
* @param negativeSignChar
* @param decimalPointChar
* @private
*/
constructor(zeroChar, positiveSignChar, negativeSignChar, decimalPointChar) {
this._zeroDigit = zeroChar;
this._zeroDigitCharCode = zeroChar.charCodeAt(0);
this._positiveSign = positiveSignChar;
this._negativeSign = negativeSignChar;
this._decimalSeparator = decimalPointChar;
}
positiveSign(){
return this._positiveSign;
}
withPositiveSign(positiveSign) {
if (positiveSign === this._positiveSign) {
return this;
}
return new DecimalStyle(this._zeroDigit, positiveSign, this._negativeSign, this._decimalSeparator);
}
negativeSign(){
return this._negativeSign;
}
withNegativeSign(negativeSign) {
if (negativeSign === this._negativeSign) {
return this;
}
return new DecimalStyle(this._zeroDigit, this._positiveSign, negativeSign, this._decimalSeparator);
}
zeroDigit(){
return this._zeroDigit;
}
withZeroDigit(zeroDigit) {
if (zeroDigit === this._zeroDigit) {
return this;
}
return new DecimalStyle(zeroDigit, this._positiveSign, this._negativeSign, this._decimalSeparator);
}
decimalSeparator(){
return this._decimalSeparator;
}
withDecimalSeparator(decimalSeparator) {
if (decimalSeparator === this._decimalSeparator) {
return this;
}
return new DecimalStyle(this._zeroDigit, this._positiveSign, this._negativeSign, decimalSeparator);
}
convertToDigit(char){
const val = char.charCodeAt(0) - this._zeroDigitCharCode;
return (val >= 0 && val <= 9) ? val : -1;
}
convertNumberToI18N(numericText) {
if (this._zeroDigit === '0') {
return numericText;
}
const diff = this._zeroDigitCharCode - '0'.charCodeAt(0);
let convertedText = '';
for (let i = 0; i < numericText.length; i++) {
convertedText += String.fromCharCode(numericText.charCodeAt(i) + diff);
}
return convertedText;
}
equals(other) {
if (this === other) {
return true;
}
if (other instanceof DecimalStyle) {
return (this._zeroDigit === other._zeroDigit && this._positiveSign === other._positiveSign &&
this._negativeSign === other._negativeSign && this._decimalSeparator === other._decimalSeparator);
}
return false;
}
hashCode() {
return this._zeroDigit + this._positiveSign + this._negativeSign + this._decimalSeparator;
}
toString() {
return `DecimalStyle[${this._zeroDigit}${this._positiveSign}${this._negativeSign}${this._decimalSeparator}]`;
}
static of(){
throw new Error('not yet supported');
}
static availableLocales(){
throw new Error('not yet supported');
}
}
DecimalStyle.STANDARD = new DecimalStyle('0', '+', '-', '.');