[feaLib] Correctly handle lookupflag 0 in asFea()

Part of https://github.com/fonttools/fonttools/issues/1538
This commit is contained in:
Khaled Hosny 2019-03-15 13:46:32 +02:00
parent 079f68350f
commit 250eac4cae
2 changed files with 22 additions and 6 deletions

View File

@ -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):

View File

@ -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(