From b54c04f1d4c6a7516f6de94ff12e03ac2c860dde Mon Sep 17 00:00:00 2001 From: Sascha Brawer Date: Fri, 21 Aug 2015 21:14:06 +0200 Subject: [PATCH] [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. --- Lib/fontTools/feaLib/parser.py | 4 ++++ Lib/fontTools/feaLib/parser_test.py | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Lib/fontTools/feaLib/parser.py b/Lib/fontTools/feaLib/parser.py index 4f803619a..3a4085f40 100644 --- a/Lib/fontTools/feaLib/parser.py +++ b/Lib/fontTools/feaLib/parser.py @@ -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): diff --git a/Lib/fontTools/feaLib/parser_test.py b/Lib/fontTools/feaLib/parser_test.py index 71bc8b278..69984899f 100644 --- a/Lib/fontTools/feaLib/parser_test.py +++ b/Lib/fontTools/feaLib/parser_test.py @@ -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