woff2: allow to recompress woff2 while keeping flavorData
optionally modifying the list of transformed tables
This commit is contained in:
parent
1c369da8c9
commit
84e9ea167a
@ -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)
|
||||
|
||||
|
||||
|
@ -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())
|
||||
|
Loading…
x
Reference in New Issue
Block a user