code: def parse_color(color):
      
      if len(color) not in (3, 4, 6, 8):
          raise ValueError('bad color %s' % repr(color))
      if len(color) in (3, 4):
          r = int(color[0], 16) * 0x11
          g = int(color[1], 16) * 0x11
          b = int(color[2], 16) * 0x11
      elif len(color) in (6, 8):
          r = int(color[0:2], 16)
          g = int(color[2:4], 16)
          b = int(color[4:6], 16)
      if len(color) == 4:
          a = int(color[3], 16) * 0x11
      elif len(color) == 8:
          a = int(color[6:8], 16)
      else:
          a = 0xff
      return (r, g, b, a)
docs: Parse a color value.
  
      I've decided not to expect a leading '#' because it's a comment character
      in some shells.
  
          >>> parse_color('4bf') == (0x44, 0xbb, 0xff, 0xff)
          True
          >>> parse_color('ccce') == (0xcc, 0xcc, 0xcc, 0xee)
          True
          >>> parse_color('d8b4a2') == (0xd8, 0xb4, 0xa2, 0xff)
          True
          >>> parse_color('12345678') == (0x12, 0x34, 0x56, 0x78)
          True
  
      Raises ValueError on errors.