Iosevka/font-src/support/ligation-data.mjs
be5invis 38e68d884a Make the ligation group names for symbol connections more intuitive, and add alternatives to start chaining from at least 3 continuous characters (#2100):
- `plusplus` → `plus-plus`, `plus-plus-plus`.
   - `connected-hyphen` → `minus-minus`, `minus-minus-minus`.
   - `connected-tilde-as-wave` → `tilde-tilde`, `tilde-tilde-tilde`.
   - `connected-underscore` → `underscore-underscore`, `underscore-underscore-underscore`.
   - `connected-number-sign` → `hash-hash`, `hash-hash-hash`.
2023-11-25 20:52:27 -08:00

59 lines
1.8 KiB
JavaScript

import * as Parameters from "./parameters.mjs";
export function applyLigationData(data, para, argv) {
const defaultBuildup = {};
const hives = {};
hives["default"] = { caltBuildup: [] };
for (const gr in data.simple) {
const lg = data.simple[gr];
hives[`ligset-enable-${gr}`] = { appends: { caltBuildup: [gr] } };
hives[`ligset-disable-${gr}`] = { removes: { caltBuildup: [gr] } };
}
for (const gr in data.composite) {
const comp = data.composite[gr];
if (!comp.tag) continue;
const ligSets = createBuildup(data.simple, data.composite, comp.buildup);
defaultBuildup[comp.tag] = ligSets;
hives[`ligset-inherit-${gr}`] = { caltBuildup: ligSets };
}
para.ligation = {
defaultBuildup,
caltBuildup: []
};
if (argv.ligations) {
if (argv.ligations.inherits)
Parameters.apply(para.ligation, hives, [`ligset-inherit-${argv.ligations.inherits}`]);
if (argv.ligations.disables)
Parameters.apply(
para.ligation,
hives,
argv.ligations.disables.map(x => `ligset-disable-${x}`)
);
if (argv.ligations.enables)
Parameters.apply(
para.ligation,
hives,
argv.ligations.enables.map(x => `ligset-enable-${x}`)
);
}
}
export function createBuildup(simple, composite, buildup) {
let sink = new Set();
createBuildupImpl(false, sink, simple, composite, buildup);
return Array.from(sink);
}
function createBuildupImpl(fSimpleOnly, sink, simple, composite, buildup) {
for (const s of buildup) {
if (simple[s]) {
sink.add(s);
const gr = simple[s];
if (gr.implies) createBuildupImpl(true, sink, simple, composite, gr.implies);
} else if (!fSimpleOnly && composite[s]) {
createBuildupImpl(fSimpleOnly, sink, simple, composite, composite[s].buildup);
} else {
throw new Error("Cannot find simple ligation group " + s);
}
}
}