UNPKG

ivxl

Version:

convert numbers to roman numerals and vice versa

59 lines (55 loc) 1.3 kB
// src/roman-map.ts var nums = [1e3, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]; var romans = [ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ]; // src/number-to-roman.ts var numberToRoman = (num, roman2 = "") => { const index = nums.findIndex((n) => num >= n); return index === -1 || !Number.isInteger(num) || num < 1 || num > 4999 ? roman2 : numberToRoman(num - nums[index], roman2 + romans[index]); }; // src/roman-to-number.ts var romanToNumber = (roman2, num = 0, orig = roman2) => { const index = romans.findIndex((r) => roman2.toUpperCase().startsWith(r)); if (index !== -1) { return romanToNumber( roman2.slice(romans[index].length), num + nums[index], orig ); } else { return orig.toUpperCase() === numberToRoman(num) ? num : 0; } }; // src/roman.ts var roman = (val) => romanToNumber(String(val)) || numberToRoman(Number(val)); // src/roman-to-unicode.ts var conversions = { I: "\u2160", V: "\u2164", X: "\u2169", L: "\u216C", C: "\u216D", D: "\u216E", M: "\u216F" }; var romanToUnicode = (roman2) => roman2.split("").map((r) => conversions[r.toUpperCase()] || r).join(""); export { numberToRoman, roman, romanToNumber, romanToUnicode }; //# sourceMappingURL=index.js.map