diff --git a/Lib/fontTools/subset/__init__.py b/Lib/fontTools/subset/__init__.py index 2367decc9..8d196ac07 100644 --- a/Lib/fontTools/subset/__init__.py +++ b/Lib/fontTools/subset/__init__.py @@ -1803,15 +1803,12 @@ def subset_glyphs(self, s): # TODO Update for retain_gids used = set() - retainAdvMap = False if table.AdvWidthMap: table.AdvWidthMap.mapping = _dict_subset(table.AdvWidthMap.mapping, s.glyphs) used.update(table.AdvWidthMap.mapping.values()) else: - assert table.LsbMap is None and table.RsbMap is None, "File a bug." used.update(s.reverseOrigGlyphMap.values()) - retainAdvMap = s.options.retain_gids if table.LsbMap: table.LsbMap.mapping = _dict_subset(table.LsbMap.mapping, s.glyphs) @@ -1820,7 +1817,7 @@ def subset_glyphs(self, s): table.RsbMap.mapping = _dict_subset(table.RsbMap.mapping, s.glyphs) used.update(table.RsbMap.mapping.values()) - varidx_map = varStore.VarStore_subset_varidxes(table.VarStore, used, retainFirstMap=retainAdvMap) + varidx_map = varStore.VarStore_subset_varidxes(table.VarStore, used, retainFirstMap=table.AdvWidthMap is None) if table.AdvWidthMap: table.AdvWidthMap.mapping = _remap_index_map(s, varidx_map, table.AdvWidthMap) @@ -1837,15 +1834,12 @@ def subset_glyphs(self, s): table = self.table used = set() - retainAdvMap = False if table.AdvHeightMap: table.AdvHeightMap.mapping = _dict_subset(table.AdvHeightMap.mapping, s.glyphs) used.update(table.AdvHeightMap.mapping.values()) else: - assert table.TsbMap is None and table.BsbMap is None and table.VOrgMap is None, "File a bug." used.update(s.reverseOrigGlyphMap.values()) - retainAdvMap = s.options.retain_gids if table.TsbMap: table.TsbMap.mapping = _dict_subset(table.TsbMap.mapping, s.glyphs) @@ -1857,7 +1851,7 @@ def subset_glyphs(self, s): table.VOrgMap.mapping = _dict_subset(table.VOrgMap.mapping, s.glyphs) used.update(table.VOrgMap.mapping.values()) - varidx_map = varStore.VarStore_subset_varidxes(table.VarStore, used, retainFirstMap=retainAdvMap) + varidx_map = varStore.VarStore_subset_varidxes(table.VarStore, used, retainFirstMap=table.AdvHeightMap is None) if table.AdvHeightMap: table.AdvHeightMap.mapping = _remap_index_map(s, varidx_map, table.AdvHeightMap) diff --git a/Tests/subset/data/TestHVVAR.ttx b/Tests/subset/data/TestHVVAR.ttx new file mode 100644 index 000000000..3e746527e --- /dev/null +++ b/Tests/subset/data/TestHVVAR.ttx @@ -0,0 +1,443 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TestHVVAR + + + Regular + + + 1.000;UKWN;TestHVVAR-Regular + + + TestHVVAR + + + Version 1.000 + + + TestHVVAR-Regular + + + TestHVVAR + + + Regular + + + 1.000;UKWN;TestHVVAR-Regular + + + TestHVVAR-Regular + + + Version 1.000 + + + TestHVVAR-Regular + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wght + 0x0 + 100.0 + 400.0 + 900.0 + 257 + + + + + + + + + + + + + + + + + + + diff --git a/Tests/subset/data/expect_HVVAR.ttx b/Tests/subset/data/expect_HVVAR.ttx new file mode 100644 index 000000000..08d35a887 --- /dev/null +++ b/Tests/subset/data/expect_HVVAR.ttx @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wght + 0x0 + 100.0 + 400.0 + 900.0 + 257 + + + + + + + + + + + + + + + + + + + diff --git a/Tests/subset/data/expect_HVVAR_retain_gids.ttx b/Tests/subset/data/expect_HVVAR_retain_gids.ttx new file mode 100644 index 000000000..da2eaf4f3 --- /dev/null +++ b/Tests/subset/data/expect_HVVAR_retain_gids.ttx @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wght + 0x0 + 100.0 + 400.0 + 900.0 + 257 + + + + + + + + + + + + + + + + + + + diff --git a/Tests/subset/subset_test.py b/Tests/subset/subset_test.py index 2fc3b8afd..c1815452c 100644 --- a/Tests/subset/subset_test.py +++ b/Tests/subset/subset_test.py @@ -586,6 +586,20 @@ class SubsetTest(unittest.TestCase): self.assertGreater(len(cs["A"].program), 0) self.assertEqual(cs["glyph00002"].program, []) + def test_HVAR_VVAR(self): + _, fontpath = self.compile_font(self.getpath("TestHVVAR.ttx"), ".ttf") + subsetpath = self.temp_path(".ttf") + subset.main([fontpath, "--text=BD", "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath("expect_HVVAR.ttx"), ["GlyphOrder", "HVAR", "VVAR", "avar", "fvar"]) + + def test_HVAR_VVAR_retain_gids(self): + _, fontpath = self.compile_font(self.getpath("TestHVVAR.ttx"), ".ttf") + subsetpath = self.temp_path(".ttf") + subset.main([fontpath, "--text=BD", "--retain-gids", "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath("expect_HVVAR_retain_gids.ttx"), ["GlyphOrder", "HVAR", "VVAR", "avar", "fvar"]) + if __name__ == "__main__": sys.exit(unittest.main())