diff --git a/poezio/xhtml.py b/poezio/xhtml.py
index 6da6e0da..1de7b8b7 100644
--- a/poezio/xhtml.py
+++ b/poezio/xhtml.py
@@ -234,32 +234,33 @@ def ncurses_color_to_html(color):
r = g = b = color / 24 * 6
return '#%02X%02X%02X' % (int(r*256/6), int(g*256/6), int(b*256/6))
+def _parse_css_color(name):
+ if name[0] == '#':
+ name = name[1:]
+ length = len(name)
+ if length != 3 and length != 6:
+ return -1
+ value = int(name, 16)
+ if length == 6:
+ r = value >> 16
+ g = (value >> 8) & 0xff
+ b = value & 0xff
+ if r == g == b:
+ return int(232 + 0.0941 * r)
+ mult = 0.0235
+ else:
+ r = value >> 8
+ g = (value >> 4) & 0xf
+ b = value & 0xf
+ if r == g == b:
+ return int(232 + 1.54 * r)
+ mult = 0.3984
+ return 6*6*int(mult*r) + 6*int(mult*g) + int(mult*b) + 16
+ if name in colors:
+ return colors[name]
+ return -1
+
def parse_css(css):
- def get_color(value):
- if value[0] == '#':
- value = value[1:]
- length = len(value)
- if length != 3 and length != 6:
- return -1
- value = int(value, 16)
- if length == 6:
- r = int(value >> 16)
- g = int((value >> 8) & 0xff)
- b = int(value & 0xff)
- if r == g == b:
- return 232 + int(r/10.6251)
- div = 42.51
- else:
- r = int(value >> 8)
- g = int((value >> 4) & 0xf)
- b = int(value & 0xf)
- if r == g == b:
- return 232 + int(1.54*r)
- div = 2.51
- return 6*6*int(r/div) + 6*int(g/div) + int(b/div) + 16
- if value in colors:
- return colors[value]
- return -1
shell = ''
rules = css.split(';')
for rule in rules:
@@ -271,7 +272,7 @@ def parse_css(css):
if key == 'background-color':
pass#shell += '\x191'
elif key == 'color':
- color = get_color(value)
+ color = _parse_css_color(value)
if color != -1:
shell += '\x19%d}' % color
elif key == 'font-style':