def alpha_percent_normalize(perc): """Normailze a percent alpha value.""" alpha_float = clamp(float(perc.strip('%')), 0.0, 100.0) / 100.0 alpha_dec = fmt_float(alpha_float, 3) alpha = "%02X" % round_int(alpha_float * 255.0) return alpha, alpha_dec
def alpha_dec_normalize(dec): """Normailze a deciaml alpha value.""" temp = float(dec) if temp < 0.0 or temp > 1.0: dec = fmt_float(clamp(float(temp), 0.0, 1.0), 3) alpha_dec = dec alpha = "%02X" % round_int(float(alpha_dec) * 255.0) return alpha, alpha_dec
def translate_color(m, use_hex_argb=False, decode=False): """Translate the match object to a color w/ alpha.""" color = None alpha = None alpha_dec = None if m.group('hex_compressed'): if decode: content = m.group('hex_compressed_content').decode('utf-8') else: content = m.group('hex_compressed_content') color = "#%02x%02x%02x" % ( int(content[0:1] * 2, 16), int(content[1:2] * 2, 16), int(content[2:3] * 2, 16) ) elif m.group('hexa_compressed') and use_hex_argb: if decode: content = m.group('hexa_compressed_content').decode('utf-8') else: content = m.group('hexa_compressed_content') color = "#%02x%02x%02x" % ( int(content[1:2] * 2, 16), int(content[2:3] * 2, 16), int(content[3:] * 2, 16) ) alpha = content[0:1] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) elif m.group('hexa_compressed'): if decode: content = m.group('hexa_compressed_content').decode('utf-8') else: content = m.group('hexa_compressed_content') color = "#%02x%02x%02x" % ( int(content[0:1] * 2, 16), int(content[1:2] * 2, 16), int(content[2:3] * 2, 16) ) alpha = content[3:] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) elif m.group('hex'): if decode: content = m.group('hex_content').decode('utf-8') else: content = m.group('hex_content') if len(content) == 6: color = "#%02x%02x%02x" % ( int(content[0:2], 16), int(content[2:4], 16), int(content[4:6], 16) ) else: color = "#%02x%02x%02x" % ( int(content[0:1] * 2, 16), int(content[1:2] * 2, 16), int(content[2:3] * 2, 16) ) elif m.group('hexa') and use_hex_argb: if decode: content = m.group('hexa_content').decode('utf-8') else: content = m.group('hexa_content') if len(content) == 8: color = "#%02x%02x%02x" % ( int(content[2:4], 16), int(content[4:6], 16), int(content[6:], 16) ) alpha = content[0:2] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) else: color = "#%02x%02x%02x" % ( int(content[1:2] * 2, 16), int(content[2:3] * 2, 16), int(content[3:] * 2, 16) ) alpha = content[0:1] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) elif m.group('hexa'): if decode: content = m.group('hexa_content').decode('utf-8') else: content = m.group('hexa_content') if len(content) == 8: color = "#%02x%02x%02x" % ( int(content[0:2], 16), int(content[2:4], 16), int(content[4:6], 16) ) alpha = content[6:] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) else: color = "#%02x%02x%02x" % ( int(content[0:1] * 2, 16), int(content[1:2] * 2, 16), int(content[2:3] * 2, 16) ) alpha = content[3:] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) elif m.group('rgb'): if decode: content = [x.strip() for x in m.group('rgb_content').decode('utf-8').split(',')] else: content = [x.strip() for x in m.group('rgb_content').split(',')] if content[0].endswith('%'): r = round_int(clamp(float(content[0].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) g = round_int(clamp(float(content[1].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) b = round_int(clamp(float(content[2].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) color = "#%02x%02x%02x" % (r, g, b) else: color = "#%02x%02x%02x" % ( clamp(round_int(float(content[0])), 0, 255), clamp(round_int(float(content[1])), 0, 255), clamp(round_int(float(content[2])), 0, 255) ) elif m.group('rgba'): if decode: content = [x.strip() for x in m.group('rgba_content').decode('utf-8').split(',')] else: content = [x.strip() for x in m.group('rgba_content').split(',')] if content[0].endswith('%'): r = round_int(clamp(float(content[0].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) g = round_int(clamp(float(content[1].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) b = round_int(clamp(float(content[2].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) color = "#%02x%02x%02x" % (r, g, b) else: color = "#%02x%02x%02x" % ( clamp(round_int(float(content[0])), 0, 255), clamp(round_int(float(content[1])), 0, 255), clamp(round_int(float(content[2])), 0, 255) ) if content[3].endswith('%'): alpha, alpha_dec = alpha_percent_normalize(content[3]) else: alpha, alpha_dec = alpha_dec_normalize(content[3]) elif m.group('gray'): if decode: content = m.group('gray_content').decode('utf-8') else: content = m.group('gray_content') if content.endswith('%'): g = round_int(clamp(float(content.strip('%')), 0.0, 255.0) * (255.0 / 100.0)) else: g = clamp(round_int(float(content)), 0, 255) color = "#%02x%02x%02x" % (g, g, g) elif m.group('graya'): if decode: content = [x.strip() for x in m.group('graya_content').decode('utf-8').split(',')] else: content = [x.strip() for x in m.group('graya_content').split(',')] if content[0].endswith('%'): g = round_int(clamp(float(content[0].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) else: g = clamp(round_int(float(content[0])), 0, 255) color = "#%02x%02x%02x" % (g, g, g) if content[1].endswith('%'): alpha, alpha_dec = alpha_percent_normalize(content[1]) else: alpha, alpha_dec = alpha_dec_normalize(content[1]) elif m.group('hsl'): if decode: content = [x.strip() for x in m.group('hsl_content').decode('utf-8').split(',')] else: content = [x.strip() for x in m.group('hsl_content').split(',')] rgba = RGBA() hue = float(content[0]) if hue < 0.0 or hue > 360.0: hue = hue % 360.0 h = hue / 360.0 s = clamp(float(content[1].strip('%')), 0.0, 100.0) / 100.0 l = clamp(float(content[2].strip('%')), 0.0, 100.0) / 100.0 rgba.fromhls(h, l, s) color = rgba.get_rgb() elif m.group('hsla'): if decode: content = [x.strip() for x in m.group('hsla_content').decode('utf-8').split(',')] else: content = [x.strip() for x in m.group('hsla_content').split(',')] rgba = RGBA() hue = float(content[0]) if hue < 0.0 or hue > 360.0: hue = hue % 360.0 h = hue / 360.0 s = clamp(float(content[1].strip('%')), 0.0, 100.0) / 100.0 l = clamp(float(content[2].strip('%')), 0.0, 100.0) / 100.0 rgba.fromhls(h, l, s) color = rgba.get_rgb() if content[3].endswith('%'): alpha, alpha_dec = alpha_percent_normalize(content[3]) else: alpha, alpha_dec = alpha_dec_normalize(content[3]) elif m.group('hwb'): if decode: content = [x.strip() for x in m.group('hwb_content').decode('utf-8').split(',')] else: content = [x.strip() for x in m.group('hwb_content').split(',')] rgba = RGBA() hue = float(content[0]) if hue < 0.0 or hue > 360.0: hue = hue % 360.0 h = hue / 360.0 w = clamp(float(content[1].strip('%')), 0.0, 100.0) / 100.0 b = clamp(float(content[2].strip('%')), 0.0, 100.0) / 100.0 rgba.fromhwb(h, w, b) color = rgba.get_rgb() elif m.group('hwba'): if decode: content = [x.strip() for x in m.group('hwba_content').decode('utf-8').split(',')] else: content = [x.strip() for x in m.group('hwba_content').split(',')] rgba = RGBA() hue = float(content[0]) if hue < 0.0 or hue > 360.0: hue = hue % 360.0 h = hue / 360.0 w = clamp(float(content[1].strip('%')), 0.0, 100.0) / 100.0 b = clamp(float(content[2].strip('%')), 0.0, 100.0) / 100.0 rgba.fromhwb(h, w, b) color = rgba.get_rgb() if content[3].endswith('%'): alpha, alpha_dec = alpha_percent_normalize(content[3]) else: alpha, alpha_dec = alpha_dec_normalize(content[3]) elif m.group('webcolors'): try: if decode: color = csscolors.name2hex(m.group('webcolors').decode('utf-8')).lower() else: color = csscolors.name2hex(m.group('webcolors')).lower() except: pass return color, alpha, alpha_dec
def translate_color(m, use_hex_argb=False, decode=False): """Translate the match object to a color w/ alpha.""" color = None alpha = None alpha_dec = None if m.group('hex_compressed'): if decode: content = m.group('hex_compressed_content').decode('utf-8') else: content = m.group('hex_compressed_content') color = "#%02x%02x%02x" % (int(content[0:1] * 2, 16), int(content[1:2] * 2, 16), int(content[2:3] * 2, 16)) elif m.group('hexa_compressed') and use_hex_argb: if decode: content = m.group('hexa_compressed_content').decode('utf-8') else: content = m.group('hexa_compressed_content') color = "#%02x%02x%02x" % (int(content[1:2] * 2, 16), int(content[2:3] * 2, 16), int(content[3:] * 2, 16)) alpha = content[0:1] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) elif m.group('hexa_compressed'): if decode: content = m.group('hexa_compressed_content').decode('utf-8') else: content = m.group('hexa_compressed_content') color = "#%02x%02x%02x" % (int(content[0:1] * 2, 16), int(content[1:2] * 2, 16), int(content[2:3] * 2, 16)) alpha = content[3:] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) elif m.group('hex'): if decode: content = m.group('hex_content').decode('utf-8') else: content = m.group('hex_content') if len(content) == 6: color = "#%02x%02x%02x" % (int( content[0:2], 16), int(content[2:4], 16), int( content[4:6], 16)) else: color = "#%02x%02x%02x" % (int( content[0:1] * 2, 16), int(content[1:2] * 2, 16), int(content[2:3] * 2, 16)) elif m.group('hexa') and use_hex_argb: if decode: content = m.group('hexa_content').decode('utf-8') else: content = m.group('hexa_content') if len(content) == 8: color = "#%02x%02x%02x" % (int( content[2:4], 16), int(content[4:6], 16), int(content[6:], 16)) alpha = content[0:2] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) else: color = "#%02x%02x%02x" % (int( content[1:2] * 2, 16), int(content[2:3] * 2, 16), int(content[3:] * 2, 16)) alpha = content[0:1] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) elif m.group('hexa'): if decode: content = m.group('hexa_content').decode('utf-8') else: content = m.group('hexa_content') if len(content) == 8: color = "#%02x%02x%02x" % (int( content[0:2], 16), int(content[2:4], 16), int( content[4:6], 16)) alpha = content[6:] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) else: color = "#%02x%02x%02x" % (int( content[0:1] * 2, 16), int(content[1:2] * 2, 16), int(content[2:3] * 2, 16)) alpha = content[3:] alpha_dec = fmt_float(float(int(alpha, 16)) / 255.0, 3) elif m.group('rgb'): if decode: content = [ x.strip() for x in m.group('rgb_content').decode('utf-8').split(',') ] else: content = [x.strip() for x in m.group('rgb_content').split(',')] if content[0].endswith('%'): r = round_int( clamp(float(content[0].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) g = round_int( clamp(float(content[1].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) b = round_int( clamp(float(content[2].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) color = "#%02x%02x%02x" % (r, g, b) else: color = "#%02x%02x%02x" % (clamp( round_int(float(content[0])), 0, 255), clamp(round_int(float(content[1])), 0, 255), clamp(round_int(float(content[2])), 0, 255)) elif m.group('rgba'): if decode: content = [ x.strip() for x in m.group('rgba_content').decode('utf-8').split(',') ] else: content = [x.strip() for x in m.group('rgba_content').split(',')] if content[0].endswith('%'): r = round_int( clamp(float(content[0].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) g = round_int( clamp(float(content[1].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) b = round_int( clamp(float(content[2].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) color = "#%02x%02x%02x" % (r, g, b) else: color = "#%02x%02x%02x" % (clamp( round_int(float(content[0])), 0, 255), clamp(round_int(float(content[1])), 0, 255), clamp(round_int(float(content[2])), 0, 255)) if content[3].endswith('%'): alpha, alpha_dec = alpha_percent_normalize(content[3]) else: alpha, alpha_dec = alpha_dec_normalize(content[3]) elif m.group('gray'): if decode: content = m.group('gray_content').decode('utf-8') else: content = m.group('gray_content') if content.endswith('%'): g = round_int( clamp(float(content.strip('%')), 0.0, 255.0) * (255.0 / 100.0)) else: g = clamp(round_int(float(content)), 0, 255) color = "#%02x%02x%02x" % (g, g, g) elif m.group('graya'): if decode: content = [ x.strip() for x in m.group('graya_content').decode('utf-8').split(',') ] else: content = [x.strip() for x in m.group('graya_content').split(',')] if content[0].endswith('%'): g = round_int( clamp(float(content[0].strip('%')), 0.0, 255.0) * (255.0 / 100.0)) else: g = clamp(round_int(float(content[0])), 0, 255) color = "#%02x%02x%02x" % (g, g, g) if content[1].endswith('%'): alpha, alpha_dec = alpha_percent_normalize(content[1]) else: alpha, alpha_dec = alpha_dec_normalize(content[1]) elif m.group('hsl'): if decode: content = [ x.strip() for x in m.group('hsl_content').decode('utf-8').split(',') ] else: content = [x.strip() for x in m.group('hsl_content').split(',')] rgba = RGBA() hue = float(content[0]) if hue < 0.0 or hue > 360.0: hue = hue % 360.0 h = hue / 360.0 s = clamp(float(content[1].strip('%')), 0.0, 100.0) / 100.0 l = clamp(float(content[2].strip('%')), 0.0, 100.0) / 100.0 rgba.fromhls(h, l, s) color = rgba.get_rgb() elif m.group('hsla'): if decode: content = [ x.strip() for x in m.group('hsla_content').decode('utf-8').split(',') ] else: content = [x.strip() for x in m.group('hsla_content').split(',')] rgba = RGBA() hue = float(content[0]) if hue < 0.0 or hue > 360.0: hue = hue % 360.0 h = hue / 360.0 s = clamp(float(content[1].strip('%')), 0.0, 100.0) / 100.0 l = clamp(float(content[2].strip('%')), 0.0, 100.0) / 100.0 rgba.fromhls(h, l, s) color = rgba.get_rgb() if content[3].endswith('%'): alpha, alpha_dec = alpha_percent_normalize(content[3]) else: alpha, alpha_dec = alpha_dec_normalize(content[3]) elif m.group('hwb'): if decode: content = [ x.strip() for x in m.group('hwb_content').decode('utf-8').split(',') ] else: content = [x.strip() for x in m.group('hwb_content').split(',')] rgba = RGBA() hue = float(content[0]) if hue < 0.0 or hue > 360.0: hue = hue % 360.0 h = hue / 360.0 w = clamp(float(content[1].strip('%')), 0.0, 100.0) / 100.0 b = clamp(float(content[2].strip('%')), 0.0, 100.0) / 100.0 rgba.fromhwb(h, w, b) color = rgba.get_rgb() elif m.group('hwba'): if decode: content = [ x.strip() for x in m.group('hwba_content').decode('utf-8').split(',') ] else: content = [x.strip() for x in m.group('hwba_content').split(',')] rgba = RGBA() hue = float(content[0]) if hue < 0.0 or hue > 360.0: hue = hue % 360.0 h = hue / 360.0 w = clamp(float(content[1].strip('%')), 0.0, 100.0) / 100.0 b = clamp(float(content[2].strip('%')), 0.0, 100.0) / 100.0 rgba.fromhwb(h, w, b) color = rgba.get_rgb() if content[3].endswith('%'): alpha, alpha_dec = alpha_percent_normalize(content[3]) else: alpha, alpha_dec = alpha_dec_normalize(content[3]) elif m.group('webcolors'): try: if decode: color = csscolors.name2hex( m.group('webcolors').decode('utf-8')).lower() else: color = csscolors.name2hex(m.group('webcolors')).lower() except: pass return color, alpha, alpha_dec