[voltLib] Add feature definition

This commit is contained in:
moyogo 2015-10-01 00:22:23 +01:00
parent 888c862433
commit 32f8c9c1e7
3 changed files with 64 additions and 2 deletions

View File

@ -32,7 +32,15 @@ class ScriptDefinition(ast.Statement):
self.langs = langs
class LangSysDefinition(ast.Statement):
def __init__(self, location, name, tag):
def __init__(self, location, name, tag, features):
ast.Statement.__init__(self,location)
self.name = name
self.tag = tag
self.features = features
class FeatureDefinition(ast.Statement):
def __init__(self, location, name, tag, lookups):
ast.Statement.__init__(self,location)
self.name = name
self.tag = tag
self.lookups = lookups

View File

@ -111,9 +111,31 @@ class Parser(object):
name = self.expect_string_()
self.expect_keyword_("TAG")
tag = self.expect_string_()
def_langsys = ast.LangSysDefinition(location, name, tag)
features = []
while self.next_token_ != "END_LANGSYS":
self.advance_lexer_()
feature = self.parse_feature_()
self.expect_keyword_("END_FEATURE")
features.append(feature)
def_langsys = ast.LangSysDefinition(location, name, tag, features)
return def_langsys
def parse_feature_(self):
assert self.is_cur_keyword_("DEF_FEATURE")
location = self.cur_token_location_
self.expect_keyword_("NAME")
name = self.expect_string_()
self.expect_keyword_("TAG")
tag = self.expect_string_()
lookups = []
while self.next_token_ != "END_FEATURE":
# self.advance_lexer_()
self.expect_keyword_("LOOKUP")
lookup = self.expect_string_()
lookups.append(lookup)
feature = ast.FeatureDefinition(location, name, tag, lookups)
return feature
def parse_unicode_values_(self):
location = self.cur_token_location_
unicode_values = self.expect_string_().split(',')

View File

@ -114,6 +114,38 @@ class ParserTest(unittest.TestCase):
("Romanian",
"ROM "))
def test_feature(self):
[def_script] = self.parse(
'DEF_SCRIPT NAME "Latin" TAG "latn"\n'
'DEF_LANGSYS NAME "Romanian" TAG "ROM "\n'
'DEF_FEATURE NAME "Fractions" TAG "frac"\n'
'LOOKUP "fraclookup"\n'
'END_FEATURE\n'
'END_LANGSYS\n'
'END_SCRIPT'
).statements
def_feature = def_script.langs[0].features[0]
self.assertEqual((def_feature.name, def_feature.tag,
def_feature.lookups),
("Fractions",
"frac",
["fraclookup"]))
[def_script] = self.parse(
'DEF_SCRIPT NAME "Latin" TAG "latn"\n'
'DEF_LANGSYS NAME "Romanian" TAG "ROM "\n'
'DEF_FEATURE NAME "Kerning" TAG "kern"\n'
'LOOKUP "kern1" LOOKUP "kern2"\n'
'END_FEATURE\n'
'END_LANGSYS\n'
'END_SCRIPT'
).statements
def_feature = def_script.langs[0].features[0]
self.assertEqual((def_feature.name, def_feature.tag,
def_feature.lookups),
("Kerning",
"kern",
["kern1", "kern2"]))
def setUp(self):
self.tempdir = None
self.num_tempfiles = 0