Source code for fontTools.ttLib.tables.G__l_o_c

from fontTools.misc.py23 import *
from fontTools.misc import sstruct
from fontTools.misc.textTools import safeEval
from . import DefaultTable
import array
import sys


Gloc_header = '''
    >        # big endian
    version: 16.16F    # Table version
    flags:        H    # bit 0: 1=long format, 0=short format
                       # bit 1: 1=attribute names, 0=no names
    numAttribs:   H    # NUmber of attributes
'''

[docs]class table_G__l_o_c(DefaultTable.DefaultTable): """ Support Graphite Gloc tables """ dependencies = ['Glat'] def __init__(self, tag=None): DefaultTable.DefaultTable.__init__(self, tag) self.attribIds = None self.numAttribs = 0
[docs] def decompile(self, data, ttFont): _, data = sstruct.unpack2(Gloc_header, data, self) flags = self.flags del self.flags self.locations = array.array('I' if flags & 1 else 'H') self.locations.frombytes(data[:len(data) - self.numAttribs * (flags & 2)]) if sys.byteorder != "big": self.locations.byteswap() self.attribIds = array.array('H') if flags & 2: self.attribIds.frombytes(data[-self.numAttribs * 2:]) if sys.byteorder != "big": self.attribIds.byteswap()
[docs] def compile(self, ttFont): data = sstruct.pack(Gloc_header, dict(version=1.0, flags=(bool(self.attribIds) << 1) + (self.locations.typecode == 'I'), numAttribs=self.numAttribs)) if sys.byteorder != "big": self.locations.byteswap() data += self.locations.tobytes() if sys.byteorder != "big": self.locations.byteswap() if self.attribIds: if sys.byteorder != "big": self.attribIds.byteswap() data += self.attribIds.tobytes() if sys.byteorder != "big": self.attribIds.byteswap() return data
[docs] def set(self, locations): long_format = max(locations) >= 65536 self.locations = array.array('I' if long_format else 'H', locations)
[docs] def toXML(self, writer, ttFont): writer.simpletag("attributes", number=self.numAttribs) writer.newline()
[docs] def fromXML(self, name, attrs, content, ttFont): if name == 'attributes': self.numAttribs = int(safeEval(attrs['number']))
def __getitem__(self, index): return self.locations[index] def __len__(self): return len(self.locations) def __iter__(self): return iter(self.locations)