aboutsummaryrefslogtreecommitdiff
path: root/Lib/fontTools/ttLib/tables/G_P_K_G_.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/fontTools/ttLib/tables/G_P_K_G_.py')
-rw-r--r--Lib/fontTools/ttLib/tables/G_P_K_G_.py195
1 files changed, 99 insertions, 96 deletions
diff --git a/Lib/fontTools/ttLib/tables/G_P_K_G_.py b/Lib/fontTools/ttLib/tables/G_P_K_G_.py
index 4f469c02..eed34d92 100644
--- a/Lib/fontTools/ttLib/tables/G_P_K_G_.py
+++ b/Lib/fontTools/ttLib/tables/G_P_K_G_.py
@@ -16,108 +16,111 @@ GPKGFormat = """
class table_G_P_K_G_(DefaultTable.DefaultTable):
+ def decompile(self, data, ttFont):
+ dummy, newData = sstruct.unpack2(GPKGFormat, data, self)
- def decompile(self, data, ttFont):
- dummy, newData = sstruct.unpack2(GPKGFormat, data, self)
+ GMAPoffsets = array.array("I")
+ endPos = (self.numGMAPs + 1) * 4
+ GMAPoffsets.frombytes(newData[:endPos])
+ if sys.byteorder != "big":
+ GMAPoffsets.byteswap()
+ self.GMAPs = []
+ for i in range(self.numGMAPs):
+ start = GMAPoffsets[i]
+ end = GMAPoffsets[i + 1]
+ self.GMAPs.append(data[start:end])
+ pos = endPos
+ endPos = pos + (self.numGlyplets + 1) * 4
+ glyphletOffsets = array.array("I")
+ glyphletOffsets.frombytes(newData[pos:endPos])
+ if sys.byteorder != "big":
+ glyphletOffsets.byteswap()
+ self.glyphlets = []
+ for i in range(self.numGlyplets):
+ start = glyphletOffsets[i]
+ end = glyphletOffsets[i + 1]
+ self.glyphlets.append(data[start:end])
- GMAPoffsets = array.array("I")
- endPos = (self.numGMAPs+1) * 4
- GMAPoffsets.frombytes(newData[:endPos])
- if sys.byteorder != "big": GMAPoffsets.byteswap()
- self.GMAPs = []
- for i in range(self.numGMAPs):
- start = GMAPoffsets[i]
- end = GMAPoffsets[i+1]
- self.GMAPs.append(data[start:end])
- pos = endPos
- endPos = pos + (self.numGlyplets + 1)*4
- glyphletOffsets = array.array("I")
- glyphletOffsets.frombytes(newData[pos:endPos])
- if sys.byteorder != "big": glyphletOffsets.byteswap()
- self.glyphlets = []
- for i in range(self.numGlyplets):
- start = glyphletOffsets[i]
- end = glyphletOffsets[i+1]
- self.glyphlets.append(data[start:end])
+ def compile(self, ttFont):
+ self.numGMAPs = len(self.GMAPs)
+ self.numGlyplets = len(self.glyphlets)
+ GMAPoffsets = [0] * (self.numGMAPs + 1)
+ glyphletOffsets = [0] * (self.numGlyplets + 1)
- def compile(self, ttFont):
- self.numGMAPs = len(self.GMAPs)
- self.numGlyplets = len(self.glyphlets)
- GMAPoffsets = [0]*(self.numGMAPs + 1)
- glyphletOffsets = [0]*(self.numGlyplets + 1)
+ dataList = [sstruct.pack(GPKGFormat, self)]
- dataList =[ sstruct.pack(GPKGFormat, self)]
+ pos = len(dataList[0]) + (self.numGMAPs + 1) * 4 + (self.numGlyplets + 1) * 4
+ GMAPoffsets[0] = pos
+ for i in range(1, self.numGMAPs + 1):
+ pos += len(self.GMAPs[i - 1])
+ GMAPoffsets[i] = pos
+ gmapArray = array.array("I", GMAPoffsets)
+ if sys.byteorder != "big":
+ gmapArray.byteswap()
+ dataList.append(gmapArray.tobytes())
- pos = len(dataList[0]) + (self.numGMAPs + 1)*4 + (self.numGlyplets + 1)*4
- GMAPoffsets[0] = pos
- for i in range(1, self.numGMAPs +1):
- pos += len(self.GMAPs[i-1])
- GMAPoffsets[i] = pos
- gmapArray = array.array("I", GMAPoffsets)
- if sys.byteorder != "big": gmapArray.byteswap()
- dataList.append(gmapArray.tobytes())
+ glyphletOffsets[0] = pos
+ for i in range(1, self.numGlyplets + 1):
+ pos += len(self.glyphlets[i - 1])
+ glyphletOffsets[i] = pos
+ glyphletArray = array.array("I", glyphletOffsets)
+ if sys.byteorder != "big":
+ glyphletArray.byteswap()
+ dataList.append(glyphletArray.tobytes())
+ dataList += self.GMAPs
+ dataList += self.glyphlets
+ data = bytesjoin(dataList)
+ return data
- glyphletOffsets[0] = pos
- for i in range(1, self.numGlyplets +1):
- pos += len(self.glyphlets[i-1])
- glyphletOffsets[i] = pos
- glyphletArray = array.array("I", glyphletOffsets)
- if sys.byteorder != "big": glyphletArray.byteswap()
- dataList.append(glyphletArray.tobytes())
- dataList += self.GMAPs
- dataList += self.glyphlets
- data = bytesjoin(dataList)
- return data
+ def toXML(self, writer, ttFont):
+ writer.comment("Most of this table will be recalculated by the compiler")
+ writer.newline()
+ formatstring, names, fixes = sstruct.getformat(GPKGFormat)
+ for name in names:
+ value = getattr(self, name)
+ writer.simpletag(name, value=value)
+ 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(GPKGFormat)
- for name in names:
- value = getattr(self, name)
- writer.simpletag(name, value=value)
- writer.newline()
+ writer.begintag("GMAPs")
+ writer.newline()
+ for gmapData in self.GMAPs:
+ writer.begintag("hexdata")
+ writer.newline()
+ writer.dumphex(gmapData)
+ writer.endtag("hexdata")
+ writer.newline()
+ writer.endtag("GMAPs")
+ writer.newline()
- writer.begintag("GMAPs")
- writer.newline()
- for gmapData in self.GMAPs:
- writer.begintag("hexdata")
- writer.newline()
- writer.dumphex(gmapData)
- writer.endtag("hexdata")
- writer.newline()
- writer.endtag("GMAPs")
- writer.newline()
+ writer.begintag("glyphlets")
+ writer.newline()
+ for glyphletData in self.glyphlets:
+ writer.begintag("hexdata")
+ writer.newline()
+ writer.dumphex(glyphletData)
+ writer.endtag("hexdata")
+ writer.newline()
+ writer.endtag("glyphlets")
+ writer.newline()
- writer.begintag("glyphlets")
- writer.newline()
- for glyphletData in self.glyphlets:
- writer.begintag("hexdata")
- writer.newline()
- writer.dumphex(glyphletData)
- writer.endtag("hexdata")
- writer.newline()
- writer.endtag("glyphlets")
- writer.newline()
-
- def fromXML(self, name, attrs, content, ttFont):
- if name == "GMAPs":
- if not hasattr(self, "GMAPs"):
- self.GMAPs = []
- for element in content:
- if isinstance(element, str):
- continue
- itemName, itemAttrs, itemContent = element
- if itemName == "hexdata":
- self.GMAPs.append(readHex(itemContent))
- elif name == "glyphlets":
- if not hasattr(self, "glyphlets"):
- self.glyphlets = []
- for element in content:
- if isinstance(element, str):
- continue
- itemName, itemAttrs, itemContent = element
- if itemName == "hexdata":
- self.glyphlets.append(readHex(itemContent))
- else:
- setattr(self, name, safeEval(attrs["value"]))
+ def fromXML(self, name, attrs, content, ttFont):
+ if name == "GMAPs":
+ if not hasattr(self, "GMAPs"):
+ self.GMAPs = []
+ for element in content:
+ if isinstance(element, str):
+ continue
+ itemName, itemAttrs, itemContent = element
+ if itemName == "hexdata":
+ self.GMAPs.append(readHex(itemContent))
+ elif name == "glyphlets":
+ if not hasattr(self, "glyphlets"):
+ self.glyphlets = []
+ for element in content:
+ if isinstance(element, str):
+ continue
+ itemName, itemAttrs, itemContent = element
+ if itemName == "hexdata":
+ self.glyphlets.append(readHex(itemContent))
+ else:
+ setattr(self, name, safeEval(attrs["value"]))