Files
operator-mono-lig/calt.js
T
2020-12-13 10:05:41 -05:00

67 lines
1.5 KiB
JavaScript

const fs = require('fs');
const rules = [
,
`
lookup 1 {
sub 1 by glyph;
} 1;`,
`
lookup 1_2 {
ignore sub 1 1' 2;
ignore sub 1' 2 2;
sub 1.spacer 2' by glyph;
sub 1' 2 by 1.spacer;
} 1_2;`,
`
lookup 1_2_3 {
ignore sub 1 1' 2 3;
ignore sub 1' 2 3 3;
sub 1.spacer 2.spacer 3' by glyph;
sub 1.spacer 2' 3 by 2.spacer;
sub 1' 2 3 by 1.spacer;
} 1_2_3;`,
`
lookup 1_2_3_4 {
ignore sub 1 1' 2 3 4;
ignore sub 1' 2 3 4 4;
sub 1.spacer 2.spacer 3.spacer 4' by glyph;
sub 1.spacer 2.spacer 3' 4 by 3.spacer;
sub 1.spacer 2' 3 4 by 2.spacer;
sub 1' 2 3 4 by 1.spacer;
} 1_2_3_4;`,
];
const gencalt = (ligatures) => {
let calt = 'feature calt {\n';
const ligs = {};
console.log(ligatures);
ligatures
.filter((l) => !!l.name.match(/\.liga$/) || l.name !== l.glyph)
.map((l) => l.glyph)
.sort((a, b) => {
const length = b.split('_').length - a.split('_').length;
if (length !== 0) return length;
return a < b ? -1 : 1;
})
.forEach((g) => {
g.split('.')
.slice(0, 1)
.forEach((l) => {
if (ligs[l]) return;
ligs[l] = true;
const c = l.split('_');
let rule = rules[c.length];
rule = rule
.replace(/\d/g, (m) => c[parseInt(m) - 1])
.replace(/glyph/g, g);
calt += rule + '\n';
});
});
return calt + '\n} calt;\n';
};
exports.gencalt = gencalt;