@@ -39,42 +39,42 @@ class ColorDB:
3939 def __init__ (self , fp ):
4040 lineno = 2
4141 self .__name = fp .name
42- # Maintain several dictionaries for indexing into the color database.
43- # Note that while Tk supports RGB intensities of 4, 8, 12, or 16 bits,
44- # for now we only support 8 bit intensities. At least on OpenWindows,
45- # all intensities in the /usr/openwin/lib/rgb.txt file are 8-bit
46- #
47- # key is (red, green, blue) tuple, value is (name, [aliases])
48- self .__byrgb = {}
49- # key is name, value is (red, green, blue)
50- self .__byname = {}
42+ # Maintain several dictionaries for indexing into the color database.
43+ # Note that while Tk supports RGB intensities of 4, 8, 12, or 16 bits,
44+ # for now we only support 8 bit intensities. At least on OpenWindows,
45+ # all intensities in the /usr/openwin/lib/rgb.txt file are 8-bit
46+ #
47+ # key is (red, green, blue) tuple, value is (name, [aliases])
48+ self .__byrgb = {}
49+ # key is name, value is (red, green, blue)
50+ self .__byname = {}
5151 # all unique names (non-aliases). built-on demand
5252 self .__allnames = None
53- while 1 :
54- line = fp .readline ()
55- if not line :
56- break
57- # get this compiled regular expression from derived class
58- mo = self ._re .match (line )
59- if not mo :
53+ while 1 :
54+ line = fp .readline ()
55+ if not line :
56+ break
57+ # get this compiled regular expression from derived class
58+ mo = self ._re .match (line )
59+ if not mo :
6060 print >> sys .stderr , 'Error in' , fp .name , ' line' , lineno
61- lineno += 1
62- continue
63- # extract the red, green, blue, and name
61+ lineno += 1
62+ continue
63+ # extract the red, green, blue, and name
6464 red , green , blue = self ._extractrgb (mo )
6565 name = self ._extractname (mo )
66- keyname = name .lower ()
67- # BAW: for now the `name' is just the first named color with the
68- # rgb values we find. Later, we might want to make the two word
69- # version the `name', or the CapitalizedVersion, etc.
70- key = (red , green , blue )
71- foundname , aliases = self .__byrgb .get (key , (name , []))
72- if foundname <> name and foundname not in aliases :
73- aliases .append (name )
74- self .__byrgb [key ] = (foundname , aliases )
75- # add to byname lookup
76- self .__byname [keyname ] = key
77- lineno = lineno + 1
66+ keyname = name .lower ()
67+ # BAW: for now the `name' is just the first named color with the
68+ # rgb values we find. Later, we might want to make the two word
69+ # version the `name', or the CapitalizedVersion, etc.
70+ key = (red , green , blue )
71+ foundname , aliases = self .__byrgb .get (key , (name , []))
72+ if foundname <> name and foundname not in aliases :
73+ aliases .append (name )
74+ self .__byrgb [key ] = (foundname , aliases )
75+ # add to byname lookup
76+ self .__byname [keyname ] = key
77+ lineno = lineno + 1
7878
7979 # override in derived classes
8080 def _extractrgb (self , mo ):
@@ -88,36 +88,36 @@ def filename(self):
8888
8989 def find_byrgb (self , rgbtuple ):
9090 """Return name for rgbtuple"""
91- try :
92- return self .__byrgb [rgbtuple ]
93- except KeyError :
94- raise BadColor (rgbtuple )
91+ try :
92+ return self .__byrgb [rgbtuple ]
93+ except KeyError :
94+ raise BadColor (rgbtuple )
9595
9696 def find_byname (self , name ):
9797 """Return (red, green, blue) for name"""
98- name = name .lower ()
99- try :
100- return self .__byname [name ]
101- except KeyError :
102- raise BadColor (name )
98+ name = name .lower ()
99+ try :
100+ return self .__byname [name ]
101+ except KeyError :
102+ raise BadColor (name )
103103
104104 def nearest (self , red , green , blue ):
105105 """Return the name of color nearest (red, green, blue)"""
106- # BAW: should we use Voronoi diagrams, Delaunay triangulation, or
107- # octree for speeding up the locating of nearest point? Exhaustive
108- # search is inefficient, but seems fast enough.
109- nearest = - 1
110- nearest_name = ''
111- for name , aliases in self .__byrgb .values ():
112- r , g , b = self .__byname [name .lower ()]
113- rdelta = red - r
114- gdelta = green - g
115- bdelta = blue - b
116- distance = rdelta * rdelta + gdelta * gdelta + bdelta * bdelta
117- if nearest == - 1 or distance < nearest :
118- nearest = distance
119- nearest_name = name
120- return nearest_name
106+ # BAW: should we use Voronoi diagrams, Delaunay triangulation, or
107+ # octree for speeding up the locating of nearest point? Exhaustive
108+ # search is inefficient, but seems fast enough.
109+ nearest = - 1
110+ nearest_name = ''
111+ for name , aliases in self .__byrgb .values ():
112+ r , g , b = self .__byname [name .lower ()]
113+ rdelta = red - r
114+ gdelta = green - g
115+ bdelta = blue - b
116+ distance = rdelta * rdelta + gdelta * gdelta + bdelta * bdelta
117+ if nearest == - 1 or distance < nearest :
118+ nearest = distance
119+ nearest_name = name
120+ return nearest_name
121121
122122 def unique_names (self ):
123123 # sorted
@@ -137,7 +137,7 @@ def aliases_of(self, red, green, blue):
137137 except KeyError :
138138 raise BadColor ((red , green , blue ))
139139 return [name ] + aliases
140-
140+
141141
142142class RGBColorDB (ColorDB ):
143143 _re = re .compile (
@@ -172,6 +172,7 @@ def _extractname(self, mo):
172172# the class to instantiate if a match is found
173173
174174FILETYPES = [
175+ (re .compile ('Xorg' ), RGBColorDB ),
175176 (re .compile ('XConsortium' ), RGBColorDB ),
176177 (re .compile ('HTML' ), HTML40DB ),
177178 (re .compile ('lightlink' ), LightlinkDB ),
@@ -216,11 +217,11 @@ def rrggbb_to_triplet(color):
216217 if rgbtuple is None :
217218 if color [0 ] <> '#' :
218219 raise BadColor (color )
219- red = color [1 :3 ]
220- green = color [3 :5 ]
221- blue = color [5 :7 ]
220+ red = color [1 :3 ]
221+ green = color [3 :5 ]
222+ blue = color [5 :7 ]
222223 rgbtuple = int (red , 16 ), int (green , 16 ), int (blue , 16 )
223- _namedict [color ] = rgbtuple
224+ _namedict [color ] = rgbtuple
224225 return rgbtuple
225226
226227
@@ -230,8 +231,8 @@ def triplet_to_rrggbb(rgbtuple):
230231 global _tripdict
231232 hexname = _tripdict .get (rgbtuple )
232233 if hexname is None :
233- hexname = '#%02x%02x%02x' % rgbtuple
234- _tripdict [rgbtuple ] = hexname
234+ hexname = '#%02x%02x%02x' % rgbtuple
235+ _tripdict [rgbtuple ] = hexname
235236 return hexname
236237
237238
@@ -253,17 +254,17 @@ def triplet_to_brightness(rgbtuple):
253254if __name__ == '__main__' :
254255 colordb = get_colordb ('/usr/openwin/lib/rgb.txt' )
255256 if not colordb :
256- print 'No parseable color database found'
257- sys .exit (1 )
257+ print 'No parseable color database found'
258+ sys .exit (1 )
258259 # on my system, this color matches exactly
259260 target = 'navy'
260261 red , green , blue = rgbtuple = colordb .find_byname (target )
261262 print target , ':' , red , green , blue , triplet_to_rrggbb (rgbtuple )
262263 name , aliases = colordb .find_byrgb (rgbtuple )
263264 print 'name:' , name , 'aliases:' , COMMASPACE .join (aliases )
264- r , g , b = (1 , 1 , 128 ) # nearest to navy
265- r , g , b = (145 , 238 , 144 ) # nearest to lightgreen
266- r , g , b = (255 , 251 , 250 ) # snow
265+ r , g , b = (1 , 1 , 128 ) # nearest to navy
266+ r , g , b = (145 , 238 , 144 ) # nearest to lightgreen
267+ r , g , b = (255 , 251 , 250 ) # snow
267268 print 'finding nearest to' , target , '...'
268269 import time
269270 t0 = time .time ()
0 commit comments