UNPKG

@technobuddha/library

Version:
34 lines 2.47 kB
import { valueGlyphs } from "./roman-numeral.js"; import { splitChars } from "./split-chars.js"; import { empty } from "./unicode.js"; // cspell:ignore MMXXIV /** * Convert a number into a roman numeral string * @param input - The number to turn into a roman numeral * @param options - see {@link RomanOptions} * @returns Converted roman numeral * @example * ```typescript * toRoman(1); // "I" * toRoman(4); // "IV" * toRoman(9); // "IX" * toRoman(2024); // "MMXXIV" * toRoman(49, { format: 'apostrophus' }); // "IL" * ``` * @group Math * @category Roman Numerals */ export function romanize(input, { format = 'standard' } = {}) { const vg = valueGlyphs[format]; if (input < 1 || input > vg.limit || !Number.isInteger(input)) { throw new RangeError(`Input must be an integer between 1 and ${vg.limit}`); } const digits = splitChars(input.toString()); let roman = empty; for (let i = 0; i < vg.glyphs.length && digits.length > 0; ++i) { roman = vg.glyphs[i][Number.parseInt(digits.pop())] + roman; } // return lastGlyph.repeat(Number.parseInt(build(digits))) + roman; return roman; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9tYW5pemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm9tYW5pemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBWXJDLHVCQUF1QjtBQUN2Qjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWEsRUFBRSxFQUFFLE1BQU0sR0FBRyxVQUFVLEtBQW1CLEVBQUU7SUFDaEYsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRS9CLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxNQUFNLElBQUksVUFBVSxDQUFDLDBDQUEwQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMvRCxLQUFLLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9ELENBQUM7SUFDRCxtRUFBbUU7SUFDbkUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIn0=