2121"""
2222
2323import sys
24- import string
2524import re
2625from types import *
2726import operator
@@ -30,6 +29,8 @@ class BadColor(Exception):
3029 pass
3130
3231DEFAULT_DB = None
32+ SPACE = ' '
33+ COMMASPACE = ', '
3334
3435
3536
@@ -45,49 +46,39 @@ def __init__(self, fp):
4546 #
4647 # key is (red, green, blue) tuple, value is (name, [aliases])
4748 self .__byrgb = {}
48- #
4949 # key is name, value is (red, green, blue)
5050 self .__byname = {}
51- #
5251 # all unique names (non-aliases). built-on demand
5352 self .__allnames = None
5453 while 1 :
5554 line = fp .readline ()
5655 if not line :
5756 break
5857 # get this compiled regular expression from derived class
59- ## print '%3d: %s' % (lineno, line[:-1])
6058 mo = self ._re .match (line )
6159 if not mo :
62- sys .stderr . write ( 'Error in %s, line %d \n ' % ( fp .name , lineno ))
63- lineno = lineno + 1
60+ print >> sys .stderr , 'Error in' , fp .name , ' line' , lineno
61+ lineno += 1
6462 continue
65- #
6663 # extract the red, green, blue, and name
67- #
6864 red , green , blue = self ._extractrgb (mo )
6965 name = self ._extractname (mo )
70- keyname = string .lower (name )
71- ## print keyname, '(%d, %d, %d)' % (red, green, blue)
72- #
73- # TBD: for now the `name' is just the first named color with the
66+ keyname = name .lower ()
67+ # BAW: for now the `name' is just the first named color with the
7468 # rgb values we find. Later, we might want to make the two word
7569 # version the `name', or the CapitalizedVersion, etc.
76- #
7770 key = (red , green , blue )
7871 foundname , aliases = self .__byrgb .get (key , (name , []))
7972 if foundname <> name and foundname not in aliases :
8073 aliases .append (name )
8174 self .__byrgb [key ] = (foundname , aliases )
82- #
8375 # add to byname lookup
84- #
8576 self .__byname [keyname ] = key
8677 lineno = lineno + 1
8778
8879 # override in derived classes
8980 def _extractrgb (self , mo ):
90- return map ( int , mo .group ('red' , 'green' , 'blue' ))
81+ return [ int ( x ) for x in mo .group ('red' , 'green' , 'blue' )]
9182
9283 def _extractname (self , mo ):
9384 return mo .group ('name' )
@@ -104,21 +95,21 @@ def find_byrgb(self, rgbtuple):
10495
10596 def find_byname (self , name ):
10697 """Return (red, green, blue) for name"""
107- name = string .lower (name )
98+ name = name .lower ()
10899 try :
109100 return self .__byname [name ]
110101 except KeyError :
111102 raise BadColor (name )
112103
113104 def nearest (self , red , green , blue ):
114105 """Return the name of color nearest (red, green, blue)"""
115- # TBD : should we use Voronoi diagrams, Delaunay triangulation, or
106+ # BAW : should we use Voronoi diagrams, Delaunay triangulation, or
116107 # octree for speeding up the locating of nearest point? Exhaustive
117108 # search is inefficient, but seems fast enough.
118109 nearest = - 1
119110 nearest_name = ''
120111 for name , aliases in self .__byrgb .values ():
121- r , g , b = self .__byname [string .lower (name )]
112+ r , g , b = self .__byname [name .lower ()]
122113 rdelta = red - r
123114 gdelta = green - g
124115 bdelta = blue - b
@@ -136,7 +127,7 @@ def unique_names(self):
136127 self .__allnames .append (name )
137128 # sort irregardless of case
138129 def nocase_cmp (n1 , n2 ):
139- return cmp (string .lower (n1 ), string .lower (n2 ))
130+ return cmp (n1 .lower (), n2 .lower ())
140131 self .__allnames .sort (nocase_cmp )
141132 return self .__allnames
142133
@@ -163,7 +154,7 @@ class LightlinkDB(HTML40DB):
163154 _re = re .compile ('(?P<name>(.+))\s+(?P<hexrgb>#[0-9a-fA-F]{6})' )
164155
165156 def _extractname (self , mo ):
166- return string . strip ( mo .group ('name' ))
157+ return mo .group ('name' ). strip ( )
167158
168159class WebsafeDB (ColorDB ):
169160 _re = re .compile ('(?P<hexrgb>#[0-9a-fA-F]{6})' )
@@ -172,7 +163,7 @@ def _extractrgb(self, mo):
172163 return rrggbb_to_triplet (mo .group ('hexrgb' ))
173164
174165 def _extractname (self , mo ):
175- return string . upper ( mo .group ('hexrgb' ))
166+ return mo .group ('hexrgb' ). upper ( )
176167
177168
178169
@@ -218,17 +209,17 @@ def get_colordb(file, filetype=None):
218209
219210
220211_namedict = {}
221- def rrggbb_to_triplet (color , atoi = string .atoi ):
212+
213+ def rrggbb_to_triplet (color ):
222214 """Converts a #rrggbb color to the tuple (red, green, blue)."""
223- global _namedict
224215 rgbtuple = _namedict .get (color )
225216 if rgbtuple is None :
226217 if color [0 ] <> '#' :
227218 raise BadColor (color )
228219 red = color [1 :3 ]
229220 green = color [3 :5 ]
230221 blue = color [5 :7 ]
231- rgbtuple = ( atoi ( red , 16 ), atoi (green , 16 ), atoi (blue , 16 ) )
222+ rgbtuple = int ( red , 16 ), int (green , 16 ), int (blue , 16 )
232223 _namedict [color ] = rgbtuple
233224 return rgbtuple
234225
@@ -260,8 +251,6 @@ def triplet_to_brightness(rgbtuple):
260251
261252
262253if __name__ == '__main__' :
263- import string
264-
265254 colordb = get_colordb ('/usr/openwin/lib/rgb.txt' )
266255 if not colordb :
267256 print 'No parseable color database found'
@@ -271,7 +260,7 @@ def triplet_to_brightness(rgbtuple):
271260 red , green , blue = rgbtuple = colordb .find_byname (target )
272261 print target , ':' , red , green , blue , triplet_to_rrggbb (rgbtuple )
273262 name , aliases = colordb .find_byrgb (rgbtuple )
274- print 'name:' , name , 'aliases:' , string .join (aliases , ", " )
263+ print 'name:' , name , 'aliases:' , COMMASPACE .join (aliases )
275264 r , g , b = (1 , 1 , 128 ) # nearest to navy
276265 r , g , b = (145 , 238 , 144 ) # nearest to lightgreen
277266 r , g , b = (255 , 251 , 250 ) # snow
@@ -286,4 +275,4 @@ def triplet_to_brightness(rgbtuple):
286275 r , g , b = colordb .find_byname (n )
287276 aliases = colordb .aliases_of (r , g , b )
288277 print '%20s: (%3d/%3d/%3d) == %s' % (n , r , g , b ,
289- string .join (aliases [1 :]))
278+ SPACE .join (aliases [1 :]))
0 commit comments