_c_v_t.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from fontTools.misc.textTools import safeEval
  2. from . import DefaultTable
  3. import sys
  4. import array
  5. class table__c_v_t(DefaultTable.DefaultTable):
  6. """Control Value Table
  7. The Control Value Table holds a list of values that can be referenced
  8. by TrueType font instructions.
  9. See also https://learn.microsoft.com/en-us/typography/opentype/spec/cvt
  10. """
  11. def decompile(self, data, ttFont):
  12. values = array.array("h")
  13. values.frombytes(data)
  14. if sys.byteorder != "big":
  15. values.byteswap()
  16. self.values = values
  17. def compile(self, ttFont):
  18. values = self.values[:]
  19. if sys.byteorder != "big":
  20. values.byteswap()
  21. return values.tobytes()
  22. def toXML(self, writer, ttFont):
  23. for i in range(len(self.values)):
  24. value = self.values[i]
  25. writer.simpletag("cv", value=value, index=i)
  26. writer.newline()
  27. def fromXML(self, name, attrs, content, ttFont):
  28. if not hasattr(self, "values"):
  29. self.values = array.array("h")
  30. if name == "cv":
  31. index = safeEval(attrs["index"])
  32. value = safeEval(attrs["value"])
  33. for i in range(1 + index - len(self.values)):
  34. self.values.append(0)
  35. self.values[index] = value
  36. def __len__(self):
  37. return len(self.values)
  38. def __getitem__(self, index):
  39. return self.values[index]
  40. def __setitem__(self, index, value):
  41. self.values[index] = value
  42. def __delitem__(self, index):
  43. del self.values[index]