mirror of
https://github.com/kiliman/operator-mono-lig.git
synced 2026-08-12 02:10:52 +02:00
67 lines
1.5 KiB
JavaScript
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;
|