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:
|
if tag in font:
|
||||||
font[tag].compile(font)
|
font[tag].compile(font)
|
||||||
|
|
||||||
def check_fea2fea_file(self, name):
|
def check_fea2fea_file(self, name, base=None, parser=Parser):
|
||||||
f = self.getpath("{}.fea".format(name))
|
if '.' not in name :
|
||||||
p = Parser(f)
|
name = name + ".fea"
|
||||||
|
if base is None :
|
||||||
|
base = name
|
||||||
|
f = self.getpath(name)
|
||||||
|
p = parser(f)
|
||||||
doc = p.parse()
|
doc = p.parse()
|
||||||
tlines = self.normal_fea(doc.asFea().split("\n"))
|
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())
|
olines = self.normal_fea(ofile.readlines())
|
||||||
if olines != tlines:
|
if olines != tlines:
|
||||||
for line in difflib.unified_diff(olines, tlines):
|
for line in difflib.unified_diff(olines, tlines):
|
||||||
sys.stderr.write(line)
|
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):
|
def normal_fea(self, lines):
|
||||||
output = []
|
output = []
|
||||||
@ -374,22 +378,23 @@ class BuilderTest(unittest.TestCase):
|
|||||||
|
|
||||||
class ast_MarkBasePosStatement(ast.MarkBasePosStatement):
|
class ast_MarkBasePosStatement(ast.MarkBasePosStatement):
|
||||||
def asFea(self, indent=""):
|
def asFea(self, indent=""):
|
||||||
if isinstance(self.base, ast.MarkClassName) :
|
if isinstance(self.base, ast.MarkClassName):
|
||||||
res = ""
|
res = ""
|
||||||
for bcd in self.base.markClass.definitions :
|
for bcd in self.base.markClass.definitions:
|
||||||
if res != "" : res += "\n{}".format(indent)
|
if res != "":
|
||||||
|
res += "\n{}".format(indent)
|
||||||
res += "pos base {} {}".format(bcd.glyphs.asFea(), bcd.anchor.asFea())
|
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 += " mark @{}".format(m.name)
|
||||||
res += ";"
|
res += ";"
|
||||||
else :
|
else:
|
||||||
res = "pos base {}".format(self.base.asFea())
|
res = "pos base {}".format(self.base.asFea())
|
||||||
for a, m in self.marks:
|
for a, m in self.marks:
|
||||||
res += " {} mark @{}".format(a.asFea(), m.name)
|
res += " {} mark @{}".format(a.asFea(), m.name)
|
||||||
res += ";"
|
res += ";"
|
||||||
return res
|
return res
|
||||||
|
|
||||||
class testAst(object) :
|
class testAst(object):
|
||||||
MarkBasePosStatement = ast_MarkBasePosStatement
|
MarkBasePosStatement = ast_MarkBasePosStatement
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
return getattr(ast, name)
|
return getattr(ast, name)
|
||||||
@ -404,7 +409,7 @@ class BuilderTest(unittest.TestCase):
|
|||||||
'mark-to-base attachment positioning',
|
'mark-to-base attachment positioning',
|
||||||
location)
|
location)
|
||||||
base = self.parse_glyphclass_(accept_glyphname=True)
|
base = self.parse_glyphclass_(accept_glyphname=True)
|
||||||
if self.next_token_ == "<" :
|
if self.next_token_ == "<":
|
||||||
marks = self.parse_anchor_marks_()
|
marks = self.parse_anchor_marks_()
|
||||||
else:
|
else:
|
||||||
marks = []
|
marks = []
|
||||||
@ -424,7 +429,7 @@ class BuilderTest(unittest.TestCase):
|
|||||||
name = self.expect_class_name_()
|
name = self.expect_class_name_()
|
||||||
self.expect_symbol_(";")
|
self.expect_symbol_(";")
|
||||||
baseClass = self.doc_.baseClasses.get(name)
|
baseClass = self.doc_.baseClasses.get(name)
|
||||||
if baseClass is None :
|
if baseClass is None:
|
||||||
baseClass = ast_BaseClass(name)
|
baseClass = ast_BaseClass(name)
|
||||||
self.doc_.baseClasses[name] = baseClass
|
self.doc_.baseClasses[name] = baseClass
|
||||||
self.glyphclasses_.define(name, baseClass)
|
self.glyphclasses_.define(name, baseClass)
|
||||||
@ -437,17 +442,7 @@ class BuilderTest(unittest.TestCase):
|
|||||||
}
|
}
|
||||||
ast = testAst()
|
ast = testAst()
|
||||||
|
|
||||||
f = self.getpath("baseClass.feax")
|
self.check_fea2fea_file("baseClass.feax", base="baseClass.fea", parser=testParser)
|
||||||
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)))
|
|
||||||
|
|
||||||
|
|
||||||
def generate_feature_file_test(name):
|
def generate_feature_file_test(name):
|
||||||
|
@ -52,7 +52,7 @@ class Parser(object):
|
|||||||
elif self.is_cur_keyword_("valueRecordDef"):
|
elif self.is_cur_keyword_("valueRecordDef"):
|
||||||
statements.append(
|
statements.append(
|
||||||
self.parse_valuerecord_definition_(vertical=False))
|
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))
|
statements.append(self.extensions[self.cur_token_](self))
|
||||||
elif self.cur_token_type_ is Lexer.SYMBOL and self.cur_token_ == ";":
|
elif self.cur_token_type_ is Lexer.SYMBOL and self.cur_token_ == ";":
|
||||||
continue
|
continue
|
||||||
@ -1146,7 +1146,7 @@ class Parser(object):
|
|||||||
statements.append(self.parse_size_parameters_())
|
statements.append(self.parse_size_parameters_())
|
||||||
elif size_feature and self.is_cur_keyword_("sizemenuname"):
|
elif size_feature and self.is_cur_keyword_("sizemenuname"):
|
||||||
statements.append(self.parse_size_menuname_())
|
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))
|
statements.append(self.extensions[self.cur_token_](self))
|
||||||
elif self.cur_token_ == ";":
|
elif self.cur_token_ == ";":
|
||||||
continue
|
continue
|
||||||
|
Loading…
x
Reference in New Issue
Block a user