diff --git a/Lib/fontTools/feaLib/ast.py b/Lib/fontTools/feaLib/ast.py index 7095fcfbd..f3125e82d 100644 --- a/Lib/fontTools/feaLib/ast.py +++ b/Lib/fontTools/feaLib/ast.py @@ -8,9 +8,9 @@ class FeatureFile(object): class FeatureBlock(object): - def __init__(self, location, name): + def __init__(self, location, name, use_extension): self.location = location - self.name = name + self.name, self.use_extension = name, use_extension self.statements = [] diff --git a/Lib/fontTools/feaLib/parser.py b/Lib/fontTools/feaLib/parser.py index bb21171cf..e01f1a8f1 100644 --- a/Lib/fontTools/feaLib/parser.py +++ b/Lib/fontTools/feaLib/parser.py @@ -287,7 +287,13 @@ class Parser(object): location = self.cur_token_location_ tag = self.expect_tag_() vertical = (tag == "vkrn") - block = ast.FeatureBlock(location, tag) + + use_extension = False + if self.next_token_ == "useExtension": + self.expect_keyword_("useExtension") + use_extension = True + + block = ast.FeatureBlock(location, tag, use_extension) self.parse_block_(block, vertical) return block diff --git a/Lib/fontTools/feaLib/parser_test.py b/Lib/fontTools/feaLib/parser_test.py index ea0f97a55..52ab7ca48 100644 --- a/Lib/fontTools/feaLib/parser_test.py +++ b/Lib/fontTools/feaLib/parser_test.py @@ -36,6 +36,16 @@ class ParserTest(unittest.TestCase): self.assertEqual(foo.y, 456) self.assertEqual(foo.contourpoint, 5) + def test_feature_block(self): + [liga] = self.parse("feature liga {} liga;").statements + self.assertEqual(liga.name, "liga") + self.assertFalse(liga.use_extension) + + def test_feature_block_useExtension(self): + [liga] = self.parse("feature liga useExtension {} liga;").statements + self.assertEqual(liga.name, "liga") + self.assertTrue(liga.use_extension) + def test_glyphclass(self): [gc] = self.parse("@dash = [endash emdash figuredash];").statements self.assertEqual(gc.name, "dash") @@ -366,10 +376,6 @@ class ParserTest(unittest.TestCase): ParserError, "longer than 4 characters", self.parse, "languagesystem latn FOOBAR") - def test_feature_block(self): - [liga] = self.parse("feature liga {} liga;").statements - self.assertEqual(liga.name, "liga") - def setUp(self): self.tempdir = None self.num_tempfiles = 0