def __init__(self, file, checkChecksums=1): self.file = file self.checkChecksums = checkChecksums data = self.file.read(sfntDirectorySize) if len(data) <> sfntDirectorySize: from kiva.fonttools.fontTools import ttLib raise ttLib.TTLibError, "Not a TrueType or OpenType font (not enough data)" sstruct.unpack(sfntDirectoryFormat, data, self) if self.sfntVersion not in ("\000\001\000\000", "OTTO", "true"): from kiva.fonttools.fontTools import ttLib raise ttLib.TTLibError, "Not a TrueType or OpenType font (bad sfntVersion)" self.tables = {} for i in range(self.numTables): entry = SFNTDirectoryEntry() entry.fromFile(self.file) if entry.length > 0: self.tables[entry.tag] = entry else: # Ignore zero-length tables. This doesn't seem to be documented, # yet it's apparently how the Windows TT rasterizer behaves. # Besides, at least one font has been sighted which actually # *has* a zero-length table. pass
def fromString(self, str): sstruct.unpack(sfntDirectoryEntryFormat, str, self)
def fromFile(self, file): sstruct.unpack(sfntDirectoryEntryFormat, file.read(sfntDirectoryEntrySize), self)