[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)
|
markAttach, markFilter)
|
||||||
|
|
||||||
def asFea(self, indent=""):
|
def asFea(self, indent=""):
|
||||||
res = "lookupflag"
|
res = []
|
||||||
flags = ["RightToLeft", "IgnoreBaseGlyphs", "IgnoreLigatures", "IgnoreMarks"]
|
flags = ["RightToLeft", "IgnoreBaseGlyphs", "IgnoreLigatures", "IgnoreMarks"]
|
||||||
curr = 1
|
curr = 1
|
||||||
for i in range(len(flags)):
|
for i in range(len(flags)):
|
||||||
if self.value & curr != 0:
|
if self.value & curr != 0:
|
||||||
res += " " + flags[i]
|
res.append(flags[i])
|
||||||
curr = curr << 1
|
curr = curr << 1
|
||||||
if self.markAttachment is not None:
|
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:
|
if self.markFilteringSet is not None:
|
||||||
res += " UseMarkFilteringSet {}".format(self.markFilteringSet.asFea())
|
res.append("UseMarkFilteringSet {}".format(self.markFilteringSet.asFea()))
|
||||||
res += ";"
|
if not res:
|
||||||
return res
|
res = ["0"]
|
||||||
|
return "lookupflag {};".format(" ".join(res))
|
||||||
|
|
||||||
|
|
||||||
class LookupReferenceStatement(Statement):
|
class LookupReferenceStatement(Statement):
|
||||||
|
@ -677,6 +677,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertEqual(flag.value, 9)
|
self.assertEqual(flag.value, 9)
|
||||||
self.assertIsNone(flag.markAttachment)
|
self.assertIsNone(flag.markAttachment)
|
||||||
self.assertIsNone(flag.markFilteringSet)
|
self.assertIsNone(flag.markFilteringSet)
|
||||||
|
self.assertEqual(flag.asFea(), "lookupflag RightToLeft IgnoreMarks;")
|
||||||
|
|
||||||
def test_lookupflag_format_A_MarkAttachmentType(self):
|
def test_lookupflag_format_A_MarkAttachmentType(self):
|
||||||
flag = self.parse_lookupflag_(
|
flag = self.parse_lookupflag_(
|
||||||
@ -688,6 +689,8 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertEqual(flag.markAttachment.glyphSet(),
|
self.assertEqual(flag.markAttachment.glyphSet(),
|
||||||
("acute", "grave", "macron"))
|
("acute", "grave", "macron"))
|
||||||
self.assertIsNone(flag.markFilteringSet)
|
self.assertIsNone(flag.markFilteringSet)
|
||||||
|
self.assertEqual(flag.asFea(),
|
||||||
|
"lookupflag RightToLeft MarkAttachmentType @TOP_MARKS;")
|
||||||
|
|
||||||
def test_lookupflag_format_A_UseMarkFilteringSet(self):
|
def test_lookupflag_format_A_UseMarkFilteringSet(self):
|
||||||
flag = self.parse_lookupflag_(
|
flag = self.parse_lookupflag_(
|
||||||
@ -699,6 +702,8 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsInstance(flag.markFilteringSet, ast.GlyphClassName)
|
self.assertIsInstance(flag.markFilteringSet, ast.GlyphClassName)
|
||||||
self.assertEqual(flag.markFilteringSet.glyphSet(),
|
self.assertEqual(flag.markFilteringSet.glyphSet(),
|
||||||
("cedilla", "ogonek"))
|
("cedilla", "ogonek"))
|
||||||
|
self.assertEqual(flag.asFea(),
|
||||||
|
"lookupflag IgnoreLigatures UseMarkFilteringSet @BOTTOM_MARKS;")
|
||||||
|
|
||||||
def test_lookupflag_format_B(self):
|
def test_lookupflag_format_B(self):
|
||||||
flag = self.parse_lookupflag_("lookupflag 7;")
|
flag = self.parse_lookupflag_("lookupflag 7;")
|
||||||
@ -706,6 +711,16 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertEqual(flag.value, 7)
|
self.assertEqual(flag.value, 7)
|
||||||
self.assertIsNone(flag.markAttachment)
|
self.assertIsNone(flag.markAttachment)
|
||||||
self.assertIsNone(flag.markFilteringSet)
|
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):
|
def test_lookupflag_repeated(self):
|
||||||
self.assertRaisesRegex(
|
self.assertRaisesRegex(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user