UNPKG

number-to-georgian-text

Version:

This package is for converting numbers to Georgian text.

219 lines (216 loc) 8.09 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { numberToOrdinal: () => numberToOrdinal, numberToOrdinalText: () => numberToOrdinalText, numberToText: () => numberToText }); module.exports = __toCommonJS(src_exports); // src/converter.ts var names = { 0: "\u10DC\u10E3\u10DA\u10D8", 1: "\u10D4\u10E0\u10D7\u10D8", 2: "\u10DD\u10E0\u10D8", 3: "\u10E1\u10D0\u10DB\u10D8", 4: "\u10DD\u10D7\u10EE\u10D8", 5: "\u10EE\u10E3\u10D7\u10D8", 6: "\u10D4\u10E5\u10D5\u10E1\u10D8", 7: "\u10E8\u10D5\u10D8\u10D3\u10D8", 8: "\u10E0\u10D5\u10D0", 9: "\u10EA\u10EE\u10E0\u10D0", 10: "\u10D0\u10D7\u10D8", 11: "\u10D7\u10D4\u10E0\u10D7\u10DB\u10D4\u10E2\u10D8", 12: "\u10D7\u10DD\u10E0\u10DB\u10D4\u10E2\u10D8", 13: "\u10EA\u10D0\u10DB\u10D4\u10E2\u10D8", 14: "\u10D7\u10DD\u10D7\u10EE\u10DB\u10D4\u10E2\u10D8", 15: "\u10D7\u10EE\u10E3\u10D7\u10DB\u10D4\u10E2\u10D8", 16: "\u10D7\u10D4\u10E5\u10D5\u10E1\u10DB\u10D4\u10E2\u10D8", 17: "\u10E9\u10D5\u10D8\u10D3\u10DB\u10D4\u10E2\u10D8", 18: "\u10D7\u10E0\u10D5\u10D0\u10DB\u10D4\u10E2\u10D8", 19: "\u10EA\u10EE\u10E0\u10D0\u10DB\u10D4\u10E2\u10D8", 20: "\u10DD\u10EA", 40: "\u10DD\u10E0\u10DB\u10DD\u10EA", 60: "\u10E1\u10D0\u10DB\u10DD\u10EA", 80: "\u10DD\u10D7\u10EE\u10DB\u10DD\u10EA", 100: "\u10D0\u10E1", 200: "\u10DD\u10E0\u10D0\u10E1", 300: "\u10E1\u10D0\u10DB\u10D0\u10E1", 400: "\u10DD\u10D7\u10EE\u10D0\u10E1", 500: "\u10EE\u10E3\u10D7\u10D0\u10E1", 600: "\u10D4\u10E5\u10D5\u10E1\u10D0\u10E1", 700: "\u10E8\u10D5\u10D8\u10D3\u10D0\u10E1", 800: "\u10E0\u10D5\u10D0\u10D0\u10E1", 900: "\u10EA\u10EE\u10E0\u10D0\u10D0\u10E1" }; var magnitudes = { \u10D0\u10D7\u10D0\u10E1: [1e3, 1e6], \u10DB\u10D8\u10DA\u10D8\u10DD\u10DC: [1e6, 1e9], \u10DB\u10D8\u10DA\u10D8\u10D0\u10E0\u10D3: [1e9, 1e12], \u10E2\u10E0\u10D8\u10DA\u10D8\u10DD\u10DC: [1e12, 1e15], \u10D9\u10D5\u10D0\u10D3\u10E0\u10D8\u10DA\u10D8\u10DD\u10DC: [1e15, Number.MAX_SAFE_INTEGER + 1] }; var fractionalNames = { 1: "\u10DB\u10D4\u10D0\u10D7\u10D4\u10D3\u10D8", 2: "\u10DB\u10D4\u10D0\u10E1\u10D4\u10D3\u10D8", 3: "\u10DB\u10D4\u10D0\u10D7\u10D0\u10E1\u10D4\u10D3\u10D8", 4: "\u10DB\u10D4\u10D0\u10D7\u10D8\u10D0\u10D7\u10D0\u10E1\u10D4\u10D3\u10D8", 5: "\u10DB\u10D4\u10D0\u10E1\u10D8\u10D0\u10D7\u10D0\u10E1\u10D4\u10D3\u10D8", 6: "\u10DB\u10D4\u10DB\u10D8\u10DA\u10D8\u10DD\u10DC\u10D4\u10D3\u10D8", 7: "\u10DB\u10D4\u10D0\u10D7\u10D8\u10DB\u10D8\u10DA\u10D8\u10DD\u10DC\u10D4\u10D3\u10D8", 8: "\u10DB\u10D4\u10D0\u10E1\u10D8\u10DB\u10D8\u10DA\u10D8\u10DD\u10DC\u10D4\u10D3\u10D8", 9: "\u10DB\u10D4\u10DB\u10D8\u10DA\u10D8\u10D0\u10E0\u10D3\u10D4\u10D3\u10D8", 10: "\u10DB\u10D4\u10D0\u10D7\u10D8\u10DB\u10D8\u10DA\u10D8\u10D0\u10E0\u10D3\u10D4\u10D3\u10D8", 11: "\u10DB\u10D4\u10D0\u10E1\u10D8\u10DB\u10D8\u10DA\u10D8\u10D0\u10E0\u10D3\u10D4\u10D3\u10D8", 12: "\u10DB\u10D4\u10E2\u10E0\u10D8\u10DA\u10D8\u10DD\u10DC\u10D4\u10D3\u10D8", 13: "\u10DB\u10D4\u10D0\u10D7\u10D8\u10E2\u10E0\u10D8\u10DA\u10D8\u10DD\u10DC\u10D4\u10D3\u10D8", 14: "\u10DB\u10D4\u10D0\u10E1\u10D8\u10E2\u10E0\u10D8\u10DA\u10D8\u10DD\u10DC\u10D4\u10D3\u10D8", 15: "\u10DB\u10D4\u10D9\u10D5\u10D0\u10D3\u10E0\u10D8\u10DA\u10D8\u10DD\u10DC\u10D4\u10D3\u10D8", 16: "\u10DB\u10D4\u10D0\u10D7\u10D8\u10D9\u10D5\u10D0\u10D3\u10E0\u10D8\u10DA\u10D8\u10DD\u10DC\u10D4\u10D3\u10D8" }; var defaultOptions = { leadingOne: true, decimalPointSeparator: "" }; function numberToText(input, options) { options = options || {}; options = { ...defaultOptions, ...options }; if (typeof input === "string") { input = +input; } if (isNaN(input)) { throw new Error("Invalid input"); } if (input < 0) { return "\u10DB\u10D8\u10DC\u10E3\u10E1 " + numberToText(-input, options); } if (!Number.isInteger(input)) { const [whole, fractional] = input.toString().split("."); return `${_generateText(+whole, options)} \u10DB\u10D7\u10D4\u10DA\u10D8${options.decimalPointSeparator} ${_generateText(+fractional, options)} ${getFractionalName(fractional)}`; } return _generateText(input, options); } function _generateText(input, opts) { if (input < 20) { return names[input]; } if (input < 100) { if (input % 20 === 0) { return names[input] + "\u10D8"; } return names[20 * Math.floor(input / 20)] + "\u10D3\u10D0" + _generateText(input % 20, opts); } if (input < 1e3) { if (input % 100 === 0) { return names[input] + "\u10D8"; } return names[100 * Math.floor(input / 100)] + " " + _generateText(input % 100, opts); } for (const [name, [base, magnitude]] of Object.entries(magnitudes)) { if (input < magnitude) { const remainder = input % base; const quotient = Math.floor(input / base); let prefix = ""; if (quotient > 1 || opts.leadingOne) { prefix = _generateText(quotient, opts) + " "; } if (remainder === 0) { return `${prefix}${name}\u10D8`; } return `${prefix}${name} ` + _generateText(remainder, opts); } } return input.toString(); } function getFractionalName(input) { const len = input.length; return fractionalNames[len] || ""; } // src/ordinal.ts var ordinal_magnitudes = [ [100, 1e3], [1e3, 1e6], [1e6, 1e9], [1e9, 1e12], [1e12, 1e15] ]; function numberToOrdinalText(input) { if (input === 1) { return "\u10DE\u10D8\u10E0\u10D5\u10D4\u10DA\u10D8"; } return _generateText2(input); } function _generateText2(input, withPrefix = true) { const name = names[input]; if (input < 20) { return withPrefix ? `\u10DB\u10D4${name.substring(0, name.length - 1)}\u10D4` : name; } if (input < 100) { if (input % 20 === 0) { return withPrefix ? `\u10DB\u10D4${name}\u10D4` : `${name}\u10D8`; } return names[20 * Math.floor(input / 20)] + "\u10D3\u10D0" + _generateText2(input % 20); } if (input < 1e3) { if (input % 100 === 0) { return withPrefix ? `\u10DB\u10D4${name}\u10D4` : `${name}\u10D8`; } return names[100 * Math.floor(input / 100)] + " " + _generateText2(input % 100); } for (const [name2, [base, magnitude]] of Object.entries(magnitudes)) { if (input < magnitude) { const remainder = input % base; const quotient = Math.floor(input / base); let prefix = ""; if (quotient > 1) { prefix = numberToText(quotient, { leadingOne: false }); } if (remainder === 0) { prefix = prefix.replace(/ /g, ""); return `\u10DB\u10D4${prefix}${name2}\u10D4`; } else if (prefix) { prefix += " "; } return `${prefix}${name2} ` + _generateText2(remainder); } } return input.toString(); } function numberToOrdinal(input) { if (input === 1) { return `1-\u10D4\u10DA\u10D8`; } if (input < 100) { return input < 20 || input % 20 === 0 ? `\u10DB\u10D4-${input}` : `${input}-\u10D4`; } for (const [base, magnitude] of ordinal_magnitudes) { if (input < magnitude) { return input % base === 0 ? `\u10DB\u10D4-${input}` : `${input}-\u10D4`; } } return `${input}-\u10D4`; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { numberToOrdinal, numberToOrdinalText, numberToText }); //# sourceMappingURL=index.js.map