getPairAdjustment static method
num
getPairAdjustment(
- Font font,
- dynamic g1,
- dynamic g2
)
Implementation
static num getPairAdjustment(Font font, g1, g2) {
num offset = 0;
if (font.GPOS != null) {
var gpos = font.GPOS;
var llist = gpos["lookupList"], flist = gpos["featureList"];
Map<int, bool> tused = {};
for (int i = 0; i < flist.length; i++) {
var fl = flist[i];
//console.warn(fl);
if (fl["tag"] != "kern") continue;
var _fl_tab = fl["tab"];
for (int ti = 0; ti < _fl_tab.length; ti++) {
var _ftti = _fl_tab[ti];
if (tused[_ftti] == true) continue;
tused[_ftti] = true;
var tab = llist[_ftti];
//console.warn(tab);
for (int j = 0; j < tab["tabs"].length; j++) {
if (tab["tabs"][j] == null) continue;
var ltab = tab["tabs"][j], ind;
if (ltab["coverage"] != null) {
ind = Typr_LCTF.coverageIndex(ltab["coverage"], g1);
if (ind == -1) continue;
}
if (tab["ltype"] == 1) {
//console.warn(ltab);
}
else if (tab["ltype"] == 2) {
var adj;
if (ltab["fmt"] == 1) {
var right = ltab["pairsets"][ind];
for (int i = 0; i < right.length; i++)
if (right[i].gid2 == g2) adj = right[i];
}
else if (ltab["fmt"] == 2) {
int c1 = _getGlyphClass(g1, ltab["classDef1"]);
int c2 = _getGlyphClass(g2, ltab["classDef2"]);
adj = ltab["matrix"][c1][c2];
}
if (adj != null &&
adj["val1"] != null &&
adj["val1"][2] != null) {
offset += adj.val1[2]; // xAdvance adjustment of first glyph
}
if (adj != null &&
adj["val2"] != null &&
adj["val2"][0] != null) {
offset += adj.val2[0]; // xPlacement adjustment of second glyph
}
}
}
}
}
}
if (font.kern != null) {
var ind1 = font.kern.glyph1.indexOf(g1);
if (ind1 != -1) {
var ind2 = font.kern.rval[ind1].glyph2.indexOf(g2);
if (ind2 != -1) offset += font.kern.rval[ind1].vals[ind2];
}
}
return offset;
}