diff --git a/Lib/fontTools/ttLib/woff2.py b/Lib/fontTools/ttLib/woff2.py index 2660348ee..56b119a7c 100644 --- a/Lib/fontTools/ttLib/woff2.py +++ b/Lib/fontTools/ttLib/woff2.py @@ -1158,10 +1158,7 @@ class WOFF2FlavorData(WOFFFlavorData): "'reader' and 'transformedTables' arguments are mutually exclusive" ) - if transformedTables is None: - transformedTables = woff2TransformedTableTags - else: - if ( + if transformedTables is not None and ( "glyf" in transformedTables and "loca" not in transformedTables or "loca" in transformedTables and "glyf" not in transformedTables ): @@ -1198,9 +1195,12 @@ class WOFF2FlavorData(WOFFFlavorData): self.majorVersion = data.minorVersion self.metaData = data.metaData self.privData = data.privData - if hasattr(data, "transformedTables"): + if transformedTables is None and hasattr(data, "transformedTables"): transformedTables = data.transformedTables + if transformedTables is None: + transformedTables = woff2TransformedTableTags + self.transformedTables = set(transformedTables) diff --git a/Tests/ttLib/woff2_test.py b/Tests/ttLib/woff2_test.py index e4c8bb215..4a474aed7 100644 --- a/Tests/ttLib/woff2_test.py +++ b/Tests/ttLib/woff2_test.py @@ -386,15 +386,18 @@ class WOFF2FlavorDataTest(unittest.TestCase): self.assertEqual(flavorData.minorVersion, 1) def test_mutually_exclusive_args(self): + msg = "arguments are mutually exclusive" reader = DummyReader(self.file) - with self.assertRaisesRegex(TypeError, "arguments are mutually exclusive"): + with self.assertRaisesRegex(TypeError, msg): WOFF2FlavorData(reader, transformedTables={"hmtx"}) + with self.assertRaisesRegex(TypeError, msg): + WOFF2FlavorData(reader, data=WOFF2FlavorData()) - def test_transformTables_default(self): + def test_transformedTables_default(self): flavorData = WOFF2FlavorData() self.assertEqual(flavorData.transformedTables, set(woff2TransformedTableTags)) - def test_transformTables_invalid(self): + def test_transformedTables_invalid(self): msg = r"'glyf' and 'loca' must be transformed \(or not\) together" with self.assertRaisesRegex(ValueError, msg): @@ -1258,6 +1261,24 @@ class MainTest(object): assert (tmpdir / "TestOTF-Regular.woff2").check(file=True) + def test_recompress_woff2_keeps_flavorData(self, tmpdir): + woff2_font = ttLib.TTFont(BytesIO(TT_WOFF2.getvalue())) + woff2_font.flavorData.privData = b"FOOBAR" + woff2_file = tmpdir / "TestTTF-Regular.woff2" + woff2_font.save(str(woff2_file)) + + assert woff2_font.flavorData.transformedTables == {"glyf", "loca"} + + woff2.main(["compress", "--hmtx-transform", str(woff2_file)]) + + output_file = tmpdir / "TestTTF-Regular#1.woff2" + assert output_file.check(file=True) + + new_woff2_font = ttLib.TTFont(str(output_file)) + + assert new_woff2_font.flavorData.transformedTables == {"glyf", "loca", "hmtx"} + assert new_woff2_font.flavorData.privData == b"FOOBAR" + def test_decompress_ttf(self, tmpdir): input_file = tmpdir / "TestTTF-Regular.woff2" input_file.write_binary(TT_WOFF2.getvalue())