Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PR: Implement support for "CSS Color 3". #1140

Merged
merged 2 commits into from
Apr 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
182 changes: 177 additions & 5 deletions BIBLIOGRAPHY.bib

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions colour/graph/conversion.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@
from colour.notation import (
HEX_to_RGB,
RGB_to_HEX,
keyword_to_RGB_CSSColor3,
munsell_value,
munsell_colour_to_xyY,
xyY_to_munsell_colour,
Expand Down Expand Up @@ -820,6 +821,7 @@ def mired_to_CCT_D_uv(mired: ArrayLike) -> NDArrayFloat:
# Colour Notation Systems
("Output-Referred RGB", "Hexadecimal", RGB_to_HEX),
("Hexadecimal", "Output-Referred RGB", HEX_to_RGB),
("CSS Color 3", "Output-Referred RGB", keyword_to_RGB_CSSColor3),
("CIE xyY", "Munsell Colour", xyY_to_munsell_colour),
("Munsell Colour", "CIE xyY", munsell_colour_to_xyY),
("Luminance", "Munsell Value", munsell_value),
Expand Down
8 changes: 8 additions & 0 deletions colour/notation/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from .datasets import (
CSS_COLOR_3_BASIC,
CSS_COLOR_3_EXTENDED,
CSS_COLOR_3,
MUNSELL_COLOURS_ALL,
MUNSELL_COLOURS_1929,
MUNSELL_COLOURS_REAL,
Expand All @@ -17,8 +20,12 @@
)
from .munsell import munsell_colour_to_xyY, xyY_to_munsell_colour
from .hexadecimal import RGB_to_HEX, HEX_to_RGB
from .css_color_3 import keyword_to_RGB_CSSColor3

__all__ = [
"CSS_COLOR_3_BASIC",
"CSS_COLOR_3_EXTENDED",
"CSS_COLOR_3",
"MUNSELL_COLOURS_ALL",
"MUNSELL_COLOURS_1929",
"MUNSELL_COLOURS_REAL",
Expand Down Expand Up @@ -47,3 +54,4 @@
"RGB_to_HEX",
"HEX_to_RGB",
]
__all__ += ["keyword_to_RGB_CSSColor3"]
67 changes: 67 additions & 0 deletions colour/notation/css_color_3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
"""
CSS Color Module Level 3 - Web Colours
======================================

Defines the conversion of colour keywords to *RGB* colourspace:

- :attr:`colour.notation.keyword_to_RGB_CSSColor3`

References
----------
- :cite:`W3C2022` : W3C. (2022). CSS Color Module Level 3.
https://www.w3.org/TR/css-color-3/
"""

from __future__ import annotations

from colour.hints import NDArrayFloat
from colour.notation import CSS_COLOR_3, HEX_to_RGB
from colour.utilities import attest

__author__ = "Colour Developers"
__copyright__ = "Copyright 2013 Colour Developers"
__license__ = "New BSD License - https://opensource.org/licenses/BSD-3-Clause"
__maintainer__ = "Colour Developers"
__email__ = "colour-developers@colour-science.org"
__status__ = "Production"

__all__ = [
"keyword_to_RGB_CSSColor3",
]


def keyword_to_RGB_CSSColor3(keyword: str) -> NDArrayFloat:
"""
Convert given colour keyword to *RGB* colourspace according to
*CSS Color Module Level 3* *W3C Recommendation*.

Parameters
----------
keyword
Colour keyword.

Returns
-------
:class:`numpy.array`
*RGB* colourspace array.

Notes
-----
- All the RGB colors are specified in the *IEC 61966-2-1:1999* *sRGB*
colourspace.

Examples
--------
>>> keyword_to_RGB_CSSColor3("black")
array([ 0., 0., 0.])
>>> keyword_to_RGB_CSSColor3("white")
array([ 1., 1., 1.])
>>> keyword_to_RGB_CSSColor3("aliceblue") # doctest: +ELLIPSIS
array([ 0.9411764..., 0.9725490..., 1. ])
"""

attest(
keyword in CSS_COLOR_3, f'{keyword} is not defined in "CSS Color 3"!'
)

return HEX_to_RGB(CSS_COLOR_3[keyword])
6 changes: 6 additions & 0 deletions colour/notation/datasets/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from .css_color_3 import CSS_COLOR_3_BASIC, CSS_COLOR_3_EXTENDED, CSS_COLOR_3
from .munsell import (
MUNSELL_COLOURS_ALL,
MUNSELL_COLOURS_1929,
Expand All @@ -6,6 +7,11 @@
)

__all__ = [
"CSS_COLOR_3_BASIC",
"CSS_COLOR_3_EXTENDED",
"CSS_COLOR_3",
]
__all__ += [
"MUNSELL_COLOURS_ALL",
"MUNSELL_COLOURS_1929",
"MUNSELL_COLOURS_REAL",
Expand Down
235 changes: 235 additions & 0 deletions colour/notation/datasets/css_color_3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
"""
CSS Color Module Level 3 - Web Colours
======================================

Defines the lists of colour keywords as given by *CSS Color Module Level 3*
*W3C Recommendation*.

- :attr:`colour.notation.CSS_COLOR_3_BASIC`
- :attr:`colour.notation.CSS_COLOR_3_EXTENDED`
- :attr:`colour.notation.CSS_COLOR_3`

References
----------
- :cite:`W3C2022` : W3C. (2022). CSS Color Module Level 3.
https://www.w3.org/TR/css-color-3/
"""

from __future__ import annotations

from colour.utilities import CanonicalMapping

__author__ = "Colour Developers"
__copyright__ = "Copyright 2013 Colour Developers"
__license__ = "New BSD License - https://opensource.org/licenses/BSD-3-Clause"
__maintainer__ = "Colour Developers"
__email__ = "colour-developers@colour-science.org"
__status__ = "Production"

__all__ = [
"CSS_COLOR_3_BASIC",
"CSS_COLOR_3_EXTENDED",
"CSS_COLOR_3",
]


CSS_COLOR_3_BASIC: CanonicalMapping = CanonicalMapping(
{
"black": "#000000",
"silver": "#C0C0C0",
"gray": "#808080",
"white": "#FFFFFF",
"maroon": "#800000",
"red": "#FF0000",
"purple": "#800080",
"fuchsia": "#FF00FF",
"green": "#008000",
"lime": "#00FF00",
"olive": "#808000",
"yellow": "#FFFF00",
"navy": "#000080",
"blue": "#0000FF",
"teal": "#008080",
"aqua": "#00FFFF",
}
)
CSS_COLOR_3_BASIC.__doc__ = """
The list of basic colour keywords. The colour names are ASCII case-insensitive.

References
----------
:cite:`W3C2022`
"""

CSS_COLOR_3_EXTENDED: CanonicalMapping = CanonicalMapping(
{
"aliceblue": "#F0F8FF",
"antiquewhite": "#FAEBD7",
"aqua": "#00FFFF",
"aquamarine": "#7FFFD4",
"azure": "#F0FFFF",
"beige": "#F5F5DC",
"bisque": "#FFE4C4",
"black": "#000000",
"blanchedalmond": "#FFEBCD",
"blue": "#0000FF",
"blueviolet": "#8A2BE2",
"brown": "#A52A2A",
"burlywood": "#DEB887",
"cadetblue": "#5F9EA0",
"chartreuse": "#7FFF00",
"chocolate": "#D2691E",
"coral": "#FF7F50",
"cornflowerblue": "#6495ED",
"cornsilk": "#FFF8DC",
"crimson": "#DC143C",
"cyan": "#00FFFF",
"darkblue": "#00008B",
"darkcyan": "#008B8B",
"darkgoldenrod": "#B8860B",
"darkgray": "#A9A9A9",
"darkgreen": "#006400",
"darkgrey": "#A9A9A9",
"darkkhaki": "#BDB76B",
"darkmagenta": "#8B008B",
"darkolivegreen": "#556B2F",
"darkorange": "#FF8C00",
"darkorchid": "#9932CC",
"darkred": "#8B0000",
"darksalmon": "#E9967A",
"darkseagreen": "#8FBC8F",
"darkslateblue": "#483D8B",
"darkslategray": "#2F4F4F",
"darkslategrey": "#2F4F4F",
"darkturquoise": "#00CED1",
"darkviolet": "#9400D3",
"deeppink": "#FF1493",
"deepskyblue": "#00BFFF",
"dimgray": "#696969",
"dimgrey": "#696969",
"dodgerblue": "#1E90FF",
"firebrick": "#B22222",
"floralwhite": "#FFFAF0",
"forestgreen": "#228B22",
"fuchsia": "#FF00FF",
"gainsboro": "#DCDCDC",
"ghostwhite": "#F8F8FF",
"gold": "#FFD700",
"goldenrod": "#DAA520",
"gray": "#808080",
"green": "#008000",
"greenyellow": "#ADFF2F",
"grey": "#808080",
"honeydew": "#F0FFF0",
"hotpink": "#FF69B4",
"indianred": "#CD5C5C",
"indigo": "#4B0082",
"ivory": "#FFFFF0",
"khaki": "#F0E68C",
"lavender": "#E6E6FA",
"lavenderblush": "#FFF0F5",
"lawngreen": "#7CFC00",
"lemonchiffon": "#FFFACD",
"lightblue": "#ADD8E6",
"lightcoral": "#F08080",
"lightcyan": "#E0FFFF",
"lightgoldenrodyellow": "#FAFAD2",
"lightgray": "#D3D3D3",
"lightgreen": "#90EE90",
"lightgrey": "#D3D3D3",
"lightpink": "#FFB6C1",
"lightsalmon": "#FFA07A",
"lightseagreen": "#20B2AA",
"lightskyblue": "#87CEFA",
"lightslategray": "#778899",
"lightslategrey": "#778899",
"lightsteelblue": "#B0C4DE",
"lightyellow": "#FFFFE0",
"lime": "#00FF00",
"limegreen": "#32CD32",
"linen": "#FAF0E6",
"magenta": "#FF00FF",
"maroon": "#800000",
"mediumaquamarine": "#66CDAA",
"mediumblue": "#0000CD",
"mediumorchid": "#BA55D3",
"mediumpurple": "#9370DB",
"mediumseagreen": "#3CB371",
"mediumslateblue": "#7B68EE",
"mediumspringgreen": "#00FA9A",
"mediumturquoise": "#48D1CC",
"mediumvioletred": "#C71585",
"midnightblue": "#191970",
"mintcream": "#F5FFFA",
"mistyrose": "#FFE4E1",
"moccasin": "#FFE4B5",
"navajowhite": "#FFDEAD",
"navy": "#000080",
"oldlace": "#FDF5E6",
"olive": "#808000",
"olivedrab": "#6B8E23",
"orange": "#FFA500",
"orangered": "#FF4500",
"orchid": "#DA70D6",
"palegoldenrod": "#EEE8AA",
"palegreen": "#98FB98",
"paleturquoise": "#AFEEEE",
"palevioletred": "#DB7093",
"papayawhip": "#FFEFD5",
"peachpuff": "#FFDAB9",
"peru": "#CD853F",
"pink": "#FFC0CB",
"plum": "#DDA0DD",
"powderblue": "#B0E0E6",
"purple": "#800080",
"red": "#FF0000",
"rosybrown": "#BC8F8F",
"royalblue": "#4169E1",
"saddlebrown": "#8B4513",
"salmon": "#FA8072",
"sandybrown": "#F4A460",
"seagreen": "#2E8B57",
"seashell": "#FFF5EE",
"sienna": "#A0522D",
"silver": "#C0C0C0",
"skyblue": "#87CEEB",
"slateblue": "#6A5ACD",
"slategray": "#708090",
"slategrey": "#708090",
"snow": "#FFFAFA",
"springgreen": "#00FF7F",
"steelblue": "#4682B4",
"tan": "#D2B48C",
"teal": "#008080",
"thistle": "#D8BFD8",
"tomato": "#FF6347",
"turquoise": "#40E0D0",
"violet": "#EE82EE",
"wheat": "#F5DEB3",
"white": "#FFFFFF",
"whitesmoke": "#F5F5F5",
"yellow": "#FFFF00",
"yellowgreen": "#9ACD32",
}
)
CSS_COLOR_3_EXTENDED.__doc__ = """
The list of the X11 colors supported by popular browsers with the addition of
gray/grey variants from SVG 1.0. The resulting list is precisely the same as
the SVG 1.0 color keyword names. This specification extends their definition
beyond SVG.

References
----------
:cite:`W3C2022`
"""

CSS_COLOR_3: CanonicalMapping = CanonicalMapping(CSS_COLOR_3_BASIC)
CSS_COLOR_3.__doc__ = """
List of colour keywords as given by as given by *CSS Color Module Level 3*
*W3C Recommendation*.

References
----------
:cite:`W3C2022`
"""
CSS_COLOR_3.update(CSS_COLOR_3_EXTENDED)
5 changes: 2 additions & 3 deletions colour/notation/datasets/munsell/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,8 @@
you are performing conversions using *Munsell* *Colorlab* specification,
e.g. *2.5R 9/2*, according to *ASTM D1535-08e1* method, you should not
scale the output :math:`Y` Luminance. However, if you use directly the
*CIE xyY* colourspace values from the Munsell Renotation data data, you
should scale the :math:`Y` Luminance before conversions by a :math:`0.975`
factor.
*CIE xyY* colourspace values from the Munsell Renotation data, you should
scale the :math:`Y` Luminance before conversions by a :math:`0.975` factor.

*ASTM D1535-08e1* states that::

Expand Down
5 changes: 2 additions & 3 deletions colour/notation/datasets/munsell/all.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@
you are performing conversions using *Munsell* *Colorlab* specification,
e.g. *2.5R 9/2*, according to *ASTM D1535-08e1* method, you should not
scale the output :math:`Y` Luminance. However, if you use directly the
*CIE xyY* colourspace values from the Munsell Renotation data data, you
should scale the :math:`Y` Luminance before conversions by a :math:`0.975`
factor.
*CIE xyY* colourspace values from the Munsell Renotation data, you should
scale the :math:`Y` Luminance before conversions by a :math:`0.975` factor.

*ASTM D1535-08e1* states that::

Expand Down
5 changes: 2 additions & 3 deletions colour/notation/datasets/munsell/experimental.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@
you are performing conversions using *Munsell* *Colorlab* specification,
e.g. *2.5R 9/2*, according to *ASTM D1535-08e1* method, you should not
scale the output :math:`Y` Luminance. However, if you use directly the
*CIE xyY* colourspace values from the Munsell Renotation data data, you
should scale the :math:`Y` Luminance before conversions by a :math:`0.975`
factor.
*CIE xyY* colourspace values from the Munsell Renotation data, you should
scale the :math:`Y` Luminance before conversions by a :math:`0.975` factor.

*ASTM D1535-08e1* states that::

Expand Down