From 173a0f5011367c79bbd2e205ca6d284fc09227be Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Fri, 8 Feb 2019 01:16:47 +0100 Subject: [PATCH] [C_P_A_L_] make Color a subclass of namedtuple so that's comparable/hashable/immutable and can be used as key in a dict or set. The fromXML instance method was dropped since it relied on the object being mutable. A fromHex classmethod replaces it. --- Lib/fontTools/ttLib/tables/C_P_A_L_.py | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/Lib/fontTools/ttLib/tables/C_P_A_L_.py b/Lib/fontTools/ttLib/tables/C_P_A_L_.py index c687c7a1e..f9d0c6435 100644 --- a/Lib/fontTools/ttLib/tables/C_P_A_L_.py +++ b/Lib/fontTools/ttLib/tables/C_P_A_L_.py @@ -7,6 +7,7 @@ from fontTools.misc.py23 import * from fontTools.misc.textTools import safeEval from . import DefaultTable import array +from collections import namedtuple import struct import sys @@ -206,8 +207,8 @@ class table_C_P_A_L_(DefaultTable.DefaultTable): for element in content: if isinstance(element, basestring): continue - color = Color() - color.fromXML(element[0], element[1], element[2], ttFont) + attrs = element[1] + color = Color.fromHex(attrs["value"]) palette.append(color) self.palettes.append(palette) elif name == "paletteEntryLabels": @@ -230,13 +231,7 @@ class table_C_P_A_L_(DefaultTable.DefaultTable): self.paletteEntryLabels = [0] * self.numPaletteEntries -class Color(object): - - def __init__(self, blue=None, green=None, red=None, alpha=None): - self.blue = blue - self.green = green - self.red = red - self.alpha = alpha +class Color(namedtuple("Color", "blue green red alpha")): def hex(self): return "#%02X%02X%02X%02X" % (self.red, self.green, self.blue, self.alpha) @@ -248,11 +243,12 @@ class Color(object): writer.simpletag("color", value=self.hex(), index=index) writer.newline() - def fromXML(self, eltname, attrs, content, ttFont): - value = attrs["value"] + @classmethod + def fromHex(cls, value): if value[0] == '#': value = value[1:] - self.red = int(value[0:2], 16) - self.green = int(value[2:4], 16) - self.blue = int(value[4:6], 16) - self.alpha = int(value[6:8], 16) if len (value) >= 8 else 0xFF + red = int(value[0:2], 16) + green = int(value[2:4], 16) + blue = int(value[4:6], 16) + alpha = int(value[6:8], 16) if len (value) >= 8 else 0xFF + return cls(red=red, green=green, blue=blue, alpha=alpha)