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 67842e56b97ce677b83bdab09cda48bc2d89ac75aJust 77842e56b97ce677b83bdab09cda48bc2d89ac75aJust 891bca4244286fb519c93fe92329da96b0e6f32eejvrGASP_SYMMETRIC_GRIDFIT = 0x0004 991bca4244286fb519c93fe92329da96b0e6f32eejvrGASP_SYMMETRIC_SMOOTHING = 0x0008 107842e56b97ce677b83bdab09cda48bc2d89ac75aJustGASP_DOGRAY = 0x0002 117842e56b97ce677b83bdab09cda48bc2d89ac75aJustGASP_GRIDFIT = 0x0001 127842e56b97ce677b83bdab09cda48bc2d89ac75aJust 137842e56b97ce677b83bdab09cda48bc2d89ac75aJustclass table__g_a_s_p(DefaultTable.DefaultTable): 147842e56b97ce677b83bdab09cda48bc2d89ac75aJust 157842e56b97ce677b83bdab09cda48bc2d89ac75aJust def decompile(self, data, ttFont): 167842e56b97ce677b83bdab09cda48bc2d89ac75aJust self.version, numRanges = struct.unpack(">HH", data[:4]) 17b018bf71203a067e6dda2736429b99e52f48e4e9jvr assert 0 <= self.version <= 1, "unknown 'gasp' format: %s" % self.version 187842e56b97ce677b83bdab09cda48bc2d89ac75aJust data = data[4:] 197842e56b97ce677b83bdab09cda48bc2d89ac75aJust self.gaspRange = {} 207842e56b97ce677b83bdab09cda48bc2d89ac75aJust for i in range(numRanges): 217842e56b97ce677b83bdab09cda48bc2d89ac75aJust rangeMaxPPEM, rangeGaspBehavior = struct.unpack(">HH", data[:4]) 227842e56b97ce677b83bdab09cda48bc2d89ac75aJust self.gaspRange[int(rangeMaxPPEM)] = int(rangeGaspBehavior) 237842e56b97ce677b83bdab09cda48bc2d89ac75aJust data = data[4:] 247842e56b97ce677b83bdab09cda48bc2d89ac75aJust assert not data, "too much data" 257842e56b97ce677b83bdab09cda48bc2d89ac75aJust 267842e56b97ce677b83bdab09cda48bc2d89ac75aJust def compile(self, ttFont): 27b018bf71203a067e6dda2736429b99e52f48e4e9jvr version = 0 # ignore self.version 287842e56b97ce677b83bdab09cda48bc2d89ac75aJust numRanges = len(self.gaspRange) 295f6418d9e1fa15a89dcec29cdc433ba2c99732c3Behdad Esfahbod data = b"" 30ac1b4359467ca3deab03186a15eae1d55eb35567Behdad Esfahbod items = sorted(self.gaspRange.items()) 317842e56b97ce677b83bdab09cda48bc2d89ac75aJust for rangeMaxPPEM, rangeGaspBehavior in items: 327842e56b97ce677b83bdab09cda48bc2d89ac75aJust data = data + struct.pack(">HH", rangeMaxPPEM, rangeGaspBehavior) 33b018bf71203a067e6dda2736429b99e52f48e4e9jvr if rangeGaspBehavior & ~(GASP_GRIDFIT | GASP_DOGRAY): 34b018bf71203a067e6dda2736429b99e52f48e4e9jvr version = 1 35b018bf71203a067e6dda2736429b99e52f48e4e9jvr data = struct.pack(">HH", version, numRanges) + data 367842e56b97ce677b83bdab09cda48bc2d89ac75aJust return data 377842e56b97ce677b83bdab09cda48bc2d89ac75aJust 387842e56b97ce677b83bdab09cda48bc2d89ac75aJust def toXML(self, writer, ttFont): 39ac1b4359467ca3deab03186a15eae1d55eb35567Behdad Esfahbod items = sorted(self.gaspRange.items()) 407842e56b97ce677b83bdab09cda48bc2d89ac75aJust for rangeMaxPPEM, rangeGaspBehavior in items: 417842e56b97ce677b83bdab09cda48bc2d89ac75aJust writer.simpletag("gaspRange", [ 427842e56b97ce677b83bdab09cda48bc2d89ac75aJust ("rangeMaxPPEM", rangeMaxPPEM), 437842e56b97ce677b83bdab09cda48bc2d89ac75aJust ("rangeGaspBehavior", rangeGaspBehavior)]) 447842e56b97ce677b83bdab09cda48bc2d89ac75aJust writer.newline() 457842e56b97ce677b83bdab09cda48bc2d89ac75aJust 463a9fd301808f5a8991ca9ac44028d1ecb22d307fBehdad Esfahbod def fromXML(self, name, attrs, content, ttFont): 47180ace6a5ff1399ec53bc696e8bef7cce6eef39aBehdad Esfahbod if name != "gaspRange": 487842e56b97ce677b83bdab09cda48bc2d89ac75aJust return 497842e56b97ce677b83bdab09cda48bc2d89ac75aJust if not hasattr(self, "gaspRange"): 507842e56b97ce677b83bdab09cda48bc2d89ac75aJust self.gaspRange = {} 517842e56b97ce677b83bdab09cda48bc2d89ac75aJust self.gaspRange[safeEval(attrs["rangeMaxPPEM"])] = safeEval(attrs["rangeGaspBehavior"]) 527842e56b97ce677b83bdab09cda48bc2d89ac75aJust 53