def testLanguageSystem(self): test = "languagesystem DFLT dflt;" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [('language system', ('dflt', 'DFLT'))] self.assertEqual(result, expected)
def testStrings(self): test = """ "feature test { sub foo by bar; } test;" """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [] self.assertEqual(result, expected)
def testGSUBType6(self): test = """sub f o' by o.alt;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 6", (["f"], ["o"], [], "o.alt")) ] self.assertEqual(result, expected) # test = """sub f o' o by o.alt;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 6", (["f"], ["o"], ["o"], "o.alt")) ] self.assertEqual(result, expected) # test = """sub f o' o' by o_o.alt;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 6", (["f"], ["o", "o"], [], "o_o.alt")) ] self.assertEqual(result, expected) # test = """sub f o' o' b by o_o.alt;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 6", (["f"], ["o", "o"], ["b"], "o_o.alt")) ] self.assertEqual(result, expected) # # XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #test = """sub [f] [o]' [o] by o.alt;""" #writer = TestFeatureWriter() #parseFeatures(writer, test) #result = writer.getData() #expected = [ # ("gsub type 6", ([["f"]], [["o"]], [["o"]], "o.alt")) # ] #self.assertEqual(result, expected) ## # test = """sub [foo bar]' bar by [foo.alt bar.alt];""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 6", ([], [["foo", "bar"]], ["bar"], ["foo.alt", "bar.alt"])) ] self.assertEqual(result, expected)
def testLookupReference(self): test = """lookup test;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("lookup reference", "test") ] self.assertEqual(result, expected) # test = """lookup TEST {lookup test;} TEST;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [("lookup", ("TEST", [("lookup reference", "test")]))] self.assertEqual(result, expected)
def testIgnoreGSUBType6(self): # ("gsub type 6", (precedingContext, target, trailingContext, replacement)) test = """ignore sub f o';""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 6", (["f"], ["o"], [], None)) ] self.assertEqual(result, expected) # test = """ignore sub f o' o;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 6", (["f"], ["o"], ["o"], None)) ] self.assertEqual(result, expected) # test = """ignore sub f o' o';""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 6", (["f"], ["o", "o"], [], None)) ] self.assertEqual(result, expected) # test = """ignore sub f o' o' b;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 6", (["f"], ["o", "o"], ["b"], None)) ] self.assertEqual(result, expected) # test = """ignore sub [foo bar]' bar;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 6", ([], [["foo", "bar"]], ["bar"], None)) ] self.assertEqual(result, expected)
def testGPOSType2(self): test = """pos foo bar 100;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gpos type 2", (["foo", "bar"], 100.0)) ] self.assertEqual(result, expected) # test = """pos foo bar -100;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gpos type 2", (["foo", "bar"], -100.0)) ] self.assertEqual(result, expected) # test = """enum pos foo [bar bar.alt] -100;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gpos type 2", (["foo", ["bar", "bar.alt"]], -100.0)) ] self.assertEqual(result, expected) # test = """pos @foo @bar -100;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gpos type 2", (["@foo", "@bar"], -100.0)) ] self.assertEqual(result, expected) # test = """pos [foo foo.alt] [bar bar.alt] -100;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gpos type 2", ([["foo", "foo.alt"], ["bar", "bar.alt"]], -100.0)) ] self.assertEqual(result, expected)
def testSubtableBreak(self): test = """subtable;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("subtable break", None) ] self.assertEqual(result, expected) # test = """subtable;subtable;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("subtable break", None), ("subtable break", None) ] self.assertEqual(result, expected)
def testGSUBType3(self): test = """sub foo from [bar];""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 3", ("foo", ["bar"])) ] self.assertEqual(result, expected) # test = """ sub foo1 from [bar1]; sub foo2 from [bar2]; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 3", ("foo1", ["bar1"])), ("gsub type 3", ("foo2", ["bar2"])) ] self.assertEqual(result, expected) # test = """ feature test { sub foo from bar; } test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("feature", ("test", [ ("gsub type 3", ("foo", ["bar"])) ])) ] self.assertEqual(result, expected) # test = """ feature test {sub foo1 from [bar1];sub foo2 from [bar2];} test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("feature", ("test", [ ("gsub type 3", ("foo1", ["bar1"])), ("gsub type 3", ("foo2", ["bar2"])) ])) ] self.assertEqual(result, expected)
def testInclude(self): test = """include(../foo.fea)""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("include", "../foo.fea") ] self.assertEqual(result, expected) # test = """include(../foo.fea);""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("include", "../foo.fea") ] self.assertEqual(result, expected) # test = """pos include bar 100;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [("gpos type 2", (["include", "bar"], 100.0))] self.assertEqual(result, expected)
def testGPOSType1(self): test = """pos foo <0 0 0 0>;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gpos type 1", ("foo", (0.0, 0.0, 0.0, 0.0))) ] self.assertEqual(result, expected) # test = """pos foo <-10 -10 -10 -10>;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gpos type 1", ("foo", (-10.0, -10.0, -10.0, -10.0))) ] self.assertEqual(result, expected) # test = """ pos foo <0 0 0 0>; pos foo <-10 -10 -10 -10>; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gpos type 1", ("foo", (0.0, 0.0, 0.0, 0.0))), ("gpos type 1", ("foo", (-10.0, -10.0, -10.0, -10.0))) ] self.assertEqual(result, expected)
def testScript(self): test = """script test;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("script", "test") ] self.assertEqual(result, expected) # test = """ script test; script TEST; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("script", "test"), ("script", "TEST"), ] self.assertEqual(result, expected) # test = """ script TEST;script test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("script", "TEST"), ("script", "test"), ] self.assertEqual(result, expected) # test = """ pos foo.subscript bar 100; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [("gpos type 2", (["foo.subscript", "bar"], 100.0))] self.assertEqual(result, expected)
def testFeatureBlocks(self): test = """ feature test { } test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("feature", ("test", [])) ] self.assertEqual(result, expected) # test = """ feature test{}test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("feature", ("test", [])) ] self.assertEqual(result, expected) # test = """ feature test { sub foo by bar; } test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("feature", ("test", [ ("gsub type 1", ("foo", "bar")) ])) ] self.assertEqual(result, expected)
def testGSUBType4(self): test = """sub f o o by f_o_o;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 4", (["f", "o", "o"], "f_o_o")) ] self.assertEqual(result, expected) # test = """sub [f] o o by f_o_o;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 4", ([["f"], "o", "o"], "f_o_o")) ] self.assertEqual(result, expected) # test = """sub @f o o by f_o_o;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 4", (["@f", "o", "o"], "f_o_o")) ] self.assertEqual(result, expected) # test = """ sub f o o by f_o_o; sub b a r by b_a_r; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 4", (["f", "o", "o"], "f_o_o")), ("gsub type 4", (["b", "a", "r"], "b_a_r")) ] self.assertEqual(result, expected) # test = """ feature test { sub f o o by f_o_o; } test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("feature", ("test", [ ("gsub type 4", (["f", "o", "o"], "f_o_o")) ])) ] self.assertEqual(result, expected) # test = """ feature test {sub f o o by f_o_o;sub b a r by b_a_r;} test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("feature", ("test", [ ("gsub type 4", (["f", "o", "o"], "f_o_o")), ("gsub type 4", (["b", "a", "r"], "b_a_r")) ])) ] self.assertEqual(result, expected)
def testGSUBType1(self): test = """sub foo by bar;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 1", ("foo", "bar")) ] self.assertEqual(result, expected) # test = """sub [foo] by [bar];""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 1", (["foo"], ["bar"])) ] self.assertEqual(result, expected) # test = """sub [foo foo.alt] by [bar];""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 1", (["foo", "foo.alt"], ["bar"])) ] self.assertEqual(result, expected) # test = """sub @foo by @bar;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 1", ("@foo", "@bar")) ] self.assertEqual(result, expected) # test = """ sub foo1 by bar1; sub foo2 by bar2; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("gsub type 1", ("foo1", "bar1")), ("gsub type 1", ("foo2", "bar2")) ] self.assertEqual(result, expected) # test = """ feature test { sub foo by bar; } test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("feature", ("test", [ ("gsub type 1", ("foo", "bar")) ])) ] self.assertEqual(result, expected) # test = """ feature test {sub foo1 by bar1;sub foo2 by bar2;} test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("feature", ("test", [ ("gsub type 1", ("foo1", "bar1")), ("gsub type 1", ("foo2", "bar2")) ])) ] self.assertEqual(result, expected)
def testLookupFlag(self): test = """lookupflag RightToLeft;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("lookup flag", (True, False, False, False)) ] self.assertEqual(result, expected) # test = """lookupflag IgnoreBaseGlyphs;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("lookup flag", (False, True, False, False)) ] self.assertEqual(result, expected) # test = """lookupflag IgnoreLigatures;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("lookup flag", (False, False, True, False)) ] self.assertEqual(result, expected) # test = """lookupflag IgnoreMarks;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("lookup flag", (False, False, False, True)) ] self.assertEqual(result, expected) # test = """lookupflag RightToLeft, IgnoreBaseGlyphs, IgnoreLigatures, IgnoreMarks;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("lookup flag", (True, True, True, True)) ] self.assertEqual(result, expected) # test = """lookupflag 0;""" writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [ ("lookup flag", (False, False, False, False)) ] self.assertEqual(result, expected)
def testTableBlocks(self): test = """ table test { } test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [] self.assertEqual(result, expected) # test = """ table test{}test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [] self.assertEqual(result, expected) # test = """ table test { lookup TEST {} TEST; } test; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [] self.assertEqual(result, expected) # test = """ table OS/2 { FSType 0; Panose 0 1 2 3 4 5 6 7 8 9; UnicodeRange 0 1 2 3 4 5; CodePageRange 0 1 2 3 4 5; TypoAscender 750; TypoDescender -250; TypoLineGap 200; winAscent 750; winDescent -250; XHeight 400; CapHeight 750; WeightClass 500; WidthClass 3; Vendor "test"; } OS/2; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [("table", ("OS/2", [ ("FSType", 0), ("Panose", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), ("UnicodeRange", [0, 1, 2, 3, 4, 5]), ("CodePageRange", [0, 1, 2, 3, 4, 5]), ("TypoAscender", 750.0), ("TypoDescender", -250.0), ("TypoLineGap", 200.0), ("winAscent", 750.0), ("winDescent", -250.0), ("XHeight", 400.0), ("CapHeight", 750.0), ("WeightClass", 500.0), ("WidthClass", 3.0) ]))] self.assertEqual(result, expected) # test = """ table head { FontRevision 1.1; } head; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [("table", ("head", [ ("FontRevision", 1.1), ]))] self.assertEqual(result, expected) # test = """ table hhea { CaretOffset 1; Ascender 2; Descender 3; LineGap 4; } hhea; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [("table", ("hhea", [ ("CaretOffset", 1), ("Ascender", 2), ("Descender", 3), ("LineGap", 4), ]))] self.assertEqual(result, expected) # test = """ table vhea { VertTypoAscender 2; VertTypoDescender 3; VertTypoLineGap 4; } vhea; """ writer = TestFeatureWriter() parseFeatures(writer, test) result = writer.getData() expected = [("table", ("vhea", [ ("VertTypoAscender", 2.0), ("VertTypoDescender", 3.0), ("VertTypoLineGap", 4.0), ]))] self.assertEqual(result, expected)