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