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