[Python-checkins] python/dist/src/Tools/pynche ColorDB.py,2.8,2.9
bwarsaw@users.sourceforge.net
bwarsaw@users.sourceforge.net
Mon, 21 Oct 2002 07:25:26 -0700
Update of /cvsroot/python/python/dist/src/Tools/pynche
In directory usw-pr-cvs1:/tmp/cvs-serv6384
Modified Files:
ColorDB.py
Log Message:
FILETYPES: Newer XFree86 rgb.txt files use the key Xorg instead of
XConsortium. Now we can recognize these files!
Index: ColorDB.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Tools/pynche/ColorDB.py,v
retrieving revision 2.8
retrieving revision 2.9
diff -C2 -d -r2.8 -r2.9
*** ColorDB.py 10 Jul 2001 21:38:47 -0000 2.8
--- ColorDB.py 21 Oct 2002 14:25:24 -0000 2.9
***************
*** 40,79 ****
lineno = 2
self.__name = fp.name
! # Maintain several dictionaries for indexing into the color database.
! # Note that while Tk supports RGB intensities of 4, 8, 12, or 16 bits,
! # for now we only support 8 bit intensities. At least on OpenWindows,
! # all intensities in the /usr/openwin/lib/rgb.txt file are 8-bit
! #
! # key is (red, green, blue) tuple, value is (name, [aliases])
! self.__byrgb = {}
! # key is name, value is (red, green, blue)
! self.__byname = {}
# all unique names (non-aliases). built-on demand
self.__allnames = None
! while 1:
! line = fp.readline()
! if not line:
! break
! # get this compiled regular expression from derived class
! mo = self._re.match(line)
! if not mo:
print >> sys.stderr, 'Error in', fp.name, ' line', lineno
! lineno += 1
! continue
! # extract the red, green, blue, and name
red, green, blue = self._extractrgb(mo)
name = self._extractname(mo)
! keyname = name.lower()
! # BAW: for now the `name' is just the first named color with the
! # rgb values we find. Later, we might want to make the two word
! # version the `name', or the CapitalizedVersion, etc.
! key = (red, green, blue)
! foundname, aliases = self.__byrgb.get(key, (name, []))
! if foundname <> name and foundname not in aliases:
! aliases.append(name)
! self.__byrgb[key] = (foundname, aliases)
! # add to byname lookup
! self.__byname[keyname] = key
! lineno = lineno + 1
# override in derived classes
--- 40,79 ----
lineno = 2
self.__name = fp.name
! # Maintain several dictionaries for indexing into the color database.
! # Note that while Tk supports RGB intensities of 4, 8, 12, or 16 bits,
! # for now we only support 8 bit intensities. At least on OpenWindows,
! # all intensities in the /usr/openwin/lib/rgb.txt file are 8-bit
! #
! # key is (red, green, blue) tuple, value is (name, [aliases])
! self.__byrgb = {}
! # key is name, value is (red, green, blue)
! self.__byname = {}
# all unique names (non-aliases). built-on demand
self.__allnames = None
! while 1:
! line = fp.readline()
! if not line:
! break
! # get this compiled regular expression from derived class
! mo = self._re.match(line)
! if not mo:
print >> sys.stderr, 'Error in', fp.name, ' line', lineno
! lineno += 1
! continue
! # extract the red, green, blue, and name
red, green, blue = self._extractrgb(mo)
name = self._extractname(mo)
! keyname = name.lower()
! # BAW: for now the `name' is just the first named color with the
! # rgb values we find. Later, we might want to make the two word
! # version the `name', or the CapitalizedVersion, etc.
! key = (red, green, blue)
! foundname, aliases = self.__byrgb.get(key, (name, []))
! if foundname <> name and foundname not in aliases:
! aliases.append(name)
! self.__byrgb[key] = (foundname, aliases)
! # add to byname lookup
! self.__byname[keyname] = key
! lineno = lineno + 1
# override in derived classes
***************
*** 89,122 ****
def find_byrgb(self, rgbtuple):
"""Return name for rgbtuple"""
! try:
! return self.__byrgb[rgbtuple]
! except KeyError:
! raise BadColor(rgbtuple)
def find_byname(self, name):
"""Return (red, green, blue) for name"""
! name = name.lower()
! try:
! return self.__byname[name]
! except KeyError:
! raise BadColor(name)
def nearest(self, red, green, blue):
"""Return the name of color nearest (red, green, blue)"""
! # BAW: should we use Voronoi diagrams, Delaunay triangulation, or
! # octree for speeding up the locating of nearest point? Exhaustive
! # search is inefficient, but seems fast enough.
! nearest = -1
! nearest_name = ''
! for name, aliases in self.__byrgb.values():
! r, g, b = self.__byname[name.lower()]
! rdelta = red - r
! gdelta = green - g
! bdelta = blue - b
! distance = rdelta * rdelta + gdelta * gdelta + bdelta * bdelta
! if nearest == -1 or distance < nearest:
! nearest = distance
! nearest_name = name
! return nearest_name
def unique_names(self):
--- 89,122 ----
def find_byrgb(self, rgbtuple):
"""Return name for rgbtuple"""
! try:
! return self.__byrgb[rgbtuple]
! except KeyError:
! raise BadColor(rgbtuple)
def find_byname(self, name):
"""Return (red, green, blue) for name"""
! name = name.lower()
! try:
! return self.__byname[name]
! except KeyError:
! raise BadColor(name)
def nearest(self, red, green, blue):
"""Return the name of color nearest (red, green, blue)"""
! # BAW: should we use Voronoi diagrams, Delaunay triangulation, or
! # octree for speeding up the locating of nearest point? Exhaustive
! # search is inefficient, but seems fast enough.
! nearest = -1
! nearest_name = ''
! for name, aliases in self.__byrgb.values():
! r, g, b = self.__byname[name.lower()]
! rdelta = red - r
! gdelta = green - g
! bdelta = blue - b
! distance = rdelta * rdelta + gdelta * gdelta + bdelta * bdelta
! if nearest == -1 or distance < nearest:
! nearest = distance
! nearest_name = name
! return nearest_name
def unique_names(self):
***************
*** 138,142 ****
raise BadColor((red, green, blue))
return [name] + aliases
!
class RGBColorDB(ColorDB):
--- 138,142 ----
raise BadColor((red, green, blue))
return [name] + aliases
!
class RGBColorDB(ColorDB):
***************
*** 173,176 ****
--- 173,177 ----
FILETYPES = [
+ (re.compile('Xorg'), RGBColorDB),
(re.compile('XConsortium'), RGBColorDB),
(re.compile('HTML'), HTML40DB),
***************
*** 217,225 ****
if color[0] <> '#':
raise BadColor(color)
! red = color[1:3]
! green = color[3:5]
! blue = color[5:7]
rgbtuple = int(red, 16), int(green, 16), int(blue, 16)
! _namedict[color] = rgbtuple
return rgbtuple
--- 218,226 ----
if color[0] <> '#':
raise BadColor(color)
! red = color[1:3]
! green = color[3:5]
! blue = color[5:7]
rgbtuple = int(red, 16), int(green, 16), int(blue, 16)
! _namedict[color] = rgbtuple
return rgbtuple
***************
*** 231,236 ****
hexname = _tripdict.get(rgbtuple)
if hexname is None:
! hexname = '#%02x%02x%02x' % rgbtuple
! _tripdict[rgbtuple] = hexname
return hexname
--- 232,237 ----
hexname = _tripdict.get(rgbtuple)
if hexname is None:
! hexname = '#%02x%02x%02x' % rgbtuple
! _tripdict[rgbtuple] = hexname
return hexname
***************
*** 254,259 ****
colordb = get_colordb('/usr/openwin/lib/rgb.txt')
if not colordb:
! print 'No parseable color database found'
! sys.exit(1)
# on my system, this color matches exactly
target = 'navy'
--- 255,260 ----
colordb = get_colordb('/usr/openwin/lib/rgb.txt')
if not colordb:
! print 'No parseable color database found'
! sys.exit(1)
# on my system, this color matches exactly
target = 'navy'
***************
*** 262,268 ****
name, aliases = colordb.find_byrgb(rgbtuple)
print 'name:', name, 'aliases:', COMMASPACE.join(aliases)
! r, g, b = (1, 1, 128) # nearest to navy
! r, g, b = (145, 238, 144) # nearest to lightgreen
! r, g, b = (255, 251, 250) # snow
print 'finding nearest to', target, '...'
import time
--- 263,269 ----
name, aliases = colordb.find_byrgb(rgbtuple)
print 'name:', name, 'aliases:', COMMASPACE.join(aliases)
! r, g, b = (1, 1, 128) # nearest to navy
! r, g, b = (145, 238, 144) # nearest to lightgreen
! r, g, b = (255, 251, 250) # snow
print 'finding nearest to', target, '...'
import time