[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):
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):