def _testGlyphsForExternalModifications(self):
        # font is not stored on disk
        if self._glyphSet is None:
            return [], [], []
        glyphSet = self._glyphSet
        glyphSet.rebuildContents()
        # glyphs added since we started up
        addedGlyphs = list(set(self._glyphSet.keys()) - self._keys)
        # glyphs deleted since we started up
        deletedGlyphs = list(self._keys - set(self._glyphSet.keys()))
        # glyphs modified since loading
        modifiedGlyphs = []
        for glyphName, glyph in self._glyphs.items():
            # deleted glyph. skip.
            if glyphName not in glyphSet.contents:
                continue
            path = os.path.join(self.path, "glyphs", glyphSet.contents[glyphName])
            modTime = os.stat(path).st_mtime
            # mod time mismatch
            if modTime != glyph._dataOnDiskTimeStamp:
                f = open(path, "rb")
                text = f.read()
                f.close()
                # data mismatch
                if text != glyph._dataOnDisk:
                    modifiedGlyphs.append(glyphName)
        # add loaded glyphs to the keys
        self._keys = self._keys | set(addedGlyphs)
        return modifiedGlyphs, addedGlyphs, deletedGlyphs

    # data reloading
dataset/ETHPy150Open typesupply/defcon/Lib/defcon/objects/font.py/Font._testGlyphsForExternalModifications/original