Tidy up spacing, make generic fea2fea checker

This commit is contained in:
Martin Hosken 2017-01-06 12:38:14 +00:00 committed by Cosimo Lupo
parent 15f4cfa2d3
commit 7d01f365ea
No known key found for this signature in database
GPG Key ID: B61AAAD0B53A6419
2 changed files with 21 additions and 26 deletions

View File

@ -133,17 +133,21 @@ class BuilderTest(unittest.TestCase):
if tag in font:
font[tag].compile(font)
def check_fea2fea_file(self, name):
f = self.getpath("{}.fea".format(name))
p = Parser(f)
def check_fea2fea_file(self, name, base=None, parser=Parser):
if '.' not in name :
name = name + ".fea"
if base is None :
base = name
f = self.getpath(name)
p = parser(f)
doc = p.parse()
tlines = self.normal_fea(doc.asFea().split("\n"))
with open(f, "r", encoding="utf-8") as ofile:
with open(self.getpath(base), "r", encoding="utf-8") as ofile:
olines = self.normal_fea(ofile.readlines())
if olines != tlines:
for line in difflib.unified_diff(olines, tlines):
sys.stderr.write(line)
self.fail("Fea2Fea output is different from expected")
self.fail("Fea2Fea output is different from expected. Generated:\n{}\n".format("\n".join(tlines)))
def normal_fea(self, lines):
output = []
@ -374,22 +378,23 @@ class BuilderTest(unittest.TestCase):
class ast_MarkBasePosStatement(ast.MarkBasePosStatement):
def asFea(self, indent=""):
if isinstance(self.base, ast.MarkClassName) :
if isinstance(self.base, ast.MarkClassName):
res = ""
for bcd in self.base.markClass.definitions :
if res != "" : res += "\n{}".format(indent)
for bcd in self.base.markClass.definitions:
if res != "":
res += "\n{}".format(indent)
res += "pos base {} {}".format(bcd.glyphs.asFea(), bcd.anchor.asFea())
for m in self.marks :
for m in self.marks:
res += " mark @{}".format(m.name)
res += ";"
else :
else:
res = "pos base {}".format(self.base.asFea())
for a, m in self.marks:
res += " {} mark @{}".format(a.asFea(), m.name)
res += ";"
return res
class testAst(object) :
class testAst(object):
MarkBasePosStatement = ast_MarkBasePosStatement
def __getattr__(self, name):
return getattr(ast, name)
@ -404,7 +409,7 @@ class BuilderTest(unittest.TestCase):
'mark-to-base attachment positioning',
location)
base = self.parse_glyphclass_(accept_glyphname=True)
if self.next_token_ == "<" :
if self.next_token_ == "<":
marks = self.parse_anchor_marks_()
else:
marks = []
@ -424,7 +429,7 @@ class BuilderTest(unittest.TestCase):
name = self.expect_class_name_()
self.expect_symbol_(";")
baseClass = self.doc_.baseClasses.get(name)
if baseClass is None :
if baseClass is None:
baseClass = ast_BaseClass(name)
self.doc_.baseClasses[name] = baseClass
self.glyphclasses_.define(name, baseClass)
@ -437,17 +442,7 @@ class BuilderTest(unittest.TestCase):
}
ast = testAst()
f = self.getpath("baseClass.feax")
p = testParser(f)
#import pdb; pdb.set_trace()
doc = p.parse()
tlines = self.normal_fea(doc.asFea().split("\n"))
with open(self.getpath("baseClass.fea"), "r", encoding="utf-8") as ofile:
olines = self.normal_fea(ofile.readlines())
if olines != tlines:
for line in difflib.unified_diff(olines, tlines):
sys.stderr.write(line)
self.fail("Fea2Fea output is different from expected:\n{}".format("\n".join(tlines)))
self.check_fea2fea_file("baseClass.feax", base="baseClass.fea", parser=testParser)
def generate_feature_file_test(name):

View File

@ -52,7 +52,7 @@ class Parser(object):
elif self.is_cur_keyword_("valueRecordDef"):
statements.append(
self.parse_valuerecord_definition_(vertical=False))
elif self.cur_token_type_ is Lexer.NAME and self.cur_token_ in self.extensions :
elif self.cur_token_type_ is Lexer.NAME and self.cur_token_ in self.extensions:
statements.append(self.extensions[self.cur_token_](self))
elif self.cur_token_type_ is Lexer.SYMBOL and self.cur_token_ == ";":
continue
@ -1146,7 +1146,7 @@ class Parser(object):
statements.append(self.parse_size_parameters_())
elif size_feature and self.is_cur_keyword_("sizemenuname"):
statements.append(self.parse_size_menuname_())
elif self.cur_token_type_ is Lexer.NAME and self.cur_token_ in self.extensions :
elif self.cur_token_type_ is Lexer.NAME and self.cur_token_ in self.extensions:
statements.append(self.extensions[self.cur_token_](self))
elif self.cur_token_ == ";":
continue