83 lines
2.1 KiB
JavaScript
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;
|
|
}
|