[feaLib] Correctly handle lookupflag 0 in asFea()
Part of https://github.com/fonttools/fonttools/issues/1538
This commit is contained in:
parent
079f68350f
commit
250eac4cae
@ -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):
|
||||
|
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user