diff options
Diffstat (limited to 'Lib/fontTools/ttLib/tables/_l_t_a_g.py')
-rw-r--r-- | Lib/fontTools/ttLib/tables/_l_t_a_g.py | 113 |
1 files changed, 57 insertions, 56 deletions
diff --git a/Lib/fontTools/ttLib/tables/_l_t_a_g.py b/Lib/fontTools/ttLib/tables/_l_t_a_g.py index ce3c6b97..24f5e131 100644 --- a/Lib/fontTools/ttLib/tables/_l_t_a_g.py +++ b/Lib/fontTools/ttLib/tables/_l_t_a_g.py @@ -4,60 +4,61 @@ import struct # https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6ltag.html + class table__l_t_a_g(DefaultTable.DefaultTable): - def __init__(self, tag=None): - DefaultTable.DefaultTable.__init__(self, tag) - self.version, self.flags = 1, 0 - self.tags = [] - - def addTag(self, tag): - """Add 'tag' to the list of langauge tags if not already there. - - Returns the integer index of 'tag' in the list of all tags. - """ - try: - return self.tags.index(tag) - except ValueError: - self.tags.append(tag) - return len(self.tags) - 1 - - def decompile(self, data, ttFont): - self.version, self.flags, numTags = struct.unpack(">LLL", data[:12]) - assert self.version == 1 - self.tags = [] - for i in range(numTags): - pos = 12 + i * 4 - offset, length = struct.unpack(">HH", data[pos:pos+4]) - tag = data[offset:offset+length].decode("ascii") - self.tags.append(tag) - - def compile(self, ttFont): - dataList = [struct.pack(">LLL", self.version, self.flags, len(self.tags))] - stringPool = "" - for tag in self.tags: - offset = stringPool.find(tag) - if offset < 0: - offset = len(stringPool) - stringPool = stringPool + tag - offset = offset + 12 + len(self.tags) * 4 - dataList.append(struct.pack(">HH", offset, len(tag))) - dataList.append(tobytes(stringPool)) - return bytesjoin(dataList) - - def toXML(self, writer, ttFont): - writer.simpletag("version", value=self.version) - writer.newline() - writer.simpletag("flags", value=self.flags) - writer.newline() - for tag in self.tags: - writer.simpletag("LanguageTag", tag=tag) - writer.newline() - - def fromXML(self, name, attrs, content, ttFont): - if not hasattr(self, "tags"): - self.tags = [] - if name == "LanguageTag": - self.tags.append(attrs["tag"]) - elif "value" in attrs: - value = safeEval(attrs["value"]) - setattr(self, name, value) + def __init__(self, tag=None): + DefaultTable.DefaultTable.__init__(self, tag) + self.version, self.flags = 1, 0 + self.tags = [] + + def addTag(self, tag): + """Add 'tag' to the list of langauge tags if not already there. + + Returns the integer index of 'tag' in the list of all tags. + """ + try: + return self.tags.index(tag) + except ValueError: + self.tags.append(tag) + return len(self.tags) - 1 + + def decompile(self, data, ttFont): + self.version, self.flags, numTags = struct.unpack(">LLL", data[:12]) + assert self.version == 1 + self.tags = [] + for i in range(numTags): + pos = 12 + i * 4 + offset, length = struct.unpack(">HH", data[pos : pos + 4]) + tag = data[offset : offset + length].decode("ascii") + self.tags.append(tag) + + def compile(self, ttFont): + dataList = [struct.pack(">LLL", self.version, self.flags, len(self.tags))] + stringPool = "" + for tag in self.tags: + offset = stringPool.find(tag) + if offset < 0: + offset = len(stringPool) + stringPool = stringPool + tag + offset = offset + 12 + len(self.tags) * 4 + dataList.append(struct.pack(">HH", offset, len(tag))) + dataList.append(tobytes(stringPool)) + return bytesjoin(dataList) + + def toXML(self, writer, ttFont): + writer.simpletag("version", value=self.version) + writer.newline() + writer.simpletag("flags", value=self.flags) + writer.newline() + for tag in self.tags: + writer.simpletag("LanguageTag", tag=tag) + writer.newline() + + def fromXML(self, name, attrs, content, ttFont): + if not hasattr(self, "tags"): + self.tags = [] + if name == "LanguageTag": + self.tags.append(attrs["tag"]) + elif "value" in attrs: + value = safeEval(attrs["value"]) + setattr(self, name, value) |