L_T_S_H_.py revision 2b06aaa2a6bcd363c25fb0c43f6bb906906594bd
12b06aaa2a6bcd363c25fb0c43f6bb906906594bdBehdad Esfahbodfrom . import DefaultTable
27842e56b97ce677b83bdab09cda48bc2d89ac75aJustimport array
37842e56b97ce677b83bdab09cda48bc2d89ac75aJustimport struct
47842e56b97ce677b83bdab09cda48bc2d89ac75aJustfrom fontTools.misc.textTools import safeEval
57842e56b97ce677b83bdab09cda48bc2d89ac75aJust
67842e56b97ce677b83bdab09cda48bc2d89ac75aJust# XXX I've lowered the strictness, to make sure Apple's own Chicago
77842e56b97ce677b83bdab09cda48bc2d89ac75aJust# XXX gets through. They're looking into it, I hope to raise the standards
87842e56b97ce677b83bdab09cda48bc2d89ac75aJust# XXX back to normal eventually.
97842e56b97ce677b83bdab09cda48bc2d89ac75aJust
107842e56b97ce677b83bdab09cda48bc2d89ac75aJustclass table_L_T_S_H_(DefaultTable.DefaultTable):
117842e56b97ce677b83bdab09cda48bc2d89ac75aJust
127842e56b97ce677b83bdab09cda48bc2d89ac75aJust	def decompile(self, data, ttFont):
137842e56b97ce677b83bdab09cda48bc2d89ac75aJust		version, numGlyphs = struct.unpack(">HH", data[:4])
147842e56b97ce677b83bdab09cda48bc2d89ac75aJust		data = data[4:]
15e23942f0e6c9020d2a677b23ed58e04ad1173bbdJust		assert version == 0, "unknown version: %s" % version
16dc66e7e1180e77999ba8c02683956fb31f0e1003fcoiffie		assert (len(data) % numGlyphs) < 4, "numGlyphs doesn't match data length"
177842e56b97ce677b83bdab09cda48bc2d89ac75aJust		# ouch: the assertion is not true in Chicago!
187842e56b97ce677b83bdab09cda48bc2d89ac75aJust		#assert numGlyphs == ttFont['maxp'].numGlyphs
197842e56b97ce677b83bdab09cda48bc2d89ac75aJust		yPels = array.array("B")
207842e56b97ce677b83bdab09cda48bc2d89ac75aJust		yPels.fromstring(data)
217842e56b97ce677b83bdab09cda48bc2d89ac75aJust		self.yPels = {}
227842e56b97ce677b83bdab09cda48bc2d89ac75aJust		for i in range(numGlyphs):
237842e56b97ce677b83bdab09cda48bc2d89ac75aJust			self.yPels[ttFont.getGlyphName(i)] = yPels[i]
247842e56b97ce677b83bdab09cda48bc2d89ac75aJust
257842e56b97ce677b83bdab09cda48bc2d89ac75aJust	def compile(self, ttFont):
267842e56b97ce677b83bdab09cda48bc2d89ac75aJust		version = 0
277842e56b97ce677b83bdab09cda48bc2d89ac75aJust		names = self.yPels.keys()
287842e56b97ce677b83bdab09cda48bc2d89ac75aJust		numGlyphs = len(names)
297842e56b97ce677b83bdab09cda48bc2d89ac75aJust		yPels = [0] * numGlyphs
307842e56b97ce677b83bdab09cda48bc2d89ac75aJust		# ouch: the assertion is not true in Chicago!
317842e56b97ce677b83bdab09cda48bc2d89ac75aJust		#assert len(self.yPels) == ttFont['maxp'].numGlyphs == numGlyphs
327842e56b97ce677b83bdab09cda48bc2d89ac75aJust		for name in names:
337842e56b97ce677b83bdab09cda48bc2d89ac75aJust			yPels[ttFont.getGlyphID(name)] = self.yPels[name]
347842e56b97ce677b83bdab09cda48bc2d89ac75aJust		yPels = array.array("B", yPels)
357842e56b97ce677b83bdab09cda48bc2d89ac75aJust		return struct.pack(">HH", version, numGlyphs) + yPels.tostring()
367842e56b97ce677b83bdab09cda48bc2d89ac75aJust
377842e56b97ce677b83bdab09cda48bc2d89ac75aJust	def toXML(self, writer, ttFont):
387842e56b97ce677b83bdab09cda48bc2d89ac75aJust		names = self.yPels.keys()
397842e56b97ce677b83bdab09cda48bc2d89ac75aJust		names.sort()
407842e56b97ce677b83bdab09cda48bc2d89ac75aJust		for name in names:
417842e56b97ce677b83bdab09cda48bc2d89ac75aJust			writer.simpletag("yPel", name=name, value=self.yPels[name])
427842e56b97ce677b83bdab09cda48bc2d89ac75aJust			writer.newline()
437842e56b97ce677b83bdab09cda48bc2d89ac75aJust
447842e56b97ce677b83bdab09cda48bc2d89ac75aJust	def fromXML(self, (name, attrs, content), ttFont):
457842e56b97ce677b83bdab09cda48bc2d89ac75aJust		if not hasattr(self, "yPels"):
467842e56b97ce677b83bdab09cda48bc2d89ac75aJust			self.yPels = {}
477842e56b97ce677b83bdab09cda48bc2d89ac75aJust		if name <> "yPel":
487842e56b97ce677b83bdab09cda48bc2d89ac75aJust			return # ignore unknown tags
497842e56b97ce677b83bdab09cda48bc2d89ac75aJust		self.yPels[attrs["name"]] = safeEval(attrs["value"])
507842e56b97ce677b83bdab09cda48bc2d89ac75aJust
51