4 exception Invalid_format of string
6 type t = {red:int; green:int; blue:int; alpha:float}
15 let red = rgb 0xFF 0x00 0x00
16 let lime = rgb 0x00 0xFF 0x00
17 let blue = rgb 0x00 0x00 0xFF
18 let white = rgb 0xFF 0xFF 0xFF
19 let maroon = rgb 0x80 0x00 0x00
20 let green = rgb 0x00 0xFF 0x00
21 let navy = rgb 0x00 0x00 0x80
22 let silver = rgb 0xC0 0xC0 0xC0
23 let yellow = rgb 0xFF 0xFF 0x00
24 let aqua = rgb 0x00 0xFF 0xFF
25 let fuchsia = rgb 0xFF 0x00 0xFF
26 let gray = rgb 0x80 0x80 0x80
27 let olive = rgb 0x80 0x80 0x00
28 let teal = rgb 0x00 0x80 0x80
29 let purple = rgb 0x80 0x00 0x80
30 let black = rgb 0x00 0x00 0x00
56 let to_int {red=r; green=g; blue=b} =
57 (r lsl 16) lor (g lsl 8) lor b
60 maybe (List.assoc @@ String.lowercase s) name_table
64 "^#\\([0-9A-F][0-9A-F]\\)\\([0-9A-F][0-9A-F]\\)\\([0-9A-F][0-9A-F]\\)$"
67 Scanf.sscanf s "%x" id
70 if Str.string_match hex s 0 then
71 Some (rgb (of_hex @@ Str.matched_group 1 s)
72 (of_hex @@ Str.matched_group 2 s)
73 (of_hex @@ Str.matched_group 3 s))
79 "^rgb( *\\([0-9]+\\) *, *\\([0-9]+\\) *, *\\([0-9]+\\) *)$"
82 if Str.string_match r_rgb s 0 then
83 Some (rgb (int_of_string @@ Str.matched_group 1 s)
84 (int_of_string @@ Str.matched_group 2 s)
85 (int_of_string @@ Str.matched_group 3 s))
91 +> List.map (fun f -> lazy (f s))
92 +> List.find (fun v -> Option.is_some (!$v))