"use strict";
const ejs = require("ejs");
const fs = require("fs-extra");
const path = require("path");
const { parseVariantsData } = require("../export-data/variants-data");
const { parseLigationData } = require("../export-data/ligation-data");
///////////////////////////////////////////////////////////////////////////////////////////////////
module.exports = async function main(argv) {
const weightGrades = [100, 200, 300, 400, 500, 600, 700, 800, 900];
const templatePath = path.join(argv.inputPath, "index.ejs");
const variationData = await await parseVariantsData();
const ligationData = await parseLigationData();
const html = await ejs.renderFile(templatePath, {
...variationData,
ligation: ligationData,
weights: weightGrades,
buildSsHtml(body, hc) {
const hcs = new Set(hc);
return [...body]
.map(ch => (hcs.has(ch) ? `${ch}` : ch))
.join("")
.replace(/\n/g, "
");
}
});
await fs.writeFile(argv.outputPath, html);
let readmeSnapshotTasks = [
{ el: "#languages", name: "languages" },
{ el: "#matrix", name: "matrix" },
{ el: "#previews", name: "preview-all" },
{ el: "#weights", name: "weights" }
];
for (const ls of ligationData.nonMergeSets) {
readmeSnapshotTasks.push({
el: "#ligation-sampler",
applyClass: "iosevka",
applyFeature: `'${ls.tag}' ${ls.rank}`,
name: `ligset-${ls.tag}-${ls.rank}`,
applyCallback: `cbAmendLigsetSamplerContents`,
applyCallbackArgs: ls
});
}
for (const ss of variationData.composites) {
readmeSnapshotTasks.push({
el: "#packaging-sampler",
applyClass: "scl iosevka",
applyFeature: `'${ss.tag}' ${ss.rank}`,
name: `stylistic-set-u-${ss.tag}-${ss.rank}`,
applyCallback: `cbAmendStylisticSetContents`,
applyCallbackArgs: { hotChars: ss.hotChars.sans.upright }
});
readmeSnapshotTasks.push({
el: "#packaging-sampler",
applyClass: "scl iosevka italic",
applyFeature: `'${ss.tag}' ${ss.rank}`,
name: `stylistic-set-i-${ss.tag}-${ss.rank}`,
applyCallback: `cbAmendStylisticSetContents`,
applyCallbackArgs: { hotChars: ss.hotChars.sans.italic }
});
}
readmeSnapshotTasks.push({
el: "#cv-sampler",
applyClass: "cv-sampler",
applyFeature: "'lnum' on",
name: "character-variant-lnum",
applyCallback: `cbAmendCharacterVariantContents`,
applyCallbackArgs: {
hotChars: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
slopeDependent: false
}
});
readmeSnapshotTasks.push({
el: "#cv-sampler",
applyClass: "cv-sampler",
applyFeature: "'onum' on",
name: "character-variant-onum",
applyCallback: `cbAmendCharacterVariantContents`,
applyCallbackArgs: {
hotChars: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
slopeDependent: false
}
});
for (const cv of variationData.primes) {
if (!cv.tag) continue;
for (const variant of cv.variants) {
readmeSnapshotTasks.push({
el: "#cv-sampler",
applyClass: "cv-sampler",
applyFeature: `'${cv.tag}' ${variant.rank}`,
name: `character-variant-${cv.tag}-${variant.rank}`,
applyCallback: `cbAmendCharacterVariantContents`,
applyCallbackArgs: {
hotChars: cv.hotChars,
slopeDependent: !!cv.slopeDependent
}
});
}
}
await fs.writeJson(
argv.outputDataPath,
{
readmeSnapshotTasks,
ligationSamples: ligationData.samples,
ligationCherry: ligationData.cherry
},
{ spaces: " " }
);
};