diff --git a/Lib/fontTools/feaLib/builder.py b/Lib/fontTools/feaLib/builder.py index 51d57c792..b23fcf752 100644 --- a/Lib/fontTools/feaLib/builder.py +++ b/Lib/fontTools/feaLib/builder.py @@ -706,6 +706,10 @@ class Builder(object): raise FeatureLibError( "Language statements are not allowed " "within \"feature %s\"" % self.cur_feature_name_, location) + if self.cur_feature_name_ is None: + raise FeatureLibError( + "Language statements are not allowed " + "within standalone lookup blocks", location) self.cur_lookup_ = None key = (self.script_, language, self.cur_feature_name_) @@ -772,6 +776,13 @@ class Builder(object): raise FeatureLibError( "Script statements are not allowed " "within \"feature %s\"" % self.cur_feature_name_, location) + if self.cur_feature_name_ is None: + raise FeatureLibError( + "Script statements are not allowed " + "within standalone lookup blocks", location) + if self.language_systems == {(script, 'dflt')}: + # Nothing to do. + return self.cur_lookup_ = None self.script_ = script self.lookupflag_ = 0 diff --git a/Tests/feaLib/builder_test.py b/Tests/feaLib/builder_test.py index a00525cfd..eead46a1b 100644 --- a/Tests/feaLib/builder_test.py +++ b/Tests/feaLib/builder_test.py @@ -337,6 +337,12 @@ class BuilderTest(unittest.TestCase): "Script statements are not allowed within \"feature size\"", self.build, "feature size { script latn; } size;") + def test_script_in_standalone_lookup(self): + self.assertRaisesRegex( + FeatureLibError, + "Script statements are not allowed within standalone lookup blocks", + self.build, "lookup test { script latn; } test;") + def test_language(self): builder = Builder(makeTTFont(), (None, None)) builder.add_language_system(None, 'latn', 'FRA ') @@ -364,6 +370,12 @@ class BuilderTest(unittest.TestCase): "Language statements are not allowed within \"feature size\"", self.build, "feature size { language FRA; } size;") + def test_language_in_standalone_lookup(self): + self.assertRaisesRegex( + FeatureLibError, + "Language statements are not allowed within standalone lookup blocks", + self.build, "lookup test { language FRA; } test;") + def test_language_required_duplicate(self): self.assertRaisesRegex( FeatureLibError, diff --git a/Tests/feaLib/data/lookupflag.fea b/Tests/feaLib/data/lookupflag.fea index ced046b67..1828c43ed 100644 --- a/Tests/feaLib/data/lookupflag.fea +++ b/Tests/feaLib/data/lookupflag.fea @@ -134,3 +134,16 @@ feature test { pos one 1; } V; } test; + +feature test { + lookup W { + lookupflag IgnoreMarks; + script latn; + pos one 1; + } W; + lookup X { + lookupflag IgnoreMarks; + script latn; + pos two 2; + } X; +} test; diff --git a/Tests/feaLib/data/lookupflag.ttx b/Tests/feaLib/data/lookupflag.ttx index 82f1945eb..760eab313 100644 --- a/Tests/feaLib/data/lookupflag.ttx +++ b/Tests/feaLib/data/lookupflag.ttx @@ -43,7 +43,7 @@ - + + + + + - + @@ -86,9 +97,17 @@ + + + + + + + + - + @@ -357,6 +376,30 @@ + + + + + + + + + + + + + + + + + + + + + + + +