[ttFont] Assume GlyphOrder is never modified after setting

See https://github.com/fonttools/fonttools/pull/2398#discussion_r694271551
This commit is contained in:
Behdad Esfahbod 2021-08-23 14:11:29 -06:00
parent d5de11d805
commit ca06c9530c

View File

@ -544,39 +544,23 @@ class TTFont(object):
def getGlyphID(self, glyphName): def getGlyphID(self, glyphName):
glyphOrder = self.getGlyphOrder() glyphOrder = self.getGlyphOrder()
d = self.getReverseGlyphMap() try:
return self.getReverseGlyphMap()[glyphName]
glyphID = d.get(glyphName) except KeyError:
if glyphName[:5] == "glyph":
if glyphID is None: try:
# TODO This check is really expensive return int(glyphName[5:])
if glyphName in glyphOrder: except (NameError, ValueError):
return self._buildReverseGlyphOrderDict()[glyphName] raise KeyError(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
def getGlyphIDMany(self, lst): def getGlyphIDMany(self, lst):
d = self.getReverseGlyphMap() d = self.getReverseGlyphMap()
try:
glyphIDs = [d.get(glyphName) for glyphName in lst] return [d[glyphName] for glyphName in lst]
except KeyError:
if any(glyphID is None for glyphID in glyphIDs):
# TODO Add something faster
getGlyphID = self.getGlyphID getGlyphID = self.getGlyphID
return [getGlyphID(glyphName) for glyphName in lst] return [getGlyphID(glyphName) for glyphName in lst]
return glyphIDs
def getReverseGlyphMap(self, rebuild=False): def getReverseGlyphMap(self, rebuild=False):
if rebuild or not hasattr(self, "_reverseGlyphOrderDict"): if rebuild or not hasattr(self, "_reverseGlyphOrderDict"):
self._buildReverseGlyphOrderDict() self._buildReverseGlyphOrderDict()
@ -791,9 +775,9 @@ class GlyphOrder(object):
def fromXML(self, name, attrs, content, ttFont): def fromXML(self, name, attrs, content, ttFont):
if not hasattr(self, "glyphOrder"): if not hasattr(self, "glyphOrder"):
self.glyphOrder = [] self.glyphOrder = []
ttFont.setGlyphOrder(self.glyphOrder)
if name == "GlyphID": if name == "GlyphID":
self.glyphOrder.append(attrs["name"]) self.glyphOrder.append(attrs["name"])
ttFont.setGlyphOrder(self.glyphOrder)
def getTableModule(tag): def getTableModule(tag):