woff2: allow to recompress woff2 while keeping flavorData

optionally modifying the list of transformed tables
This commit is contained in:
Cosimo Lupo 2019-06-19 12:13:14 +01:00
parent 1c369da8c9
commit 84e9ea167a
No known key found for this signature in database
GPG Key ID: 20D4A261E4A0E642
2 changed files with 29 additions and 8 deletions

View File

@ -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)

View File

@ -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())