parseKern method
Returns pair-kerning values in font units.
Only handles the classic kern table format 0 (horizontal pairs).
Returns an empty map if the table is absent or has no format-0 subtables.
Implementation
Map<(int, int), int> parseKern() {
final kern = _tableOffsets['kern'];
if (kern == null) return {};
final result = <(int, int), int>{};
final nTables = _data.getUint16(kern + 2);
int pos = kern + 4;
for (int t = 0; t < nTables; t++) {
if (pos + 6 > _data.lengthInBytes) break;
final subtableLength = _data.getUint16(pos + 2);
final coverage = _data.getUint16(pos + 4);
final format = (coverage >> 8) & 0xFF;
final isHorizontal = coverage & 0x01 != 0;
if (format == 0 && isHorizontal) {
final nPairs = _data.getUint16(pos + 6);
for (int p = 0; p < nPairs; p++) {
final pairOff = pos + 14 + p * 6;
if (pairOff + 6 > _data.lengthInBytes) break;
final left = _data.getUint16(pairOff);
final right = _data.getUint16(pairOff + 2);
final value = _data.getInt16(pairOff + 4);
result[(left, right)] = value;
}
}
pos += subtableLength;
}
return result;
}