diff --git a/Lib/fontTools/ufoLib/__init__.py b/Lib/fontTools/ufoLib/__init__.py index 9b47f70ec..38e44ecd7 100755 --- a/Lib/fontTools/ufoLib/__init__.py +++ b/Lib/fontTools/ufoLib/__init__.py @@ -459,7 +459,12 @@ class UFOReader(_UFOBaseIO): # groups.plist def _readGroups(self): - return self._getPlist(GROUPS_FILENAME, {}) + groups = self._getPlist(GROUPS_FILENAME, {}) + # remove any duplicate glyphs in a kerning group + for groupName, glyphList in groups.items(): + if groupName.startswith('public.kern1.') or groupName.startswith('public.kern2.'): + groups[groupName] = list(OrderedDict.fromkeys(glyphList)) + return groups def readGroups(self, validate=None): """ @@ -476,10 +481,6 @@ class UFOReader(_UFOBaseIO): # normal else: groups = self._readGroups() - # remove any duplicate glyphs in a kerning group - for groupName, glyphList in groups.items(): - if groupName.startswith('public.kern1.') or groupName.startswith('public.kern2.'): - glyphList = list(OrderedDict.fromkeys(glyphList)) if validate: valid, message = groupsValidator(groups) if not valid: diff --git a/Tests/ufoLib/UFO3_test.py b/Tests/ufoLib/UFO3_test.py index 30faf2ee1..28f5ea191 100644 --- a/Tests/ufoLib/UFO3_test.py +++ b/Tests/ufoLib/UFO3_test.py @@ -4192,6 +4192,20 @@ class UFO3ReadDataTestCase(unittest.TestCase): fileObject = reader.getReadFileForPath("data/org.unifiedfontobject.doesNotExist") self.assertEqual(fileObject, None) + def testUFOReaderGroupDuplicatesRemoved(self): + # Non-kerning group duplicates are kept + # Kerning group duplicates are removed + expected_groups = { + "group1" : ["A"], + "group2" : ["B", "B"], + "public.kern1.A" : ["A"], + "public.kern2.B" : ["B"], + } + reader = UFOReader(self.getFontPath()) + groups = reader.readGroups() + import pdb; pdb.set_trace() + self.assertEqual(expected_groups, groups) + class UFO3WriteDataTestCase(unittest.TestCase): diff --git a/Tests/ufoLib/testdata/UFO3-Read Data.ufo/groups.plist b/Tests/ufoLib/testdata/UFO3-Read Data.ufo/groups.plist new file mode 100644 index 000000000..8564bcd9e --- /dev/null +++ b/Tests/ufoLib/testdata/UFO3-Read Data.ufo/groups.plist @@ -0,0 +1,24 @@ + + + + + group1 + + A + + group2 + + B + B + + public.kern1.A + + A + + public.kern2.B + + B + B + + +