varLib: don't add empty gvar or cvar with no variations

This commit is contained in:
Cosimo Lupo 2019-10-24 14:05:29 +01:00
parent adc5b2997e
commit 4eee7c071d
No known key found for this signature in database
GPG Key ID: 20D4A261E4A0E642

View File

@ -213,15 +213,13 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
log.info("Generating gvar") log.info("Generating gvar")
assert "gvar" not in font assert "gvar" not in font
gvar = font["gvar"] = newTable('gvar')
gvar.version = 1
gvar.reserved = 0
gvar.variations = {}
glyf = font['glyf'] glyf = font['glyf']
# use hhea.ascent of base master as default vertical origin when vmtx is missing # use hhea.ascent of base master as default vertical origin when vmtx is missing
baseAscent = font['hhea'].ascent baseAscent = font['hhea'].ascent
variations = {}
for glyph in font.getGlyphOrder(): for glyph in font.getGlyphOrder():
isComposite = glyf[glyph].isComposite() isComposite = glyf[glyph].isComposite()
@ -241,7 +239,6 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
del allControls del allControls
# Update gvar # Update gvar
gvar.variations[glyph] = []
deltas = model.getDeltas(allCoords) deltas = model.getDeltas(allCoords)
supports = model.supports supports = model.supports
assert len(deltas) == len(supports) assert len(deltas) == len(supports)
@ -280,7 +277,14 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
if optimized_len < unoptimized_len: if optimized_len < unoptimized_len:
var = var_opt var = var_opt
gvar.variations[glyph].append(var) variations.setdefault(glyph, []).append(var)
if variations:
gvar = font["gvar"] = newTable('gvar')
gvar.version = 1
gvar.reserved = 0
gvar.variations = {g: variations.get(g, []) for g in font.getGlyphOrder()}
def _remove_TTHinting(font): def _remove_TTHinting(font):
for tag in ("cvar", "cvt ", "fpgm", "prep"): for tag in ("cvar", "cvt ", "fpgm", "prep"):
@ -350,19 +354,21 @@ def _merge_TTHinting(font, masterModel, master_ttfs, tolerance=0.5):
_remove_TTHinting(font) _remove_TTHinting(font)
return return
# We can build the cvar table now. variations = []
cvar = font["cvar"] = newTable('cvar')
cvar.version = 1
cvar.variations = []
deltas, supports = masterModel.getDeltasAndSupports(all_cvs) deltas, supports = masterModel.getDeltasAndSupports(all_cvs)
for i,(delta,support) in enumerate(zip(deltas[1:], supports[1:])): for i,(delta,support) in enumerate(zip(deltas[1:], supports[1:])):
delta = [otRound(d) for d in delta] delta = [otRound(d) for d in delta]
if all(abs(v) <= tolerance for v in delta): if all(abs(v) <= tolerance for v in delta):
continue continue
var = TupleVariation(support, delta) var = TupleVariation(support, delta)
cvar.variations.append(var) variations.append(var)
# We can build the cvar table now.
if variations:
cvar = font["cvar"] = newTable('cvar')
cvar.version = 1
cvar.variations = variations
_MetricsFields = namedtuple('_MetricsFields', _MetricsFields = namedtuple('_MetricsFields',
['tableTag', 'metricsTag', 'sb1', 'sb2', 'advMapping', 'vOrigMapping']) ['tableTag', 'metricsTag', 'sb1', 'sb2', 'advMapping', 'vOrigMapping'])