[AAT] Do not prune AATLookup values

Before this change, the decoder would silently remove "redundant" values
when decompiling AAT lookups. However, it is perfectly valid for a lookup
to map a glyph ID to itself, and also not all AAT lookups have glyph IDs as
their value range.
This commit is contained in:
Sascha Brawer 2017-08-15 18:33:57 +02:00
parent 8b4f0bb1e4
commit 228550a1d2
2 changed files with 8 additions and 7 deletions

View File

@ -565,18 +565,16 @@ class AATLookup(BaseConverter):
def read(self, reader, font, tableDict):
format = reader.readUShort()
conv = self.tableClass(name='Value', repeat=None, aux=None)
# TODO: Do not prune the results.
prune = lambda x: {k:v for k,v in x.items() if k != v}
if format == 0:
return prune(self.readFormat0(reader, font, conv))
return self.readFormat0(reader, font, conv)
elif format == 2:
return prune(self.readFormat2(reader, font, conv))
return self.readFormat2(reader, font, conv)
elif format == 4:
return prune(self.readFormat4(reader, font, conv))
return self.readFormat4(reader, font, conv)
elif format == 6:
return prune(self.readFormat6(reader, font, conv))
return self.readFormat6(reader, font, conv)
elif format == 8:
return prune(self.readFormat8(reader, font, conv))
return self.readFormat8(reader, font, conv)
else:
assert False, "unsupported lookup format: %d" % format

View File

@ -189,6 +189,9 @@ class AATLookupTest(unittest.TestCase):
def test_readFormat0(self):
reader = OTTableReader(deHexStr("0000 0000 0001 0002 0000 7D00 0001"))
self.assertEqual(self.converter.read(reader, self.font, None), {
".notdef": ".notdef",
"A": "A",
"B": "B",
"C": ".notdef",
"D": "glyph32000",
"E": "A"