[feaLib] don't de-duplicate lookups
keep original lookup order and preserve the feature file's semantics Fixes https://github.com/fonttools/fonttools/issues/448
This commit is contained in:
parent
0f1de0873f
commit
12b90f073e
@ -451,22 +451,9 @@ class Builder(object):
|
|||||||
for lookup in self.lookups_:
|
for lookup in self.lookups_:
|
||||||
lookup.lookup_index = None
|
lookup.lookup_index = None
|
||||||
lookups = []
|
lookups = []
|
||||||
for i, lookup in enumerate(self.lookups_):
|
for lookup in self.lookups_:
|
||||||
if lookup.table != tag:
|
if lookup.table != tag:
|
||||||
continue
|
continue
|
||||||
# TODO: https://github.com/behdad/fonttools/issues/448
|
|
||||||
# If multiple lookup builders would build equivalent lookups,
|
|
||||||
# emit them only once. This is quadratic in the number of lookups,
|
|
||||||
# but the checks are cheap. If performance ever becomes an issue,
|
|
||||||
# we could hash the lookup content and only compare those with
|
|
||||||
# the same hash value.
|
|
||||||
equivalent = None
|
|
||||||
for other in self.lookups_[:i]:
|
|
||||||
if lookup.equals(other):
|
|
||||||
equivalent = other
|
|
||||||
if equivalent is not None:
|
|
||||||
lookup.lookup_index = equivalent.lookup_index
|
|
||||||
continue
|
|
||||||
lookup.lookup_index = len(lookups)
|
lookup.lookup_index = len(lookups)
|
||||||
lookups.append(lookup)
|
lookups.append(lookup)
|
||||||
return [l.build() for l in lookups]
|
return [l.build() for l in lookups]
|
||||||
|
@ -31,12 +31,12 @@
|
|||||||
<FeatureTag value="f2 "/>
|
<FeatureTag value="f2 "/>
|
||||||
<Feature>
|
<Feature>
|
||||||
<!-- LookupCount=1 -->
|
<!-- LookupCount=1 -->
|
||||||
<LookupListIndex index="0" value="0"/>
|
<LookupListIndex index="0" value="1"/>
|
||||||
</Feature>
|
</Feature>
|
||||||
</FeatureRecord>
|
</FeatureRecord>
|
||||||
</FeatureList>
|
</FeatureList>
|
||||||
<LookupList>
|
<LookupList>
|
||||||
<!-- LookupCount=1 -->
|
<!-- LookupCount=2 -->
|
||||||
<Lookup index="0">
|
<Lookup index="0">
|
||||||
<LookupType value="2"/>
|
<LookupType value="2"/>
|
||||||
<LookupFlag value="0"/>
|
<LookupFlag value="0"/>
|
||||||
@ -47,6 +47,16 @@
|
|||||||
<Substitution in="f_i" out="f,i"/>
|
<Substitution in="f_i" out="f,i"/>
|
||||||
</MultipleSubst>
|
</MultipleSubst>
|
||||||
</Lookup>
|
</Lookup>
|
||||||
|
<Lookup index="1">
|
||||||
|
<LookupType value="2"/>
|
||||||
|
<LookupFlag value="0"/>
|
||||||
|
<!-- SubTableCount=1 -->
|
||||||
|
<MultipleSubst index="0">
|
||||||
|
<Substitution in="c_t" out="c,t"/>
|
||||||
|
<Substitution in="f_f_i" out="f,f,i"/>
|
||||||
|
<Substitution in="f_i" out="f,i"/>
|
||||||
|
</MultipleSubst>
|
||||||
|
</Lookup>
|
||||||
</LookupList>
|
</LookupList>
|
||||||
</GSUB>
|
</GSUB>
|
||||||
|
|
||||||
|
@ -31,12 +31,12 @@
|
|||||||
<FeatureTag value="f2 "/>
|
<FeatureTag value="f2 "/>
|
||||||
<Feature>
|
<Feature>
|
||||||
<!-- LookupCount=1 -->
|
<!-- LookupCount=1 -->
|
||||||
<LookupListIndex index="0" value="0"/>
|
<LookupListIndex index="0" value="1"/>
|
||||||
</Feature>
|
</Feature>
|
||||||
</FeatureRecord>
|
</FeatureRecord>
|
||||||
</FeatureList>
|
</FeatureList>
|
||||||
<LookupList>
|
<LookupList>
|
||||||
<!-- LookupCount=1 -->
|
<!-- LookupCount=2 -->
|
||||||
<Lookup index="0">
|
<Lookup index="0">
|
||||||
<LookupType value="3"/>
|
<LookupType value="3"/>
|
||||||
<LookupFlag value="0"/>
|
<LookupFlag value="0"/>
|
||||||
@ -56,6 +56,25 @@
|
|||||||
</AlternateSet>
|
</AlternateSet>
|
||||||
</AlternateSubst>
|
</AlternateSubst>
|
||||||
</Lookup>
|
</Lookup>
|
||||||
|
<Lookup index="1">
|
||||||
|
<LookupType value="3"/>
|
||||||
|
<LookupFlag value="0"/>
|
||||||
|
<!-- SubTableCount=1 -->
|
||||||
|
<AlternateSubst index="0">
|
||||||
|
<AlternateSet glyph="A">
|
||||||
|
<Alternate glyph="A.alt1"/>
|
||||||
|
<Alternate glyph="A.alt2"/>
|
||||||
|
</AlternateSet>
|
||||||
|
<AlternateSet glyph="B">
|
||||||
|
<Alternate glyph="B.alt1"/>
|
||||||
|
<Alternate glyph="B.alt2"/>
|
||||||
|
<Alternate glyph="B.alt3"/>
|
||||||
|
</AlternateSet>
|
||||||
|
<AlternateSet glyph="C">
|
||||||
|
<Alternate glyph="C.alt1"/>
|
||||||
|
</AlternateSet>
|
||||||
|
</AlternateSubst>
|
||||||
|
</Lookup>
|
||||||
</LookupList>
|
</LookupList>
|
||||||
</GSUB>
|
</GSUB>
|
||||||
|
|
||||||
|
@ -31,12 +31,12 @@
|
|||||||
<FeatureTag value="F2 "/>
|
<FeatureTag value="F2 "/>
|
||||||
<Feature>
|
<Feature>
|
||||||
<!-- LookupCount=1 -->
|
<!-- LookupCount=1 -->
|
||||||
<LookupListIndex index="0" value="0"/>
|
<LookupListIndex index="0" value="1"/>
|
||||||
</Feature>
|
</Feature>
|
||||||
</FeatureRecord>
|
</FeatureRecord>
|
||||||
</FeatureList>
|
</FeatureList>
|
||||||
<LookupList>
|
<LookupList>
|
||||||
<!-- LookupCount=1 -->
|
<!-- LookupCount=2 -->
|
||||||
<Lookup index="0">
|
<Lookup index="0">
|
||||||
<LookupType value="4"/>
|
<LookupType value="4"/>
|
||||||
<LookupFlag value="0"/>
|
<LookupFlag value="0"/>
|
||||||
@ -56,6 +56,25 @@
|
|||||||
</LigatureSet>
|
</LigatureSet>
|
||||||
</LigatureSubst>
|
</LigatureSubst>
|
||||||
</Lookup>
|
</Lookup>
|
||||||
|
<Lookup index="1">
|
||||||
|
<LookupType value="4"/>
|
||||||
|
<LookupFlag value="0"/>
|
||||||
|
<!-- SubTableCount=1 -->
|
||||||
|
<LigatureSubst index="0">
|
||||||
|
<LigatureSet glyph="one">
|
||||||
|
<Ligature components="fraction,two" glyph="onehalf"/>
|
||||||
|
<Ligature components="fraction,two.oldstyle" glyph="onehalf"/>
|
||||||
|
<Ligature components="slash,two" glyph="onehalf"/>
|
||||||
|
<Ligature components="slash,two.oldstyle" glyph="onehalf"/>
|
||||||
|
</LigatureSet>
|
||||||
|
<LigatureSet glyph="one.oldstyle">
|
||||||
|
<Ligature components="fraction,two" glyph="onehalf"/>
|
||||||
|
<Ligature components="fraction,two.oldstyle" glyph="onehalf"/>
|
||||||
|
<Ligature components="slash,two" glyph="onehalf"/>
|
||||||
|
<Ligature components="slash,two.oldstyle" glyph="onehalf"/>
|
||||||
|
</LigatureSet>
|
||||||
|
</LigatureSubst>
|
||||||
|
</Lookup>
|
||||||
</LookupList>
|
</LookupList>
|
||||||
</GSUB>
|
</GSUB>
|
||||||
|
|
||||||
|
@ -31,12 +31,12 @@
|
|||||||
<FeatureTag value="F2 "/>
|
<FeatureTag value="F2 "/>
|
||||||
<Feature>
|
<Feature>
|
||||||
<!-- LookupCount=1 -->
|
<!-- LookupCount=1 -->
|
||||||
<LookupListIndex index="0" value="0"/>
|
<LookupListIndex index="0" value="1"/>
|
||||||
</Feature>
|
</Feature>
|
||||||
</FeatureRecord>
|
</FeatureRecord>
|
||||||
</FeatureList>
|
</FeatureList>
|
||||||
<LookupList>
|
<LookupList>
|
||||||
<!-- LookupCount=1 -->
|
<!-- LookupCount=2 -->
|
||||||
<Lookup index="0">
|
<Lookup index="0">
|
||||||
<LookupType value="4"/>
|
<LookupType value="4"/>
|
||||||
<LookupFlag value="0"/>
|
<LookupFlag value="0"/>
|
||||||
@ -52,6 +52,21 @@
|
|||||||
</LigatureSet>
|
</LigatureSet>
|
||||||
</LigatureSubst>
|
</LigatureSubst>
|
||||||
</Lookup>
|
</Lookup>
|
||||||
|
<Lookup index="1">
|
||||||
|
<LookupType value="4"/>
|
||||||
|
<LookupFlag value="0"/>
|
||||||
|
<!-- SubTableCount=1 -->
|
||||||
|
<LigatureSubst index="0">
|
||||||
|
<LigatureSet glyph="f">
|
||||||
|
<Ligature components="f,i" glyph="f_f_i"/>
|
||||||
|
<Ligature components="f" glyph="f_f"/>
|
||||||
|
<Ligature components="i" glyph="f_i"/>
|
||||||
|
</LigatureSet>
|
||||||
|
<LigatureSet glyph="o">
|
||||||
|
<Ligature components="f,f,i" glyph="o_f_f_i"/>
|
||||||
|
</LigatureSet>
|
||||||
|
</LigatureSubst>
|
||||||
|
</Lookup>
|
||||||
</LookupList>
|
</LookupList>
|
||||||
</GSUB>
|
</GSUB>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user