From ca06c9530c6a196ad5b2570afc1f19734fb756bc Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 23 Aug 2021 14:11:29 -0600 Subject: [PATCH] [ttFont] Assume GlyphOrder is never modified after setting See https://github.com/fonttools/fonttools/pull/2398#discussion_r694271551 --- Lib/fontTools/ttLib/ttFont.py | 40 +++++++++++------------------------ 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/Lib/fontTools/ttLib/ttFont.py b/Lib/fontTools/ttLib/ttFont.py index 45209f1cb..8797a37ba 100644 --- a/Lib/fontTools/ttLib/ttFont.py +++ b/Lib/fontTools/ttLib/ttFont.py @@ -544,39 +544,23 @@ class TTFont(object): def getGlyphID(self, glyphName): glyphOrder = self.getGlyphOrder() - d = self.getReverseGlyphMap() - - glyphID = d.get(glyphName) - - if glyphID is None: - # TODO This check is really expensive - if glyphName in glyphOrder: - return self._buildReverseGlyphOrderDict()[glyphName] - else: - # Handle glyphXXX only - if glyphName[:5] == "glyph": - try: - return int(glyphName[5:]) - except (NameError, ValueError): - raise KeyError(glyphName) - - if glyphName != glyphOrder[glyphID]: - return self._buildReverseGlyphOrderDict()[glyphName] - - return glyphID + try: + return self.getReverseGlyphMap()[glyphName] + except KeyError: + if glyphName[:5] == "glyph": + try: + return int(glyphName[5:]) + except (NameError, ValueError): + raise KeyError(glyphName) def getGlyphIDMany(self, lst): d = self.getReverseGlyphMap() - - glyphIDs = [d.get(glyphName) for glyphName in lst] - - if any(glyphID is None for glyphID in glyphIDs): - # TODO Add something faster + try: + return [d[glyphName] for glyphName in lst] + except KeyError: getGlyphID = self.getGlyphID return [getGlyphID(glyphName) for glyphName in lst] - return glyphIDs - def getReverseGlyphMap(self, rebuild=False): if rebuild or not hasattr(self, "_reverseGlyphOrderDict"): self._buildReverseGlyphOrderDict() @@ -791,9 +775,9 @@ class GlyphOrder(object): def fromXML(self, name, attrs, content, ttFont): if not hasattr(self, "glyphOrder"): self.glyphOrder = [] - ttFont.setGlyphOrder(self.glyphOrder) if name == "GlyphID": self.glyphOrder.append(attrs["name"]) + ttFont.setGlyphOrder(self.glyphOrder) def getTableModule(tag):