Tidy up spacing, make generic fea2fea checker
This commit is contained in:
parent
15f4cfa2d3
commit
7d01f365ea
@ -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):
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user