internal void ReadKerning()
{
int[] table_location;
tables.TryGetValue("kern", out table_location);
if (table_location == null)
return;
rf.Seek(table_location[0] + 2);
int nTables = rf.ReadUnsignedShort();
int checkpoint = table_location[0] + 4;
int length = 0;
for (int k = 0; k < nTables; ++k) {
checkpoint += length;
rf.Seek(checkpoint);
rf.SkipBytes(2);
length = rf.ReadUnsignedShort();
int coverage = rf.ReadUnsignedShort();
if ((coverage & 0xfff7) == 0x0001) {
int nPairs = rf.ReadUnsignedShort();
rf.SkipBytes(6);
for (int j = 0; j < nPairs; ++j) {
int pair = rf.ReadInt();
int value = ((int)rf.ReadShort() * 1000) / head.unitsPerEm;
kerning[pair] = value;
}
}
}
}