[feaLib] Reject language and script within feature aalt and size

This commit is contained in:
Sascha Brawer 2015-09-08 12:18:03 +02:00
parent 792a958d6c
commit a3783e1095
2 changed files with 32 additions and 0 deletions

View File

@ -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

View File

@ -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,