[voltLib] expand enum when creating GroupDefinition

This commit is contained in:
moyogo 2015-09-30 22:21:51 +01:00
parent 7ab01f730c
commit 1c4de40936
3 changed files with 47 additions and 3 deletions

View File

@ -17,7 +17,9 @@ class GlyphDefinition(ast.Statement):
self.components = components
class GroupDefinition(ast.Statement):
def __init__(self, location, name, enum):
def __init__(self, location, name, glyphs, groups, ranges):
ast.Statement.__init__(self,location)
self.name = name
self.enum = enum
self.enum = {"glyphs": glyphs,
"groups": groups,
"ranges": ranges}

View File

@ -81,10 +81,37 @@ class Parser(object):
if self.groups_.resolve(name) is not None:
raise VoltLibError('Glyph group "%s" already defined' % name,
location)
def_group = ast.GroupDefinition(location, name, enum)
def_group = ast.GroupDefinition(location, name, **enum)
self.groups_.define(name, def_group)
return def_group
def parse_def_script_(self):
assert self.is_cur_keyword_("DEF_SCRIPT")
location = self.cur_token_location_
self.expect_keyword_("NAME")
name = self.expect_string_()
self.expect_keyword_("TAG")
tag = self.expect_string_()
langs = []
while self.next_token_ != "END_SCRIPT":
self.advance_lexer_()
lang = self.parse_langsys_()
self.expect_keyword_("END_LANGSYS")
langs.append(lang)
self.expect_keyword_("END_SCRIPT")
def_script = ast.ScriptDefinition(location, name, tag, langs)
return def_script
def parse_langsys_(self):
assert self.is_cur_keyword_("DEF_LANGSYS")
location = self.cur_token_location_
self.expect_keyword_("NAME")
name = self.expect_string_()
self.expect_keyword_("TAG")
tag = self.expect_string_()
def_langsys = ast.LangSysDefinition(location, name, tag)
return def_langsys
def parse_unicode_values_(self):
location = self.cur_token_location_
unicode_values = self.expect_string_().split(',')

View File

@ -99,6 +99,21 @@ class ParserTest(unittest.TestCase):
'END_GROUP\n'
)
def test_langsys(self):
[def_script] = self.parse(
'DEF_SCRIPT NAME "Latin" TAG "latn"\n'
'DEF_LANGSYS NAME "Romanian" TAG "ROM "\n'
'END_LANGSYS\n'
'END_SCRIPT'
).statements
self.assertEqual((def_script.name, def_script.tag),
("Latin",
"latn"))
def_lang = def_script.langs[0]
self.assertEqual((def_lang.name, def_lang.tag),
("Romanian",
"ROM "))
def setUp(self):
self.tempdir = None
self.num_tempfiles = 0