Home | History | Annotate | Download | only in tables
      1 from __future__ import print_function, division, absolute_import
      2 from fontTools.misc.py23 import *
      3 from fontTools.misc.textTools import safeEval
      4 from . import DefaultTable
      5 import struct
      6 
      7 
      8 GASP_SYMMETRIC_GRIDFIT = 0x0004
      9 GASP_SYMMETRIC_SMOOTHING = 0x0008
     10 GASP_DOGRAY = 0x0002
     11 GASP_GRIDFIT = 0x0001
     12 
     13 class table__g_a_s_p(DefaultTable.DefaultTable):
     14 	
     15 	def decompile(self, data, ttFont):
     16 		self.version, numRanges = struct.unpack(">HH", data[:4])
     17 		assert 0 <= self.version <= 1, "unknown 'gasp' format: %s" % self.version
     18 		data = data[4:]
     19 		self.gaspRange = {}
     20 		for i in range(numRanges):
     21 			rangeMaxPPEM, rangeGaspBehavior = struct.unpack(">HH", data[:4])
     22 			self.gaspRange[int(rangeMaxPPEM)] = int(rangeGaspBehavior)
     23 			data = data[4:]
     24 		assert not data, "too much data"
     25 	
     26 	def compile(self, ttFont):
     27 		version = 0 # ignore self.version
     28 		numRanges = len(self.gaspRange)
     29 		data = b""
     30 		items = sorted(self.gaspRange.items())
     31 		for rangeMaxPPEM, rangeGaspBehavior in items:
     32 			data = data + struct.pack(">HH", rangeMaxPPEM, rangeGaspBehavior)
     33 			if rangeGaspBehavior & ~(GASP_GRIDFIT | GASP_DOGRAY):
     34 				version = 1
     35 		data = struct.pack(">HH", version, numRanges) + data
     36 		return data
     37 	
     38 	def toXML(self, writer, ttFont):
     39 		items = sorted(self.gaspRange.items())
     40 		for rangeMaxPPEM, rangeGaspBehavior in items:
     41 			writer.simpletag("gaspRange", [
     42 					("rangeMaxPPEM", rangeMaxPPEM),
     43 					("rangeGaspBehavior", rangeGaspBehavior)])
     44 			writer.newline()
     45 	
     46 	def fromXML(self, name, attrs, content, ttFont):
     47 		if name != "gaspRange":
     48 			return
     49 		if not hasattr(self, "gaspRange"):
     50 			self.gaspRange = {}
     51 		self.gaspRange[safeEval(attrs["rangeMaxPPEM"])] = safeEval(attrs["rangeGaspBehavior"])
     52 
     53