[feaLib] Don't set language when script is unset
Before, if someone tried to set the language before setting the script a None/language language system would be created (with actual tag "None" stored in the feature table). This defaults to tag DFLT and fails when a non-dflt language is set for DFLT, since that's illegal.
This commit is contained in:
parent
87f86424ca
commit
e2186dec53
@ -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_)
|
||||
|
@ -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;")
|
||||
|
@ -12,6 +12,7 @@ feature hlig {
|
||||
} hlig;
|
||||
|
||||
feature liga {
|
||||
script latn;
|
||||
language ITA exclude_dflt required;
|
||||
sub I T A by I.sc;
|
||||
} liga;
|
||||
|
Loading…
x
Reference in New Issue
Block a user