From ee2d83d4b3ec635e9b487ac1edc9a28def72d02b Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Thu, 21 Apr 2022 18:46:57 +0100 Subject: [PATCH] [merge] use recalcXAvgCharWidth method on merged font Fixes #2538, supersedes #2590 --- Lib/fontTools/merge/__init__.py | 5 +++++ Lib/fontTools/merge/tables.py | 2 +- Tests/merge/data/CFFFont_expected.ttx | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Lib/fontTools/merge/__init__.py b/Lib/fontTools/merge/__init__.py index 152bf0790..3ae2d3836 100644 --- a/Lib/fontTools/merge/__init__.py +++ b/Lib/fontTools/merge/__init__.py @@ -155,6 +155,11 @@ class Merger(object): def _postMerge(self, font): layoutPostMerge(font) + if "OS/2" in font: + # https://github.com/fonttools/fonttools/issues/2538 + # TODO: Add an option to disable this? + font["OS/2"].recalcXAvgCharWidth(font) + __all__ = [ 'Options', diff --git a/Lib/fontTools/merge/tables.py b/Lib/fontTools/merge/tables.py index b266f7a97..ac6d59b52 100644 --- a/Lib/fontTools/merge/tables.py +++ b/Lib/fontTools/merge/tables.py @@ -132,7 +132,7 @@ ttLib.getTableClass('OS/2').mergeMap = { '*': first, 'tableTag': equal, 'version': max, - 'xAvgCharWidth': avg_int, # Apparently fontTools doesn't recalc this + 'xAvgCharWidth': first, # Will be recalculated at the end on the merged font 'fsType': mergeOs2FsType, # Will be overwritten 'panose': first, # FIXME: should really be the first Latin font 'ulUnicodeRange1': bitwise_or, diff --git a/Tests/merge/data/CFFFont_expected.ttx b/Tests/merge/data/CFFFont_expected.ttx index 6e0acc228..c8870e44a 100644 --- a/Tests/merge/data/CFFFont_expected.ttx +++ b/Tests/merge/data/CFFFont_expected.ttx @@ -834,7 +834,7 @@ - +