From 676a66fad30444194e93d5e1714ed7b0044ed3d7 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Tue, 14 Jun 2022 17:01:21 +0100 Subject: [PATCH] otTables: make DeltaSetIndexMap TTX dump less verbose by omitting no-op entries though we still emit the empty elements; they help identify chunks of delta-set indices, and define the length of the array upon loading from XML --- Lib/fontTools/ttLib/tables/otTables.py | 26 +++++++++++++++++++------- Tests/ttLib/tables/C_O_L_R_test.py | 22 +++++++++++----------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/Lib/fontTools/ttLib/tables/otTables.py b/Lib/fontTools/ttLib/tables/otTables.py index fbd9db7bd..69170e35f 100644 --- a/Lib/fontTools/ttLib/tables/otTables.py +++ b/Lib/fontTools/ttLib/tables/otTables.py @@ -600,6 +600,11 @@ class Coverage(FormatSwitchingBaseTable): glyphs.append(attrs["value"]) +# The special 0xFFFFFFFF delta-set index is used to indicate that there +# is no variation data in the ItemVariationStore for a given variable field +NO_VARIATION_INDEX = 0xFFFFFFFF + + class DeltaSetIndexMap(getFormatSwitchingBaseTableClass("uint8")): def populateDefaults(self, propagator=None): @@ -647,12 +652,19 @@ class DeltaSetIndexMap(getFormatSwitchingBaseTableClass("uint8")): return rawTable def toXML2(self, xmlWriter, font): + # Make xml dump less verbose, by omitting no-op entries like: + # + xmlWriter.comment( + "Omitted values default to 0xFFFF/0xFFFF (no variations)" + ) + xmlWriter.newline() for i, value in enumerate(getattr(self, "mapping", [])): - attrs = ( - ('index', i), - ('outer', value >> 16), - ('inner', value & 0xFFFF), - ) + attrs = [('index', i)] + if value != NO_VARIATION_INDEX: + attrs.extend([ + ('outer', value >> 16), + ('inner', value & 0xFFFF), + ]) xmlWriter.simpletag("Map", attrs) xmlWriter.newline() @@ -661,8 +673,8 @@ class DeltaSetIndexMap(getFormatSwitchingBaseTableClass("uint8")): if mapping is None: self.mapping = mapping = [] index = safeEval(attrs['index']) - outer = safeEval(attrs['outer']) - inner = safeEval(attrs['inner']) + outer = safeEval(attrs.get('outer', '0xFFFF')) + inner = safeEval(attrs.get('inner', '0xFFFF')) assert inner <= 0xFFFF mapping.insert(index, (outer << 16) | inner) diff --git a/Tests/ttLib/tables/C_O_L_R_test.py b/Tests/ttLib/tables/C_O_L_R_test.py index aaf330030..11ddd67f5 100644 --- a/Tests/ttLib/tables/C_O_L_R_test.py +++ b/Tests/ttLib/tables/C_O_L_R_test.py @@ -532,17 +532,18 @@ COLR_V1_XML = [ COLR_V1_VAR_XML = [ '', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', ' ', ' ', ' ', - ' ', - ' ', + ' ', + ' ', ' ', ' ', "", @@ -571,12 +572,11 @@ COLR_V1_VAR_XML = [ ' ', " ", ' ', - " ", + " ", ' ', " ", ' ', - ' ', - ' ', + ' ', " ", "", ]