[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):
|
def start_feature(self, location, name):
|
||||||
self.language_systems = self.get_default_language_systems_()
|
self.language_systems = self.get_default_language_systems_()
|
||||||
|
self.script_ = 'DFLT'
|
||||||
self.cur_lookup_ = None
|
self.cur_lookup_ = None
|
||||||
self.cur_feature_name_ = name
|
self.cur_feature_name_ = name
|
||||||
self.lookupflag_ = 0
|
self.lookupflag_ = 0
|
||||||
@ -613,6 +614,9 @@ class Builder(object):
|
|||||||
raise FeatureLibError(
|
raise FeatureLibError(
|
||||||
"Language statements are not allowed "
|
"Language statements are not allowed "
|
||||||
"within \"feature %s\"" % self.cur_feature_name_, location)
|
"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
|
self.cur_lookup_ = None
|
||||||
|
|
||||||
key = (self.script_, language, self.cur_feature_name_)
|
key = (self.script_, language, self.cur_feature_name_)
|
||||||
|
@ -255,6 +255,12 @@ class BuilderTest(unittest.TestCase):
|
|||||||
include_default=True, required=False)
|
include_default=True, required=False)
|
||||||
self.assertEqual(builder.language_systems,
|
self.assertEqual(builder.language_systems,
|
||||||
{('cyrl', 'BGR ')})
|
{('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):
|
def test_language_in_aalt_feature(self):
|
||||||
self.assertRaisesRegex(
|
self.assertRaisesRegex(
|
||||||
@ -281,6 +287,7 @@ class BuilderTest(unittest.TestCase):
|
|||||||
" substitute [a-z] by [A.sc-Z.sc];"
|
" substitute [a-z] by [A.sc-Z.sc];"
|
||||||
"} scmp;"
|
"} scmp;"
|
||||||
"feature test {"
|
"feature test {"
|
||||||
|
" script latn;"
|
||||||
" language FRA required;"
|
" language FRA required;"
|
||||||
" substitute [a-z] by [A.sc-Z.sc];"
|
" substitute [a-z] by [A.sc-Z.sc];"
|
||||||
"} test;")
|
"} test;")
|
||||||
|
@ -12,6 +12,7 @@ feature hlig {
|
|||||||
} hlig;
|
} hlig;
|
||||||
|
|
||||||
feature liga {
|
feature liga {
|
||||||
|
script latn;
|
||||||
language ITA exclude_dflt required;
|
language ITA exclude_dflt required;
|
||||||
sub I T A by I.sc;
|
sub I T A by I.sc;
|
||||||
} liga;
|
} liga;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user