diff --git a/Lib/fontTools/feaLib/builder.py b/Lib/fontTools/feaLib/builder.py index 6629ab84c..36120a579 100644 --- a/Lib/fontTools/feaLib/builder.py +++ b/Lib/fontTools/feaLib/builder.py @@ -561,6 +561,7 @@ class Builder(object): def start_feature(self, location, name): self.language_systems = self.get_default_language_systems_() + self.script_ = 'DFLT' self.cur_lookup_ = None self.cur_feature_name_ = name self.lookupflag_ = 0 @@ -613,6 +614,9 @@ class Builder(object): raise FeatureLibError( "Language statements are not allowed " "within \"feature %s\"" % self.cur_feature_name_, location) + if language != 'dflt' and self.script_ == 'DFLT': + raise FeatureLibError("Need non-DFLT script when using non-dflt " + "language (was: \"%s\")" % language, location) self.cur_lookup_ = None key = (self.script_, language, self.cur_feature_name_) diff --git a/Lib/fontTools/feaLib/builder_test.py b/Lib/fontTools/feaLib/builder_test.py index a08bbc171..96db88305 100644 --- a/Lib/fontTools/feaLib/builder_test.py +++ b/Lib/fontTools/feaLib/builder_test.py @@ -255,6 +255,12 @@ class BuilderTest(unittest.TestCase): include_default=True, required=False) self.assertEqual(builder.language_systems, {('cyrl', 'BGR ')}) + builder.start_feature(location=None, name='test2') + self.assertRaisesRegex( + FeatureLibError, + "Need non-DFLT script when using non-dflt language " + "\(was: \"FRA \"\)", + builder.set_language, None, 'FRA ', True, False) def test_language_in_aalt_feature(self): self.assertRaisesRegex( @@ -281,6 +287,7 @@ class BuilderTest(unittest.TestCase): " substitute [a-z] by [A.sc-Z.sc];" "} scmp;" "feature test {" + " script latn;" " language FRA required;" " substitute [a-z] by [A.sc-Z.sc];" "} test;") diff --git a/Lib/fontTools/feaLib/testdata/language_required.fea b/Lib/fontTools/feaLib/testdata/language_required.fea index 29dd476f8..4005a781b 100644 --- a/Lib/fontTools/feaLib/testdata/language_required.fea +++ b/Lib/fontTools/feaLib/testdata/language_required.fea @@ -12,6 +12,7 @@ feature hlig { } hlig; feature liga { + script latn; language ITA exclude_dflt required; sub I T A by I.sc; } liga;