fortplot_color_definitions Module

Color type definitions and constants for matplotlib-compatible color support

Provides: - Unified color type with RGBA support - Named color constants (CSS4 + tab: names) - Single letter color mappings - Utility functions for color validation



Variables

Type Visibility Attributes Name Initial
integer, public, parameter :: NUM_NAMED_COLORS = 158
character(len=20), public, parameter :: named_color_names(NUM_NAMED_COLORS) = ['red                 ', 'green               ', 'blue                ', 'cyan                ', 'magenta             ', 'yellow              ', 'black               ', 'white               ', 'gray                ', 'orange              ', 'purple              ', 'brown               ', 'pink                ', 'olive               ', 'navy                ', 'lime                ', 'teal                ', 'silver              ', 'maroon              ', 'indigo              ', 'aliceblue           ', 'antiquewhite        ', 'aqua                ', 'aquamarine          ', 'azure               ', 'beige               ', 'bisque              ', 'blanchedalmond      ', 'blueviolet          ', 'burlywood           ', 'cadetblue           ', 'chartreuse          ', 'chocolate           ', 'coral               ', 'cornflowerblue      ', 'cornsilk            ', 'crimson             ', 'darkblue            ', 'darkcyan            ', 'darkgoldenrod       ', 'darkgray            ', 'darkgreen           ', 'darkgrey            ', 'darkkhaki           ', 'darkmagenta         ', 'darkolivegreen      ', 'darkorange          ', 'darkorchid          ', 'darkred             ', 'darksalmon          ', 'darkseagreen        ', 'darkslateblue       ', 'darkslategray       ', 'darkslategrey       ', 'darkturquoise       ', 'darkviolet          ', 'deeppink            ', 'deepskyblue         ', 'dimgray             ', 'dimgrey             ', 'dodgerblue          ', 'firebrick           ', 'floralwhite         ', 'forestgreen         ', 'fuchsia             ', 'gainsboro           ', 'ghostwhite          ', 'gold                ', 'goldenrod           ', 'greenyellow         ', 'grey                ', 'honeydew            ', 'hotpink             ', 'indianred           ', 'ivory               ', 'khaki               ', 'lavender            ', 'lavenderblush       ', 'lawngreen           ', 'lemonchiffon        ', 'lightblue           ', 'lightcoral          ', 'lightcyan           ', 'lightgoldenrodyellow', 'lightgray           ', 'lightgreen          ', 'lightgrey           ', 'lightpink           ', 'lightsalmon         ', 'lightseagreen       ', 'lightskyblue        ', 'lightslategray      ', 'lightslategrey      ', 'lightsteelblue      ', 'lightyellow         ', 'limegreen           ', 'linen               ', 'mediumaquamarine    ', 'mediumblue          ', 'mediumorchid        ', 'mediumpurple        ', 'mediumseagreen      ', 'mediumslateblue     ', 'mediumspringgreen   ', 'mediumturquoise     ', 'mediumvioletred     ', 'midnightblue        ', 'mintcream           ', 'mistyrose           ', 'moccasin            ', 'navajowhite         ', 'oldlace             ', 'olivedrab           ', 'orangered           ', 'orchid              ', 'palegoldenrod       ', 'palegreen           ', 'paleturquoise       ', 'palevioletred       ', 'papayawhip          ', 'peachpuff           ', 'peru                ', 'plum                ', 'powderblue          ', 'rebeccapurple       ', 'rosybrown           ', 'royalblue           ', 'saddlebrown         ', 'salmon              ', 'sandybrown          ', 'seagreen            ', 'seashell            ', 'sienna              ', 'skyblue             ', 'slateblue           ', 'slategray           ', 'slategrey           ', 'snow                ', 'springgreen         ', 'steelblue           ', 'tan                 ', 'thistle             ', 'tomato              ', 'turquoise           ', 'violet              ', 'wheat               ', 'whitesmoke          ', 'yellowgreen         ', 'tab:blue            ', 'tab:orange          ', 'tab:green           ', 'tab:red             ', 'tab:purple          ', 'tab:brown           ', 'tab:pink            ', 'tab:gray            ', 'tab:olive           ', 'tab:cyan            ']
real(kind=wp), public, parameter :: named_color_values(3,NUM_NAMED_COLORS) = reshape([255.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 128.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 255.0_wp/255.0_wp, 0.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 0.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 128.0_wp/255.0_wp, 128.0_wp/255.0_wp, 128.0_wp/255.0_wp, 255.0_wp/255.0_wp, 165.0_wp/255.0_wp, 0.0_wp/255.0_wp, 128.0_wp/255.0_wp, 0.0_wp/255.0_wp, 128.0_wp/255.0_wp, 165.0_wp/255.0_wp, 42.0_wp/255.0_wp, 42.0_wp/255.0_wp, 255.0_wp/255.0_wp, 192.0_wp/255.0_wp, 203.0_wp/255.0_wp, 128.0_wp/255.0_wp, 128.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 128.0_wp/255.0_wp, 0.0_wp/255.0_wp, 255.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 128.0_wp/255.0_wp, 128.0_wp/255.0_wp, 192.0_wp/255.0_wp, 192.0_wp/255.0_wp, 192.0_wp/255.0_wp, 128.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 75.0_wp/255.0_wp, 0.0_wp/255.0_wp, 130.0_wp/255.0_wp, 240.0_wp/255.0_wp, 248.0_wp/255.0_wp, 255.0_wp/255.0_wp, 250.0_wp/255.0_wp, 235.0_wp/255.0_wp, 215.0_wp/255.0_wp, 0.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 127.0_wp/255.0_wp, 255.0_wp/255.0_wp, 212.0_wp/255.0_wp, 240.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 245.0_wp/255.0_wp, 245.0_wp/255.0_wp, 220.0_wp/255.0_wp, 255.0_wp/255.0_wp, 228.0_wp/255.0_wp, 196.0_wp/255.0_wp, 255.0_wp/255.0_wp, 235.0_wp/255.0_wp, 205.0_wp/255.0_wp, 138.0_wp/255.0_wp, 43.0_wp/255.0_wp, 226.0_wp/255.0_wp, 222.0_wp/255.0_wp, 184.0_wp/255.0_wp, 135.0_wp/255.0_wp, 95.0_wp/255.0_wp, 158.0_wp/255.0_wp, 160.0_wp/255.0_wp, 127.0_wp/255.0_wp, 255.0_wp/255.0_wp, 0.0_wp/255.0_wp, 210.0_wp/255.0_wp, 105.0_wp/255.0_wp, 30.0_wp/255.0_wp, 255.0_wp/255.0_wp, 127.0_wp/255.0_wp, 80.0_wp/255.0_wp, 100.0_wp/255.0_wp, 149.0_wp/255.0_wp, 237.0_wp/255.0_wp, 255.0_wp/255.0_wp, 248.0_wp/255.0_wp, 220.0_wp/255.0_wp, 220.0_wp/255.0_wp, 20.0_wp/255.0_wp, 60.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 139.0_wp/255.0_wp, 0.0_wp/255.0_wp, 139.0_wp/255.0_wp, 139.0_wp/255.0_wp, 184.0_wp/255.0_wp, 134.0_wp/255.0_wp, 11.0_wp/255.0_wp, 169.0_wp/255.0_wp, 169.0_wp/255.0_wp, 169.0_wp/255.0_wp, 0.0_wp/255.0_wp, 100.0_wp/255.0_wp, 0.0_wp/255.0_wp, 169.0_wp/255.0_wp, 169.0_wp/255.0_wp, 169.0_wp/255.0_wp, 189.0_wp/255.0_wp, 183.0_wp/255.0_wp, 107.0_wp/255.0_wp, 139.0_wp/255.0_wp, 0.0_wp/255.0_wp, 139.0_wp/255.0_wp, 85.0_wp/255.0_wp, 107.0_wp/255.0_wp, 47.0_wp/255.0_wp, 255.0_wp/255.0_wp, 140.0_wp/255.0_wp, 0.0_wp/255.0_wp, 153.0_wp/255.0_wp, 50.0_wp/255.0_wp, 204.0_wp/255.0_wp, 139.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 233.0_wp/255.0_wp, 150.0_wp/255.0_wp, 122.0_wp/255.0_wp, 143.0_wp/255.0_wp, 188.0_wp/255.0_wp, 143.0_wp/255.0_wp, 72.0_wp/255.0_wp, 61.0_wp/255.0_wp, 139.0_wp/255.0_wp, 47.0_wp/255.0_wp, 79.0_wp/255.0_wp, 79.0_wp/255.0_wp, 47.0_wp/255.0_wp, 79.0_wp/255.0_wp, 79.0_wp/255.0_wp, 0.0_wp/255.0_wp, 206.0_wp/255.0_wp, 209.0_wp/255.0_wp, 148.0_wp/255.0_wp, 0.0_wp/255.0_wp, 211.0_wp/255.0_wp, 255.0_wp/255.0_wp, 20.0_wp/255.0_wp, 147.0_wp/255.0_wp, 0.0_wp/255.0_wp, 191.0_wp/255.0_wp, 255.0_wp/255.0_wp, 105.0_wp/255.0_wp, 105.0_wp/255.0_wp, 105.0_wp/255.0_wp, 105.0_wp/255.0_wp, 105.0_wp/255.0_wp, 105.0_wp/255.0_wp, 30.0_wp/255.0_wp, 144.0_wp/255.0_wp, 255.0_wp/255.0_wp, 178.0_wp/255.0_wp, 34.0_wp/255.0_wp, 34.0_wp/255.0_wp, 255.0_wp/255.0_wp, 250.0_wp/255.0_wp, 240.0_wp/255.0_wp, 34.0_wp/255.0_wp, 139.0_wp/255.0_wp, 34.0_wp/255.0_wp, 255.0_wp/255.0_wp, 0.0_wp/255.0_wp, 255.0_wp/255.0_wp, 220.0_wp/255.0_wp, 220.0_wp/255.0_wp, 220.0_wp/255.0_wp, 248.0_wp/255.0_wp, 248.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 215.0_wp/255.0_wp, 0.0_wp/255.0_wp, 218.0_wp/255.0_wp, 165.0_wp/255.0_wp, 32.0_wp/255.0_wp, 173.0_wp/255.0_wp, 255.0_wp/255.0_wp, 47.0_wp/255.0_wp, 128.0_wp/255.0_wp, 128.0_wp/255.0_wp, 128.0_wp/255.0_wp, 240.0_wp/255.0_wp, 255.0_wp/255.0_wp, 240.0_wp/255.0_wp, 255.0_wp/255.0_wp, 105.0_wp/255.0_wp, 180.0_wp/255.0_wp, 205.0_wp/255.0_wp, 92.0_wp/255.0_wp, 92.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 240.0_wp/255.0_wp, 240.0_wp/255.0_wp, 230.0_wp/255.0_wp, 140.0_wp/255.0_wp, 230.0_wp/255.0_wp, 230.0_wp/255.0_wp, 250.0_wp/255.0_wp, 255.0_wp/255.0_wp, 240.0_wp/255.0_wp, 245.0_wp/255.0_wp, 124.0_wp/255.0_wp, 252.0_wp/255.0_wp, 0.0_wp/255.0_wp, 255.0_wp/255.0_wp, 250.0_wp/255.0_wp, 205.0_wp/255.0_wp, 173.0_wp/255.0_wp, 216.0_wp/255.0_wp, 230.0_wp/255.0_wp, 240.0_wp/255.0_wp, 128.0_wp/255.0_wp, 128.0_wp/255.0_wp, 224.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 250.0_wp/255.0_wp, 250.0_wp/255.0_wp, 210.0_wp/255.0_wp, 211.0_wp/255.0_wp, 211.0_wp/255.0_wp, 211.0_wp/255.0_wp, 144.0_wp/255.0_wp, 238.0_wp/255.0_wp, 144.0_wp/255.0_wp, 211.0_wp/255.0_wp, 211.0_wp/255.0_wp, 211.0_wp/255.0_wp, 255.0_wp/255.0_wp, 182.0_wp/255.0_wp, 193.0_wp/255.0_wp, 255.0_wp/255.0_wp, 160.0_wp/255.0_wp, 122.0_wp/255.0_wp, 32.0_wp/255.0_wp, 178.0_wp/255.0_wp, 170.0_wp/255.0_wp, 135.0_wp/255.0_wp, 206.0_wp/255.0_wp, 250.0_wp/255.0_wp, 119.0_wp/255.0_wp, 136.0_wp/255.0_wp, 153.0_wp/255.0_wp, 119.0_wp/255.0_wp, 136.0_wp/255.0_wp, 153.0_wp/255.0_wp, 176.0_wp/255.0_wp, 196.0_wp/255.0_wp, 222.0_wp/255.0_wp, 255.0_wp/255.0_wp, 255.0_wp/255.0_wp, 224.0_wp/255.0_wp, 50.0_wp/255.0_wp, 205.0_wp/255.0_wp, 50.0_wp/255.0_wp, 250.0_wp/255.0_wp, 240.0_wp/255.0_wp, 230.0_wp/255.0_wp, 102.0_wp/255.0_wp, 205.0_wp/255.0_wp, 170.0_wp/255.0_wp, 0.0_wp/255.0_wp, 0.0_wp/255.0_wp, 205.0_wp/255.0_wp, 186.0_wp/255.0_wp, 85.0_wp/255.0_wp, 211.0_wp/255.0_wp, 147.0_wp/255.0_wp, 112.0_wp/255.0_wp, 219.0_wp/255.0_wp, 60.0_wp/255.0_wp, 179.0_wp/255.0_wp, 113.0_wp/255.0_wp, 123.0_wp/255.0_wp, 104.0_wp/255.0_wp, 238.0_wp/255.0_wp, 0.0_wp/255.0_wp, 250.0_wp/255.0_wp, 154.0_wp/255.0_wp, 72.0_wp/255.0_wp, 209.0_wp/255.0_wp, 204.0_wp/255.0_wp, 199.0_wp/255.0_wp, 21.0_wp/255.0_wp, 133.0_wp/255.0_wp, 25.0_wp/255.0_wp, 25.0_wp/255.0_wp, 112.0_wp/255.0_wp, 245.0_wp/255.0_wp, 255.0_wp/255.0_wp, 250.0_wp/255.0_wp, 255.0_wp/255.0_wp, 228.0_wp/255.0_wp, 225.0_wp/255.0_wp, 255.0_wp/255.0_wp, 228.0_wp/255.0_wp, 181.0_wp/255.0_wp, 255.0_wp/255.0_wp, 222.0_wp/255.0_wp, 173.0_wp/255.0_wp, 253.0_wp/255.0_wp, 245.0_wp/255.0_wp, 230.0_wp/255.0_wp, 107.0_wp/255.0_wp, 142.0_wp/255.0_wp, 35.0_wp/255.0_wp, 255.0_wp/255.0_wp, 69.0_wp/255.0_wp, 0.0_wp/255.0_wp, 218.0_wp/255.0_wp, 112.0_wp/255.0_wp, 214.0_wp/255.0_wp, 238.0_wp/255.0_wp, 232.0_wp/255.0_wp, 170.0_wp/255.0_wp, 152.0_wp/255.0_wp, 251.0_wp/255.0_wp, 152.0_wp/255.0_wp, 175.0_wp/255.0_wp, 238.0_wp/255.0_wp, 238.0_wp/255.0_wp, 219.0_wp/255.0_wp, 112.0_wp/255.0_wp, 147.0_wp/255.0_wp, 255.0_wp/255.0_wp, 239.0_wp/255.0_wp, 213.0_wp/255.0_wp, 255.0_wp/255.0_wp, 218.0_wp/255.0_wp, 185.0_wp/255.0_wp, 205.0_wp/255.0_wp, 133.0_wp/255.0_wp, 63.0_wp/255.0_wp, 221.0_wp/255.0_wp, 160.0_wp/255.0_wp, 221.0_wp/255.0_wp, 176.0_wp/255.0_wp, 224.0_wp/255.0_wp, 230.0_wp/255.0_wp, 102.0_wp/255.0_wp, 51.0_wp/255.0_wp, 153.0_wp/255.0_wp, 188.0_wp/255.0_wp, 143.0_wp/255.0_wp, 143.0_wp/255.0_wp, 65.0_wp/255.0_wp, 105.0_wp/255.0_wp, 225.0_wp/255.0_wp, 139.0_wp/255.0_wp, 69.0_wp/255.0_wp, 19.0_wp/255.0_wp, 250.0_wp/255.0_wp, 128.0_wp/255.0_wp, 114.0_wp/255.0_wp, 244.0_wp/255.0_wp, 164.0_wp/255.0_wp, 96.0_wp/255.0_wp, 46.0_wp/255.0_wp, 139.0_wp/255.0_wp, 87.0_wp/255.0_wp, 255.0_wp/255.0_wp, 245.0_wp/255.0_wp, 238.0_wp/255.0_wp, 160.0_wp/255.0_wp, 82.0_wp/255.0_wp, 45.0_wp/255.0_wp, 135.0_wp/255.0_wp, 206.0_wp/255.0_wp, 235.0_wp/255.0_wp, 106.0_wp/255.0_wp, 90.0_wp/255.0_wp, 205.0_wp/255.0_wp, 112.0_wp/255.0_wp, 128.0_wp/255.0_wp, 144.0_wp/255.0_wp, 112.0_wp/255.0_wp, 128.0_wp/255.0_wp, 144.0_wp/255.0_wp, 255.0_wp/255.0_wp, 250.0_wp/255.0_wp, 250.0_wp/255.0_wp, 0.0_wp/255.0_wp, 255.0_wp/255.0_wp, 127.0_wp/255.0_wp, 70.0_wp/255.0_wp, 130.0_wp/255.0_wp, 180.0_wp/255.0_wp, 210.0_wp/255.0_wp, 180.0_wp/255.0_wp, 140.0_wp/255.0_wp, 216.0_wp/255.0_wp, 191.0_wp/255.0_wp, 216.0_wp/255.0_wp, 255.0_wp/255.0_wp, 99.0_wp/255.0_wp, 71.0_wp/255.0_wp, 64.0_wp/255.0_wp, 224.0_wp/255.0_wp, 208.0_wp/255.0_wp, 238.0_wp/255.0_wp, 130.0_wp/255.0_wp, 238.0_wp/255.0_wp, 245.0_wp/255.0_wp, 222.0_wp/255.0_wp, 179.0_wp/255.0_wp, 245.0_wp/255.0_wp, 245.0_wp/255.0_wp, 245.0_wp/255.0_wp, 154.0_wp/255.0_wp, 205.0_wp/255.0_wp, 50.0_wp/255.0_wp, 31.0_wp/255.0_wp, 119.0_wp/255.0_wp, 180.0_wp/255.0_wp, 255.0_wp/255.0_wp, 127.0_wp/255.0_wp, 14.0_wp/255.0_wp, 44.0_wp/255.0_wp, 160.0_wp/255.0_wp, 44.0_wp/255.0_wp, 214.0_wp/255.0_wp, 39.0_wp/255.0_wp, 40.0_wp/255.0_wp, 148.0_wp/255.0_wp, 103.0_wp/255.0_wp, 189.0_wp/255.0_wp, 140.0_wp/255.0_wp, 86.0_wp/255.0_wp, 75.0_wp/255.0_wp, 227.0_wp/255.0_wp, 119.0_wp/255.0_wp, 194.0_wp/255.0_wp, 127.0_wp/255.0_wp, 127.0_wp/255.0_wp, 127.0_wp/255.0_wp, 188.0_wp/255.0_wp, 189.0_wp/255.0_wp, 34.0_wp/255.0_wp, 23.0_wp/255.0_wp, 190.0_wp/255.0_wp, 207.0_wp/255.0_wp], [3, NUM_NAMED_COLORS])
character(len=1), public, parameter :: single_letters(8) = ['r', 'g', 'b', 'c', 'm', 'y', 'k', 'w']
integer, public, parameter :: letter_to_named(8) = [1, 2, 3, 4, 5, 6, 7, 8]

Derived Types

type, public ::  color_t

Components

Type Visibility Attributes Name Initial
real(kind=wp), public :: r = 0.0_wp
real(kind=wp), public :: g = 0.0_wp
real(kind=wp), public :: b = 0.0_wp
real(kind=wp), public :: a = 1.0_wp
logical, public :: valid = .false.

Functions

public function clamp_to_unit(value) result(clamped)

Clamp value to [0,1] range

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: value

Return Value real(kind=wp)


Subroutines

public subroutine to_lowercase(str)

Convert string to lowercase in-place

Arguments

Type IntentOptional Attributes Name
character(len=:), intent(inout), allocatable :: str

public subroutine to_lowercase_char(char)

Convert single character to lowercase

Arguments

Type IntentOptional Attributes Name
character(len=1), intent(inout) :: char