varLib: don't build empty HVAR or gvar tables

Fixes https://github.com/fonttools/fonttools/issues/1670
This commit is contained in:
Cosimo Lupo 2019-07-26 13:21:13 +01:00
parent 1dcb3c2bde
commit a5ed37f262
No known key found for this signature in database
GPG Key ID: 20D4A261E4A0E642

View File

@ -311,15 +311,13 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
log.info("Generating gvar")
assert "gvar" not in font
gvar = font["gvar"] = newTable('gvar')
gvar.version = 1
gvar.reserved = 0
gvar.variations = {}
glyf = font['glyf']
# use hhea.ascent of base master as default vertical origin when vmtx is missing
defaultVerticalOrigin = font['hhea'].ascent
variations = {}
for glyph in font.getGlyphOrder():
isComposite = glyf[glyph].isComposite()
@ -339,7 +337,6 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
del allControls
# Update gvar
gvar.variations[glyph] = []
deltas = model.getDeltas(allCoords)
supports = model.supports
assert len(deltas) == len(supports)
@ -378,7 +375,14 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
if optimized_len < unoptimized_len:
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 = variations
def _remove_TTHinting(font):
for tag in ("cvar", "cvt ", "fpgm", "prep"):
@ -482,10 +486,6 @@ def _add_VHVAR(font, masterModel, master_ttfs, axisTags, tableFields):
tableTag = tableFields.tableTag
assert tableTag not in font
log.info("Generating " + tableTag)
VHVAR = newTable(tableTag)
tableClass = getattr(ot, tableTag)
vhvar = VHVAR.table = tableClass()
vhvar.Version = 0x00010000
glyphOrder = font.getGlyphOrder()
@ -505,7 +505,15 @@ def _add_VHVAR(font, masterModel, master_ttfs, axisTags, tableFields):
masterModel, master_ttfs, axisTags, glyphOrder, advMetricses,
vOrigMetricses)
if not metricsStore.VarRegionList.Region: # VarStore is empty
return
VHVAR = newTable(tableTag)
tableClass = getattr(ot, tableTag)
vhvar = VHVAR.table = tableClass()
vhvar.Version = 0x00010000
vhvar.VarStore = metricsStore
if advanceMapping is None:
setattr(vhvar, tableFields.advMapping, None)
else:
@ -516,7 +524,7 @@ def _add_VHVAR(font, masterModel, master_ttfs, axisTags, tableFields):
setattr(vhvar, tableFields.sb2, None)
font[tableTag] = VHVAR
return
def _get_advance_metrics(font, masterModel, master_ttfs,
axisTags, glyphOrder, advMetricses, vOrigMetricses=None):