ColorNames.lsl 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. string gHEX_STRING = "0123456789abcdef"; // hex string index **uses lower case
  2. // vector values of all known system colors
  3. list sysColorsVector =
  4. [
  5. <0.941176,0.972549,1.000000>,
  6. <0.980392,0.921569,0.843137>,
  7. <0.000000,1.000000,1.000000>,
  8. <0.498039,1.000000,0.831373>,
  9. <0.941176,1.000000,1.000000>,
  10. <0.960784,0.960784,0.862745>,
  11. <1.000000,0.894118,0.768627>,
  12. <0.000000,0.000000,0.000000>,
  13. <1.000000,0.921569,0.803922>,
  14. <0.000000,0.000000,1.000000>,
  15. <0.541176,0.168627,0.886275>,
  16. <0.647059,0.164706,0.164706>,
  17. <0.870588,0.721569,0.529412>,
  18. <0.372549,0.619608,0.627451>,
  19. <0.498039,1.000000,0.000000>,
  20. <0.823529,0.411765,0.117647>,
  21. <1.000000,0.498039,0.313725>,
  22. <0.392157,0.584314,0.929412>,
  23. <1.000000,0.972549,0.862745>,
  24. <0.862745,0.078431,0.235294>,
  25. <0.000000,1.000000,1.000000>,
  26. <0.000000,0.000000,0.545098>,
  27. <0.000000,0.545098,0.545098>,
  28. <0.721569,0.525490,0.043137>,
  29. <0.662745,0.662745,0.662745>,
  30. <0.000000,0.392157,0.000000>,
  31. <0.741176,0.717647,0.419608>,
  32. <0.545098,0.000000,0.545098>,
  33. <0.333333,0.419608,0.184314>,
  34. <1.000000,0.549020,0.000000>,
  35. <0.600000,0.196078,0.800000>,
  36. <0.545098,0.000000,0.000000>,
  37. <0.913725,0.588235,0.478431>,
  38. <0.560784,0.737255,0.545098>,
  39. <0.282353,0.239216,0.545098>,
  40. <0.184314,0.309804,0.309804>,
  41. <0.000000,0.807843,0.819608>,
  42. <0.580392,0.000000,0.827451>,
  43. <1.000000,0.078431,0.576471>,
  44. <0.000000,0.749020,1.000000>,
  45. <0.411765,0.411765,0.411765>,
  46. <0.117647,0.564706,1.000000>,
  47. <0.698039,0.133333,0.133333>,
  48. <1.000000,0.980392,0.941176>,
  49. <0.133333,0.545098,0.133333>,
  50. <1.000000,0.000000,1.000000>,
  51. <0.862745,0.862745,0.862745>,
  52. <0.972549,0.972549,1.000000>,
  53. <1.000000,0.843137,0.000000>,
  54. <0.854902,0.647059,0.125490>,
  55. <0.501961,0.501961,0.501961>,
  56. <0.000000,0.501961,0.000000>,
  57. <0.678431,1.000000,0.184314>,
  58. <0.941176,1.000000,0.941176>,
  59. <1.000000,0.411765,0.705882>,
  60. <0.803922,0.360784,0.360784>,
  61. <0.294118,0.000000,0.509804>,
  62. <1.000000,1.000000,0.941176>,
  63. <0.941176,0.901961,0.549020>,
  64. <0.901961,0.901961,0.980392>,
  65. <1.000000,0.941176,0.960784>,
  66. <0.486275,0.988235,0.000000>,
  67. <1.000000,0.980392,0.803922>,
  68. <0.678431,0.847059,0.901961>,
  69. <0.941176,0.501961,0.501961>,
  70. <0.878431,1.000000,1.000000>,
  71. <0.980392,0.980392,0.823529>,
  72. <0.827451,0.827451,0.827451>,
  73. <0.564706,0.933333,0.564706>,
  74. <1.000000,0.713725,0.756863>,
  75. <1.000000,0.627451,0.478431>,
  76. <0.125490,0.698039,0.666667>,
  77. <0.529412,0.807843,0.980392>,
  78. <0.466667,0.533333,0.600000>,
  79. <0.690196,0.768627,0.870588>,
  80. <1.000000,1.000000,0.878431>,
  81. <0.000000,1.000000,0.000000>,
  82. <0.196078,0.803922,0.196078>,
  83. <0.980392,0.941176,0.901961>,
  84. <1.000000,0.000000,1.000000>,
  85. <0.501961,0.000000,0.000000>,
  86. <0.400000,0.803922,0.666667>,
  87. <0.000000,0.000000,0.803922>,
  88. <0.729412,0.333333,0.827451>,
  89. <0.576471,0.439216,0.858824>,
  90. <0.235294,0.701961,0.443137>,
  91. <0.482353,0.407843,0.933333>,
  92. <0.000000,0.980392,0.603922>,
  93. <0.282353,0.819608,0.800000>,
  94. <0.780392,0.082353,0.521569>,
  95. <0.098039,0.098039,0.439216>,
  96. <0.960784,1.000000,0.980392>,
  97. <1.000000,0.894118,0.882353>,
  98. <1.000000,0.894118,0.709804>,
  99. <1.000000,0.870588,0.678431>,
  100. <0.000000,0.000000,0.501961>,
  101. <0.992157,0.960784,0.901961>,
  102. <0.501961,0.501961,0.000000>,
  103. <0.419608,0.556863,0.137255>,
  104. <1.000000,0.647059,0.000000>,
  105. <1.000000,0.270588,0.000000>,
  106. <0.854902,0.439216,0.839216>,
  107. <0.933333,0.909804,0.666667>,
  108. <0.596078,0.984314,0.596078>,
  109. <0.686275,0.933333,0.933333>,
  110. <0.858824,0.439216,0.576471>,
  111. <1.000000,0.937255,0.835294>,
  112. <1.000000,0.854902,0.725490>,
  113. <0.803922,0.521569,0.247059>,
  114. <1.000000,0.752941,0.796078>,
  115. <0.866667,0.627451,0.866667>,
  116. <0.690196,0.878431,0.901961>,
  117. <0.501961,0.000000,0.501961>,
  118. <1.000000,0.000000,0.000000>,
  119. <0.737255,0.560784,0.560784>,
  120. <0.254902,0.411765,0.882353>,
  121. <0.545098,0.270588,0.074510>,
  122. <0.980392,0.501961,0.447059>,
  123. <0.956863,0.643137,0.376471>,
  124. <0.180392,0.545098,0.341176>,
  125. <1.000000,0.960784,0.933333>,
  126. <0.627451,0.321569,0.176471>,
  127. <0.752941,0.752941,0.752941>,
  128. <0.529412,0.807843,0.921569>,
  129. <0.415686,0.352941,0.803922>,
  130. <0.439216,0.501961,0.564706>,
  131. <1.000000,0.980392,0.980392>,
  132. <0.000000,1.000000,0.498039>,
  133. <0.274510,0.509804,0.705882>,
  134. <0.823529,0.705882,0.549020>,
  135. <0.000000,0.501961,0.501961>,
  136. <0.847059,0.749020,0.847059>,
  137. <1.000000,0.388235,0.278431>,
  138. <1.000000,1.000000,1.000000>,
  139. <0.250980,0.878431,0.815686>,
  140. <0.933333,0.509804,0.933333>,
  141. <0.960784,0.870588,0.701961>,
  142. <1.000000,1.000000,1.000000>,
  143. <0.960784,0.960784,0.960784>,
  144. <1.000000,1.000000,0.000000>,
  145. <0.603922,0.803922,0.196078>
  146. ];
  147. // names of all known system colors
  148. list sysColorsName =
  149. [
  150. "AliceBlue",
  151. "AntiqueWhite",
  152. "Aqua",
  153. "Aquamarine",
  154. "Azure",
  155. "Beige",
  156. "Bisque",
  157. "Black",
  158. "BlanchedAlmond",
  159. "Blue",
  160. "BlueViolet",
  161. "Brown",
  162. "BurlyWood",
  163. "CadetBlue",
  164. "Chartreuse",
  165. "Chocolate",
  166. "Coral",
  167. "CornflowerBlue",
  168. "Cornsilk",
  169. "Crimson",
  170. "Cyan",
  171. "DarkBlue",
  172. "DarkCyan",
  173. "DarkGoldenrod",
  174. "DarkGray",
  175. "DarkGreen",
  176. "DarkKhaki",
  177. "DarkMagenta",
  178. "DarkOliveGreen",
  179. "DarkOrange",
  180. "DarkOrchid",
  181. "DarkRed",
  182. "DarkSalmon",
  183. "DarkSeaGreen",
  184. "DarkSlateBlue",
  185. "DarkSlateGray",
  186. "DarkTurquoise",
  187. "DarkViolet",
  188. "DeepPink",
  189. "DeepSkyBlue",
  190. "DimGray",
  191. "DodgerBlue",
  192. "Firebrick",
  193. "FloralWhite",
  194. "ForestGreen",
  195. "Fuchsia",
  196. "Gainsboro",
  197. "GhostWhite",
  198. "Gold",
  199. "Goldenrod",
  200. "Gray",
  201. "Green",
  202. "GreenYellow",
  203. "Honeydew",
  204. "HotPink",
  205. "IndianRed",
  206. "Indigo",
  207. "Ivory",
  208. "Khaki",
  209. "Lavender",
  210. "LavenderBlush",
  211. "LawnGreen",
  212. "LemonChiffon",
  213. "LightBlue",
  214. "LightCoral",
  215. "LightCyan",
  216. "LightGoldenrodYellow",
  217. "LightGray",
  218. "LightGreen",
  219. "LightPink",
  220. "LightSalmon",
  221. "LightSeaGreen",
  222. "LightSkyBlue",
  223. "LightSlateGray",
  224. "LightSteelBlue",
  225. "LightYellow",
  226. "Lime",
  227. "LimeGreen",
  228. "Linen",
  229. "Magenta",
  230. "Maroon",
  231. "MediumAquamarine",
  232. "MediumBlue",
  233. "MediumOrchid",
  234. "MediumPurple",
  235. "MediumSeaGreen",
  236. "MediumSlateBlue",
  237. "MediumSpringGreen",
  238. "MediumTurquoise",
  239. "MediumVioletRed",
  240. "MidnightBlue",
  241. "MintCream",
  242. "MistyRose",
  243. "Moccasin",
  244. "NavajoWhite",
  245. "Navy",
  246. "OldLace",
  247. "Olive",
  248. "OliveDrab",
  249. "Orange",
  250. "OrangeRed",
  251. "Orchid",
  252. "PaleGoldenrod",
  253. "PaleGreen",
  254. "PaleTurquoise",
  255. "PaleVioletRed",
  256. "PapayaWhip",
  257. "PeachPuff",
  258. "Peru",
  259. "Pink",
  260. "Plum",
  261. "PowderBlue",
  262. "Purple",
  263. "Red",
  264. "RosyBrown",
  265. "RoyalBlue",
  266. "SaddleBrown",
  267. "Salmon",
  268. "SandyBrown",
  269. "SeaGreen",
  270. "SeaShell",
  271. "Sienna",
  272. "Silver",
  273. "SkyBlue",
  274. "SlateBlue",
  275. "SlateGray",
  276. "Snow",
  277. "SpringGreen",
  278. "SteelBlue",
  279. "Tan",
  280. "Teal",
  281. "Thistle",
  282. "Tomato",
  283. "Transparent",
  284. "Turquoise",
  285. "Violet",
  286. "Wheat",
  287. "White",
  288. "WhiteSmoke",
  289. "Yellow",
  290. "YellowGreen"
  291. ];
  292. //////// test a string for valid hex characters ////////
  293. integer is_hex(string test)
  294. {
  295. integer i;
  296. integer count = llStringLength(test);
  297. // if any character is not a hex string then test is not a hex string
  298. for (i=0;i<count;i++)
  299. if ( !~llSubStringIndex(gHEX_STRING, llGetSubString(test, i, i)) )
  300. return FALSE;
  301. // all characters are hex - test is valid
  302. return TRUE;
  303. }
  304. //////// return decimal string from hex string ////////
  305. string hex2dec(string hexString)
  306. {
  307. // check for valid hex string
  308. if (!is_hex(hexString))
  309. return "invalid";
  310. // 32 bit integers are 8 hex bites long
  311. integer bites = llStringLength(hexString);
  312. if (llStringLength(hexString) > 8)
  313. return "overflow";
  314. // calculate value of hex string
  315. integer i;
  316. integer decimal;
  317. for (i=0;i<bites;i++)
  318. decimal = (decimal << (4*i)) + llSubStringIndex(gHEX_STRING, llGetSubString(hexString, i, i));
  319. return (string) decimal;
  320. }
  321. //////// return vector string from html color code ////////
  322. string HTML2Vector (string HTMLColorCode)
  323. {
  324. // html color code format starts with '#' - '#ffffff' = white
  325. if (llGetSubString(HTMLColorCode, 0, 0) != "#")
  326. return "invalid";
  327. // require full expression
  328. if (llStringLength(HTMLColorCode) < 7)
  329. return "invalid";
  330. // get decimal values for each rgb pair
  331. string r = hex2dec(llGetSubString(HTMLColorCode, 1, 2));
  332. string g = hex2dec(llGetSubString(HTMLColorCode, 3, 4));
  333. string b = hex2dec(llGetSubString(HTMLColorCode, 5, 6));
  334. // hex2dec returns 'invalid' if string is not a valid hex
  335. if ((r == "invalid") | (g == "invalid") | (b == "invalid"))
  336. return "invalid";
  337. // convert values to color vector
  338. return (string)(<(float)r / 255, (float)g / 255, (float)b / 255>);
  339. }
  340. //////// find the best color match for osDraw() functions from any given HTML code ////////
  341. string HTML2SysColorBestMatch(string HTMLColorCode)
  342. {
  343. // convert HTML code to vector string
  344. string ColorVector = HTML2Vector(HTMLColorCode);
  345. if ((ColorVector == "invalid") || (ColorVector == "overflow"))
  346. return ColorVector;
  347. // type cast vector string to a vector
  348. vector userColor = llList2Vector([ColorVector], 0);
  349. // start with a large variance and narrow down
  350. float variance = 2.0;
  351. float test;
  352. integer index;
  353. integer count = llGetListLength(sysColorsVector);
  354. integer i;
  355. for (i=0;i<count;i++)
  356. {
  357. test = llVecMag(userColor - llList2Vector(sysColorsVector, i));
  358. if (test < variance)
  359. {
  360. variance = test;
  361. index = i;
  362. }
  363. }
  364. return llList2String(sysColorsName, index);
  365. }
  366. default
  367. {
  368. on_rez(integer param)
  369. {
  370. llResetScript();
  371. }
  372. state_entry()
  373. {
  374. integer handle = llListen(10, "", llGetOwner(), "");
  375. llOwnerSay("Say any HTML color code on channel 10 (e.g. /10 #1a2bef) to get the system color best match for osDraw functions.");
  376. }
  377. listen(integer channel, string name, key id, string message)
  378. {
  379. llOwnerSay("The best match for " + message + " is " + HTML2SysColorBestMatch(message) + ".");
  380. }
  381. }