[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