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"
|
"'reader' and 'transformedTables' arguments are mutually exclusive"
|
||||||
)
|
)
|
||||||
|
|
||||||
if transformedTables is None:
|
if transformedTables is not None and (
|
||||||
transformedTables = woff2TransformedTableTags
|
|
||||||
else:
|
|
||||||
if (
|
|
||||||
"glyf" in transformedTables and "loca" not in transformedTables
|
"glyf" in transformedTables and "loca" not in transformedTables
|
||||||
or "loca" in transformedTables and "glyf" not in transformedTables
|
or "loca" in transformedTables and "glyf" not in transformedTables
|
||||||
):
|
):
|
||||||
@ -1198,9 +1195,12 @@ class WOFF2FlavorData(WOFFFlavorData):
|
|||||||
self.majorVersion = data.minorVersion
|
self.majorVersion = data.minorVersion
|
||||||
self.metaData = data.metaData
|
self.metaData = data.metaData
|
||||||
self.privData = data.privData
|
self.privData = data.privData
|
||||||
if hasattr(data, "transformedTables"):
|
if transformedTables is None and hasattr(data, "transformedTables"):
|
||||||
transformedTables = data.transformedTables
|
transformedTables = data.transformedTables
|
||||||
|
|
||||||
|
if transformedTables is None:
|
||||||
|
transformedTables = woff2TransformedTableTags
|
||||||
|
|
||||||
self.transformedTables = set(transformedTables)
|
self.transformedTables = set(transformedTables)
|
||||||
|
|
||||||
|
|
||||||
|
@ -386,15 +386,18 @@ class WOFF2FlavorDataTest(unittest.TestCase):
|
|||||||
self.assertEqual(flavorData.minorVersion, 1)
|
self.assertEqual(flavorData.minorVersion, 1)
|
||||||
|
|
||||||
def test_mutually_exclusive_args(self):
|
def test_mutually_exclusive_args(self):
|
||||||
|
msg = "arguments are mutually exclusive"
|
||||||
reader = DummyReader(self.file)
|
reader = DummyReader(self.file)
|
||||||
with self.assertRaisesRegex(TypeError, "arguments are mutually exclusive"):
|
with self.assertRaisesRegex(TypeError, msg):
|
||||||
WOFF2FlavorData(reader, transformedTables={"hmtx"})
|
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()
|
flavorData = WOFF2FlavorData()
|
||||||
self.assertEqual(flavorData.transformedTables, set(woff2TransformedTableTags))
|
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"
|
msg = r"'glyf' and 'loca' must be transformed \(or not\) together"
|
||||||
|
|
||||||
with self.assertRaisesRegex(ValueError, msg):
|
with self.assertRaisesRegex(ValueError, msg):
|
||||||
@ -1258,6 +1261,24 @@ class MainTest(object):
|
|||||||
|
|
||||||
assert (tmpdir / "TestOTF-Regular.woff2").check(file=True)
|
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):
|
def test_decompress_ttf(self, tmpdir):
|
||||||
input_file = tmpdir / "TestTTF-Regular.woff2"
|
input_file = tmpdir / "TestTTF-Regular.woff2"
|
||||||
input_file.write_binary(TT_WOFF2.getvalue())
|
input_file.write_binary(TT_WOFF2.getvalue())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user