Merge pull request #1501 from punchcutter/master
Read special case of contextual positioning
This commit is contained in:
commit
bcd40431d6
@ -404,7 +404,9 @@ class Parser(object):
|
|||||||
return ([], prefix, [None] * len(prefix), values, [], hasMarks)
|
return ([], prefix, [None] * len(prefix), values, [], hasMarks)
|
||||||
else:
|
else:
|
||||||
assert not any(values[:len(prefix)]), values
|
assert not any(values[:len(prefix)]), values
|
||||||
values = values[len(prefix):][:len(glyphs)]
|
format1 = values[len(prefix):][:len(glyphs)]
|
||||||
|
format2 = values[(len(prefix) + len(glyphs)):][:len(suffix)]
|
||||||
|
values = format2 if format2 and isinstance(format2[0], self.ast.ValueRecord) else format1
|
||||||
return (prefix, glyphs, lookups, values, suffix, hasMarks)
|
return (prefix, glyphs, lookups, values, suffix, hasMarks)
|
||||||
|
|
||||||
def parse_chain_context_(self):
|
def parse_chain_context_(self):
|
||||||
|
@ -778,6 +778,26 @@ class ParserTest(unittest.TestCase):
|
|||||||
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")
|
||||||
|
|
||||||
|
def test_gpos_type_1_chained_special_kern_format_valuerecord_format_a(self):
|
||||||
|
doc = self.parse("feature kern {pos [A B] [T Y]' comma 20;} kern;")
|
||||||
|
pos = doc.statements[0].statements[0]
|
||||||
|
self.assertIsInstance(pos, ast.SinglePosStatement)
|
||||||
|
[(glyphs, value)] = pos.pos
|
||||||
|
self.assertEqual(glyphstr([glyphs]), "[T Y]")
|
||||||
|
self.assertEqual(value.asFea(), "20")
|
||||||
|
self.assertEqual(glyphstr(pos.prefix), "[A B]")
|
||||||
|
self.assertEqual(glyphstr(pos.suffix), "comma")
|
||||||
|
|
||||||
|
def test_gpos_type_1_chained_special_kern_format_valuerecord_format_b(self):
|
||||||
|
doc = self.parse("feature kern {pos [A B] [T Y]' comma <0 0 0 0>;} kern;")
|
||||||
|
pos = doc.statements[0].statements[0]
|
||||||
|
self.assertIsInstance(pos, ast.SinglePosStatement)
|
||||||
|
[(glyphs, value)] = pos.pos
|
||||||
|
self.assertEqual(glyphstr([glyphs]), "[T Y]")
|
||||||
|
self.assertEqual(value.asFea(), "<0 0 0 0>")
|
||||||
|
self.assertEqual(glyphstr(pos.prefix), "[A B]")
|
||||||
|
self.assertEqual(glyphstr(pos.suffix), "comma")
|
||||||
|
|
||||||
def test_gpos_type_2_format_a(self):
|
def test_gpos_type_2_format_a(self):
|
||||||
doc = self.parse("feature kern {"
|
doc = self.parse("feature kern {"
|
||||||
" pos [T V] -60 [a b c] <1 2 3 4>;"
|
" pos [T V] -60 [a b c] <1 2 3 4>;"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user