From c3f3606c5940d69a8c14942088d518921e9258c6 Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Sun, 10 Feb 2019 11:59:04 +0200 Subject: [PATCH] [feaLib] Allow hyphen in glyph class names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Matches AFDKO’s makeotf behaviour. --- Lib/fontTools/feaLib/lexer.py | 4 ++-- Tests/feaLib/lexer_test.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Lib/fontTools/feaLib/lexer.py b/Lib/fontTools/feaLib/lexer.py index 18849ef07..095cb6684 100644 --- a/Lib/fontTools/feaLib/lexer.py +++ b/Lib/fontTools/feaLib/lexer.py @@ -28,7 +28,7 @@ class Lexer(object): CHAR_NAME_START_ = CHAR_LETTER_ + "_+*:.^~!\\" CHAR_NAME_CONTINUATION_ = CHAR_LETTER_ + CHAR_DIGIT_ + "_.+*:^~!/-" - RE_GLYPHCLASS = re.compile(r"^[A-Za-z_0-9.]+$") + RE_GLYPHCLASS = re.compile(r"^[A-Za-z_0-9.\-]+$") MODE_NORMAL_ = "NORMAL" MODE_FILENAME_ = "FILENAME" @@ -113,7 +113,7 @@ class Lexer(object): if not Lexer.RE_GLYPHCLASS.match(glyphclass): raise FeatureLibError( "Glyph class names must consist of letters, digits, " - "underscore, or period", location) + "underscore, period or hyphen", location) return (Lexer.GLYPHCLASS, glyphclass, location) if cur_char in Lexer.CHAR_NAME_START_: self.pos_ += 1 diff --git a/Tests/feaLib/lexer_test.py b/Tests/feaLib/lexer_test.py index 27e2da68a..1b28fa097 100644 --- a/Tests/feaLib/lexer_test.py +++ b/Tests/feaLib/lexer_test.py @@ -39,6 +39,7 @@ class LexerTest(unittest.TestCase): def test_glyphclass(self): self.assertEqual(lex("@Vowel.sc"), [(Lexer.GLYPHCLASS, "Vowel.sc")]) + self.assertEqual(lex("@Vowel-sc"), [(Lexer.GLYPHCLASS, "Vowel-sc")]) self.assertRaisesRegex(FeatureLibError, "Expected glyph class", lex, "@(a)") self.assertRaisesRegex(FeatureLibError,