Merge pull request #1501 from punchcutter/master

Read special case of contextual positioning
This commit is contained in:
Cosimo Lupo 2019-02-14 10:40:54 +00:00 committed by GitHub
commit bcd40431d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 1 deletions

View File

@ -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):

View File

@ -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>;"