All types of FeatureParams are correctly handled now.
The only thing not handled is broken fonts generated with the
old AFDKO that have their FeatureParams offset computed wrong.
I don't currently plan on handling those.
Fixes https://github.com/behdad/fonttools/issues/38
Eg. EBGaramond12-Regular.ttf. It has a base anchor missing.
Dropping the empty table from XML changes the size of the base
anchor array, which will then result in an assertion because
all bases should have the same array length.
Fixes many other broken fonts too.
Historically, Extension lookups were only decompiled upon access,
and decompiled Extension lookups were possibly copied verbatim to
output when compiling. This discrepancy with all other table types
is confusing and undeed. The possible time saving is not worth the
loss in possible optimization of table data. Remove.
Version is really just a major.minor, NOT a Fixed. But it has
been implemented as Fixed. We now:
1. Check that major is 1,
2. If minor is not 0 (only defined for GDEF so far), then
print the whole thing as hex in XML,
3. When reading the XML, accept hex,
4. In all four methods dealing with Version, support both
fixed version (ie. 1.0), and long version (ie. 0x00010000).
We only needed tableStack to look back for counts. So, just store
counts. Gives ~8 speedup for large fonts I tested. We are not
faster than not loading fonts lazily without this patch, so the
laziness patch combined with this doesn't have a net negative
performance impact anymore.
Huge win for subsetter and anyone else who doesn't need the entire
tables. Subsetting a huge font (eg. NotoSans-Regular.ttf) to a
small set (say, main Cyrillic characters) is something like six
times faster now. Bulk of time was being spent in blowing up the
GPOS kerning pairs and attach points. Now we don't load those if
they won't be in the final subset.
Slight slowdown for usecases that need the entire table.