Skip to content

Commit 84e9ea1

Browse files
committed
woff2: allow to recompress woff2 while keeping flavorData
optionally modifying the list of transformed tables
1 parent 1c369da commit 84e9ea1

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

Lib/fontTools/ttLib/woff2.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,10 +1158,7 @@ def __init__(self, reader=None, data=None, transformedTables=None):
11581158
"'reader' and 'transformedTables' arguments are mutually exclusive"
11591159
)
11601160

1161-
if transformedTables is None:
1162-
transformedTables = woff2TransformedTableTags
1163-
else:
1164-
if (
1161+
if transformedTables is not None and (
11651162
"glyf" in transformedTables and "loca" not in transformedTables
11661163
or "loca" in transformedTables and "glyf" not in transformedTables
11671164
):
@@ -1198,9 +1195,12 @@ def __init__(self, reader=None, data=None, transformedTables=None):
11981195
self.majorVersion = data.minorVersion
11991196
self.metaData = data.metaData
12001197
self.privData = data.privData
1201-
if hasattr(data, "transformedTables"):
1198+
if transformedTables is None and hasattr(data, "transformedTables"):
12021199
transformedTables = data.transformedTables
12031200

1201+
if transformedTables is None:
1202+
transformedTables = woff2TransformedTableTags
1203+
12041204
self.transformedTables = set(transformedTables)
12051205

12061206

Tests/ttLib/woff2_test.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -386,15 +386,18 @@ def test_get_major_minorVersion(self):
386386
self.assertEqual(flavorData.minorVersion, 1)
387387

388388
def test_mutually_exclusive_args(self):
389+
msg = "arguments are mutually exclusive"
389390
reader = DummyReader(self.file)
390-
with self.assertRaisesRegex(TypeError, "arguments are mutually exclusive"):
391+
with self.assertRaisesRegex(TypeError, msg):
391392
WOFF2FlavorData(reader, transformedTables={"hmtx"})
393+
with self.assertRaisesRegex(TypeError, msg):
394+
WOFF2FlavorData(reader, data=WOFF2FlavorData())
392395

393-
def test_transformTables_default(self):
396+
def test_transformedTables_default(self):
394397
flavorData = WOFF2FlavorData()
395398
self.assertEqual(flavorData.transformedTables, set(woff2TransformedTableTags))
396399

397-
def test_transformTables_invalid(self):
400+
def test_transformedTables_invalid(self):
398401
msg = r"'glyf' and 'loca' must be transformed \(or not\) together"
399402

400403
with self.assertRaisesRegex(ValueError, msg):
@@ -1258,6 +1261,24 @@ def test_compress_otf(self, tmpdir):
12581261

12591262
assert (tmpdir / "TestOTF-Regular.woff2").check(file=True)
12601263

1264+
def test_recompress_woff2_keeps_flavorData(self, tmpdir):
1265+
woff2_font = ttLib.TTFont(BytesIO(TT_WOFF2.getvalue()))
1266+
woff2_font.flavorData.privData = b"FOOBAR"
1267+
woff2_file = tmpdir / "TestTTF-Regular.woff2"
1268+
woff2_font.save(str(woff2_file))
1269+
1270+
assert woff2_font.flavorData.transformedTables == {"glyf", "loca"}
1271+
1272+
woff2.main(["compress", "--hmtx-transform", str(woff2_file)])
1273+
1274+
output_file = tmpdir / "TestTTF-Regular#1.woff2"
1275+
assert output_file.check(file=True)
1276+
1277+
new_woff2_font = ttLib.TTFont(str(output_file))
1278+
1279+
assert new_woff2_font.flavorData.transformedTables == {"glyf", "loca", "hmtx"}
1280+
assert new_woff2_font.flavorData.privData == b"FOOBAR"
1281+
12611282
def test_decompress_ttf(self, tmpdir):
12621283
input_file = tmpdir / "TestTTF-Regular.woff2"
12631284
input_file.write_binary(TT_WOFF2.getvalue())

0 commit comments

Comments
 (0)