diff --git a/Lib/fontTools/feaLib/builder.py b/Lib/fontTools/feaLib/builder.py index da8ac539c..3fea2a6e9 100644 --- a/Lib/fontTools/feaLib/builder.py +++ b/Lib/fontTools/feaLib/builder.py @@ -193,6 +193,10 @@ class Builder(object): raise FeatureLibError( "Within a named lookup block, it is not allowed " "to change the language", location) + if self.cur_feature_name_ in ('aalt', 'size'): + raise FeatureLibError( + "Language statements are not allowed " + "within \"feature %s\"" % self.cur_feature_name_, location) self.cur_lookup_ = None if include_default: langsys = set(self.get_default_language_systems_()) @@ -206,6 +210,10 @@ class Builder(object): raise FeatureLibError( "Within a named lookup block, it is not allowed " "to change the script", location) + if self.cur_feature_name_ in ('aalt', 'size'): + raise FeatureLibError( + "Script statements are not allowed " + "within \"feature %s\"" % self.cur_feature_name_, location) self.cur_lookup_ = None self.script_ = script self.lookup_flag_ = 0 diff --git a/Lib/fontTools/feaLib/builder_test.py b/Lib/fontTools/feaLib/builder_test.py index 9b69d0375..2d7db9c08 100644 --- a/Lib/fontTools/feaLib/builder_test.py +++ b/Lib/fontTools/feaLib/builder_test.py @@ -149,6 +149,12 @@ class BuilderTest(unittest.TestCase): self.assertEqual(builder.language_systems, {('DFLT', 'dflt'), ('cyrl', 'dflt')}) + def test_script_in_aalt_feature(self): + self.assertRaisesRegex( + FeatureLibError, + "Script statements are not allowed within \"feature aalt\"", + self.build, "feature aalt { script latn; } aalt;") + def test_script_in_lookup_block(self): self.assertRaisesRegex( FeatureLibError, @@ -156,6 +162,12 @@ class BuilderTest(unittest.TestCase): "to change the script", self.build, "lookup Foo { script latn; } Foo;") + def test_script_in_size_feature(self): + self.assertRaisesRegex( + FeatureLibError, + "Script statements are not allowed within \"feature size\"", + self.build, "feature size { script latn; } size;") + def test_language(self): builder = Builder(None, TTFont()) builder.add_language_system(None, 'latn', 'FRA ') @@ -169,6 +181,12 @@ class BuilderTest(unittest.TestCase): self.assertEqual(builder.language_systems, {('latn', 'FRA '), ('cyrl', 'BGR ')}) + def test_language_in_aalt_feature(self): + self.assertRaisesRegex( + FeatureLibError, + "Language statements are not allowed within \"feature aalt\"", + self.build, "feature aalt { language FRA; } aalt;") + def test_language_in_lookup_block(self): self.assertRaisesRegex( FeatureLibError, @@ -176,6 +194,12 @@ class BuilderTest(unittest.TestCase): "to change the language", self.build, "lookup Foo { language RUS; } Foo;") + def test_language_in_size_feature(self): + self.assertRaisesRegex( + FeatureLibError, + "Language statements are not allowed within \"feature size\"", + self.build, "feature size { language FRA; } size;") + def test_lookup_already_defined(self): self.assertRaisesRegex( FeatureLibError,