11ae29591efbb29492ce05378909ccf4028d7c1eeBehdad Esfahbodfrom __future__ import print_function, division, absolute_import
230e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbodfrom fontTools.misc.py23 import *
330e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbodfrom fontTools.misc.textTools import safeEval
42b06aaa2a6bcd363c25fb0c43f6bb906906594bdBehdad Esfahbodfrom . import DefaultTable
57842e56b97ce677b83bdab09cda48bc2d89ac75aJustimport struct
630e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbodimport array
77842e56b97ce677b83bdab09cda48bc2d89ac75aJust
87842e56b97ce677b83bdab09cda48bc2d89ac75aJust# XXX I've lowered the strictness, to make sure Apple's own Chicago
97842e56b97ce677b83bdab09cda48bc2d89ac75aJust# XXX gets through. They're looking into it, I hope to raise the standards
107842e56b97ce677b83bdab09cda48bc2d89ac75aJust# XXX back to normal eventually.
117842e56b97ce677b83bdab09cda48bc2d89ac75aJust
127842e56b97ce677b83bdab09cda48bc2d89ac75aJustclass table_L_T_S_H_(DefaultTable.DefaultTable):
137842e56b97ce677b83bdab09cda48bc2d89ac75aJust
147842e56b97ce677b83bdab09cda48bc2d89ac75aJust	def decompile(self, data, ttFont):
157842e56b97ce677b83bdab09cda48bc2d89ac75aJust		version, numGlyphs = struct.unpack(">HH", data[:4])
167842e56b97ce677b83bdab09cda48bc2d89ac75aJust		data = data[4:]
17e23942f0e6c9020d2a677b23ed58e04ad1173bbdJust		assert version == 0, "unknown version: %s" % version
18dc66e7e1180e77999ba8c02683956fb31f0e1003fcoiffie		assert (len(data) % numGlyphs) < 4, "numGlyphs doesn't match data length"
197842e56b97ce677b83bdab09cda48bc2d89ac75aJust		# ouch: the assertion is not true in Chicago!
207842e56b97ce677b83bdab09cda48bc2d89ac75aJust		#assert numGlyphs == ttFont['maxp'].numGlyphs
217842e56b97ce677b83bdab09cda48bc2d89ac75aJust		yPels = array.array("B")
227842e56b97ce677b83bdab09cda48bc2d89ac75aJust		yPels.fromstring(data)
237842e56b97ce677b83bdab09cda48bc2d89ac75aJust		self.yPels = {}
247842e56b97ce677b83bdab09cda48bc2d89ac75aJust		for i in range(numGlyphs):
257842e56b97ce677b83bdab09cda48bc2d89ac75aJust			self.yPels[ttFont.getGlyphName(i)] = yPels[i]
267842e56b97ce677b83bdab09cda48bc2d89ac75aJust
277842e56b97ce677b83bdab09cda48bc2d89ac75aJust	def compile(self, ttFont):
287842e56b97ce677b83bdab09cda48bc2d89ac75aJust		version = 0
29c2297cd41d6c00b95f857b65bc9fd4b57559ac5eBehdad Esfahbod		names = list(self.yPels.keys())
307842e56b97ce677b83bdab09cda48bc2d89ac75aJust		numGlyphs = len(names)
317842e56b97ce677b83bdab09cda48bc2d89ac75aJust		yPels = [0] * numGlyphs
327842e56b97ce677b83bdab09cda48bc2d89ac75aJust		# ouch: the assertion is not true in Chicago!
337842e56b97ce677b83bdab09cda48bc2d89ac75aJust		#assert len(self.yPels) == ttFont['maxp'].numGlyphs == numGlyphs
347842e56b97ce677b83bdab09cda48bc2d89ac75aJust		for name in names:
357842e56b97ce677b83bdab09cda48bc2d89ac75aJust			yPels[ttFont.getGlyphID(name)] = self.yPels[name]
367842e56b97ce677b83bdab09cda48bc2d89ac75aJust		yPels = array.array("B", yPels)
377842e56b97ce677b83bdab09cda48bc2d89ac75aJust		return struct.pack(">HH", version, numGlyphs) + yPels.tostring()
387842e56b97ce677b83bdab09cda48bc2d89ac75aJust
397842e56b97ce677b83bdab09cda48bc2d89ac75aJust	def toXML(self, writer, ttFont):
40ac1b4359467ca3deab03186a15eae1d55eb35567Behdad Esfahbod		names = sorted(self.yPels.keys())
417842e56b97ce677b83bdab09cda48bc2d89ac75aJust		for name in names:
427842e56b97ce677b83bdab09cda48bc2d89ac75aJust			writer.simpletag("yPel", name=name, value=self.yPels[name])
437842e56b97ce677b83bdab09cda48bc2d89ac75aJust			writer.newline()
447842e56b97ce677b83bdab09cda48bc2d89ac75aJust
453a9fd301808f5a8991ca9ac44028d1ecb22d307fBehdad Esfahbod	def fromXML(self, name, attrs, content, ttFont):
467842e56b97ce677b83bdab09cda48bc2d89ac75aJust		if not hasattr(self, "yPels"):
477842e56b97ce677b83bdab09cda48bc2d89ac75aJust			self.yPels = {}
48180ace6a5ff1399ec53bc696e8bef7cce6eef39aBehdad Esfahbod		if name != "yPel":
497842e56b97ce677b83bdab09cda48bc2d89ac75aJust			return # ignore unknown tags
507842e56b97ce677b83bdab09cda48bc2d89ac75aJust		self.yPels[attrs["name"]] = safeEval(attrs["value"])
517842e56b97ce677b83bdab09cda48bc2d89ac75aJust
52