persian-ts
Version:
Variety of Persian tools, all gathered in one place
240 lines (239 loc) • 8.57 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var constants_1 = require("./constants");
/**
* Main class for handling conversion
* it's using builder pattern to create the desired output
*/
var PersianTs = /** @class */ (function () {
/**
* Creates an instance of persian ts.
*
* @param value value to be transformed
*/
function PersianTs(value) {
this.value = value;
this.value = value.trim();
}
/**
* converts string containing arabic characters to persian
*
* @returns PersianTs instance
*/
PersianTs.prototype.arabicChar = function () {
var tempValue = this.value;
var charsLen = constants_1.arabicChars.length;
for (var i = 0; i < charsLen; i += 1) {
tempValue = tempValue.replace(new RegExp(constants_1.arabicChars[i], 'g'), constants_1.persianChars[i]);
}
this.value = tempValue;
return this;
};
/**
* converts string containing arabic numerals to persian
*
* @returns PersianTs instance
*/
PersianTs.prototype.arabicNumber = function () {
var tempValue = this.value;
var numbersLen = constants_1.arabicNumbers.length;
for (var i = 0; i < numbersLen; i += 1) {
tempValue = tempValue.replace(new RegExp(constants_1.arabicNumbers[i], 'g'), constants_1.persianNumbers[i]);
}
this.value = tempValue;
return this;
};
/**
* converts string containing persian numerals to english
*
* @returns PersianTs instance
*/
PersianTs.prototype.persianNumber = function () {
var tempValue = this.value;
var numbersLen = constants_1.englishNumbers.length;
for (var i = 0; i < numbersLen; i += 1) {
tempValue = tempValue.replace(new RegExp(constants_1.persianNumbers[i], 'g'), constants_1.englishNumbers[i]);
}
this.value = tempValue;
return this;
};
/**
* converts string containing english numerals to persian
*
* @returns PersianTs instance
*/
PersianTs.prototype.englishNumber = function () {
var tempValue = this.value;
var numbersLen = constants_1.persianNumbers.length;
for (var i = 0; i < numbersLen; i += 1) {
tempValue = tempValue.replace(new RegExp(constants_1.englishNumbers[i], 'g'), constants_1.persianNumbers[i]);
}
this.value = tempValue;
return this;
};
/**
* converts string containing persian and arabic numerals to english
*
* @returns PersianTs instance
*/
PersianTs.prototype.toEnglishNumber = function () {
var tempValue = this.value;
var numbersLen = constants_1.englishNumbers.length;
for (var i = 0; i < numbersLen; i += 1) {
tempValue = tempValue
.replace(new RegExp(constants_1.persianNumbers[i], 'g'), constants_1.englishNumbers[i])
.replace(new RegExp(constants_1.arabicNumbers[i], 'g'), constants_1.englishNumbers[i]);
}
this.value = tempValue;
return this;
};
/**
* Used to convert unreadable Persian characters in URL to readable characters.
*
* @returns PersianTs instance
*/
PersianTs.prototype.fixURL = function () {
var tempValue = this.value;
// Replace every %20 with _ to protect them from decodeURI
var old = '';
while (old !== tempValue) {
old = tempValue;
tempValue = tempValue.replace(/(http\S+?)%20/g, '$1\u200c\u200c\u200c_\u200c\u200c\u200c');
}
// Decode URIs
// NOTE: This would convert all %20's to _'s which could break some links
// but we will undo that later on
tempValue = tempValue.replace(/(http\S+)/g, function (_s, p) { return decodeURI(p); });
// Revive all instances of %20 to make sure no links is broken
tempValue = tempValue.replace(/\u200c\u200c\u200c_\u200c\u200c\u200c/g, '%20');
this.value = tempValue;
return this;
};
/**
* Used to convert unreadable Persian characters in URL to readable characters.
*
* @returns PersianTs instance
*/
PersianTs.prototype.decodeURL = function () {
return this.fixURL();
};
/**
* Used for converting Persian char to English char.
*
* @returns PersianTs instance
*/
PersianTs.prototype.switchKey = function () {
var tempValue = this.value;
var charsLen = constants_1.persianChar.length;
for (var i = 0; i < charsLen; i += 1) {
tempValue = tempValue.replace(new RegExp(constants_1.persianChar[i], 'g'), constants_1.englishChar[i]);
}
this.value = tempValue;
return this;
};
// /**
// * Used for representing numbers as Persian words.
// *
// * @returns PersianTs instance
// */
// digitsToWords():PersianTs {
// const tempValue = this.value
// let digit
// let i
// let iThree
// let result
// let resultThree
// let three
// const parts = ['', 'هزار', 'میلیون', 'میلیارد', 'تریلیون', 'کوادریلیون', 'کویینتیلیون', 'سکستیلیون']
// const numbers = {
// 0: ['', 'صد', 'دویست', 'سیصد', 'چهارصد', 'پانصد', 'ششصد', 'هفتصد', 'هشتصد', 'نهصد'],
// 1: ['', 'ده', 'بیست', 'سی', 'چهل', 'پنجاه', 'شصت', 'هفتاد', 'هشتاد', 'نود'],
// 2: ['', 'یک', 'دو', 'سه', 'چهار', 'پنج', 'شش', 'هفت', 'هشت', 'نه'],
// two: [
// 'ده',
// 'یازده',
// 'دوازده',
// 'سیزده',
// 'چهارده',
// 'پانزده',
// 'شانزده',
// 'هفده',
// 'هجده',
// 'نوزده'
// ],
// zero: 'صفر'
// }
// const delimiter = ' و '
// const valueParts = tempValue
// .split('')
// .reverse()
// .join('')
// .replace(/\d{3}(?=\d)/g, '$&,')
// .split('')
// .reverse()
// .join('')
// .split(',')
// .map((str) => Array(4 - str.length).join('0') + str)
// result = (() => {
// const results = []
// for (iThree in valueParts) {
// three = valueParts[iThree]
// resultThree = (() => {
// let _i = 0
// let _len
// let _results1
// _results1 = []
// // eslint-disable-next-line no-multi-assign
// for (i = _i = 0, _len = three.length; _i < _len; i = _i += 1) {
// digit = three[i]
// if (i === 1 && digit === '1') {
// _results1.push(numbers.two[three[2]])
// } else if ((i !== 2 || three[1] !== '1') && numbers[i][digit] !== '') {
// _results1.push(numbers[i][digit])
// }
// }
// return _results1
// })()
// resultThree = resultThree.join(delimiter)
// const _result = resultThree
// ? `${resultThree } ${ parts[valueParts.length - parseInt(iThree, 10) - 1]}`
// : resultThree
// results.push(_result)
// }
// return results
// })()
// result = result.filter((x) => x.trim() !== '')
// result = result.join(delimiter).trim()
// if (result === '') {
// result = numbers.zero
// }
// this.value = result
// return this
// }
/**
* Zero-width non-joiner correction
*
* @returns PersianTs instance
*/
PersianTs.prototype.halfSpace = function () {
var tempValue = this.value;
// Replace Zero-width non-joiner between persian MI.
tempValue = tempValue.replace(new RegExp(constants_1.pattern), '$2\u200C$4');
// Replace Zero-width non-joiner between perisan De-Yii.
tempValue = tempValue.replace(new RegExp(constants_1.replacedPattern), '$2\u200C$4');
this.value = tempValue;
return this;
};
/**
* returns the converted string value.
*
* @returns converted string value
*/
PersianTs.prototype.toString = function () {
var tempValue = this.value;
this.value = tempValue;
return this.value;
};
return PersianTs;
}());
exports.default = PersianTs;