diff --git a/pygal/colors.py b/pygal/colors.py
new file mode 100644
index 0000000..4c08f7c
--- /dev/null
+++ b/pygal/colors.py
@@ -0,0 +1,122 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012-2013 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
+"""
+Color utils
+
+"""
+from __future__ import division
+
+
+def normalize_float(f):
+ if abs(f - round(f)) < .0000000000001:
+ return round(f)
+ return f
+
+
+def rgb_to_hsl(r, g, b):
+ r /= 255
+ g /= 255
+ b /= 255
+ max_ = max((r, g, b))
+ min_ = min((r, g, b))
+ d = max_ - min_
+
+ if not d:
+ h = 0
+ elif r is max_:
+ h = 60 * (g - b) / d
+ elif g is max_:
+ h = 60 * (b - r) / d + 120
+ else:
+ h = 60 * (r - g) / d + 240
+
+ l = .5 * (max_ + min_)
+ if not d:
+ s = 0
+ elif l < 0.5:
+ s = .5 * d / l
+ else:
+ s = .5 * d / (1 - l)
+ return tuple(map(normalize_float, (h % 360, s * 100, l * 100)))
+
+
+def hsl_to_rgb(h, s, l):
+ h /= 360
+ s /= 100
+ l /= 100
+
+ m2 = l * (s + 1) if l <= .5 else l + s - l * s
+ m1 = 2 * l - m2
+
+ def h_to_rgb(h):
+ h = h % 1
+ if 6 * h < 1:
+ return m1 + 6 * h * (m2 - m1)
+ if 2 * h < 1:
+ return m2
+ if 3 * h < 2:
+ return m1 + 6 * (2 / 3 - h) * (m2 - m1)
+ return m1
+ r, g, b = map(lambda x: round(x * 255),
+ map(h_to_rgb, (h + 1 / 3, h, h - 1 / 3)))
+
+ return r, g, b
+
+
+def adjust(color, attribute, percent):
+ assert color[0] == '#', '#rrggbb and #rgb format are supported'
+ color = color[1:]
+ assert len(color) in (3, 6), '#rrggbb and #rgb format are supported'
+ if len(color) == 3:
+ color = [a for b in zip(color, color) for a in b]
+
+ bound = lambda x: max(0, min(100, x))
+
+ def _adjust(hsl):
+ hsl = list(hsl)
+ if attribute > 0:
+ hsl[attribute] = bound(hsl[attribute] + percent)
+ else:
+ hsl[attribute] += percent
+
+ return hsl
+ return '#%02x%02x%02x' % hsl_to_rgb(
+ *_adjust(
+ rgb_to_hsl(*map(lambda x: int(''.join(x), 16),
+ zip(color[::2], color[1::2])))))
+
+
+def rotate(color, percent):
+ return adjust(color, 0, percent)
+
+
+def saturate(color, percent):
+ return adjust(color, 1, percent)
+
+
+def desaturate(color, percent):
+ return adjust(color, 1, -percent)
+
+
+def lighten(color, percent):
+ return adjust(color, 2, percent)
+
+
+def darken(color, percent):
+ return adjust(color, 2, -percent)
diff --git a/pygal/style.py b/pygal/style.py
index 7e2d477..50f9846 100644
--- a/pygal/style.py
+++ b/pygal/style.py
@@ -20,23 +20,7 @@
Charts styling
"""
from __future__ import division
-from pygal.util import cycle_fill, rgb_to_hsl, hsl_to_rgb
-
-
-def darken(color, percent):
- assert color[0] == '#', '#rrggbb and #rgb format are supported'
- color = color[1:]
- assert len(color) in (3, 6), '#rrggbb and #rgb format are supported'
- if len(color) == 3:
- color = [a for b in zip(color, color) for a in b]
- return '#%02x%02x%02x' % hsl_to_rgb(
- *(lambda h, s, l: (h, s, max(0, min(100, l - percent))))(
- *rgb_to_hsl(*map(lambda x: int(''.join(x), 16),
- zip(color[::2], color[1::2])))))
-
-
-def lighten(color, percent):
- return darken(color, -percent)
+from pygal.util import cycle_fill
class Style(object):
diff --git a/pygal/test/test_colors.py b/pygal/test/test_colors.py
new file mode 100644
index 0000000..c60f72b
--- /dev/null
+++ b/pygal/test/test_colors.py
@@ -0,0 +1,446 @@
+from pygal.colors import (
+ rgb_to_hsl, hsl_to_rgb, darken, lighten, saturate, desaturate, rotate)
+
+
+def test_darken():
+ assert darken('#800', 20) == '#220000'
+ assert darken('#800', 0) == '#880000'
+ assert darken('#ffffff', 10) == '#e6e6e6'
+ assert darken('#000000', 10) == '#000000'
+ assert darken('#f3148a', 25) == '#810747'
+ assert darken('#121212', 1) == '#0f0f0f'
+ assert darken('#999999', 100) == '#000000'
+ assert darken('#1479ac', 8) == '#105f87'
+
+
+def test_lighten():
+ assert lighten('#800', 20) == '#ee0000'
+ assert lighten('#800', 0) == '#880000'
+ assert lighten('#ffffff', 10) == '#ffffff'
+ assert lighten('#000000', 10) == '#1a1a1a'
+ assert lighten('#f3148a', 25) == '#f98dc6'
+ assert lighten('#121212', 1) == '#151515'
+ assert lighten('#999999', 100) == '#ffffff'
+ assert lighten('#1479ac', 8) == '#1893d1'
+
+
+def test_saturate():
+ assert saturate('#000', 20) == '#000000'
+ assert saturate('#fff', 20) == '#ffffff'
+ assert saturate('#8a8', 100) == '#33ff33'
+ assert saturate('#855', 20) == '#9e3f3f'
+
+
+def test_desaturate():
+ assert desaturate('#000', 20) == '#000000'
+ assert desaturate('#fff', 20) == '#ffffff'
+ assert desaturate('#8a8', 100) == '#999999'
+ assert desaturate('#855', 20) == '#726b6b'
+
+
+def test_rotate():
+ assert rotate('#000', 45) == '#000000'
+ assert rotate('#fff', 45) == '#ffffff'
+ assert rotate('#811', 45) == '#886a11'
+ assert rotate('#8a8', 360) == '#88aa88'
+ assert rotate('#8a8', 0) == '#88aa88'
+ assert rotate('#8a8', -360) == '#88aa88'
+
+
+def test_hsl_to_rgb_part_0():
+ assert hsl_to_rgb(0, 100, 50) == (255, 0, 0)
+ assert hsl_to_rgb(60, 100, 50) == (255, 255, 0)
+ assert hsl_to_rgb(120, 100, 50) == (0, 255, 0)
+ assert hsl_to_rgb(180, 100, 50) == (0, 255, 255)
+ assert hsl_to_rgb(240, 100, 50) == (0, 0, 255)
+ assert hsl_to_rgb(300, 100, 50) == (255, 0, 255)
+
+
+def test_rgb_to_hsl_part_0():
+ assert rgb_to_hsl(255, 0, 0) == (0, 100, 50)
+ assert rgb_to_hsl(255, 255, 0) == (60, 100, 50)
+ assert rgb_to_hsl(0, 255, 0) == (120, 100, 50)
+ assert rgb_to_hsl(0, 255, 255) == (180, 100, 50)
+ assert rgb_to_hsl(0, 0, 255) == (240, 100, 50)
+ assert rgb_to_hsl(255, 0, 255) == (300, 100, 50)
+
+
+def test_hsl_to_rgb_part_1():
+ assert hsl_to_rgb(-360, 100, 50) == (255, 0, 0)
+ assert hsl_to_rgb(-300, 100, 50) == (255, 255, 0)
+ assert hsl_to_rgb(-240, 100, 50) == (0, 255, 0)
+ assert hsl_to_rgb(-180, 100, 50) == (0, 255, 255)
+ assert hsl_to_rgb(-120, 100, 50) == (0, 0, 255)
+ assert hsl_to_rgb(-60, 100, 50) == (255, 0, 255)
+
+
+def test_rgb_to_hsl_part_1():
+ # assert rgb_to_hsl(255, 0, 0) == (-360, 100, 50)
+ # assert rgb_to_hsl(255, 255, 0) == (-300, 100, 50)
+ # assert rgb_to_hsl(0, 255, 0) == (-240, 100, 50)
+ # assert rgb_to_hsl(0, 255, 255) == (-180, 100, 50)
+ # assert rgb_to_hsl(0, 0, 255) == (-120, 100, 50)
+ # assert rgb_to_hsl(255, 0, 255) == (-60, 100, 50)
+ pass
+
+
+def test_hsl_to_rgb_part_2():
+ assert hsl_to_rgb(360, 100, 50) == (255, 0, 0)
+ assert hsl_to_rgb(420, 100, 50) == (255, 255, 0)
+ assert hsl_to_rgb(480, 100, 50) == (0, 255, 0)
+ assert hsl_to_rgb(540, 100, 50) == (0, 255, 255)
+ assert hsl_to_rgb(600, 100, 50) == (0, 0, 255)
+ assert hsl_to_rgb(660, 100, 50) == (255, 0, 255)
+
+
+def test_rgb_to_hsl_part_2():
+ # assert rgb_to_hsl(255, 0, 0) == (360, 100, 50)
+ # assert rgb_to_hsl(255, 255, 0) == (420, 100, 50)
+ # assert rgb_to_hsl(0, 255, 0) == (480, 100, 50)
+ # assert rgb_to_hsl(0, 255, 255) == (540, 100, 50)
+ # assert rgb_to_hsl(0, 0, 255) == (600, 100, 50)
+ # assert rgb_to_hsl(255, 0, 255) == (660, 100, 50)
+ pass
+
+
+def test_hsl_to_rgb_part_3():
+ assert hsl_to_rgb(6120, 100, 50) == (255, 0, 0)
+ assert hsl_to_rgb(-9660, 100, 50) == (255, 255, 0)
+ assert hsl_to_rgb(99840, 100, 50) == (0, 255, 0)
+ assert hsl_to_rgb(-900, 100, 50) == (0, 255, 255)
+ assert hsl_to_rgb(-104880, 100, 50) == (0, 0, 255)
+ assert hsl_to_rgb(2820, 100, 50) == (255, 0, 255)
+
+
+def test_rgb_to_hsl_part_3():
+ # assert rgb_to_hsl(255, 0, 0) == (6120, 100, 50)
+ # assert rgb_to_hsl(255, 255, 0) == (-9660, 100, 50)
+ # assert rgb_to_hsl(0, 255, 0) == (99840, 100, 50)
+ # assert rgb_to_hsl(0, 255, 255) == (-900, 100, 50)
+ # assert rgb_to_hsl(0, 0, 255) == (-104880, 100, 50)
+ # assert rgb_to_hsl(255, 0, 255) == (2820, 100, 50)
+ pass
+
+
+def test_hsl_to_rgb_part_4():
+ assert hsl_to_rgb(0, 100, 50) == (255, 0, 0)
+ assert hsl_to_rgb(12, 100, 50) == (255, 51, 0)
+ assert hsl_to_rgb(24, 100, 50) == (255, 102, 0)
+ assert hsl_to_rgb(36, 100, 50) == (255, 153, 0)
+ assert hsl_to_rgb(48, 100, 50) == (255, 204, 0)
+ assert hsl_to_rgb(60, 100, 50) == (255, 255, 0)
+ assert hsl_to_rgb(72, 100, 50) == (204, 255, 0)
+ assert hsl_to_rgb(84, 100, 50) == (153, 255, 0)
+ assert hsl_to_rgb(96, 100, 50) == (102, 255, 0)
+ assert hsl_to_rgb(108, 100, 50) == (51, 255, 0)
+ assert hsl_to_rgb(120, 100, 50) == (0, 255, 0)
+
+
+def test_rgb_to_hsl_part_4():
+ assert rgb_to_hsl(255, 0, 0) == (0, 100, 50)
+ assert rgb_to_hsl(255, 51, 0) == (12, 100, 50)
+ assert rgb_to_hsl(255, 102, 0) == (24, 100, 50)
+ assert rgb_to_hsl(255, 153, 0) == (36, 100, 50)
+ assert rgb_to_hsl(255, 204, 0) == (48, 100, 50)
+ assert rgb_to_hsl(255, 255, 0) == (60, 100, 50)
+ assert rgb_to_hsl(204, 255, 0) == (72, 100, 50)
+ assert rgb_to_hsl(153, 255, 0) == (84, 100, 50)
+ assert rgb_to_hsl(102, 255, 0) == (96, 100, 50)
+ assert rgb_to_hsl(51, 255, 0) == (108, 100, 50)
+ assert rgb_to_hsl(0, 255, 0) == (120, 100, 50)
+
+
+def test_hsl_to_rgb_part_5():
+ assert hsl_to_rgb(120, 100, 50) == (0, 255, 0)
+ assert hsl_to_rgb(132, 100, 50) == (0, 255, 51)
+ assert hsl_to_rgb(144, 100, 50) == (0, 255, 102)
+ assert hsl_to_rgb(156, 100, 50) == (0, 255, 153)
+ assert hsl_to_rgb(168, 100, 50) == (0, 255, 204)
+ assert hsl_to_rgb(180, 100, 50) == (0, 255, 255)
+ assert hsl_to_rgb(192, 100, 50) == (0, 204, 255)
+ assert hsl_to_rgb(204, 100, 50) == (0, 153, 255)
+ assert hsl_to_rgb(216, 100, 50) == (0, 102, 255)
+ assert hsl_to_rgb(228, 100, 50) == (0, 51, 255)
+ assert hsl_to_rgb(240, 100, 50) == (0, 0, 255)
+
+
+def test_rgb_to_hsl_part_5():
+ assert rgb_to_hsl(0, 255, 0) == (120, 100, 50)
+ assert rgb_to_hsl(0, 255, 51) == (132, 100, 50)
+ assert rgb_to_hsl(0, 255, 102) == (144, 100, 50)
+ assert rgb_to_hsl(0, 255, 153) == (156, 100, 50)
+ assert rgb_to_hsl(0, 255, 204) == (168, 100, 50)
+ assert rgb_to_hsl(0, 255, 255) == (180, 100, 50)
+ assert rgb_to_hsl(0, 204, 255) == (192, 100, 50)
+ assert rgb_to_hsl(0, 153, 255) == (204, 100, 50)
+ assert rgb_to_hsl(0, 102, 255) == (216, 100, 50)
+ assert rgb_to_hsl(0, 51, 255) == (228, 100, 50)
+ assert rgb_to_hsl(0, 0, 255) == (240, 100, 50)
+
+
+def test_hsl_to_rgb_part_6():
+ assert hsl_to_rgb(240, 100, 50) == (0, 0, 255)
+ assert hsl_to_rgb(252, 100, 50) == (51, 0, 255)
+ assert hsl_to_rgb(264, 100, 50) == (102, 0, 255)
+ assert hsl_to_rgb(276, 100, 50) == (153, 0, 255)
+ assert hsl_to_rgb(288, 100, 50) == (204, 0, 255)
+ assert hsl_to_rgb(300, 100, 50) == (255, 0, 255)
+ assert hsl_to_rgb(312, 100, 50) == (255, 0, 204)
+ assert hsl_to_rgb(324, 100, 50) == (255, 0, 153)
+ assert hsl_to_rgb(336, 100, 50) == (255, 0, 102)
+ assert hsl_to_rgb(348, 100, 50) == (255, 0, 51)
+ assert hsl_to_rgb(360, 100, 50) == (255, 0, 0)
+
+
+def test_rgb_to_hsl_part_6():
+ assert rgb_to_hsl(0, 0, 255) == (240, 100, 50)
+ assert rgb_to_hsl(51, 0, 255) == (252, 100, 50)
+ assert rgb_to_hsl(102, 0, 255) == (264, 100, 50)
+ assert rgb_to_hsl(153, 0, 255) == (276, 100, 50)
+ assert rgb_to_hsl(204, 0, 255) == (288, 100, 50)
+ assert rgb_to_hsl(255, 0, 255) == (300, 100, 50)
+ assert rgb_to_hsl(255, 0, 204) == (312, 100, 50)
+ assert rgb_to_hsl(255, 0, 153) == (324, 100, 50)
+ assert rgb_to_hsl(255, 0, 102) == (336, 100, 50)
+ assert rgb_to_hsl(255, 0, 51) == (348, 100, 50)
+ # assert rgb_to_hsl(255, 0, 0) == (360, 100, 50)
+
+
+def test_hsl_to_rgb_part_7():
+ assert hsl_to_rgb(0, 20, 50) == (153, 102, 102)
+ assert hsl_to_rgb(0, 60, 50) == (204, 51, 51)
+ assert hsl_to_rgb(0, 100, 50) == (255, 0, 0)
+
+
+def test_rgb_to_hsl_part_7():
+ assert rgb_to_hsl(153, 102, 102) == (0, 20, 50)
+ assert rgb_to_hsl(204, 51, 51) == (0, 60, 50)
+ assert rgb_to_hsl(255, 0, 0) == (0, 100, 50)
+
+
+def test_hsl_to_rgb_part_8():
+ assert hsl_to_rgb(60, 20, 50) == (153, 153, 102)
+ assert hsl_to_rgb(60, 60, 50) == (204, 204, 51)
+ assert hsl_to_rgb(60, 100, 50) == (255, 255, 0)
+
+
+def test_rgb_to_hsl_part_8():
+ assert rgb_to_hsl(153, 153, 102) == (60, 20, 50)
+ assert rgb_to_hsl(204, 204, 51) == (60, 60, 50)
+ assert rgb_to_hsl(255, 255, 0) == (60, 100, 50)
+
+
+def test_hsl_to_rgb_part_9():
+ assert hsl_to_rgb(120, 20, 50) == (102, 153, 102)
+ assert hsl_to_rgb(120, 60, 50) == (51, 204, 51)
+ assert hsl_to_rgb(120, 100, 50) == (0, 255, 0)
+
+
+def test_rgb_to_hsl_part_9():
+ assert rgb_to_hsl(102, 153, 102) == (120, 20, 50)
+ assert rgb_to_hsl(51, 204, 51) == (120, 60, 50)
+ assert rgb_to_hsl(0, 255, 0) == (120, 100, 50)
+
+
+def test_hsl_to_rgb_part_10():
+ assert hsl_to_rgb(180, 20, 50) == (102, 153, 153)
+ assert hsl_to_rgb(180, 60, 50) == (51, 204, 204)
+ assert hsl_to_rgb(180, 100, 50) == (0, 255, 255)
+
+
+def test_rgb_to_hsl_part_10():
+ assert rgb_to_hsl(102, 153, 153) == (180, 20, 50)
+ assert rgb_to_hsl(51, 204, 204) == (180, 60, 50)
+ assert rgb_to_hsl(0, 255, 255) == (180, 100, 50)
+
+
+def test_hsl_to_rgb_part_11():
+ assert hsl_to_rgb(240, 20, 50) == (102, 102, 153)
+ assert hsl_to_rgb(240, 60, 50) == (51, 51, 204)
+ assert hsl_to_rgb(240, 100, 50) == (0, 0, 255)
+
+
+def test_rgb_to_hsl_part_11():
+ assert rgb_to_hsl(102, 102, 153) == (240, 20, 50)
+ assert rgb_to_hsl(51, 51, 204) == (240, 60, 50)
+ assert rgb_to_hsl(0, 0, 255) == (240, 100, 50)
+
+
+def test_hsl_to_rgb_part_12():
+ assert hsl_to_rgb(300, 20, 50) == (153, 102, 153)
+ assert hsl_to_rgb(300, 60, 50) == (204, 51, 204)
+ assert hsl_to_rgb(300, 100, 50) == (255, 0, 255)
+
+
+def test_rgb_to_hsl_part_12():
+ assert rgb_to_hsl(153, 102, 153) == (300, 20, 50)
+ assert rgb_to_hsl(204, 51, 204) == (300, 60, 50)
+ assert rgb_to_hsl(255, 0, 255) == (300, 100, 50)
+
+
+def test_hsl_to_rgb_part_13():
+ assert hsl_to_rgb(0, 100, 0) == (0, 0, 0)
+ assert hsl_to_rgb(0, 100, 10) == (51, 0, 0)
+ assert hsl_to_rgb(0, 100, 20) == (102, 0, 0)
+ assert hsl_to_rgb(0, 100, 30) == (153, 0, 0)
+ assert hsl_to_rgb(0, 100, 40) == (204, 0, 0)
+ assert hsl_to_rgb(0, 100, 50) == (255, 0, 0)
+ assert hsl_to_rgb(0, 100, 60) == (255, 51, 51)
+ assert hsl_to_rgb(0, 100, 70) == (255, 102, 102)
+ assert hsl_to_rgb(0, 100, 80) == (255, 153, 153)
+ assert hsl_to_rgb(0, 100, 90) == (255, 204, 204)
+ assert hsl_to_rgb(0, 100, 100) == (255, 255, 255)
+
+
+def test_rgb_to_hsl_part_13():
+ assert rgb_to_hsl(0, 0, 0) == (0, 0, 0)
+ assert rgb_to_hsl(51, 0, 0) == (0, 100, 10)
+ assert rgb_to_hsl(102, 0, 0) == (0, 100, 20)
+ assert rgb_to_hsl(153, 0, 0) == (0, 100, 30)
+ assert rgb_to_hsl(204, 0, 0) == (0, 100, 40)
+ assert rgb_to_hsl(255, 0, 0) == (0, 100, 50)
+ assert rgb_to_hsl(255, 51, 51) == (0, 100, 60)
+ assert rgb_to_hsl(255, 102, 102) == (0, 100, 70)
+ assert rgb_to_hsl(255, 153, 153) == (0, 100, 80)
+ assert rgb_to_hsl(255, 204, 204) == (0, 100, 90)
+ assert rgb_to_hsl(255, 255, 255) == (0, 0, 100)
+
+
+def test_hsl_to_rgb_part_14():
+ assert hsl_to_rgb(60, 100, 0) == (0, 0, 0)
+ assert hsl_to_rgb(60, 100, 10) == (51, 51, 0)
+ assert hsl_to_rgb(60, 100, 20) == (102, 102, 0)
+ assert hsl_to_rgb(60, 100, 30) == (153, 153, 0)
+ assert hsl_to_rgb(60, 100, 40) == (204, 204, 0)
+ assert hsl_to_rgb(60, 100, 50) == (255, 255, 0)
+ assert hsl_to_rgb(60, 100, 60) == (255, 255, 51)
+ assert hsl_to_rgb(60, 100, 70) == (255, 255, 102)
+ assert hsl_to_rgb(60, 100, 80) == (255, 255, 153)
+ assert hsl_to_rgb(60, 100, 90) == (255, 255, 204)
+ assert hsl_to_rgb(60, 100, 100) == (255, 255, 255)
+
+
+def test_rgb_to_hsl_part_14():
+ # assert rgb_to_hsl(0, 0, 0) == (60, 100, 0)
+ assert rgb_to_hsl(51, 51, 0) == (60, 100, 10)
+ assert rgb_to_hsl(102, 102, 0) == (60, 100, 20)
+ assert rgb_to_hsl(153, 153, 0) == (60, 100, 30)
+ assert rgb_to_hsl(204, 204, 0) == (60, 100, 40)
+ assert rgb_to_hsl(255, 255, 0) == (60, 100, 50)
+ assert rgb_to_hsl(255, 255, 51) == (60, 100, 60)
+ assert rgb_to_hsl(255, 255, 102) == (60, 100, 70)
+ assert rgb_to_hsl(255, 255, 153) == (60, 100, 80)
+ assert rgb_to_hsl(255, 255, 204) == (60, 100, 90)
+ # assert rgb_to_hsl(255, 255, 255) == (60, 100, 100)
+
+
+def test_hsl_to_rgb_part_15():
+ assert hsl_to_rgb(120, 100, 0) == (0, 0, 0)
+ assert hsl_to_rgb(120, 100, 10) == (0, 51, 0)
+ assert hsl_to_rgb(120, 100, 20) == (0, 102, 0)
+ assert hsl_to_rgb(120, 100, 30) == (0, 153, 0)
+ assert hsl_to_rgb(120, 100, 40) == (0, 204, 0)
+ assert hsl_to_rgb(120, 100, 50) == (0, 255, 0)
+ assert hsl_to_rgb(120, 100, 60) == (51, 255, 51)
+ assert hsl_to_rgb(120, 100, 70) == (102, 255, 102)
+ assert hsl_to_rgb(120, 100, 80) == (153, 255, 153)
+ assert hsl_to_rgb(120, 100, 90) == (204, 255, 204)
+ assert hsl_to_rgb(120, 100, 100) == (255, 255, 255)
+
+
+def test_rgb_to_hsl_part_15():
+ # assert rgb_to_hsl(0, 0, 0) == (120, 100, 0)
+ assert rgb_to_hsl(0, 51, 0) == (120, 100, 10)
+ assert rgb_to_hsl(0, 102, 0) == (120, 100, 20)
+ assert rgb_to_hsl(0, 153, 0) == (120, 100, 30)
+ assert rgb_to_hsl(0, 204, 0) == (120, 100, 40)
+ assert rgb_to_hsl(0, 255, 0) == (120, 100, 50)
+ assert rgb_to_hsl(51, 255, 51) == (120, 100, 60)
+ assert rgb_to_hsl(102, 255, 102) == (120, 100, 70)
+ assert rgb_to_hsl(153, 255, 153) == (120, 100, 80)
+ assert rgb_to_hsl(204, 255, 204) == (120, 100, 90)
+ # assert rgb_to_hsl(255, 255, 255) == (120, 100, 100)
+
+
+def test_hsl_to_rgb_part_16():
+ assert hsl_to_rgb(180, 100, 0) == (0, 0, 0)
+ assert hsl_to_rgb(180, 100, 10) == (0, 51, 51)
+ assert hsl_to_rgb(180, 100, 20) == (0, 102, 102)
+ assert hsl_to_rgb(180, 100, 30) == (0, 153, 153)
+ assert hsl_to_rgb(180, 100, 40) == (0, 204, 204)
+ assert hsl_to_rgb(180, 100, 50) == (0, 255, 255)
+ assert hsl_to_rgb(180, 100, 60) == (51, 255, 255)
+ assert hsl_to_rgb(180, 100, 70) == (102, 255, 255)
+ assert hsl_to_rgb(180, 100, 80) == (153, 255, 255)
+ assert hsl_to_rgb(180, 100, 90) == (204, 255, 255)
+ assert hsl_to_rgb(180, 100, 100) == (255, 255, 255)
+
+
+def test_rgb_to_hsl_part_16():
+ # assert rgb_to_hsl(0, 0, 0) == (180, 100, 0)
+ assert rgb_to_hsl(0, 51, 51) == (180, 100, 10)
+ assert rgb_to_hsl(0, 102, 102) == (180, 100, 20)
+ assert rgb_to_hsl(0, 153, 153) == (180, 100, 30)
+ assert rgb_to_hsl(0, 204, 204) == (180, 100, 40)
+ assert rgb_to_hsl(0, 255, 255) == (180, 100, 50)
+ assert rgb_to_hsl(51, 255, 255) == (180, 100, 60)
+ assert rgb_to_hsl(102, 255, 255) == (180, 100, 70)
+ assert rgb_to_hsl(153, 255, 255) == (180, 100, 80)
+ assert rgb_to_hsl(204, 255, 255) == (180, 100, 90)
+ # assert rgb_to_hsl(255, 255, 255) == (180, 100, 100)
+
+
+def test_hsl_to_rgb_part_17():
+ assert hsl_to_rgb(240, 100, 0) == (0, 0, 0)
+ assert hsl_to_rgb(240, 100, 10) == (0, 0, 51)
+ assert hsl_to_rgb(240, 100, 20) == (0, 0, 102)
+ assert hsl_to_rgb(240, 100, 30) == (0, 0, 153)
+ assert hsl_to_rgb(240, 100, 40) == (0, 0, 204)
+ assert hsl_to_rgb(240, 100, 50) == (0, 0, 255)
+ assert hsl_to_rgb(240, 100, 60) == (51, 51, 255)
+ assert hsl_to_rgb(240, 100, 70) == (102, 102, 255)
+ assert hsl_to_rgb(240, 100, 80) == (153, 153, 255)
+ assert hsl_to_rgb(240, 100, 90) == (204, 204, 255)
+ assert hsl_to_rgb(240, 100, 100) == (255, 255, 255)
+
+
+def test_rgb_to_hsl_part_17():
+ # assert rgb_to_hsl(0, 0, 0) == (240, 100, 0)
+ assert rgb_to_hsl(0, 0, 51) == (240, 100, 10)
+ assert rgb_to_hsl(0, 0, 102) == (240, 100, 20)
+ assert rgb_to_hsl(0, 0, 153) == (240, 100, 30)
+ assert rgb_to_hsl(0, 0, 204) == (240, 100, 40)
+ assert rgb_to_hsl(0, 0, 255) == (240, 100, 50)
+ assert rgb_to_hsl(51, 51, 255) == (240, 100, 60)
+ assert rgb_to_hsl(102, 102, 255) == (240, 100, 70)
+ assert rgb_to_hsl(153, 153, 255) == (240, 100, 80)
+ assert rgb_to_hsl(204, 204, 255) == (240, 100, 90)
+ # assert rgb_to_hsl(255, 255, 255) == (240, 100, 100)
+
+
+def test_hsl_to_rgb_part_18():
+ assert hsl_to_rgb(300, 100, 0) == (0, 0, 0)
+ assert hsl_to_rgb(300, 100, 10) == (51, 0, 51)
+ assert hsl_to_rgb(300, 100, 20) == (102, 0, 102)
+ assert hsl_to_rgb(300, 100, 30) == (153, 0, 153)
+ assert hsl_to_rgb(300, 100, 40) == (204, 0, 204)
+ assert hsl_to_rgb(300, 100, 50) == (255, 0, 255)
+ assert hsl_to_rgb(300, 100, 60) == (255, 51, 255)
+ assert hsl_to_rgb(300, 100, 70) == (255, 102, 255)
+ assert hsl_to_rgb(300, 100, 80) == (255, 153, 255)
+ assert hsl_to_rgb(300, 100, 90) == (255, 204, 255)
+ assert hsl_to_rgb(300, 100, 100) == (255, 255, 255)
+
+
+def test_rgb_to_hsl_part_18():
+ # assert rgb_to_hsl(0, 0, 0) == (300, 100, 0)
+ assert rgb_to_hsl(51, 0, 51) == (300, 100, 10)
+ assert rgb_to_hsl(102, 0, 102) == (300, 100, 20)
+ assert rgb_to_hsl(153, 0, 153) == (300, 100, 30)
+ assert rgb_to_hsl(204, 0, 204) == (300, 100, 40)
+ assert rgb_to_hsl(255, 0, 255) == (300, 100, 50)
+ assert rgb_to_hsl(255, 51, 255) == (300, 100, 60)
+ assert rgb_to_hsl(255, 102, 255) == (300, 100, 70)
+ assert rgb_to_hsl(255, 153, 255) == (300, 100, 80)
+ assert rgb_to_hsl(255, 204, 255) == (300, 100, 90)
+ # assert rgb_to_hsl(255, 255, 255) == (300, 100, 100)
diff --git a/pygal/test/test_style.py b/pygal/test/test_style.py
index 5048aee..73f0650 100644
--- a/pygal/test/test_style.py
+++ b/pygal/test/test_style.py
@@ -16,7 +16,7 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with pygal. If not, see .
-from pygal.style import Style, darken, lighten
+from pygal.style import Style
def test_colors():
@@ -102,21 +102,3 @@ def test_colors():
fill: rgb(12, 231, 3);
}
'''
-
-
-def test_darken():
- assert darken('#800', 20) == '#220000'
- assert darken('#ffffff', 10) == '#e6e6e6'
- assert darken('#f3148a', 25) == '#810747'
- assert darken('#121212', 1) == '#0f0f0f'
- assert darken('#999999', 100) == '#000000'
- assert darken('#1479ac', 8) == '#105f87'
-
-
-def test_lighten():
- assert lighten('#800', 20) == '#ee0000'
- assert lighten('#ffffff', 10) == '#ffffff'
- assert lighten('#f3148a', 25) == '#f98dc6'
- assert lighten('#121212', 1) == '#151515'
- assert lighten('#999999', 100) == '#ffffff'
- assert lighten('#1479ac', 8) == '#1893d1'
diff --git a/pygal/test/test_util.py b/pygal/test/test_util.py
index c301066..4051253 100644
--- a/pygal/test/test_util.py
+++ b/pygal/test/test_util.py
@@ -19,7 +19,7 @@
from pygal._compat import u
from pygal.util import (
round_to_int, round_to_float, _swap_curly, template, humanize,
- is_major, truncate, minify_css, rgb_to_hsl, hsl_to_rgb)
+ is_major, truncate, minify_css)
from pytest import raises
diff --git a/pygal/util.py b/pygal/util.py
index 02ec6a2..0f82fa6 100644
--- a/pygal/util.py
+++ b/pygal/util.py
@@ -382,54 +382,3 @@ def split_title(title, width, title_fs):
title = title[i:].strip()
titles.append(title)
return titles
-
-
-def rgb_to_hsl(r, g, b):
- r /= 255
- g /= 255
- b /= 255
- max_ = max((r, g, b))
- min_ = min((r, g, b))
- d = max_ - min_
-
- if not d:
- h = 0
- elif r is max_:
- h = 60 * (g - b) / d
- elif g is max_:
- h = 60 * (b - r) / d + 120
- else:
- h = 60 * (r - g) / d + 240
-
- l = .5 * (max_ + min_)
- if not d:
- s = 0
- elif l < 0.5:
- s = .5 * d / l
- else:
- s = .5 * d / (1 - l)
-
- return h % 360, s * 100, l * 100
-
-
-def hsl_to_rgb(h, s, l):
- h /= 360
- s /= 100
- l /= 100
-
- m2 = l * (s + 1) if l <= .5 else l + s - l * s
- m1 = 2 * l - m2
-
- def h_to_rgb(h):
- h = h % 1
- if 6 * h < 1:
- return m1 + 6 * h * (m2 - m1)
- if 2 * h < 1:
- return m2
- if 3 * h < 2:
- return m1 + 6 * (2 / 3 - h) * (m2 - m1)
- return m1
- r, g, b = map(lambda x: round(x * 255),
- map(h_to_rgb, (h + 1 / 3, h, h - 1 / 3)))
-
- return r, g, b