[feaLib] Enforce language "dflt" for script "DFLT"

Also add ';' to some langaugesystem test cases. This makes the
snippets syntactically valid. The parser is still expected to
reject them for other reasons, just as before this change.
This commit is contained in:
Sascha Brawer 2015-08-21 21:14:06 +02:00
parent 9ddd313577
commit b54c04f1d4
2 changed files with 10 additions and 2 deletions

View File

@ -290,6 +290,10 @@ class Parser(object):
location = self.cur_token_location_
script, language = self.expect_tag_(), self.expect_tag_()
self.expect_symbol_(";")
if script == "DFLT" and language != "dflt":
raise FeatureLibError(
'For script "DFLT", the language must be "dflt"',
self.cur_token_location_)
return ast.LanguageSystemStatement(location, script, language)
def parse_feature_block_(self):

View File

@ -396,15 +396,19 @@ class ParserTest(unittest.TestCase):
[langsys] = self.parse("languagesystem latn DEU;").statements
self.assertEqual(langsys.script, "latn")
self.assertEqual(langsys.language, "DEU ")
self.assertRaisesRegex(
FeatureLibError,
'For script "DFLT", the language must be "dflt"',
self.parse, "languagesystem DFLT DEU;")
self.assertRaisesRegex(
FeatureLibError, "Expected ';'",
self.parse, "languagesystem latn DEU")
self.assertRaisesRegex(
FeatureLibError, "longer than 4 characters",
self.parse, "languagesystem foobar DEU")
self.parse, "languagesystem foobar DEU;")
self.assertRaisesRegex(
FeatureLibError, "longer than 4 characters",
self.parse, "languagesystem latn FOOBAR")
self.parse, "languagesystem latn FOOBAR;")
def setUp(self):
self.tempdir = None