[voltLib] Add settings (ppem, compiler flags, cmap format)

This commit is contained in:
moyogo 2015-10-08 09:23:17 +01:00
parent 6fab2a4f7b
commit ed34ef3eca
3 changed files with 82 additions and 1 deletions

View File

@ -91,3 +91,9 @@ class AnchorDefinition(ast.Statement):
self.component = component
self.locked = locked
self.pos = pos
class SettingDefinition(ast.Statement):
def __init__(self, location, name, value):
ast.Statement.__init__(self, location)
self.name = name
self.value = value

View File

@ -32,6 +32,14 @@ class Parser(object):
statements.append(self.parse_def_lookup_())
elif self.is_cur_keyword_("DEF_ANCHOR"):
statements.append(self.parse_def_anchor_())
elif self.cur_token_ in ("GRID_PPEM", "PRESENTATION_PPEM",
"PPOSITIONING_PPEM"):
statements.append(self.parse_ppem_())
elif self.cur_token_ in ("COMPILER_USEEXTENSIONLOOKUPS",
"COMPILER_USEPAIRPOSFORMAT2"):
statements.append(self.parse_compiler_flag_())
elif self.is_cur_keyword_("CMAP_FORMAT"):
statements.append(self.parse_cmap_format())
elif self.is_cur_keyword_("END"):
if self.next_token_type_ is not None:
raise VoltLibError("Expected the end of the file",
@ -39,7 +47,11 @@ class Parser(object):
return self.doc_
else:
raise VoltLibError("Expected DEF_GLYPH, DEF_GROUP, "
"DEF_SCRIPT, DEF_LOOKUP, DEF_ANCHOR",
"DEF_SCRIPT, DEF_LOOKUP, DEF_ANCHOR, "
"GRID_PPEM, PRESENTATION_PPEM, "
"PPOSITIONING_PPEM, "
"COMPILER_USEEXTENSIONLOOKUPS, "
"COMPILER_USEPAIRPOSFORMAT2, CMAP_FORMAT",
self.cur_token_location_)
return self.doc_
@ -363,6 +375,28 @@ class Parser(object):
coverage.append((start, end))
return coverage
def parse_ppem_(self):
location = self.cur_token_location_
ppem_name = self.cur_token_
value = self.expect_number_()
setting = ast.SettingDefinition(location, ppem_name, value)
return setting
def parse_compiler_flag_(self):
location = self.cur_token_location_
flag_name = self.cur_token_
value = True
setting = ast.SettingDefinition(location, flag_name, value)
return setting
def parse_cmap_format(self):
location = self.cur_token_location_
name = self.cur_token_
value = (self.expect_number_(), self.expect_number_(),
self.expect_number_())
setting = ast.SettingDefinition(location, name, value)
return setting
def is_cur_keyword_(self, k):
return (self.cur_token_type_ is Lexer.NAME) and (self.cur_token_ == k)

View File

@ -313,6 +313,47 @@ class ParserTest(unittest.TestCase):
{}))
)
def test_ppem(self):
[grid_ppem, pres_ppem, ppos_ppem] = self.parse(
'GRID_PPEM 20\n'
'PRESENTATION_PPEM 72\n'
'PPOSITIONING_PPEM 144\n'
).statements
self.assertEqual(
((grid_ppem.name, grid_ppem.value),
(pres_ppem.name, pres_ppem.value),
(ppos_ppem.name, ppos_ppem.value)),
(("GRID_PPEM", 20), ("PRESENTATION_PPEM", 72),
("PPOSITIONING_PPEM", 144))
)
def test_compiler_flags(self):
[setting1, setting2] = self.parse(
'COMPILER_USEEXTENSIONLOOKUPS\n'
'COMPILER_USEPAIRPOSFORMAT2\n'
).statements
self.assertEqual(
((setting1.name, setting1.value),
(setting2.name, setting2.value)),
(("COMPILER_USEEXTENSIONLOOKUPS", True),
("COMPILER_USEPAIRPOSFORMAT2", True))
)
def test_cmap(self):
[cmap_format1, cmap_format2, cmap_format3] = self.parse(
'CMAP_FORMAT 0 3 4\n'
'CMAP_FORMAT 1 0 6\n'
'CMAP_FORMAT 3 1 4\n'
).statements
self.assertEqual(
((cmap_format1.name, cmap_format1.value),
(cmap_format2.name, cmap_format2.value),
(cmap_format3.name, cmap_format3.value)),
(("CMAP_FORMAT", (0, 3, 4)),
("CMAP_FORMAT", (1, 0, 6)),
("CMAP_FORMAT", (3, 1, 4)))
)
def setUp(self):
self.tempdir = None
self.num_tempfiles = 0