@technobuddha/library
Version:
A large library of useful functions
34 lines • 2.47 kB
JavaScript
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=