diff options
Diffstat (limited to 'Lib/fontTools/ttLib/tables/S_I_N_G_.py')
-rw-r--r-- | Lib/fontTools/ttLib/tables/S_I_N_G_.py | 127 |
1 files changed, 63 insertions, 64 deletions
diff --git a/Lib/fontTools/ttLib/tables/S_I_N_G_.py b/Lib/fontTools/ttLib/tables/S_I_N_G_.py index 73246df4..4522c06c 100644 --- a/Lib/fontTools/ttLib/tables/S_I_N_G_.py +++ b/Lib/fontTools/ttLib/tables/S_I_N_G_.py @@ -20,74 +20,73 @@ SINGFormat = """ class table_S_I_N_G_(DefaultTable.DefaultTable): + dependencies = [] - dependencies = [] + def decompile(self, data, ttFont): + dummy, rest = sstruct.unpack2(SINGFormat, data, self) + self.uniqueName = self.decompileUniqueName(self.uniqueName) + self.nameLength = byteord(self.nameLength) + assert len(rest) == self.nameLength + self.baseGlyphName = tostr(rest) - def decompile(self, data, ttFont): - dummy, rest = sstruct.unpack2(SINGFormat, data, self) - self.uniqueName = self.decompileUniqueName(self.uniqueName) - self.nameLength = byteord(self.nameLength) - assert len(rest) == self.nameLength - self.baseGlyphName = tostr(rest) + rawMETAMD5 = self.METAMD5 + self.METAMD5 = "[" + hex(byteord(self.METAMD5[0])) + for char in rawMETAMD5[1:]: + self.METAMD5 = self.METAMD5 + ", " + hex(byteord(char)) + self.METAMD5 = self.METAMD5 + "]" - rawMETAMD5 = self.METAMD5 - self.METAMD5 = "[" + hex(byteord(self.METAMD5[0])) - for char in rawMETAMD5[1:]: - self.METAMD5 = self.METAMD5 + ", " + hex(byteord(char)) - self.METAMD5 = self.METAMD5 + "]" + def decompileUniqueName(self, data): + name = "" + for char in data: + val = byteord(char) + if val == 0: + break + if (val > 31) or (val < 128): + name += chr(val) + else: + octString = oct(val) + if len(octString) > 3: + octString = octString[1:] # chop off that leading zero. + elif len(octString) < 3: + octString.zfill(3) + name += "\\" + octString + return name - def decompileUniqueName(self, data): - name = "" - for char in data: - val = byteord(char) - if val == 0: - break - if (val > 31) or (val < 128): - name += chr(val) - else: - octString = oct(val) - if len(octString) > 3: - octString = octString[1:] # chop off that leading zero. - elif len(octString) < 3: - octString.zfill(3) - name += "\\" + octString - return name + def compile(self, ttFont): + d = self.__dict__.copy() + d["nameLength"] = bytechr(len(self.baseGlyphName)) + d["uniqueName"] = self.compilecompileUniqueName(self.uniqueName, 28) + METAMD5List = eval(self.METAMD5) + d["METAMD5"] = b"" + for val in METAMD5List: + d["METAMD5"] += bytechr(val) + assert len(d["METAMD5"]) == 16, "Failed to pack 16 byte MD5 hash in SING table" + data = sstruct.pack(SINGFormat, d) + data = data + tobytes(self.baseGlyphName) + return data - def compile(self, ttFont): - d = self.__dict__.copy() - d["nameLength"] = bytechr(len(self.baseGlyphName)) - d["uniqueName"] = self.compilecompileUniqueName(self.uniqueName, 28) - METAMD5List = eval(self.METAMD5) - d["METAMD5"] = b"" - for val in METAMD5List: - d["METAMD5"] += bytechr(val) - assert (len(d["METAMD5"]) == 16), "Failed to pack 16 byte MD5 hash in SING table" - data = sstruct.pack(SINGFormat, d) - data = data + tobytes(self.baseGlyphName) - return data + def compilecompileUniqueName(self, name, length): + nameLen = len(name) + if length <= nameLen: + name = name[: length - 1] + "\000" + else: + name += (nameLen - length) * "\000" + return name - def compilecompileUniqueName(self, name, length): - nameLen = len(name) - if length <= nameLen: - name = name[:length-1] + "\000" - else: - name += (nameLen - length) * "\000" - return name + def toXML(self, writer, ttFont): + writer.comment("Most of this table will be recalculated by the compiler") + writer.newline() + formatstring, names, fixes = sstruct.getformat(SINGFormat) + for name in names: + value = getattr(self, name) + writer.simpletag(name, value=value) + writer.newline() + writer.simpletag("baseGlyphName", value=self.baseGlyphName) + writer.newline() - def toXML(self, writer, ttFont): - writer.comment("Most of this table will be recalculated by the compiler") - writer.newline() - formatstring, names, fixes = sstruct.getformat(SINGFormat) - for name in names: - value = getattr(self, name) - writer.simpletag(name, value=value) - writer.newline() - writer.simpletag("baseGlyphName", value=self.baseGlyphName) - writer.newline() - - def fromXML(self, name, attrs, content, ttFont): - value = attrs["value"] - if name in ["uniqueName", "METAMD5", "baseGlyphName"]: - setattr(self, name, value) - else: - setattr(self, name, safeEval(value)) + def fromXML(self, name, attrs, content, ttFont): + value = attrs["value"] + if name in ["uniqueName", "METAMD5", "baseGlyphName"]: + setattr(self, name, value) + else: + setattr(self, name, safeEval(value)) |