Iosevka/tools/amend-readme/src/sections/cv-influences.mjs

83 lines
2.1 KiB
JavaScript

import { getCharMapAndSupportedLanguageList } from "@iosevka/data-export/supported-languages";
import { MdCol } from "../md-format-tools.mjs";
export default async function processCvInfluences(argv) {
const cl = await getCharMapAndSupportedLanguageList(
argv.charMapPath,
argv.charMapItalicPath,
argv.charMapObliquePath
);
let m = {
upright: new Map(),
italic: new Map()
};
for (const block of cl.unicodeCoverage) {
for (const ch of block.characters) {
if (!ch.inFont) continue;
addToCvInfluenceMap(cl.featureSeries, m.upright, ch.lch, ch.cvFeatureSetsUpright);
addToCvInfluenceMap(cl.featureSeries, m.italic, ch.lch, ch.cvFeatureSetsItalic);
}
}
const md = new MdCol("Section-CV-Influences");
md.log(`### Upright CV influences`);
md.log(``);
logCvInfluenceMap(md, m.upright);
md.log(``);
md.log(`### Italic CV influences`);
md.log(``);
logCvInfluenceMap(md, m.italic);
md.log(``);
return md;
}
function addToCvInfluenceMap(featureSeries, m, lch, ids) {
if (!ids || !ids.length) return;
for (const id of ids) {
let fs = featureSeries[id];
if (!fs) continue;
let s = m.get(fs.name);
if (!s) {
s = new Set();
m.set(fs.name, s);
}
s.add(lch);
}
}
function logCvInfluenceMap(md, m) {
let a = Array.from(m).sort((a, b) => a[0].toUpperCase().localeCompare(b[0].toUpperCase()));
for (const [tag, chars] of a) {
md.log(`- \`${tag}\`:`);
md.log(``);
md.log(` ` + Array.from(chars).map(formatLch).join(", "));
md.log(``);
}
}
function formatLch(lch) {
return mdEscape(lch) + " (`U+" + lch.toString(16).padStart(4, "0").toUpperCase() + "`)";
}
function mdEscape(lch) {
let ch = String.fromCodePoint(lch);
if (ch === "\\") return "\\\\";
if (ch === "`") return "\\`";
if (ch === "*") return "\\*";
if (ch === "_") return "\\_";
if (ch === "{") return "\\{";
if (ch === "}") return "\\}";
if (ch === "[") return "\\[";
if (ch === "]") return "\\]";
if (ch === "(") return "\\(";
if (ch === ")") return "\\)";
if (ch === "#") return "\\#";
if (ch === "+") return "\\+";
if (ch === "-") return "\\-";
if (ch === ".") return "\\.";
if (ch === "!") return "\\!";
return ch;
}