Merge pull request #1732 from khaledhosny/voltlib-process-marks

[voltLib] Handle ALL and NONE in PROCESS_MARKS
This commit is contained in:
Khaled Hosny 2019-09-26 12:56:00 +02:00 committed by GitHub
commit 84acd87b6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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" '