Home | History | Annotate | Download | only in tables
      1 from __future__ import print_function, division, absolute_import
      2 from fontTools.misc.py23 import *
      3 from fontTools.misc.textTools import safeEval
      4 from . import DefaultTable
      5 import struct
      6 import array
      7 
      8 # XXX I've lowered the strictness, to make sure Apple's own Chicago
      9 # XXX gets through. They're looking into it, I hope to raise the standards
     10 # XXX back to normal eventually.
     11 
     12 class table_L_T_S_H_(DefaultTable.DefaultTable):
     13 	
     14 	def decompile(self, data, ttFont):
     15 		version, numGlyphs = struct.unpack(">HH", data[:4])
     16 		data = data[4:]
     17 		assert version == 0, "unknown version: %s" % version
     18 		assert (len(data) % numGlyphs) < 4, "numGlyphs doesn't match data length"
     19 		# ouch: the assertion is not true in Chicago!
     20 		#assert numGlyphs == ttFont['maxp'].numGlyphs
     21 		yPels = array.array("B")
     22 		yPels.fromstring(data)
     23 		self.yPels = {}
     24 		for i in range(numGlyphs):
     25 			self.yPels[ttFont.getGlyphName(i)] = yPels[i]
     26 	
     27 	def compile(self, ttFont):
     28 		version = 0
     29 		names = list(self.yPels.keys())
     30 		numGlyphs = len(names)
     31 		yPels = [0] * numGlyphs
     32 		# ouch: the assertion is not true in Chicago!
     33 		#assert len(self.yPels) == ttFont['maxp'].numGlyphs == numGlyphs
     34 		for name in names:
     35 			yPels[ttFont.getGlyphID(name)] = self.yPels[name]
     36 		yPels = array.array("B", yPels)
     37 		return struct.pack(">HH", version, numGlyphs) + yPels.tostring()
     38 	
     39 	def toXML(self, writer, ttFont):
     40 		names = sorted(self.yPels.keys())
     41 		for name in names:
     42 			writer.simpletag("yPel", name=name, value=self.yPels[name])
     43 			writer.newline()
     44 	
     45 	def fromXML(self, name, attrs, content, ttFont):
     46 		if not hasattr(self, "yPels"):
     47 			self.yPels = {}
     48 		if name != "yPel":
     49 			return # ignore unknown tags
     50 		self.yPels[attrs["name"]] = safeEval(attrs["value"])
     51 
     52