我正在阅读ttf规范并实现解析器。但我遇到了解析'GPOS'表的问题。 这是GPOS表规范的链接:http://www.microsoft.com/typography/otspec/gpos.htm 它说: ValueFormat2适用于每对中第二个字形的ValueRecord。所有第二个字形的ValueRecords必须使用ValueFormat2。如果ValueFormat2设置为null,则该对的第二个字形是应该执行查找的“下一个”字形。
我的第一个问题:当'ValueFormat2'为'null'时会发生什么?和'ValueFormat1'一样吗?如果是这样,为什么规范使用不同的表达式?
与ttx生成的.ttx文件相比,我发现GPOS部分中有PairSet重复。但我的解析器无法从ttf二进制文件中读出这样的重复。例如:Windows7上的times.ttf。文件'time.ttx'有以下项目,但我的解析器读出'索引13',然后下一组是'索引16',这意味着我错过了'索引14'和'索引15'。我不知道为什么我不能读出与ttx相同的结果。
我的第二个问题:ttf规范中有什么我错过的吗?这种重复在哪里和哪里解释?提前谢谢!
<PairSet index="13">
<!-- PairValueCount=2 -->
<PairValueRecord index="0">
<SecondGlyph value="comma"/>
<Value1 XAdvance="-133"/>
</PairValueRecord>
<PairValueRecord index="1">
<SecondGlyph value="period"/>
<Value1 XAdvance="-133"/>
</PairValueRecord>
</PairSet>
<PairSet index="14">
<!-- PairValueCount=2 -->
<PairValueRecord index="0">
<SecondGlyph value="comma"/>
<Value1 XAdvance="-133"/>
</PairValueRecord>
<PairValueRecord index="1">
<SecondGlyph value="period"/>
<Value1 XAdvance="-133"/>
</PairValueRecord>
</PairSet>
<PairSet index="15">
<!-- PairValueCount=2 -->
<PairValueRecord index="0">
<SecondGlyph value="comma"/>
<Value1 XAdvance="-133"/>
</PairValueRecord>
<PairValueRecord index="1">
<SecondGlyph value="period"/>
<Value1 XAdvance="-133"/>
</PairValueRecord>
</PairSet>
<PairSet index="16">
<!-- PairValueCount=1 -->
<PairValueRecord index="0">
<SecondGlyph value="quoteleft"/>
<Value1 XAdvance="-152"/>
</PairValueRecord>
</PairSet>