L_T_S_H_.py revision dc66e7e1180e77999ba8c02683956fb31f0e1003
17842e56b97ce677b83bdab09cda48bc2d89ac75aJustimport 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