-
Notifications
You must be signed in to change notification settings - Fork 166
Closed
Description
Could makeotf possibly save some space when building class-based kerning tables (GPOS type 2, format 2)?
Input feature file:
feature kern {
pos [T] [comma semicolon period] -100;
} kern;
Output from makeotf v2.0.90:
<Lookup index="0">
<!-- LookupType=2 -->
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<PairPos index="0" Format="2">
<Coverage>
<Glyph value="T"/>
</Coverage>
<ValueFormat1 value="4"/>
<ValueFormat2 value="0"/>
<ClassDef1>
</ClassDef1>
<ClassDef2>
<ClassDef glyph="comma" class="1"/>
<ClassDef glyph="period" class="1"/>
<ClassDef glyph="semicolon" class="1"/>
</ClassDef2>
<!-- Class1Count=1 -->
<!-- Class2Count=2 -->
<Class1Record index="0">
<Class2Record index="0">
<Value1 XAdvance="0"/>
</Class2Record>
<Class2Record index="1">
<Value1 XAdvance="-100"/>
</Class2Record>
</Class1Record>
</PairPos>
</Lookup>Wouldn’t the following be equivalent? As in the above version, ClassDef1 would continue to omit entries for glyph class 0 (because for glyphs in the Coverage table, ClassDef1 defaults to 0). However, ClassDef2 would actually assign class 0, so the dummy Class2Records for class 0 would not be needed anymore. There’s one Class2Record for every Class1Record, so the savings might add up in a large font.
<Lookup index="0">
<!-- LookupType=2 -->
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<PairPos index="0" Format="2">
<Coverage>
<Glyph value="T"/>
</Coverage>
<ValueFormat1 value="4"/>
<ValueFormat2 value="0"/>
<ClassDef1>
</ClassDef1>
<ClassDef2>
<ClassDef glyph="comma" class="0"/>
<ClassDef glyph="period" class="0"/>
<ClassDef glyph="semicolon" class="0"/>
</ClassDef2>
<!-- Class1Count=1 -->
<!-- Class2Count=1 -->
<Class1Record index="0">
<Class2Record index="0">
<Value1 XAdvance="-100"/>
</Class2Record>
</Class1Record>
</PairPos>
</Lookup>Metadata
Metadata
Assignees
Labels
No labels