diff --git a/Lib/fontTools/feaLib/ast.py b/Lib/fontTools/feaLib/ast.py index 5289b1002..39dc4bcf8 100644 --- a/Lib/fontTools/feaLib/ast.py +++ b/Lib/fontTools/feaLib/ast.py @@ -821,19 +821,20 @@ class LookupFlagStatement(Statement): markAttach, markFilter) def asFea(self, indent=""): - res = "lookupflag" + res = [] flags = ["RightToLeft", "IgnoreBaseGlyphs", "IgnoreLigatures", "IgnoreMarks"] curr = 1 for i in range(len(flags)): if self.value & curr != 0: - res += " " + flags[i] + res.append(flags[i]) curr = curr << 1 if self.markAttachment is not None: - res += " MarkAttachmentType {}".format(self.markAttachment.asFea()) + res.append("MarkAttachmentType {}".format(self.markAttachment.asFea())) if self.markFilteringSet is not None: - res += " UseMarkFilteringSet {}".format(self.markFilteringSet.asFea()) - res += ";" - return res + res.append("UseMarkFilteringSet {}".format(self.markFilteringSet.asFea())) + if not res: + res = ["0"] + return "lookupflag {};".format(" ".join(res)) class LookupReferenceStatement(Statement): diff --git a/Tests/feaLib/parser_test.py b/Tests/feaLib/parser_test.py index 764bbb006..1b51b2af0 100644 --- a/Tests/feaLib/parser_test.py +++ b/Tests/feaLib/parser_test.py @@ -677,6 +677,7 @@ class ParserTest(unittest.TestCase): self.assertEqual(flag.value, 9) self.assertIsNone(flag.markAttachment) self.assertIsNone(flag.markFilteringSet) + self.assertEqual(flag.asFea(), "lookupflag RightToLeft IgnoreMarks;") def test_lookupflag_format_A_MarkAttachmentType(self): flag = self.parse_lookupflag_( @@ -688,6 +689,8 @@ class ParserTest(unittest.TestCase): self.assertEqual(flag.markAttachment.glyphSet(), ("acute", "grave", "macron")) self.assertIsNone(flag.markFilteringSet) + self.assertEqual(flag.asFea(), + "lookupflag RightToLeft MarkAttachmentType @TOP_MARKS;") def test_lookupflag_format_A_UseMarkFilteringSet(self): flag = self.parse_lookupflag_( @@ -699,6 +702,8 @@ class ParserTest(unittest.TestCase): self.assertIsInstance(flag.markFilteringSet, ast.GlyphClassName) self.assertEqual(flag.markFilteringSet.glyphSet(), ("cedilla", "ogonek")) + self.assertEqual(flag.asFea(), + "lookupflag IgnoreLigatures UseMarkFilteringSet @BOTTOM_MARKS;") def test_lookupflag_format_B(self): flag = self.parse_lookupflag_("lookupflag 7;") @@ -706,6 +711,16 @@ class ParserTest(unittest.TestCase): self.assertEqual(flag.value, 7) self.assertIsNone(flag.markAttachment) self.assertIsNone(flag.markFilteringSet) + self.assertEqual(flag.asFea(), + "lookupflag RightToLeft IgnoreBaseGlyphs IgnoreLigatures;") + + def test_lookupflag_format_B_zero(self): + flag = self.parse_lookupflag_("lookupflag 0;") + self.assertIsInstance(flag, ast.LookupFlagStatement) + self.assertEqual(flag.value, 0) + self.assertIsNone(flag.markAttachment) + self.assertIsNone(flag.markFilteringSet) + self.assertEqual(flag.asFea(), "lookupflag 0;") def test_lookupflag_repeated(self): self.assertRaisesRegex(