Home | History | Annotate | Download | only in tables
      1 from __future__ import print_function, division, absolute_import
      2 from fontTools.misc.py23 import *
      3 from . import DefaultTable
      4 import struct
      5 
      6 tsi0Format = '>HHl'
      7 
      8 def fixlongs(glyphID, textLength, textOffset):
      9 	return int(glyphID), int(textLength), textOffset	
     10 
     11 
     12 class table_T_S_I__0(DefaultTable.DefaultTable):
     13 	
     14 	dependencies = ["TSI1"]
     15 	
     16 	def decompile(self, data, ttFont):
     17 		numGlyphs = ttFont['maxp'].numGlyphs
     18 		indices = []
     19 		size = struct.calcsize(tsi0Format)
     20 		for i in range(numGlyphs + 5):
     21 			glyphID, textLength, textOffset = fixlongs(*struct.unpack(tsi0Format, data[:size]))
     22 			indices.append((glyphID, textLength, textOffset))
     23 			data = data[size:]
     24 		assert len(data) == 0
     25 		assert indices[-5] == (0XFFFE, 0, -1409540300), "bad magic number"  # 0xABFC1F34
     26 		self.indices = indices[:-5]
     27 		self.extra_indices = indices[-4:]
     28 	
     29 	def compile(self, ttFont):
     30 		if not hasattr(self, "indices"):
     31 			# We have no corresponding table (TSI1 or TSI3); let's return
     32 			# no data, which effectively means "ignore us".
     33 			return ""
     34 		data = b""
     35 		for index, textLength, textOffset in self.indices:
     36 			data = data + struct.pack(tsi0Format, index, textLength, textOffset)
     37 		data = data + struct.pack(tsi0Format, 0XFFFE, 0, -1409540300)  # 0xABFC1F34
     38 		for index, textLength, textOffset in self.extra_indices:
     39 			data = data + struct.pack(tsi0Format, index, textLength, textOffset)
     40 		return data
     41 	
     42 	def set(self, indices, extra_indices):
     43 		# gets called by 'TSI1' or 'TSI3'
     44 		self.indices = indices
     45 		self.extra_indices = extra_indices
     46 	
     47 	def toXML(self, writer, ttFont):
     48 		writer.comment("This table will be calculated by the compiler")
     49 		writer.newline()
     50 
     51