// How outline points are numbered. Kept free of imports so both the page and the exporters can use it. const ROMAN = [[10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I']]; export function toRoman(n) { let out = ''; let rest = n; for (const [value, symbol] of ROMAN) while (rest >= value) { out += symbol; rest -= value; } return out; } const letter = (n, upper) => { let out = ''; let rest = n; while (rest > 0) { rest -= 1; out = String.fromCharCode((upper ? 65 : 97) + (rest % 26)) + out; rest = Math.floor(rest / 26); } return out; }; // I. / A. / 1. / a. / (1) / (a), by level export function labelFor(depth, index) { const n = index + 1; switch (depth) { case 0: return `${toRoman(n)}.`; case 1: return `${letter(n, true)}.`; case 2: return `${n}.`; case 3: return `${letter(n, false)}.`; case 4: return `(${n})`; default: return `(${letter(n, false)})`; } } export const KINDS = [ ['', 'Point'], ['illustration', 'Illustration'], ['application', 'Application'], ['quote', 'Quote'], ['question', 'Question'], ['transition', 'Transition'], ]; export const kindLabel = (kind) => KINDS.find(([id]) => id === kind)?.[1] ?? '';