Skip to content

Commit a5ed37f

Browse files
committed
varLib: don't build empty HVAR or gvar tables
Fixes fonttools#1670
1 parent 1dcb3c2 commit a5ed37f

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

Lib/fontTools/varLib/__init__.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -311,15 +311,13 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
311311

312312
log.info("Generating gvar")
313313
assert "gvar" not in font
314-
gvar = font["gvar"] = newTable('gvar')
315-
gvar.version = 1
316-
gvar.reserved = 0
317-
gvar.variations = {}
318314

319315
glyf = font['glyf']
320316

321317
# use hhea.ascent of base master as default vertical origin when vmtx is missing
322318
defaultVerticalOrigin = font['hhea'].ascent
319+
320+
variations = {}
323321
for glyph in font.getGlyphOrder():
324322

325323
isComposite = glyf[glyph].isComposite()
@@ -339,7 +337,6 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
339337
del allControls
340338

341339
# Update gvar
342-
gvar.variations[glyph] = []
343340
deltas = model.getDeltas(allCoords)
344341
supports = model.supports
345342
assert len(deltas) == len(supports)
@@ -378,7 +375,14 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
378375
if optimized_len < unoptimized_len:
379376
var = var_opt
380377

381-
gvar.variations[glyph].append(var)
378+
variations.setdefault(glyph, []).append(var)
379+
380+
if variations:
381+
gvar = font["gvar"] = newTable('gvar')
382+
gvar.version = 1
383+
gvar.reserved = 0
384+
gvar.variations = variations
385+
382386

383387
def _remove_TTHinting(font):
384388
for tag in ("cvar", "cvt ", "fpgm", "prep"):
@@ -482,10 +486,6 @@ def _add_VHVAR(font, masterModel, master_ttfs, axisTags, tableFields):
482486
tableTag = tableFields.tableTag
483487
assert tableTag not in font
484488
log.info("Generating " + tableTag)
485-
VHVAR = newTable(tableTag)
486-
tableClass = getattr(ot, tableTag)
487-
vhvar = VHVAR.table = tableClass()
488-
vhvar.Version = 0x00010000
489489

490490
glyphOrder = font.getGlyphOrder()
491491

@@ -505,7 +505,15 @@ def _add_VHVAR(font, masterModel, master_ttfs, axisTags, tableFields):
505505
masterModel, master_ttfs, axisTags, glyphOrder, advMetricses,
506506
vOrigMetricses)
507507

508+
if not metricsStore.VarRegionList.Region: # VarStore is empty
509+
return
510+
511+
VHVAR = newTable(tableTag)
512+
tableClass = getattr(ot, tableTag)
513+
vhvar = VHVAR.table = tableClass()
514+
vhvar.Version = 0x00010000
508515
vhvar.VarStore = metricsStore
516+
509517
if advanceMapping is None:
510518
setattr(vhvar, tableFields.advMapping, None)
511519
else:
@@ -516,7 +524,7 @@ def _add_VHVAR(font, masterModel, master_ttfs, axisTags, tableFields):
516524
setattr(vhvar, tableFields.sb2, None)
517525

518526
font[tableTag] = VHVAR
519-
return
527+
520528

521529
def _get_advance_metrics(font, masterModel, master_ttfs,
522530
axisTags, glyphOrder, advMetricses, vOrigMetricses=None):

0 commit comments

Comments
 (0)