[ttFont] Remove allowVID

Leave the parameter intact for back compat.

Part of https://github.com/fonttools/fonttools/pull/2398
Fixes https://github.com/fonttools/fonttools/issues/2334
This commit is contained in:
Behdad Esfahbod 2021-08-20 10:01:51 -06:00
parent 9988054f3c
commit 322a7b2ead

View File

@ -20,7 +20,7 @@ class TTFont(object):
def __init__(self, file=None, res_name_or_index=None, def __init__(self, file=None, res_name_or_index=None,
sfntVersion="\000\001\000\000", flavor=None, checkChecksums=0, sfntVersion="\000\001\000\000", flavor=None, checkChecksums=0,
verbose=None, recalcBBoxes=True, allowVID=False, ignoreDecompileErrors=False, verbose=None, recalcBBoxes=True, allowVID=NotImplemented, ignoreDecompileErrors=False,
recalcTimestamp=True, fontNumber=-1, lazy=None, quiet=None, recalcTimestamp=True, fontNumber=-1, lazy=None, quiet=None,
_tableCache=None): _tableCache=None):
@ -61,16 +61,6 @@ class TTFont(object):
If the recalcTimestamp argument is false, the modified timestamp in the If the recalcTimestamp argument is false, the modified timestamp in the
'head' table will *not* be recalculated upon save/compile. 'head' table will *not* be recalculated upon save/compile.
If the allowVID argument is set to true, then virtual GID's are
supported. Asking for a glyph ID with a glyph name or GID that is not in
the font will return a virtual GID. This is valid for GSUB and cmap
tables. For SING glyphlets, the cmap table is used to specify Unicode
values for virtual GI's used in GSUB/GPOS rules. If the gid N is requested
and does not exist in the font, or the glyphname has the form glyphN
and does not exist in the font, then N is used as the virtual GID.
Else, the first virtual GID is assigned as 0x1000 -1; for subsequent new
virtual GIDs, the next is one less than the previous.
If ignoreDecompileErrors is set to True, exceptions raised in If ignoreDecompileErrors is set to True, exceptions raised in
individual tables during decompilation will be ignored, falling individual tables during decompilation will be ignored, falling
back to the DefaultTable implementation, which simply keeps the back to the DefaultTable implementation, which simply keeps the
@ -92,12 +82,6 @@ class TTFont(object):
self.recalcTimestamp = recalcTimestamp self.recalcTimestamp = recalcTimestamp
self.tables = {} self.tables = {}
self.reader = None self.reader = None
# Permit the user to reference glyphs that are not int the font.
self.last_vid = 0xFFFE # Can't make it be 0xFFFF, as the world is full unsigned short integer counters that get incremented after the last seen GID value.
self.reverseVIDDict = {}
self.VIDDict = {}
self.allowVID = allowVID
self.ignoreDecompileErrors = ignoreDecompileErrors self.ignoreDecompileErrors = ignoreDecompileErrors
if not file: if not file:
@ -548,20 +532,7 @@ class TTFont(object):
try: try:
return self.getGlyphOrder()[glyphID] return self.getGlyphOrder()[glyphID]
except IndexError: except IndexError:
if not self.allowVID:
# XXX The ??.W8.otf font that ships with OSX uses higher glyphIDs in
# the cmap table than there are glyphs. I don't think it's legal...
return "glyph%.5d" % glyphID return "glyph%.5d" % glyphID
else:
# user intends virtual GID support
try:
glyphName = self.VIDDict[glyphID]
except KeyError:
glyphName ="glyph%.5d" % glyphID
self.last_vid = min(glyphID, self.last_vid )
self.reverseVIDDict[glyphName] = glyphID
self.VIDDict[glyphID] = glyphName
return glyphName
def getGlyphID(self, glyphName): def getGlyphID(self, glyphName):
if not hasattr(self, "_reverseGlyphOrderDict"): if not hasattr(self, "_reverseGlyphOrderDict"):
@ -573,30 +544,12 @@ class TTFont(object):
self._buildReverseGlyphOrderDict() self._buildReverseGlyphOrderDict()
return self.getGlyphID(glyphName) return self.getGlyphID(glyphName)
else: else:
if not self.allowVID:
# Handle glyphXXX only # Handle glyphXXX only
if glyphName[:5] == "glyph": if glyphName[:5] == "glyph":
try: try:
return int(glyphName[5:]) return int(glyphName[5:])
except (NameError, ValueError): except (NameError, ValueError):
raise KeyError(glyphName) raise KeyError(glyphName)
else:
# user intends virtual GID support
try:
glyphID = self.reverseVIDDict[glyphName]
except KeyError:
# if name is in glyphXXX format, use the specified name.
if glyphName[:5] == "glyph":
try:
glyphID = int(glyphName[5:])
except (NameError, ValueError):
glyphID = None
if glyphID is None:
glyphID = self.last_vid -1
self.last_vid = glyphID
self.reverseVIDDict[glyphName] = glyphID
self.VIDDict[glyphID] = glyphName
return glyphID
glyphID = d[glyphName] glyphID = d[glyphName]
if glyphName != glyphOrder[glyphID]: if glyphName != glyphOrder[glyphID]: