123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219openB_utilsmoduleTheme=B_themetypet=int*int*int(* http://www.rapidtables.com/web/color/html-color-codes.htm *)includeRgb_namesletgrey=(100,100,100)letpale_grey=(150,150,150)letdark_grey=(75,75,75)letcustom=["grey",grey;"pale_grey",pale_grey;"dark_grey",dark_grey;]lettable=["aliceblue",aliceblue;"antiquewhite",antiquewhite;"aqua",aqua;"aquamarine",aquamarine;"azure",azure;"beige",beige;"bisque",bisque;"black",black;"blanchedalmond",blanchedalmond;"blue",blue;"blueviolet",blueviolet;"brown",brown;"burlywood",burlywood;"cadetblue",cadetblue;"chartreuse",chartreuse;"chocolate",chocolate;"coral",coral;"cornflowerblue",cornflowerblue;"cornsilk",cornsilk;"crimson",crimson;"cyan",cyan;"darkblue",darkblue;"darkcyan",darkcyan;"darkgray",darkgray;"darkgreen",darkgreen;"darkkhaki",darkkhaki;"darkmagenta",darkmagenta;"darkolivegreen",darkolivegreen;"darkorange",darkorange;"darkorchid",darkorchid;"darkred",darkred;"darksalmon",darksalmon;"darkseagreen",darkseagreen;"darkslateblue",darkslateblue;"darkslategray",darkslategray;"darkturquoise",darkturquoise;"darkviolet",darkviolet;"deeppink",deeppink;"deepskyblue",deepskyblue;"dimgray",dimgray;"dodgerblue",dodgerblue;"firebrick",firebrick;"floralwhite",floralwhite;"forestgreen",forestgreen;"fuchsia",fuchsia;"gainsboro",gainsboro;"ghostwhite",ghostwhite;"gold",gold;"goldenrod",goldenrod;"gray",gray;"green",green;"greenyellow",greenyellow;"honeydew",honeydew;"hotpink",hotpink;"indianred",indianred;"indigo",indigo;"ivory",ivory;"khaki",khaki;"lavender",lavender;"lavenderblush",lavenderblush;"lawngreen",lawngreen;"lemonchiffon",lemonchiffon;"lightblue",lightblue;"lightcoral",lightcoral;"lightcyan",lightcyan;"lightgoldenrodyellow",lightgoldenrodyellow;"lightgray",lightgray;"lightgreen",lightgreen;"lightpink",lightpink;"lightsalmon",lightsalmon;"lightseagreen",lightseagreen;"lightskyblue",lightskyblue;"lightslategray",lightslategray;"lightsteelblue",lightsteelblue;"lightyellow",lightyellow;"lime",lime;"limegreen",limegreen;"linen",linen;"magenta",magenta;"maroon",maroon;"mediumaquamarine",mediumaquamarine;"mediumblue",mediumblue;"mediumorchid",mediumorchid;"mediumpurple",mediumpurple;"mediumseagreen",mediumseagreen;"mediumslateblue",mediumslateblue;"mediumspringgreen",mediumspringgreen;"mediumturquoise",mediumturquoise;"mediumvioletred",mediumvioletred;"midnightblue",midnightblue;"mintcream",mintcream;"mistyrose",mistyrose;"moccasin",moccasin;"navajowhite",navajowhite;"navy",navy;"oldlace",oldlace;"olive",olive;"olivedrab",olivedrab;"orange",orange;"orangered",orangered;"orchid",orchid;"palegoldenrod",palegoldenrod;"palegreen",palegreen;"paleturquoise",paleturquoise;"palevioletred",palevioletred;"papayawhip",papayawhip;"peachpuff",peachpuff;"peru",peru;"pink",pink;"plum",plum;"powderblue",powderblue;"purple",purple;"red",red;"rosybrown",rosybrown;"royalblue",royalblue;"saddlebrown",saddlebrown;"salmon",salmon;"sandybrown",sandybrown;"seagreen",seagreen;"seashell",seashell;"sienna",sienna;"silver",silver;"skyblue",skyblue;"slateblue",slateblue;"slategray",slategray;"snow",snow;"springgreen",springgreen;"steelblue",steelblue;"tan",tan;"teal",teal;"thistle",thistle;"tomato",tomato;"turquoise",turquoise;"violet",violet;"wheat",wheat;"white",white;"whitesmoke",whitesmoke;"yellow",yellow;"yellowgreen",yellowgreen;]letcolors=List.rev_appendcustomtable(* example c="#FFF" -> 0xFFF*)letint_of_hexc=trySome(int_of_string("0x"^(String.subc1(String.lengthc-1))))with|Failure_->(* int_of_string *)printddebug_error"Cannot extract hex integer from '0x%s'"c;None|e->raiseeletof_int24i=(ilsr16)land255,(ilsr8)land255,iland255letof_int12i=letr,g,b=(ilsr8)land15,(ilsr4)land15,iland15in(r*255/15),(g*255/15),(b*255/15)(* Convert a string of the form "grey" or "#FE01BC" or "#ABC" to a color code
(r,g,b) *)letfind_colorc=letl=String.lengthcinifl<>0&&c.[0]='#'thenmatchl,int_of_hexcwith|7,Somei->of_int24i|4,Somei->of_int12i|_->printddebug_error"Cannot extract color code from '%s'"c;greyelsetryList.assocccolorswith|Not_found->printddebug_error"Color '%s' unknown"c;greyletbg_color=find_colorTheme.bg_colorletbox_bg_color=find_colorTheme.box_bg_colorletcursor_color=find_colorTheme.cursor_colorletdisabled_bg_color=find_colorTheme.disabled_bgletdisabled_fg_color=find_colorTheme.disabled_fgletfaint_color=find_colorTheme.faint_colorlettext_color=ref(find_colorTheme.text_color)letsel_bg_color=find_colorTheme.sel_bg_colorletsel_fg_color=find_colorTheme.sel_fg_colorletlabel_color=find_colorTheme.label_colorletmenu_hl_color=find_colorTheme.menu_hl_colorletmenu_bg_color=find_colorTheme.menu_bg_color(* TODO put in VAR: *)letset_text_colorc=text_color:=c(* non linear increase of color *)(* f(x) = a - exp(-bx), f(0)=0.1, f(1)=1 => a = 1.1, b = - ln 0.1 = 2.3... *)letincr_colorx=min255(round(255.*.(1.1-.exp(-.2.3*.floatx/.255.))))letpale(r,g,b)=(incr_colorr,incr_colorg,incr_colorb)