From 8e16921f27b6026880e5b352da77b196888de342 Mon Sep 17 00:00:00 2001 From: mustafa-rezae Date: Thu, 8 May 2025 18:06:30 +0330 Subject: [PATCH] Update persian number file. --- plugins/persianNumber.js | 674 ++++++++++++++++++++------------------- 1 file changed, 339 insertions(+), 335 deletions(-) diff --git a/plugins/persianNumber.js b/plugins/persianNumber.js index 84a4794..56673b8 100644 --- a/plugins/persianNumber.js +++ b/plugins/persianNumber.js @@ -1,380 +1,384 @@ -const oneDigit = [ - "صفر", - "یک", - "دو", - "سه", - "چهار", - "پنج", - "شش", - "هفت", - "هشت", - "نه", -]; -const twoDigits = { - 10: "ده", - 11: "یازده", - 12: "دوازده", - 13: "سیزده", - 14: "چهارده", - 15: "پانزده", - 16: "شانزده", - 17: "هفده", - 18: "هجده", - 19: "نوزده", - 20: "بیست", - 30: "سی", - 40: "چهل", - 50: "پنجاه", - 60: "شصت", - 70: "هفتاد", - 80: "هشتاد", - 90: "نود", -}; -const threeDigits = { - 100: "صد", - 200: "دویست", - 300: "سیصد", - 400: "چهارصد", - 500: "پانصد", - 600: "شش صد", - 700: "هفت صد", - 800: "هشت صد", - 900: "نه صد", -}; +export default defineNuxtPlugin(() => { + console.info("persina number plugin"); +}); -const types = ["تلیارد", "میلیارد", "میلیون", "هزار", ""]; -const decimalTypes = ["دهم", "صدم", "هزارم", "ده هزارم"]; -let numbers = []; -let decimals = []; +// const oneDigit = [ +// "صفر", +// "یک", +// "دو", +// "سه", +// "چهار", +// "پنج", +// "شش", +// "هفت", +// "هشت", +// "نه", +// ]; +// const twoDigits = { +// 10: "ده", +// 11: "یازده", +// 12: "دوازده", +// 13: "سیزده", +// 14: "چهارده", +// 15: "پانزده", +// 16: "شانزده", +// 17: "هفده", +// 18: "هجده", +// 19: "نوزده", +// 20: "بیست", +// 30: "سی", +// 40: "چهل", +// 50: "پنجاه", +// 60: "شصت", +// 70: "هفتاد", +// 80: "هشتاد", +// 90: "نود", +// }; +// const threeDigits = { +// 100: "صد", +// 200: "دویست", +// 300: "سیصد", +// 400: "چهارصد", +// 500: "پانصد", +// 600: "شش صد", +// 700: "هفت صد", +// 800: "هشت صد", +// 900: "نه صد", +// }; -//Convert Number To Words -const convert = (number) => { - let negative = ""; - let decNumber = ""; - let decimal = ""; - let percent = ""; +// const types = ["تلیارد", "میلیارد", "میلیون", "هزار", ""]; +// const decimalTypes = ["دهم", "صدم", "هزارم", "ده هزارم"]; +// let numbers = []; +// let decimals = []; - if (isPercent(number)) { - number = number.replace("%", ""); - percent = " درصد"; - } +// //Convert Number To Words +// const convert = (number) => { +// let negative = ""; +// let decNumber = ""; +// let decimal = ""; +// let percent = ""; - number = getString(number); - if (number == "") return ""; - sliceNumber(number); - if (isNegative(number)) negative = "منفی "; - number = number.replace("-", ""); +// if (isPercent(number)) { +// number = number.replace("%", ""); +// percent = " درصد"; +// } - if (isDecimal(number)) { - let index = number.indexOf("."); - let decNumberStr = ""; +// number = getString(number); +// if (number == "") return ""; +// sliceNumber(number); +// if (isNegative(number)) negative = "منفی "; +// number = number.replace("-", ""); - decNumber = number.substr(index + 1, number.length); - number = number.substr(0, index); - decNumberStr = parseInt(decNumber).toString(); +// if (isDecimal(number)) { +// let index = number.indexOf("."); +// let decNumberStr = ""; - if (decNumberStr.length === 1 && decNumberStr != "0") { - decimal += oneDigit[decNumberStr] + " "; - decimal += decimalTypes[decNumber.length - 1]; - } else { - decimal = calculateDigits(decimals); - decimal += " " + decimalTypes[decNumber.length - 1]; - } - } +// decNumber = number.substr(index + 1, number.length); +// number = number.substr(0, index); +// decNumberStr = parseInt(decNumber).toString(); - if (number.length === 1) { - if (!decimal) { - return negative + oneDigit[number] + percent; - } +// if (decNumberStr.length === 1 && decNumberStr != "0") { +// decimal += oneDigit[decNumberStr] + " "; +// decimal += decimalTypes[decNumber.length - 1]; +// } else { +// decimal = calculateDigits(decimals); +// decimal += " " + decimalTypes[decNumber.length - 1]; +// } +// } - if (number == "0") { - return negative + decimal + percent; - } +// if (number.length === 1) { +// if (!decimal) { +// return negative + oneDigit[number] + percent; +// } - return negative + oneDigit[number] + " ممیز " + decimal + percent; - } +// if (number == "0") { +// return negative + decimal + percent; +// } - if (!decimal) { - return negative + calculateDigits(numbers) + percent; - } +// return negative + oneDigit[number] + " ممیز " + decimal + percent; +// } - return negative + calculateDigits(numbers) + " ممیز " + decimal + percent; -}; +// if (!decimal) { +// return negative + calculateDigits(numbers) + percent; +// } -//split number 3 by 3 with a separator (123456789.3025=>123,456,789.3,025) Do Not Give It Persian Numbers -const sliceNumber = (number, separator = ",") => { - let percent = ""; - let neg = ""; - let dNum = ""; - let n = ""; - let d = ""; +// return negative + calculateDigits(numbers) + " ممیز " + decimal + percent; +// }; - if (isPercent(number)) { - number = number.replace("%", ""); - percent = "%"; - } +// //split number 3 by 3 with a separator (123456789.3025=>123,456,789.3,025) Do Not Give It Persian Numbers +// const sliceNumber = (number, separator = ",") => { +// let percent = ""; +// let neg = ""; +// let dNum = ""; +// let n = ""; +// let d = ""; - number = getString(number); +// if (isPercent(number)) { +// number = number.replace("%", ""); +// percent = "%"; +// } - if (number == "") return ""; - if (isNegative(number)) neg = "-"; +// number = getString(number); - number = number.replace("-", ""); +// if (number == "") return ""; +// if (isNegative(number)) neg = "-"; - if (isDecimal(number)) { - let index = number.indexOf("."); - dNum = number.substr(index + 1, number.length); - number = number.substr(0, index); - } +// number = number.replace("-", ""); - n = putSeparator(number, separator); - numbers = n.split(separator); +// if (isDecimal(number)) { +// let index = number.indexOf("."); +// dNum = number.substr(index + 1, number.length); +// number = number.substr(0, index); +// } - if (!dNum) return neg + n + percent; +// n = putSeparator(number, separator); +// numbers = n.split(separator); - d = putSeparator(dNum, separator); - decimals = d.split(separator); +// if (!dNum) return neg + n + percent; - return neg + n + "." + d + percent; -}; +// d = putSeparator(dNum, separator); +// decimals = d.split(separator); -//Puts a separator between the chunks of the given numString. -const putSeparator = (numString, separator = ",") => { - if (typeof numString !== "string") return ""; - if (numString.length < 4) return numString; +// return neg + n + "." + d + percent; +// }; - let result = ""; - for (let i = numString.length - 1, counter = 0; i >= 0; i--) { - if (counter == 3) { - result += separator; - counter = 0; - } - result += numString[i]; - counter++; - } +// //Puts a separator between the chunks of the given numString. +// const putSeparator = (numString, separator = ",") => { +// if (typeof numString !== "string") return ""; +// if (numString.length < 4) return numString; - result = result.split("").reverse().join(""); - return result; -}; +// let result = ""; +// for (let i = numString.length - 1, counter = 0; i >= 0; i--) { +// if (counter == 3) { +// result += separator; +// counter = 0; +// } +// result += numString[i]; +// counter++; +// } -//Processing on Digits of A Number -const calculateDigits = (arrNum) => { - let result = ""; - for (let i = 0; i < arrNum.length; i++) { - let parsedNum = parseInt(arrNum[i]); - let number = parsedNum; - let sadgan = Math.floor(number / 100) * 100; - number = number % 100; - let dahgan = Math.floor(number / 10) * 10; - let yekan = number % 10; - result += i !== 0 && parsedNum ? " و " : ""; +// result = result.split("").reverse().join(""); +// return result; +// }; - result += - getPersian(sadgan, dahgan, yekan, i, arrNum) + " " + getType(i, arrNum); - } +// //Processing on Digits of A Number +// const calculateDigits = (arrNum) => { +// let result = ""; +// for (let i = 0; i < arrNum.length; i++) { +// let parsedNum = parseInt(arrNum[i]); +// let number = parsedNum; +// let sadgan = Math.floor(number / 100) * 100; +// number = number % 100; +// let dahgan = Math.floor(number / 10) * 10; +// let yekan = number % 10; +// result += i !== 0 && parsedNum ? " و " : ""; - return result.trim(); -}; +// result += +// getPersian(sadgan, dahgan, yekan, i, arrNum) + " " + getType(i, arrNum); +// } -//Main Process That Turn a Number Into a String(122=>100+20+2) -const getPersian = (sadgan, dahgan, yekan, index, numbers) => { - let flag = false; - let result = ""; - let dahganPlusYekan = dahgan + yekan; +// return result.trim(); +// }; - if (threeDigits[sadgan]) { - result += - yekan > 0 || dahgan > 0 - ? threeDigits[sadgan] + " و " - : threeDigits[sadgan]; - } +// //Main Process That Turn a Number Into a String(122=>100+20+2) +// const getPersian = (sadgan, dahgan, yekan, index, numbers) => { +// let flag = false; +// let result = ""; +// let dahganPlusYekan = dahgan + yekan; - if (twoDigits[dahganPlusYekan]) { - result += twoDigits[dahganPlusYekan] + " "; - return result; - } +// if (threeDigits[sadgan]) { +// result += +// yekan > 0 || dahgan > 0 +// ? threeDigits[sadgan] + " و " +// : threeDigits[sadgan]; +// } - if (twoDigits[dahgan]) { - result += twoDigits[dahgan] + " و "; - } +// if (twoDigits[dahganPlusYekan]) { +// result += twoDigits[dahganPlusYekan] + " "; +// return result; +// } - if ( - numbers.length === 2 && - index === 0 && - yekan === 1 && - dahgan === 0 && - sadgan === 0 - ) { - return result; - } +// if (twoDigits[dahgan]) { +// result += twoDigits[dahgan] + " و "; +// } - if ( - numbers.length > 2 && - index === numbers.length - 2 && - yekan === 1 && - dahgan === 0 && - sadgan === 0 - ) { - return result; - } +// if ( +// numbers.length === 2 && +// index === 0 && +// yekan === 1 && +// dahgan === 0 && +// sadgan === 0 +// ) { +// return result; +// } - if (yekan > 0) result += oneDigit[yekan] + " "; +// if ( +// numbers.length > 2 && +// index === numbers.length - 2 && +// yekan === 1 && +// dahgan === 0 && +// sadgan === 0 +// ) { +// return result; +// } - return result; -}; +// if (yekan > 0) result += oneDigit[yekan] + " "; -//getting The Type Of Each Number (Billion, Million,...) -const getType = (i, numbers) => { - let parsedNum = parseInt(numbers[i]); - if (isNaN(parsedNum)) return ""; - if (!parsedNum) return ""; - let length = numbers.length - i; - let index = types.length - length; - return types[index]; -}; +// return result; +// }; -//Calculate if number:String is Negative Or Not -const isNegative = (number) => { - number = getString(number); - if (!number) return false; - if (number[0] != "-") return false; - number = number.replace("-", ""); - return number != "0"; -}; +// //getting The Type Of Each Number (Billion, Million,...) +// const getType = (i, numbers) => { +// let parsedNum = parseInt(numbers[i]); +// if (isNaN(parsedNum)) return ""; +// if (!parsedNum) return ""; +// let length = numbers.length - i; +// let index = types.length - length; +// return types[index]; +// }; -//Calculate if number:String has '%' as Percent -const isPercent = (string) => { - if (typeof string !== "string") return false; - let index = string.indexOf("%"); - let lIndex = string.lastIndexOf("%"); - if (index != lIndex) return false; - return index > 0; -}; +// //Calculate if number:String is Negative Or Not +// const isNegative = (number) => { +// number = getString(number); +// if (!number) return false; +// if (number[0] != "-") return false; +// number = number.replace("-", ""); +// return number != "0"; +// }; -//is number:String:Number is a Valid Number? if type is Number turn it to String And Return it -const getString = (number) => { - if (number === undefined) return ""; - if (number === null) return ""; - if (isNaN(number)) return ""; - if (typeof number === "number") return number.toString(); - return number.trim(); -}; +// //Calculate if number:String has '%' as Percent +// const isPercent = (string) => { +// if (typeof string !== "string") return false; +// let index = string.indexOf("%"); +// let lIndex = string.lastIndexOf("%"); +// if (index != lIndex) return false; +// return index > 0; +// }; -//Calculate if number:String has Decimal Point Or Not -const isDecimal = (number) => { - number = getString(number); - if (number == "") return false; - let index = number.indexOf("."); - let lIndex = number.lastIndexOf("."); - if (index != lIndex) return false; - return index > 0; -}; -//Convert English Numbers To Persian Numbers -const convertEnToPe = (number) => { - if (number == null || number == undefined) return ""; - if (typeof number == "number") number = number.toString(); - let res = ""; - for (let i = 0; i < number.length; i++) { - switch (number[i]) { - case "\u0030": - res += "\u06F0"; - break; - case "\u0031": - res += "\u06F1"; - break; - case "\u0032": - res += "\u06F2"; - break; - case "\u0033": - res += "\u06F3"; - break; - case "\u0034": - res += "\u06F4"; - break; - case "\u0035": - res += "\u06F5"; - break; - case "\u0036": - res += "\u06F6"; - break; - case "\u0037": - res += "\u06F7"; - break; - case "\u0038": - res += "\u06F8"; - break; - case "\u0039": - res += "\u06F9"; - break; - default: - res += number[i]; - } - } - return res; -}; -//Convert Persian Numbers To English Numbers -const convertPeToEn = (number) => { - if (number == null || number == undefined) return ""; - let res = ""; - for (let i = 0; i < number.length; i++) { - switch (number[i]) { - case "\u06F0": - res += "\u0030"; - break; - case "\u06F1": - res += "\u0031"; - break; - case "\u06F2": - res += "\u0032"; - break; - case "\u06F3": - res += "\u0033"; - break; - case "\u06F4": - res += "\u0034"; - break; - case "\u06F5": - res += "\u0035"; - break; - case "\u06F6": - res += "\u0036"; - break; - case "\u06F7": - res += "\u0037"; - break; - case "\u06F8": - res += "\u0038"; - break; - case "\u06F9": - res += "\u0039"; - break; - default: - res += number[i]; - } - } - return res; -}; +// //is number:String:Number is a Valid Number? if type is Number turn it to String And Return it +// const getString = (number) => { +// if (number === undefined) return ""; +// if (number === null) return ""; +// if (isNaN(number)) return ""; +// if (typeof number === "number") return number.toString(); +// return number.trim(); +// }; -const e2p = (s) => s.replace(/\d/g, (d) => "۰۱۲۳۴۵۶۷۸۹"[d]); -const e2a = (s) => s.replace(/\d/g, (d) => "٠١٢٣٤٥٦٧٨٩"[d]); +// //Calculate if number:String has Decimal Point Or Not +// const isDecimal = (number) => { +// number = getString(number); +// if (number == "") return false; +// let index = number.indexOf("."); +// let lIndex = number.lastIndexOf("."); +// if (index != lIndex) return false; +// return index > 0; +// }; +// //Convert English Numbers To Persian Numbers +// const convertEnToPe = (number) => { +// if (number == null || number == undefined) return ""; +// if (typeof number == "number") number = number.toString(); +// let res = ""; +// for (let i = 0; i < number.length; i++) { +// switch (number[i]) { +// case "\u0030": +// res += "\u06F0"; +// break; +// case "\u0031": +// res += "\u06F1"; +// break; +// case "\u0032": +// res += "\u06F2"; +// break; +// case "\u0033": +// res += "\u06F3"; +// break; +// case "\u0034": +// res += "\u06F4"; +// break; +// case "\u0035": +// res += "\u06F5"; +// break; +// case "\u0036": +// res += "\u06F6"; +// break; +// case "\u0037": +// res += "\u06F7"; +// break; +// case "\u0038": +// res += "\u06F8"; +// break; +// case "\u0039": +// res += "\u06F9"; +// break; +// default: +// res += number[i]; +// } +// } +// return res; +// }; +// //Convert Persian Numbers To English Numbers +// const convertPeToEn = (number) => { +// if (number == null || number == undefined) return ""; +// let res = ""; +// for (let i = 0; i < number.length; i++) { +// switch (number[i]) { +// case "\u06F0": +// res += "\u0030"; +// break; +// case "\u06F1": +// res += "\u0031"; +// break; +// case "\u06F2": +// res += "\u0032"; +// break; +// case "\u06F3": +// res += "\u0033"; +// break; +// case "\u06F4": +// res += "\u0034"; +// break; +// case "\u06F5": +// res += "\u0035"; +// break; +// case "\u06F6": +// res += "\u0036"; +// break; +// case "\u06F7": +// res += "\u0037"; +// break; +// case "\u06F8": +// res += "\u0038"; +// break; +// case "\u06F9": +// res += "\u0039"; +// break; +// default: +// res += number[i]; +// } +// } +// return res; +// }; -const p2e = (s) => s.replace(/[۰-۹]/g, (d) => "۰۱۲۳۴۵۶۷۸۹".indexOf(d)); -const a2e = (s) => s.replace(/[٠-٩]/g, (d) => "٠١٢٣٤٥٦٧٨٩".indexOf(d)); +// const e2p = (s) => s.replace(/\d/g, (d) => "۰۱۲۳۴۵۶۷۸۹"[d]); +// const e2a = (s) => s.replace(/\d/g, (d) => "٠١٢٣٤٥٦٧٨٩"[d]); -const p2a = (s) => - s.replace(/[۰-۹]/g, (d) => "٠١٢٣٤٥٦٧٨٩"["۰۱۲۳۴۵۶۷۸۹".indexOf(d)]); -const a2p = (s) => - s.replace(/[٠-٩]/g, (d) => "۰۱۲۳۴۵۶۷۸۹"["٠١٢٣٤٥٦٧٨٩".indexOf(d)]); +// const p2e = (s) => s.replace(/[۰-۹]/g, (d) => "۰۱۲۳۴۵۶۷۸۹".indexOf(d)); +// const a2e = (s) => s.replace(/[٠-٩]/g, (d) => "٠١٢٣٤٥٦٧٨٩".indexOf(d)); -export { - convert, - sliceNumber, - convertEnToPe, - convertPeToEn, - e2p, - e2a, - p2e, - a2e, - p2a, - a2p, -}; +// const p2a = (s) => +// s.replace(/[۰-۹]/g, (d) => "٠١٢٣٤٥٦٧٨٩"["۰۱۲۳۴۵۶۷۸۹".indexOf(d)]); +// const a2p = (s) => +// s.replace(/[٠-٩]/g, (d) => "۰۱۲۳۴۵۶۷۸۹"["٠١٢٣٤٥٦٧٨٩".indexOf(d)]); + +// export { +// convert, +// sliceNumber, +// convertEnToPe, +// convertPeToEn, +// e2p, +// e2a, +// p2e, +// a2e, +// p2a, +// a2p, +// };