def validate(self, value):
   """Color validator"""
   
   is_valid = False
   if isinstance(value, basestring):
     if value.startswith("#"):
       rgb = HTMLColors.get_rgb(value) # will raise if the color is invalid
       is_valid = True
     else:
       # This must be a color name, see if we know about it!
       is_valid = HTMLColors.htmlcolors.has_key(value.lower())
   
   if not is_valid:
     raise Exception("%s is not a valid Color" % ( value, ))
   
   return super(Color, self).validate(value)    
 def eval(self, color, percent):
   color = HTMLColors.get_color_shortest(color.value)
   return HTMLColors.lighten(color, int(percent.value or 0))
 def eval(self, color):
   return str(HTMLColors.get_lightness_from_color(color.value))
 def eval(self, color):
   return str(HTMLColors.get_saturation_from_color(color.value))
 def eval(self, color):
   return str(HTMLColors.get_hue_from_color(color.value))
 def eval(self, h, s, l):
   h, s, l = [ v.value for v in (h, s, l) ]
   s, l = [ v / 100.0 for v in (s, l) ]
   return HTMLColors.get_color_from_hsl(h, s, l)