diff options
Diffstat (limited to 'Lib/fontTools/ttLib/tables/_l_o_c_a.py')
-rw-r--r-- | Lib/fontTools/ttLib/tables/_l_o_c_a.py | 104 |
1 files changed, 54 insertions, 50 deletions
diff --git a/Lib/fontTools/ttLib/tables/_l_o_c_a.py b/Lib/fontTools/ttLib/tables/_l_o_c_a.py index 6a8693ed..5884cef4 100644 --- a/Lib/fontTools/ttLib/tables/_l_o_c_a.py +++ b/Lib/fontTools/ttLib/tables/_l_o_c_a.py @@ -8,54 +8,58 @@ log = logging.getLogger(__name__) class table__l_o_c_a(DefaultTable.DefaultTable): + dependencies = ["glyf"] - dependencies = ['glyf'] - - 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 - - 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() - - def set(self, locations): - self.locations = array.array("I", locations) - - 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) + 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 + + 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() + + def set(self, locations): + self.locations = array.array("I", locations) + + 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) |