[voltLib] Handle ALL and NONE in PROCESS_MARKS

Both were treated as group names, as NONE was not checked at all and
code for ALL was never reached.
This commit is contained in:
Khaled Hosny 2019-09-25 13:03:08 +02:00
parent af42fc24b7
commit 91cb76554d
2 changed files with 58 additions and 3 deletions

View File

@ -215,13 +215,16 @@ class Parser(object):
if self.next_token_ == "MARK_GLYPH_SET":
self.advance_lexer_()
mark_glyph_set = self.expect_string_()
elif self.next_token_type_ == Lexer.STRING:
process_marks = self.expect_string_()
elif self.next_token_ == "ALL":
self.advance_lexer_()
elif self.next_token_ == "NONE":
self.advance_lexer_()
process_marks = False
elif self.next_token_type_ == Lexer.STRING:
process_marks = self.expect_string_()
else:
raise VoltLibError(
"Expected ALL, MARK_GLYPH_SET or an ID. "
"Expected ALL, NONE, MARK_GLYPH_SET or an ID. "
"Got %s" % (self.next_token_type_),
location)
elif self.next_token_ == "SKIP_MARKS":

View File

@ -663,6 +663,58 @@ class ParserTest(unittest.TestCase):
(lookup.name, lookup.process_base),
("SomeSub", True))
def test_substitution_process_marks(self):
[group, lookup] = self.parse(
'DEF_GROUP "SomeMarks" ENUM GLYPH "marka" GLYPH "markb" '
'END_ENUM END_GROUP\n'
'DEF_LOOKUP "SomeSub" PROCESS_BASE PROCESS_MARKS "SomeMarks" '
'AS_SUBSTITUTION\n'
'SUB GLYPH "A" WITH GLYPH "A.c2sc"\n'
'END_SUB\n'
'END_SUBSTITUTION'
).statements
self.assertEqual(
(lookup.name, lookup.process_marks),
("SomeSub", 'SomeMarks'))
def test_substitution_process_marks_all(self):
[lookup] = self.parse(
'DEF_LOOKUP "SomeSub" PROCESS_BASE PROCESS_MARKS "ALL" '
'AS_SUBSTITUTION\n'
'SUB GLYPH "A" WITH GLYPH "A.c2sc"\n'
'END_SUB\n'
'END_SUBSTITUTION'
).statements
self.assertEqual(
(lookup.name, lookup.process_marks),
("SomeSub", True))
def test_substitution_process_marks_none(self):
[lookup] = self.parse(
'DEF_LOOKUP "SomeSub" PROCESS_BASE PROCESS_MARKS "NONE" '
'AS_SUBSTITUTION\n'
'SUB GLYPH "A" WITH GLYPH "A.c2sc"\n'
'END_SUB\n'
'END_SUBSTITUTION'
).statements
self.assertEqual(
(lookup.name, lookup.process_marks),
("SomeSub", False))
def test_substitution_process_marks_bad(self):
with self.assertRaisesRegex(
VoltLibError,
'Expected ALL, NONE, MARK_GLYPH_SET or an ID'):
self.parse(
'DEF_GROUP "SomeMarks" ENUM GLYPH "marka" GLYPH "markb" '
'END_ENUM END_GROUP\n'
'DEF_LOOKUP "SomeSub" PROCESS_BASE PROCESS_MARKS SomeMarks '
'AS_SUBSTITUTION\n'
'SUB GLYPH "A" WITH GLYPH "A.c2sc"\n'
'END_SUB\n'
'END_SUBSTITUTION'
)
def test_substitution_skip_marks(self):
[group, lookup] = self.parse(
'DEF_GROUP "SomeMarks" ENUM GLYPH "marka" GLYPH "markb" '