[voltLib] Add feature definition
This commit is contained in:
parent
888c862433
commit
32f8c9c1e7
@ -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
|
||||
|
@ -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(',')
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user