[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:
parent
9ddd313577
commit
b54c04f1d4
@ -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):
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user