ivxl
Version:
convert numbers to roman numerals and vice versa
59 lines (55 loc) • 1.3 kB
JavaScript
// 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