11ae29591efbb29492ce05378909ccf4028d7c1eeBehdad Esfahbodfrom __future__ import print_function, division, absolute_import 230e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbodfrom fontTools.misc.py23 import * 32b06aaa2a6bcd363c25fb0c43f6bb906906594bdBehdad Esfahbodfrom . import DefaultTable 47842e56b97ce677b83bdab09cda48bc2d89ac75aJustimport struct 57842e56b97ce677b83bdab09cda48bc2d89ac75aJust 67842e56b97ce677b83bdab09cda48bc2d89ac75aJusttsi0Format = '>HHl' 77842e56b97ce677b83bdab09cda48bc2d89ac75aJust 83a9fd301808f5a8991ca9ac44028d1ecb22d307fBehdad Esfahboddef fixlongs(glyphID, textLength, textOffset): 97842e56b97ce677b83bdab09cda48bc2d89ac75aJust return int(glyphID), int(textLength), textOffset 107842e56b97ce677b83bdab09cda48bc2d89ac75aJust 117842e56b97ce677b83bdab09cda48bc2d89ac75aJust 127842e56b97ce677b83bdab09cda48bc2d89ac75aJustclass table_T_S_I__0(DefaultTable.DefaultTable): 137842e56b97ce677b83bdab09cda48bc2d89ac75aJust 147842e56b97ce677b83bdab09cda48bc2d89ac75aJust dependencies = ["TSI1"] 157842e56b97ce677b83bdab09cda48bc2d89ac75aJust 167842e56b97ce677b83bdab09cda48bc2d89ac75aJust def decompile(self, data, ttFont): 177842e56b97ce677b83bdab09cda48bc2d89ac75aJust numGlyphs = ttFont['maxp'].numGlyphs 187842e56b97ce677b83bdab09cda48bc2d89ac75aJust indices = [] 197842e56b97ce677b83bdab09cda48bc2d89ac75aJust size = struct.calcsize(tsi0Format) 207842e56b97ce677b83bdab09cda48bc2d89ac75aJust for i in range(numGlyphs + 5): 213a9fd301808f5a8991ca9ac44028d1ecb22d307fBehdad Esfahbod glyphID, textLength, textOffset = fixlongs(*struct.unpack(tsi0Format, data[:size])) 227842e56b97ce677b83bdab09cda48bc2d89ac75aJust indices.append((glyphID, textLength, textOffset)) 237842e56b97ce677b83bdab09cda48bc2d89ac75aJust data = data[size:] 247842e56b97ce677b83bdab09cda48bc2d89ac75aJust assert len(data) == 0 251ed5b4746de2459c306d273c02ac050d982d3503jvr assert indices[-5] == (0XFFFE, 0, -1409540300), "bad magic number" # 0xABFC1F34 267842e56b97ce677b83bdab09cda48bc2d89ac75aJust self.indices = indices[:-5] 277842e56b97ce677b83bdab09cda48bc2d89ac75aJust self.extra_indices = indices[-4:] 287842e56b97ce677b83bdab09cda48bc2d89ac75aJust 297842e56b97ce677b83bdab09cda48bc2d89ac75aJust def compile(self, ttFont): 30dd2fea582acf48b3380c944546c67c1dfb56de6ajvr if not hasattr(self, "indices"): 31f918ab4cf65c8000a639bc834bc0f362dd997358Behdad Esfahbod # We have no corresponding table (TSI1 or TSI3); let's return 32dd2fea582acf48b3380c944546c67c1dfb56de6ajvr # no data, which effectively means "ignore us". 33dd2fea582acf48b3380c944546c67c1dfb56de6ajvr return "" 345f6418d9e1fa15a89dcec29cdc433ba2c99732c3Behdad Esfahbod data = b"" 357842e56b97ce677b83bdab09cda48bc2d89ac75aJust for index, textLength, textOffset in self.indices: 367842e56b97ce677b83bdab09cda48bc2d89ac75aJust data = data + struct.pack(tsi0Format, index, textLength, textOffset) 377afc6b989c39e3ff5e5e2ad8ed02abb2b40251e2jvr data = data + struct.pack(tsi0Format, 0XFFFE, 0, -1409540300) # 0xABFC1F34 387842e56b97ce677b83bdab09cda48bc2d89ac75aJust for index, textLength, textOffset in self.extra_indices: 397842e56b97ce677b83bdab09cda48bc2d89ac75aJust data = data + struct.pack(tsi0Format, index, textLength, textOffset) 407842e56b97ce677b83bdab09cda48bc2d89ac75aJust return data 417842e56b97ce677b83bdab09cda48bc2d89ac75aJust 427842e56b97ce677b83bdab09cda48bc2d89ac75aJust def set(self, indices, extra_indices): 437842e56b97ce677b83bdab09cda48bc2d89ac75aJust # gets called by 'TSI1' or 'TSI3' 447842e56b97ce677b83bdab09cda48bc2d89ac75aJust self.indices = indices 457842e56b97ce677b83bdab09cda48bc2d89ac75aJust self.extra_indices = extra_indices 467842e56b97ce677b83bdab09cda48bc2d89ac75aJust 477842e56b97ce677b83bdab09cda48bc2d89ac75aJust def toXML(self, writer, ttFont): 487842e56b97ce677b83bdab09cda48bc2d89ac75aJust writer.comment("This table will be calculated by the compiler") 497842e56b97ce677b83bdab09cda48bc2d89ac75aJust writer.newline() 507842e56b97ce677b83bdab09cda48bc2d89ac75aJust 51