docs: def convertColors(element):
      """
         Recursively converts all color properties into #RRGGBB format if shorter
      """
      numBytes = 0
  
      if element.nodeType != Node.ELEMENT_NODE:
          return 0
  
      # set up list of color attributes for each element type
      attrsToConvert = []
      if element.nodeName in ['rect', 'circle', 'ellipse', 'polygon',
                              'line', 'polyline', 'path', 'g', 'a']:
          attrsToConvert = ['fill', 'stroke']
      elif element.nodeName in ['stop']:
          attrsToConvert = ['stop-color']
      elif element.nodeName in ['solidColor']:
          attrsToConvert = ['solid-color']
  
      # now convert all the color formats
      styles = _getStyle(element)
      for attr in attrsToConvert:
          oldColorValue = element.getAttribute(attr)
          if oldColorValue != '':
              newColorValue = convertColor(oldColorValue)
              oldBytes = len(oldColorValue)
              newBytes = len(newColorValue)
              if oldBytes > newBytes:
                  element.setAttribute(attr, newColorValue)
                  numBytes += (oldBytes - len(element.getAttribute(attr)))
          # colors might also hide in styles
          if attr in styles:
              oldColorValue = styles[attr]
              newColorValue = convertColor(oldColorValue)
              oldBytes = len(oldColorValue)
              newBytes = len(newColorValue)
              if oldBytes > newBytes:
                  styles[attr] = newColorValue
                  numBytes += (oldBytes - len(element.getAttribute(attr)))
      _setStyle(element, styles)
  
      # now recurse for our child elements
      for child in element.childNodes:
          numBytes += convertColors(child)
  
      return numBytes