[voltLib] Add settings (ppem, compiler flags, cmap format)
This commit is contained in:
parent
6fab2a4f7b
commit
ed34ef3eca
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user