From 23106f71ec4411f3b4bb7124ef7566293ff02589 Mon Sep 17 00:00:00 2001 From: moyogo Date: Tue, 26 Jan 2016 11:44:17 +0000 Subject: [PATCH] [voltLib] lookup name must start with letter --- Lib/fontTools/voltLib/parser.py | 5 +++++ Lib/fontTools/voltLib/parser_test.py | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/Lib/fontTools/voltLib/parser.py b/Lib/fontTools/voltLib/parser.py index 825a963ea..80ee46070 100644 --- a/Lib/fontTools/voltLib/parser.py +++ b/Lib/fontTools/voltLib/parser.py @@ -161,6 +161,11 @@ class Parser(object): assert self.is_cur_keyword_("DEF_LOOKUP") location = self.cur_token_location_ name = self.expect_string_() + if not name[0].isalpha(): + raise VoltLibError( + 'Lookup name "%s" must start with a letter' % name, + location + ) if self.lookups_.resolve(name) is not None: raise VoltLibError( 'Lookup "%s" already defined, ' diff --git a/Lib/fontTools/voltLib/parser_test.py b/Lib/fontTools/voltLib/parser_test.py index aab005d12..38e9b75b4 100644 --- a/Lib/fontTools/voltLib/parser_test.py +++ b/Lib/fontTools/voltLib/parser_test.py @@ -360,6 +360,20 @@ class ParserTest(unittest.TestCase): 'END_SUBSTITUTION\n' ).statements + def test_lookup_name_starts_with_letter(self): + with self.assertRaisesRegex( + VoltLibError, + 'Lookup name "\\\lookupname" must start with a letter' + ): + [lookup] = self.parse( + 'DEF_LOOKUP "\lookupname"\n' + 'AS_SUBSTITUTION\n' + 'SUB GLYPH "a"\n' + 'WITH GLYPH "a.alt"\n' + 'END_SUB\n' + 'END_SUBSTITUTION\n' + ).statements + def test_substitution_empty(self): with self.assertRaisesRegex( VoltLibError,