diff --git a/Lib/fontTools/feaLib/ast.py b/Lib/fontTools/feaLib/ast.py index 1f6ed7b41..4462c65f6 100644 --- a/Lib/fontTools/feaLib/ast.py +++ b/Lib/fontTools/feaLib/ast.py @@ -319,8 +319,8 @@ class MarkClass(object): assert isinstance(definition, MarkClassDefinition) self.definitions.append(definition) for glyph in definition.glyphSet(): - if glyph in self.definitions: - otherLoc = self.definitions[glyph].location + if glyph in self.glyphs: + otherLoc = self.glyphs[glyph].location raise FeatureLibError( "Glyph %s already defined at %s:%d:%d" % ( glyph, otherLoc[0], otherLoc[1], otherLoc[2]), diff --git a/Lib/fontTools/feaLib/builder_test.py b/Lib/fontTools/feaLib/builder_test.py index 062ce607b..7cd972099 100644 --- a/Lib/fontTools/feaLib/builder_test.py +++ b/Lib/fontTools/feaLib/builder_test.py @@ -448,6 +448,13 @@ class BuilderTest(unittest.TestCase): self.check_fea2fea_file( "baseClass.feax", base="baseClass.fea", parser=testParser) + def test_markClass_same_glyph_redefined(self): + self.assertRaisesRegex( + FeatureLibError, + "Glyph acute already defined", + self.build, + "markClass [acute] @TOP_MARKS;"*2) + def generate_feature_file_test(name): return lambda self: self.check_feature_file(name) diff --git a/Lib/fontTools/feaLib/testdata/markClass.fea b/Lib/fontTools/feaLib/testdata/markClass.fea index 8de1d40e8..855de6fa2 100644 --- a/Lib/fontTools/feaLib/testdata/markClass.fea +++ b/Lib/fontTools/feaLib/testdata/markClass.fea @@ -3,7 +3,7 @@ languagesystem DFLT dflt; markClass [acute] @TOP_MARKS; feature foo { - markClass [acute grave] @TOP_MARKS; + markClass [grave] @TOP_MARKS; markClass cedilla @BOTTOM_MARKS; } foo;