[feaLib] Implement ValueRecord.asFea()
ValueRecord had a makeString() method that takes an optional “vertical” argument, but no code outside the tests sets this argument. Renamed it to asFea() and dropped the “vertical”, so that it consistent with the rest of feaLib.ast classes.
This commit is contained in:
parent
e974ea3871
commit
354b89c068
@ -963,12 +963,12 @@ class PairPosStatement(Statement):
|
|||||||
res = "enum " if self.enumerated else ""
|
res = "enum " if self.enumerated else ""
|
||||||
if self.valuerecord2:
|
if self.valuerecord2:
|
||||||
res += "pos {} {} {} {};".format(
|
res += "pos {} {} {} {};".format(
|
||||||
self.glyphs1.asFea(), self.valuerecord1.makeString(),
|
self.glyphs1.asFea(), self.valuerecord1.asFea(),
|
||||||
self.glyphs2.asFea(), self.valuerecord2.makeString())
|
self.glyphs2.asFea(), self.valuerecord2.asFea())
|
||||||
else:
|
else:
|
||||||
res += "pos {} {} {};".format(
|
res += "pos {} {} {};".format(
|
||||||
self.glyphs1.asFea(), self.glyphs2.asFea(),
|
self.glyphs1.asFea(), self.glyphs2.asFea(),
|
||||||
self.valuerecord1.makeString())
|
self.valuerecord1.asFea())
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
@ -1069,12 +1069,12 @@ class SinglePosStatement(Statement):
|
|||||||
if len(self.prefix):
|
if len(self.prefix):
|
||||||
res += " ".join(map(asFea, self.prefix)) + " "
|
res += " ".join(map(asFea, self.prefix)) + " "
|
||||||
res += " ".join([asFea(x[0]) + "'" + (
|
res += " ".join([asFea(x[0]) + "'" + (
|
||||||
(" " + x[1].makeString()) if x[1] else "") for x in self.pos])
|
(" " + x[1].asFea()) if x[1] else "") for x in self.pos])
|
||||||
if len(self.suffix):
|
if len(self.suffix):
|
||||||
res += " " + " ".join(map(asFea, self.suffix))
|
res += " " + " ".join(map(asFea, self.suffix))
|
||||||
else:
|
else:
|
||||||
res += " ".join([asFea(x[0]) + " " +
|
res += " ".join([asFea(x[0]) + " " +
|
||||||
(x[1].makeString() if x[1] else "") for x in self.pos])
|
(x[1].asFea() if x[1] else "") for x in self.pos])
|
||||||
res += ";"
|
res += ";"
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@ -1120,7 +1120,7 @@ class ValueRecord(Expression):
|
|||||||
hash(self.xPlaDevice) ^ hash(self.yPlaDevice) ^
|
hash(self.xPlaDevice) ^ hash(self.yPlaDevice) ^
|
||||||
hash(self.xAdvDevice) ^ hash(self.yAdvDevice))
|
hash(self.xAdvDevice) ^ hash(self.yAdvDevice))
|
||||||
|
|
||||||
def makeString(self, vertical=None):
|
def asFea(self, indent=""):
|
||||||
if not self:
|
if not self:
|
||||||
return "<NULL>"
|
return "<NULL>"
|
||||||
|
|
||||||
@ -1128,8 +1128,7 @@ class ValueRecord(Expression):
|
|||||||
xAdvance, yAdvance = self.xAdvance, self.yAdvance
|
xAdvance, yAdvance = self.xAdvance, self.yAdvance
|
||||||
xPlaDevice, yPlaDevice = self.xPlaDevice, self.yPlaDevice
|
xPlaDevice, yPlaDevice = self.xPlaDevice, self.yPlaDevice
|
||||||
xAdvDevice, yAdvDevice = self.xAdvDevice, self.yAdvDevice
|
xAdvDevice, yAdvDevice = self.xAdvDevice, self.yAdvDevice
|
||||||
if vertical is None:
|
vertical = self.vertical
|
||||||
vertical = self.vertical
|
|
||||||
|
|
||||||
# Try format A, if possible.
|
# Try format A, if possible.
|
||||||
if x is None and y is None:
|
if x is None and y is None:
|
||||||
|
@ -726,7 +726,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsInstance(pos, ast.SinglePosStatement)
|
self.assertIsInstance(pos, ast.SinglePosStatement)
|
||||||
[(glyphs, value)] = pos.pos
|
[(glyphs, value)] = pos.pos
|
||||||
self.assertEqual(glyphstr([glyphs]), "one")
|
self.assertEqual(glyphstr([glyphs]), "one")
|
||||||
self.assertEqual(value.makeString(vertical=False), "<1 2 3 4>")
|
self.assertEqual(value.asFea(), "<1 2 3 4>")
|
||||||
|
|
||||||
def test_gpos_type_1_glyphclass_horizontal(self):
|
def test_gpos_type_1_glyphclass_horizontal(self):
|
||||||
doc = self.parse("feature kern {pos [one two] -300;} kern;")
|
doc = self.parse("feature kern {pos [one two] -300;} kern;")
|
||||||
@ -734,7 +734,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsInstance(pos, ast.SinglePosStatement)
|
self.assertIsInstance(pos, ast.SinglePosStatement)
|
||||||
[(glyphs, value)] = pos.pos
|
[(glyphs, value)] = pos.pos
|
||||||
self.assertEqual(glyphstr([glyphs]), "[one two]")
|
self.assertEqual(glyphstr([glyphs]), "[one two]")
|
||||||
self.assertEqual(value.makeString(vertical=False), "-300")
|
self.assertEqual(value.asFea(), "-300")
|
||||||
|
|
||||||
def test_gpos_type_1_glyphclass_vertical(self):
|
def test_gpos_type_1_glyphclass_vertical(self):
|
||||||
doc = self.parse("feature vkrn {pos [one two] -300;} vkrn;")
|
doc = self.parse("feature vkrn {pos [one two] -300;} vkrn;")
|
||||||
@ -742,7 +742,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsInstance(pos, ast.SinglePosStatement)
|
self.assertIsInstance(pos, ast.SinglePosStatement)
|
||||||
[(glyphs, value)] = pos.pos
|
[(glyphs, value)] = pos.pos
|
||||||
self.assertEqual(glyphstr([glyphs]), "[one two]")
|
self.assertEqual(glyphstr([glyphs]), "[one two]")
|
||||||
self.assertEqual(value.makeString(vertical=True), "-300")
|
self.assertEqual(value.asFea(), "-300")
|
||||||
|
|
||||||
def test_gpos_type_1_multiple(self):
|
def test_gpos_type_1_multiple(self):
|
||||||
doc = self.parse("feature f {pos one'1 two'2 [five six]'56;} f;")
|
doc = self.parse("feature f {pos one'1 two'2 [five six]'56;} f;")
|
||||||
@ -750,11 +750,11 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsInstance(pos, ast.SinglePosStatement)
|
self.assertIsInstance(pos, ast.SinglePosStatement)
|
||||||
[(glyphs1, val1), (glyphs2, val2), (glyphs3, val3)] = pos.pos
|
[(glyphs1, val1), (glyphs2, val2), (glyphs3, val3)] = pos.pos
|
||||||
self.assertEqual(glyphstr([glyphs1]), "one")
|
self.assertEqual(glyphstr([glyphs1]), "one")
|
||||||
self.assertEqual(val1.makeString(vertical=False), "1")
|
self.assertEqual(val1.asFea(), "1")
|
||||||
self.assertEqual(glyphstr([glyphs2]), "two")
|
self.assertEqual(glyphstr([glyphs2]), "two")
|
||||||
self.assertEqual(val2.makeString(vertical=False), "2")
|
self.assertEqual(val2.asFea(), "2")
|
||||||
self.assertEqual(glyphstr([glyphs3]), "[five six]")
|
self.assertEqual(glyphstr([glyphs3]), "[five six]")
|
||||||
self.assertEqual(val3.makeString(vertical=False), "56")
|
self.assertEqual(val3.asFea(), "56")
|
||||||
self.assertEqual(pos.prefix, [])
|
self.assertEqual(pos.prefix, [])
|
||||||
self.assertEqual(pos.suffix, [])
|
self.assertEqual(pos.suffix, [])
|
||||||
|
|
||||||
@ -774,7 +774,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsInstance(pos, ast.SinglePosStatement)
|
self.assertIsInstance(pos, ast.SinglePosStatement)
|
||||||
[(glyphs, value)] = pos.pos
|
[(glyphs, value)] = pos.pos
|
||||||
self.assertEqual(glyphstr([glyphs]), "[T Y]")
|
self.assertEqual(glyphstr([glyphs]), "[T Y]")
|
||||||
self.assertEqual(value.makeString(vertical=False), "20")
|
self.assertEqual(value.asFea(), "20")
|
||||||
self.assertEqual(glyphstr(pos.prefix), "[A B]")
|
self.assertEqual(glyphstr(pos.prefix), "[A B]")
|
||||||
self.assertEqual(glyphstr(pos.suffix), "comma")
|
self.assertEqual(glyphstr(pos.suffix), "comma")
|
||||||
|
|
||||||
@ -786,10 +786,9 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertEqual(type(pos), ast.PairPosStatement)
|
self.assertEqual(type(pos), ast.PairPosStatement)
|
||||||
self.assertFalse(pos.enumerated)
|
self.assertFalse(pos.enumerated)
|
||||||
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
||||||
self.assertEqual(pos.valuerecord1.makeString(vertical=False), "-60")
|
self.assertEqual(pos.valuerecord1.asFea(), "-60")
|
||||||
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
||||||
self.assertEqual(pos.valuerecord2.makeString(vertical=False),
|
self.assertEqual(pos.valuerecord2.asFea(), "<1 2 3 4>")
|
||||||
"<1 2 3 4>")
|
|
||||||
|
|
||||||
def test_gpos_type_2_format_a_enumerated(self):
|
def test_gpos_type_2_format_a_enumerated(self):
|
||||||
doc = self.parse("feature kern {"
|
doc = self.parse("feature kern {"
|
||||||
@ -799,10 +798,9 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertEqual(type(pos), ast.PairPosStatement)
|
self.assertEqual(type(pos), ast.PairPosStatement)
|
||||||
self.assertTrue(pos.enumerated)
|
self.assertTrue(pos.enumerated)
|
||||||
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
||||||
self.assertEqual(pos.valuerecord1.makeString(vertical=False), "-60")
|
self.assertEqual(pos.valuerecord1.asFea(), "-60")
|
||||||
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
||||||
self.assertEqual(pos.valuerecord2.makeString(vertical=False),
|
self.assertEqual(pos.valuerecord2.asFea(), "<1 2 3 4>")
|
||||||
"<1 2 3 4>")
|
|
||||||
|
|
||||||
def test_gpos_type_2_format_a_with_null_first(self):
|
def test_gpos_type_2_format_a_with_null_first(self):
|
||||||
doc = self.parse("feature kern {"
|
doc = self.parse("feature kern {"
|
||||||
@ -813,10 +811,9 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertFalse(pos.enumerated)
|
self.assertFalse(pos.enumerated)
|
||||||
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
||||||
self.assertFalse(pos.valuerecord1)
|
self.assertFalse(pos.valuerecord1)
|
||||||
self.assertEqual(pos.valuerecord1.makeString(), "<NULL>")
|
self.assertEqual(pos.valuerecord1.asFea(), "<NULL>")
|
||||||
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
||||||
self.assertEqual(pos.valuerecord2.makeString(vertical=False),
|
self.assertEqual(pos.valuerecord2.asFea(), "<1 2 3 4>")
|
||||||
"<1 2 3 4>")
|
|
||||||
self.assertEqual(pos.asFea(), "pos [T V] <NULL> [a b c] <1 2 3 4>;")
|
self.assertEqual(pos.asFea(), "pos [T V] <NULL> [a b c] <1 2 3 4>;")
|
||||||
|
|
||||||
def test_gpos_type_2_format_a_with_null_second(self):
|
def test_gpos_type_2_format_a_with_null_second(self):
|
||||||
@ -827,8 +824,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertEqual(type(pos), ast.PairPosStatement)
|
self.assertEqual(type(pos), ast.PairPosStatement)
|
||||||
self.assertFalse(pos.enumerated)
|
self.assertFalse(pos.enumerated)
|
||||||
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
||||||
self.assertEqual(pos.valuerecord1.makeString(vertical=False),
|
self.assertEqual(pos.valuerecord1.asFea(), "<1 2 3 4>")
|
||||||
"<1 2 3 4>")
|
|
||||||
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
||||||
self.assertFalse(pos.valuerecord2)
|
self.assertFalse(pos.valuerecord2)
|
||||||
self.assertEqual(pos.asFea(), "pos [T V] [a b c] <1 2 3 4>;")
|
self.assertEqual(pos.asFea(), "pos [T V] [a b c] <1 2 3 4>;")
|
||||||
@ -841,8 +837,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertEqual(type(pos), ast.PairPosStatement)
|
self.assertEqual(type(pos), ast.PairPosStatement)
|
||||||
self.assertFalse(pos.enumerated)
|
self.assertFalse(pos.enumerated)
|
||||||
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
||||||
self.assertEqual(pos.valuerecord1.makeString(vertical=False),
|
self.assertEqual(pos.valuerecord1.asFea(), "<1 2 3 4>")
|
||||||
"<1 2 3 4>")
|
|
||||||
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
||||||
self.assertIsNone(pos.valuerecord2)
|
self.assertIsNone(pos.valuerecord2)
|
||||||
|
|
||||||
@ -854,8 +849,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertEqual(type(pos), ast.PairPosStatement)
|
self.assertEqual(type(pos), ast.PairPosStatement)
|
||||||
self.assertTrue(pos.enumerated)
|
self.assertTrue(pos.enumerated)
|
||||||
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
self.assertEqual(glyphstr([pos.glyphs1]), "[T V]")
|
||||||
self.assertEqual(pos.valuerecord1.makeString(vertical=False),
|
self.assertEqual(pos.valuerecord1.asFea(), "<1 2 3 4>")
|
||||||
"<1 2 3 4>")
|
|
||||||
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
self.assertEqual(glyphstr([pos.glyphs2]), "[a b c]")
|
||||||
self.assertIsNone(pos.valuerecord2)
|
self.assertIsNone(pos.valuerecord2)
|
||||||
|
|
||||||
@ -1442,7 +1436,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsNone(value.xAdvDevice)
|
self.assertIsNone(value.xAdvDevice)
|
||||||
self.assertIsNone(value.yAdvDevice)
|
self.assertIsNone(value.yAdvDevice)
|
||||||
self.assertEqual(valuedef.asFea(), "valueRecordDef 123 foo;")
|
self.assertEqual(valuedef.asFea(), "valueRecordDef 123 foo;")
|
||||||
self.assertEqual(value.makeString(vertical=False), "123")
|
self.assertEqual(value.asFea(), "123")
|
||||||
|
|
||||||
def test_valuerecord_format_a_vertical(self):
|
def test_valuerecord_format_a_vertical(self):
|
||||||
doc = self.parse("feature vkrn {valueRecordDef 123 foo;} vkrn;")
|
doc = self.parse("feature vkrn {valueRecordDef 123 foo;} vkrn;")
|
||||||
@ -1457,7 +1451,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsNone(value.xAdvDevice)
|
self.assertIsNone(value.xAdvDevice)
|
||||||
self.assertIsNone(value.yAdvDevice)
|
self.assertIsNone(value.yAdvDevice)
|
||||||
self.assertEqual(valuedef.asFea(), "valueRecordDef 123 foo;")
|
self.assertEqual(valuedef.asFea(), "valueRecordDef 123 foo;")
|
||||||
self.assertEqual(value.makeString(vertical=True), "123")
|
self.assertEqual(value.asFea(), "123")
|
||||||
|
|
||||||
def test_valuerecord_format_a_zero_horizontal(self):
|
def test_valuerecord_format_a_zero_horizontal(self):
|
||||||
doc = self.parse("feature liga {valueRecordDef 0 foo;} liga;")
|
doc = self.parse("feature liga {valueRecordDef 0 foo;} liga;")
|
||||||
@ -1472,7 +1466,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsNone(value.xAdvDevice)
|
self.assertIsNone(value.xAdvDevice)
|
||||||
self.assertIsNone(value.yAdvDevice)
|
self.assertIsNone(value.yAdvDevice)
|
||||||
self.assertEqual(valuedef.asFea(), "valueRecordDef 0 foo;")
|
self.assertEqual(valuedef.asFea(), "valueRecordDef 0 foo;")
|
||||||
self.assertEqual(value.makeString(vertical=False), "0")
|
self.assertEqual(value.asFea(), "0")
|
||||||
|
|
||||||
def test_valuerecord_format_a_zero_vertical(self):
|
def test_valuerecord_format_a_zero_vertical(self):
|
||||||
doc = self.parse("feature vkrn {valueRecordDef 0 foo;} vkrn;")
|
doc = self.parse("feature vkrn {valueRecordDef 0 foo;} vkrn;")
|
||||||
@ -1487,7 +1481,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsNone(value.xAdvDevice)
|
self.assertIsNone(value.xAdvDevice)
|
||||||
self.assertIsNone(value.yAdvDevice)
|
self.assertIsNone(value.yAdvDevice)
|
||||||
self.assertEqual(valuedef.asFea(), "valueRecordDef 0 foo;")
|
self.assertEqual(valuedef.asFea(), "valueRecordDef 0 foo;")
|
||||||
self.assertEqual(value.makeString(vertical=True), "0")
|
self.assertEqual(value.asFea(), "0")
|
||||||
|
|
||||||
def test_valuerecord_format_a_vertical_contexts_(self):
|
def test_valuerecord_format_a_vertical_contexts_(self):
|
||||||
for tag in "vkrn vpal vhal valt".split():
|
for tag in "vkrn vpal vhal valt".split():
|
||||||
@ -1511,7 +1505,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsNone(value.xAdvDevice)
|
self.assertIsNone(value.xAdvDevice)
|
||||||
self.assertIsNone(value.yAdvDevice)
|
self.assertIsNone(value.yAdvDevice)
|
||||||
self.assertEqual(valuedef.asFea(), "valueRecordDef <1 2 3 4> foo;")
|
self.assertEqual(valuedef.asFea(), "valueRecordDef <1 2 3 4> foo;")
|
||||||
self.assertEqual(value.makeString(vertical=False), "<1 2 3 4>")
|
self.assertEqual(value.asFea(), "<1 2 3 4>")
|
||||||
|
|
||||||
def test_valuerecord_format_b_zero(self):
|
def test_valuerecord_format_b_zero(self):
|
||||||
doc = self.parse("feature liga {valueRecordDef <0 0 0 0> foo;} liga;")
|
doc = self.parse("feature liga {valueRecordDef <0 0 0 0> foo;} liga;")
|
||||||
@ -1526,7 +1520,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertIsNone(value.xAdvDevice)
|
self.assertIsNone(value.xAdvDevice)
|
||||||
self.assertIsNone(value.yAdvDevice)
|
self.assertIsNone(value.yAdvDevice)
|
||||||
self.assertEqual(valuedef.asFea(), "valueRecordDef <0 0 0 0> foo;")
|
self.assertEqual(valuedef.asFea(), "valueRecordDef <0 0 0 0> foo;")
|
||||||
self.assertEqual(value.makeString(vertical=False), "<0 0 0 0>")
|
self.assertEqual(value.asFea(), "<0 0 0 0>")
|
||||||
|
|
||||||
def test_valuerecord_format_c(self):
|
def test_valuerecord_format_c(self):
|
||||||
doc = self.parse(
|
doc = self.parse(
|
||||||
@ -1548,7 +1542,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
self.assertEqual(value.yPlaDevice, ((11, 111), (12, 112)))
|
self.assertEqual(value.yPlaDevice, ((11, 111), (12, 112)))
|
||||||
self.assertIsNone(value.xAdvDevice)
|
self.assertIsNone(value.xAdvDevice)
|
||||||
self.assertEqual(value.yAdvDevice, ((33, -113), (44, -114), (55, 115)))
|
self.assertEqual(value.yAdvDevice, ((33, -113), (44, -114), (55, 115)))
|
||||||
self.assertEqual(value.makeString(vertical=False),
|
self.assertEqual(value.asFea(),
|
||||||
"<1 2 3 4 <device 8 88> <device 11 111, 12 112>"
|
"<1 2 3 4 <device 8 88> <device 11 111, 12 112>"
|
||||||
" <device NULL> <device 33 -113, 44 -114, 55 115>>")
|
" <device NULL> <device 33 -113, 44 -114, 55 115>>")
|
||||||
|
|
||||||
@ -1556,7 +1550,7 @@ class ParserTest(unittest.TestCase):
|
|||||||
doc = self.parse("feature test {valueRecordDef <NULL> foo;} test;")
|
doc = self.parse("feature test {valueRecordDef <NULL> foo;} test;")
|
||||||
value = doc.statements[0].statements[0].value
|
value = doc.statements[0].statements[0].value
|
||||||
self.assertFalse(value)
|
self.assertFalse(value)
|
||||||
self.assertEqual(value.makeString(), "<NULL>")
|
self.assertEqual(value.asFea(), "<NULL>")
|
||||||
|
|
||||||
def test_valuerecord_named(self):
|
def test_valuerecord_named(self):
|
||||||
doc = self.parse("valueRecordDef <1 2 3 4> foo;"
|
doc = self.parse("valueRecordDef <1 2 3 4> foo;"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user