1414"""
1515
1616import sys
17+ import string
1718import re
1819from 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