Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit eb9b8af

Browse files
committed
__init__(): simplify, use tuple as key to __byrgb, lowercase __byname key.
find_byrgb(): Changed name, interface (takes a tuple), and return value find_byname(): lowercase color name
1 parent 37400e8 commit eb9b8af

1 file changed

Lines changed: 22 additions & 22 deletions

File tree

Tools/pynche/ColorDB.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"""
1515

1616
import sys
17+
import string
1718
import re
1819
from types import *
1920

@@ -31,10 +32,10 @@ def __init__(self, fp, lineno):
3132
# for now we only support 8 bit intensities. At least on OpenWindows,
3233
# all intensities in the /usr/openwin/lib/rgb.txt file are 8-bit
3334
#
34-
# key is rrggbb, value is (name, [aliases])
35-
self.__byrrggbb = {}
35+
# key is (red, green, blue) tuple, value is (name, [aliases])
36+
self.__byrgb = {}
3637
#
37-
# key is name, value is (red, green, blue, rrggbb)
38+
# key is name, value is (red, green, blue)
3839
self.__byname = {}
3940
#
4041
while 1:
@@ -49,49 +50,48 @@ def __init__(self, fp, lineno):
4950
continue
5051
#
5152
# extract the red, green, blue, and name
53+
#
5254
red, green, blue = map(int, mo.group('red', 'green', 'blue'))
5355
name = mo.group('name')
54-
#
55-
# calculate the 24 bit representation of the color
56-
rrggbb = (red << 16) + (blue << 8) + green
56+
keyname = string.lower(name)
5757
#
5858
# TBD: for now the `name' is just the first named color with the
5959
# rgb values we find. Later, we might want to make the two word
6060
# version the `name', or the CapitalizedVersion, etc.
61-
foundname, aliases = self.__byrrggbb.get(rrggbb, (name, []))
61+
#
62+
key = (red, green, blue)
63+
foundname, aliases = self.__byrgb.get(key, (name, []))
6264
if foundname <> name and foundname not in aliases:
6365
aliases.append(name)
64-
#
65-
# add to by 24bit value
66-
self.__byrrggbb[rrggbb] = (foundname, aliases)
66+
self.__byrgb[key] = (foundname, aliases)
6767
#
6868
# add to byname lookup
69-
point = (red, green, blue, rrggbb)
70-
self.__byname[name] = point
69+
#
70+
self.__byname[keyname] = key
7171
lineno = lineno + 1
7272

73-
def find(self, red, green, blue):
74-
rrggbb = (red << 16) + (blue << 8) + green
73+
def find_byrgb(self, rgbtuple):
7574
try:
76-
return self.__byrrggbb[rrggbb]
75+
return self.__byrgb[rgbtuple]
7776
except KeyError:
78-
raise BadColor(red, green, blue)
77+
raise BadColor(rgbtuple)
7978

8079
def find_byname(self, name):
80+
name = string.lower(name)
8181
try:
8282
return self.__byname[name]
8383
except KeyError:
8484
raise BadColor(name)
8585

8686
def nearest(self, rgbtuple):
8787
# TBD: use Voronoi diagrams, Delaunay triangulation, or octree for
88-
# speeding up the locating of nearest point. This is really
89-
# inefficient!
88+
# speeding up the locating of nearest point. Exhaustive search is
89+
# inefficient, but may be fast enough.
9090
red, green, blue = rgbtuple
9191
nearest = -1
9292
nearest_name = ''
93-
for name, aliases in self.__byrrggbb.values():
94-
r, g, b, rrggbb = self.__byname[name]
93+
for name, aliases in self.__byrgb.values():
94+
r, g, b = self.__byname[string.lower(name)]
9595
rdelta = red - r
9696
gdelta = green - g
9797
bdelta = blue - b
@@ -175,9 +175,9 @@ def hexify(v):
175175
# on my system, this color matches exactly
176176
target = 'navy'
177177
target = 'snow'
178-
red, green, blue, rrggbb = colordb.find_byname(target)
178+
red, green, blue = colordb.find_byname(target)
179179
print target, ':', red, green, blue, hex(rrggbb)
180-
name, aliases = colordb.find(red, green, blue)
180+
name, aliases = colordb.find_byrgb((red, green, blue))
181181
print 'name:', name, 'aliases:', string.join(aliases, ", ")
182182
target = (1, 1, 128) # nearest to navy
183183
target = (145, 238, 144) # nearest to lightgreen

0 commit comments

Comments
 (0)