diff --git a/Lib/fontTools/ttLib/tables/otConverters.py b/Lib/fontTools/ttLib/tables/otConverters.py index ef5ab46a5..5a845a3ab 100644 --- a/Lib/fontTools/ttLib/tables/otConverters.py +++ b/Lib/fontTools/ttLib/tables/otConverters.py @@ -620,6 +620,15 @@ class AATLookup(BaseConverter): data = reader.readUShortArray(count) return {(first + k):v for (k, v) in enumerate(data)} + def xmlRead(self, attrs, content, font): + value = {} + for element in content: + if isinstance(element, tuple): + name, a, eltContent = element + if name == "Substitution": + value[a["in"]] = a["out"] + return value + def xmlWrite(self, xmlWriter, font, value, name, attrs): xmlWriter.begintag(name, attrs) xmlWriter.newline() diff --git a/Tests/ttLib/tables/otConverters_test.py b/Tests/ttLib/tables/otConverters_test.py index 68f8be9f8..7524cf6a1 100644 --- a/Tests/ttLib/tables/otConverters_test.py +++ b/Tests/ttLib/tables/otConverters_test.py @@ -175,7 +175,7 @@ class UInt8Test(unittest.TestCase): class AATLookupTest(unittest.TestCase): - font = FakeFont(".notdef A B C D E F G H".split()) + font = FakeFont(".notdef A B C D E F G H A.alt B.alt".split()) converter = otConverters.AATLookup("AATLookup", 0, None, None) def __init__(self, methodName): @@ -250,15 +250,23 @@ class AATLookupTest(unittest.TestCase): "unsupported lookup format: 9", self.converter.read, reader, self.font, None) + def test_xmlRead(self): + value = self.converter.xmlRead({}, [ + ("Substitution", {"in": "A", "out": "A.alt"}, []), + ("Substitution", {"in": "B", "out": "B.alt"}, []), + ], self.font) + self.assertEqual(value, {"A": "A.alt", "B": "B.alt"}) + def test_xmlWrite(self): writer = makeXMLWriter() - self.converter.xmlWrite(writer, self.font, value={"A": "B", "C": "D"}, + self.converter.xmlWrite(writer, self.font, + value={"A": "A.alt", "B": "B.alt"}, name="Foo", attrs=[("attr", "val")]) xml = writer.file.getvalue().decode("utf-8").splitlines() self.assertEqual(xml, [ '', - ' ', - ' ', + ' ', + ' ', '', ])