47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
|
import DefaultTable
|
||
|
import struct
|
||
|
from fontTools.misc.textTools import safeEval
|
||
|
|
||
|
|
||
|
GASP_DOGRAY = 0x0002
|
||
|
GASP_GRIDFIT = 0x0001
|
||
|
|
||
|
class table__g_a_s_p(DefaultTable.DefaultTable):
|
||
|
|
||
|
def decompile(self, data, ttFont):
|
||
|
self.version, numRanges = struct.unpack(">HH", data[:4])
|
||
|
assert self.version == 0, "unknown 'gasp' format: %s" % self.version
|
||
|
data = data[4:]
|
||
|
self.gaspRange = {}
|
||
|
for i in range(numRanges):
|
||
|
rangeMaxPPEM, rangeGaspBehavior = struct.unpack(">HH", data[:4])
|
||
|
self.gaspRange[int(rangeMaxPPEM)] = int(rangeGaspBehavior)
|
||
|
data = data[4:]
|
||
|
assert not data, "too much data"
|
||
|
|
||
|
def compile(self, ttFont):
|
||
|
numRanges = len(self.gaspRange)
|
||
|
data = struct.pack(">HH", 0, numRanges)
|
||
|
items = self.gaspRange.items()
|
||
|
items.sort()
|
||
|
for rangeMaxPPEM, rangeGaspBehavior in items:
|
||
|
data = data + struct.pack(">HH", rangeMaxPPEM, rangeGaspBehavior)
|
||
|
return data
|
||
|
|
||
|
def toXML(self, writer, ttFont):
|
||
|
items = self.gaspRange.items()
|
||
|
items.sort()
|
||
|
for rangeMaxPPEM, rangeGaspBehavior in items:
|
||
|
writer.simpletag("gaspRange", [
|
||
|
("rangeMaxPPEM", rangeMaxPPEM),
|
||
|
("rangeGaspBehavior", rangeGaspBehavior)])
|
||
|
writer.newline()
|
||
|
|
||
|
def fromXML(self, (name, attrs, content), ttFont):
|
||
|
if name <> "gaspRange":
|
||
|
return
|
||
|
if not hasattr(self, "gaspRange"):
|
||
|
self.gaspRange = {}
|
||
|
self.gaspRange[safeEval(attrs["rangeMaxPPEM"])] = safeEval(attrs["rangeGaspBehavior"])
|
||
|
|