[voltLib] Add feature definition
This commit is contained in:
parent
888c862433
commit
32f8c9c1e7
@ -32,7 +32,15 @@ class ScriptDefinition(ast.Statement):
|
|||||||
self.langs = langs
|
self.langs = langs
|
||||||
|
|
||||||
class LangSysDefinition(ast.Statement):
|
class LangSysDefinition(ast.Statement):
|
||||||
def __init__(self, location, name, tag):
|
def __init__(self, location, name, tag, features):
|
||||||
ast.Statement.__init__(self,location)
|
ast.Statement.__init__(self,location)
|
||||||
self.name = name
|
self.name = name
|
||||||
self.tag = tag
|
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_()
|
name = self.expect_string_()
|
||||||
self.expect_keyword_("TAG")
|
self.expect_keyword_("TAG")
|
||||||
tag = self.expect_string_()
|
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
|
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):
|
def parse_unicode_values_(self):
|
||||||
location = self.cur_token_location_
|
location = self.cur_token_location_
|
||||||
unicode_values = self.expect_string_().split(',')
|
unicode_values = self.expect_string_().split(',')
|
||||||
|
@ -114,6 +114,38 @@ class ParserTest(unittest.TestCase):
|
|||||||
("Romanian",
|
("Romanian",
|
||||||
"ROM "))
|
"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):
|
def setUp(self):
|
||||||
self.tempdir = None
|
self.tempdir = None
|
||||||
self.num_tempfiles = 0
|
self.num_tempfiles = 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user