Source code for fontTools.ttLib.tables._l_o_c_a

from . import DefaultTable
import sys
import array
import logging


log = logging.getLogger(__name__)


[docs] class table__l_o_c_a(DefaultTable.DefaultTable): dependencies = ["glyf"]
[docs] def decompile(self, data, ttFont): longFormat = ttFont["head"].indexToLocFormat if longFormat: format = "I" else: format = "H" locations = array.array(format) locations.frombytes(data) if sys.byteorder != "big": locations.byteswap() if not longFormat: l = array.array("I") for i in range(len(locations)): l.append(locations[i] * 2) locations = l if len(locations) < (ttFont["maxp"].numGlyphs + 1): log.warning( "corrupt 'loca' table, or wrong numGlyphs in 'maxp': %d %d", len(locations) - 1, ttFont["maxp"].numGlyphs, ) self.locations = locations
[docs] def compile(self, ttFont): try: max_location = max(self.locations) except AttributeError: self.set([]) max_location = 0 if max_location < 0x20000 and all(l % 2 == 0 for l in self.locations): locations = array.array("H") for i in range(len(self.locations)): locations.append(self.locations[i] // 2) ttFont["head"].indexToLocFormat = 0 else: locations = array.array("I", self.locations) ttFont["head"].indexToLocFormat = 1 if sys.byteorder != "big": locations.byteswap() return locations.tobytes()
[docs] def set(self, locations): self.locations = array.array("I", locations)
[docs] def toXML(self, writer, ttFont): writer.comment("The 'loca' table will be calculated by the compiler") writer.newline()
def __getitem__(self, index): return self.locations[index] def __len__(self): return len(self.locations)