code: def parse_color(color):
      
      r = g = b = a = type = None
      if color.startswith('#'):
          color = color[1:]
          if len(color) == 3:
              type = '#rgb'
              color = color + 'f'
          if len(color) == 4:
              type = type or '#rgba'
              color = ''.join([c * 2 for c in color])
          if len(color) == 6:
              type = type or '#rrggbb'
              color = color + 'ff'
          assert len(color) == 8
          type = type or '#rrggbbaa'
          r, g, b, a = [
              int(''.join(c), 16) for c in zip(color[::2], color[1::2])
          ]
          a /= 255
      elif color.startswith('rgb('):
          type = 'rgb'
          color = color[4:-1]
          r, g, b, a = [int(c) for c in color.split(',')] + [1]
      elif color.startswith('rgba('):
          type = 'rgba'
          color = color[5:-1]
          r, g, b, a = [int(c) for c in color.split(',')[:-1]
                        ] + [float(color.split(',')[-1])]
      return r, g, b, a, type
docs: Take any css color definition and give back a tuple containing the
      r, g, b, a values along with a type which can be: #rgb, #rgba, #rrggbb,
      #rrggbbaa, rgb, rgba