def _copy_color_in(self, col, name=None): if col is self._EMPTY_SLOT_ITEM or col is None: result = self._EMPTY_SLOT_ITEM else: if name is None: try: name = col.__name except AttributeError: pass if name is not None: name = unicode(name) result = RGBColor(color=col) result.__name = name return result
def _copy_color_out(self, col): if col is self._EMPTY_SLOT_ITEM: return None result = RGBColor(color=col) result.__name = col.__name return result
def load(self, filehandle, silent=False): """Load contents from a file handle containing a GIMP palette. :param filehandle: File-like object (.readline, line iteration) :param bool silent: If true, don't emit any events. >>> pal = Palette() >>> with open("palettes/MyPaint_Default.gpl", "r") as fp: ... pal.load(fp) >>> len(pal) > 1 True If the file format is incorrect, a RuntimeError will be raised. """ comment_line_re = re.compile(r'^#') field_line_re = re.compile(r'^(\w+)\s*:\s*(.*)$') color_line_re = re.compile(r'^(\d+)\s+(\d+)\s+(\d+)\s*(?:\b(.*))$') fp = filehandle self.clear(silent=True) # method fires events itself line = fp.readline() if line.strip() != "GIMP Palette": raise RuntimeError("Not a valid GIMP Palette") header_done = False line_num = 0 for line in fp: line = line.strip() line_num += 1 if line == '': continue if comment_line_re.match(line): continue if not header_done: match = field_line_re.match(line) if match: key, value = match.groups() key = key.lower() if key == 'name': self._name = value.strip() elif key == 'columns': self._columns = int(value) else: logger.warning("Unknown 'key:value' pair %r", line) continue else: header_done = True match = color_line_re.match(line) if not match: logger.warning("Expected 'R G B [Name]', not %r", line) continue r, g, b, col_name = match.groups() col_name = col_name.strip() r = float(clamp(int(r), 0, 0xff))/0xff g = float(clamp(int(g), 0, 0xff))/0xff b = float(clamp(int(b), 0, 0xff))/0xff if r == g == b == 0 and col_name == self._EMPTY_SLOT_NAME: self.append(None) else: col = RGBColor(r, g, b) col.__name = col_name self._colors.append(col) if not silent: self.info_changed() self.sequence_changed() self.match_changed()
def load(self, filehandle, silent=False): """Load contents from a file handle containing a GIMP palette. :param filehandle: File-like object (.readline, line iteration) :param bool silent: If true, don't emit any events. >>> pal = Palette() >>> with open("palettes/MyPaint_Default.gpl", "r") as fp: ... pal.load(fp) >>> len(pal) > 1 True If the file format is incorrect, a RuntimeError will be raised. """ comment_line_re = re.compile(r'^#') field_line_re = re.compile(r'^(\w+)\s*:\s*(.*)$') color_line_re = re.compile(r'^(\d+)\s+(\d+)\s+(\d+)\s*(?:\b(.*))$') fp = filehandle self.clear(silent=True) # method fires events itself line = fp.readline() if line.strip() != "GIMP Palette": raise RuntimeError("Not a valid GIMP Palette") header_done = False line_num = 0 for line in fp: line = line.strip() line_num += 1 if line == '': continue if comment_line_re.match(line): continue if not header_done: match = field_line_re.match(line) if match: key, value = match.groups() key = key.lower() if key == 'name': self._name = value.strip() elif key == 'columns': self._columns = int(value) else: logger.warning("Unknown 'key:value' pair %r", line) continue else: header_done = True match = color_line_re.match(line) if not match: logger.warning("Expected 'R G B [Name]', not %r", line) continue r, g, b, col_name = match.groups() col_name = col_name.strip() r = clamp(int(r), 0, 0xff) / 0xff g = clamp(int(g), 0, 0xff) / 0xff b = clamp(int(b), 0, 0xff) / 0xff if r == g == b == 0 and col_name == self._EMPTY_SLOT_NAME: self.append(None) else: col = RGBColor(r, g, b) col.__name = col_name self._colors.append(col) if not silent: self.info_changed() self.sequence_changed() self.match_changed()