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 sys
      5 import array
      6 import warnings
      7 
      8 class table__l_o_c_a(DefaultTable.DefaultTable):
      9 	
     10 	dependencies = ['glyf']
     11 	
     12 	def decompile(self, data, ttFont):
     13 		longFormat = ttFont['head'].indexToLocFormat
     14 		if longFormat:
     15 			format = "I"
     16 		else:
     17 			format = "H"
     18 		locations = array.array(format)
     19 		locations.fromstring(data)
     20 		if sys.byteorder != "big":
     21 			locations.byteswap()
     22 		if not longFormat:
     23 			l = array.array("I")
     24 			for i in range(len(locations)):
     25 				l.append(locations[i] * 2)
     26 			locations = l
     27 		if len(locations) < (ttFont['maxp'].numGlyphs + 1):
     28 			warnings.warn("corrupt 'loca' table, or wrong numGlyphs in 'maxp': %d %d" % (len(locations) - 1, ttFont['maxp'].numGlyphs))
     29 		self.locations = locations
     30 	
     31 	def compile(self, ttFont):
     32 		try:
     33 			max_location = max(self.locations)
     34 		except AttributeError:
     35 			self.set([])
     36 			max_location = 0
     37 		if max_location < 0x20000:
     38 			locations = array.array("H")
     39 			for i in range(len(self.locations)):
     40 				locations.append(self.locations[i] // 2)
     41 			ttFont['head'].indexToLocFormat = 0
     42 		else:
     43 			locations = array.array("I", self.locations)
     44 			ttFont['head'].indexToLocFormat = 1
     45 		if sys.byteorder != "big":
     46 			locations.byteswap()
     47 		return locations.tostring()
     48 	
     49 	def set(self, locations):
     50 		self.locations = array.array("I", locations)
     51 	
     52 	def toXML(self, writer, ttFont):
     53 		writer.comment("The 'loca' table will be calculated by the compiler")
     54 		writer.newline()
     55 	
     56 	def __getitem__(self, index):
     57 		return self.locations[index]
     58 	
     59 	def __len__(self):
     60 		return len(self.locations)
     61 
     62