UNPKG

persian-ts

Version:

Variety of Persian tools, all gathered in one place

240 lines (239 loc) 8.57 kB
"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;