1 /*-----------------------------------------------------------------------------
3 *-----------------------------------------------------------------------------
4 * Copyright (c) 2004-2005 Kazuo Ishii <k-ishii@wb4.so-net.ne.jp>
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 *---------------------------------------------------------------------------*/
25 static bool lookupColor(const char *str, COLORREF& ret)
31 static const COLOR colors[] = {
32 { RGB(0xF0,0xF8,0xFF), "alice blue" },
33 { RGB(0xF0,0xF8,0xFF), "AliceBlue" },
34 { RGB(0xFA,0xEB,0xD7), "antique white" },
35 { RGB(0xFA,0xEB,0xD7), "AntiqueWhite" },
36 { RGB(0xFF,0xEF,0xDB), "AntiqueWhite1" },
37 { RGB(0xEE,0xDF,0xCC), "AntiqueWhite2" },
38 { RGB(0xCD,0xC0,0xB0), "AntiqueWhite3" },
39 { RGB(0x8B,0x83,0x78), "AntiqueWhite4" },
40 { RGB(0x7F,0xFF,0xD4), "aquamarine" },
41 { RGB(0x7F,0xFF,0xD4), "aquamarine1" },
42 { RGB(0x76,0xEE,0xC6), "aquamarine2" },
43 { RGB(0x66,0xCD,0xAA), "aquamarine3" },
44 { RGB(0x45,0x8B,0x74), "aquamarine4" },
45 { RGB(0xF0,0xFF,0xFF), "azure" },
46 { RGB(0xF0,0xFF,0xFF), "azure1" },
47 { RGB(0xE0,0xEE,0xEE), "azure2" },
48 { RGB(0xC1,0xCD,0xCD), "azure3" },
49 { RGB(0x83,0x8B,0x8B), "azure4" },
50 { RGB(0xF5,0xF5,0xDC), "beige" },
51 { RGB(0xFF,0xE4,0xC4), "bisque" },
52 { RGB(0xFF,0xE4,0xC4), "bisque1" },
53 { RGB(0xEE,0xD5,0xB7), "bisque2" },
54 { RGB(0xCD,0xB7,0x9E), "bisque3" },
55 { RGB(0x8B,0x7D,0x6B), "bisque4" },
56 { RGB(0x00,0x00,0x01), "black" },
57 { RGB(0xFF,0xEB,0xCD), "blanched almond" },
58 { RGB(0xFF,0xEB,0xCD), "BlanchedAlmond" },
59 { RGB(0x00,0x00,0xFF), "blue" },
60 { RGB(0x8A,0x2B,0xE2), "blue violet" },
61 { RGB(0x00,0x00,0xFF), "blue1" },
62 { RGB(0x00,0x00,0xEE), "blue2" },
63 { RGB(0x00,0x00,0xCD), "blue3" },
64 { RGB(0x00,0x00,0x8B), "blue4" },
65 { RGB(0x8A,0x2B,0xE2), "BlueViolet" },
66 { RGB(0xA5,0x2A,0x2A), "brown" },
67 { RGB(0xFF,0x40,0x40), "brown1" },
68 { RGB(0xEE,0x3B,0x3B), "brown2" },
69 { RGB(0xCD,0x33,0x33), "brown3" },
70 { RGB(0x8B,0x23,0x23), "brown4" },
71 { RGB(0xDE,0xB8,0x87), "burlywood" },
72 { RGB(0xFF,0xD3,0x9B), "burlywood1" },
73 { RGB(0xEE,0xC5,0x91), "burlywood2" },
74 { RGB(0xCD,0xAA,0x7D), "burlywood3" },
75 { RGB(0x8B,0x73,0x55), "burlywood4" },
76 { RGB(0x5F,0x9E,0xA0), "cadet blue" },
77 { RGB(0x5F,0x9E,0xA0), "CadetBlue" },
78 { RGB(0x98,0xF5,0xFF), "CadetBlue1" },
79 { RGB(0x8E,0xE5,0xEE), "CadetBlue2" },
80 { RGB(0x7A,0xC5,0xCD), "CadetBlue3" },
81 { RGB(0x53,0x86,0x8B), "CadetBlue4" },
82 { RGB(0x7F,0xFF,0x00), "chartreuse" },
83 { RGB(0x7F,0xFF,0x00), "chartreuse1" },
84 { RGB(0x76,0xEE,0x00), "chartreuse2" },
85 { RGB(0x66,0xCD,0x00), "chartreuse3" },
86 { RGB(0x45,0x8B,0x00), "chartreuse4" },
87 { RGB(0xD2,0x69,0x1E), "chocolate" },
88 { RGB(0xFF,0x7F,0x24), "chocolate1" },
89 { RGB(0xEE,0x76,0x21), "chocolate2" },
90 { RGB(0xCD,0x66,0x1D), "chocolate3" },
91 { RGB(0x8B,0x45,0x13), "chocolate4" },
92 { RGB(0xFF,0x7F,0x50), "coral" },
93 { RGB(0xFF,0x72,0x56), "coral1" },
94 { RGB(0xEE,0x6A,0x50), "coral2" },
95 { RGB(0xCD,0x5B,0x45), "coral3" },
96 { RGB(0x8B,0x3E,0x2F), "coral4" },
97 { RGB(0x64,0x95,0xED), "cornflower blue" },
98 { RGB(0x64,0x95,0xED), "CornflowerBlue" },
99 { RGB(0xFF,0xF8,0xDC), "cornsilk" },
100 { RGB(0xFF,0xF8,0xDC), "cornsilk1" },
101 { RGB(0xEE,0xE8,0xCD), "cornsilk2" },
102 { RGB(0xCD,0xC8,0xB1), "cornsilk3" },
103 { RGB(0x8B,0x88,0x78), "cornsilk4" },
104 { RGB(0x00,0xFF,0xFF), "cyan" },
105 { RGB(0x00,0xFF,0xFF), "cyan1" },
106 { RGB(0x00,0xEE,0xEE), "cyan2" },
107 { RGB(0x00,0xCD,0xCD), "cyan3" },
108 { RGB(0x00,0x8B,0x8B), "cyan4" },
109 { RGB(0xB8,0x86,0x0B), "dark goldenrod" },
110 { RGB(0x00,0x64,0x00), "dark green" },
111 { RGB(0xBD,0xB7,0x6B), "dark khaki" },
112 { RGB(0x55,0x6B,0x2F), "dark olive green" },
113 { RGB(0xFF,0x8C,0x00), "dark orange" },
114 { RGB(0x99,0x32,0xCC), "dark orchid" },
115 { RGB(0xE9,0x96,0x7A), "dark salmon" },
116 { RGB(0x8F,0xBC,0x8F), "dark sea green" },
117 { RGB(0x48,0x3D,0x8B), "dark slate blue" },
118 { RGB(0x2F,0x4F,0x4F), "dark slate gray" },
119 { RGB(0x2F,0x4F,0x4F), "dark slate grey" },
120 { RGB(0x00,0xCE,0xD1), "dark turquoise" },
121 { RGB(0x94,0x00,0xD3), "dark violet" },
122 { RGB(0xB8,0x86,0x0B), "DarkGoldenrod" },
123 { RGB(0xFF,0xB9,0x0F), "DarkGoldenrod1" },
124 { RGB(0xEE,0xAD,0x0E), "DarkGoldenrod2" },
125 { RGB(0xCD,0x95,0x0C), "DarkGoldenrod3" },
126 { RGB(0x8B,0x65,0x08), "DarkGoldenrod4" },
127 { RGB(0x00,0x64,0x00), "DarkGreen" },
128 { RGB(0xBD,0xB7,0x6B), "DarkKhaki" },
129 { RGB(0x55,0x6B,0x2F), "DarkOliveGreen" },
130 { RGB(0xCA,0xFF,0x70), "DarkOliveGreen1" },
131 { RGB(0xBC,0xEE,0x68), "DarkOliveGreen2" },
132 { RGB(0xA2,0xCD,0x5A), "DarkOliveGreen3" },
133 { RGB(0x6E,0x8B,0x3D), "DarkOliveGreen4" },
134 { RGB(0xFF,0x8C,0x00), "DarkOrange" },
135 { RGB(0xFF,0x7F,0x00), "DarkOrange1" },
136 { RGB(0xEE,0x76,0x00), "DarkOrange2" },
137 { RGB(0xCD,0x66,0x00), "DarkOrange3" },
138 { RGB(0x8B,0x45,0x00), "DarkOrange4" },
139 { RGB(0x99,0x32,0xCC), "DarkOrchid" },
140 { RGB(0xBF,0x3E,0xFF), "DarkOrchid1" },
141 { RGB(0xB2,0x3A,0xEE), "DarkOrchid2" },
142 { RGB(0x9A,0x32,0xCD), "DarkOrchid3" },
143 { RGB(0x68,0x22,0x8B), "DarkOrchid4" },
144 { RGB(0xE9,0x96,0x7A), "DarkSalmon" },
145 { RGB(0x8F,0xBC,0x8F), "DarkSeaGreen" },
146 { RGB(0xC1,0xFF,0xC1), "DarkSeaGreen1" },
147 { RGB(0xB4,0xEE,0xB4), "DarkSeaGreen2" },
148 { RGB(0x9B,0xCD,0x9B), "DarkSeaGreen3" },
149 { RGB(0x69,0x8B,0x69), "DarkSeaGreen4" },
150 { RGB(0x48,0x3D,0x8B), "DarkSlateBlue" },
151 { RGB(0x2F,0x4F,0x4F), "DarkSlateGray" },
152 { RGB(0x97,0xFF,0xFF), "DarkSlateGray1" },
153 { RGB(0x8D,0xEE,0xEE), "DarkSlateGray2" },
154 { RGB(0x79,0xCD,0xCD), "DarkSlateGray3" },
155 { RGB(0x52,0x8B,0x8B), "DarkSlateGray4" },
156 { RGB(0x2F,0x4F,0x4F), "DarkSlateGrey" },
157 { RGB(0x00,0xCE,0xD1), "DarkTurquoise" },
158 { RGB(0x94,0x00,0xD3), "DarkViolet" },
159 { RGB(0xFF,0x14,0x93), "deep pink" },
160 { RGB(0x00,0xBF,0xFF), "deep sky blue" },
161 { RGB(0xFF,0x14,0x93), "DeepPink" },
162 { RGB(0xFF,0x14,0x93), "DeepPink1" },
163 { RGB(0xEE,0x12,0x89), "DeepPink2" },
164 { RGB(0xCD,0x10,0x76), "DeepPink3" },
165 { RGB(0x8B,0x0A,0x50), "DeepPink4" },
166 { RGB(0x00,0xBF,0xFF), "DeepSkyBlue" },
167 { RGB(0x00,0xBF,0xFF), "DeepSkyBlue1" },
168 { RGB(0x00,0xB2,0xEE), "DeepSkyBlue2" },
169 { RGB(0x00,0x9A,0xCD), "DeepSkyBlue3" },
170 { RGB(0x00,0x68,0x8B), "DeepSkyBlue4" },
171 { RGB(0x69,0x69,0x69), "dim gray" },
172 { RGB(0x69,0x69,0x69), "dim grey" },
173 { RGB(0x69,0x69,0x69), "DimGray" },
174 { RGB(0x69,0x69,0x69), "DimGrey" },
175 { RGB(0x1E,0x90,0xFF), "dodger blue" },
176 { RGB(0x1E,0x90,0xFF), "DodgerBlue" },
177 { RGB(0x1E,0x90,0xFF), "DodgerBlue1" },
178 { RGB(0x1C,0x86,0xEE), "DodgerBlue2" },
179 { RGB(0x18,0x74,0xCD), "DodgerBlue3" },
180 { RGB(0x10,0x4E,0x8B), "DodgerBlue4" },
181 { RGB(0xB2,0x22,0x22), "firebrick" },
182 { RGB(0xFF,0x30,0x30), "firebrick1" },
183 { RGB(0xEE,0x2C,0x2C), "firebrick2" },
184 { RGB(0xCD,0x26,0x26), "firebrick3" },
185 { RGB(0x8B,0x1A,0x1A), "firebrick4" },
186 { RGB(0xFF,0xFA,0xF0), "floral white" },
187 { RGB(0xFF,0xFA,0xF0), "FloralWhite" },
188 { RGB(0x22,0x8B,0x22), "forest green" },
189 { RGB(0x22,0x8B,0x22), "ForestGreen" },
190 { RGB(0xDC,0xDC,0xDC), "gainsboro" },
191 { RGB(0xF8,0xF8,0xFF), "ghost white" },
192 { RGB(0xF8,0xF8,0xFF), "GhostWhite" },
193 { RGB(0xFF,0xD7,0x00), "gold" },
194 { RGB(0xFF,0xD7,0x00), "gold1" },
195 { RGB(0xEE,0xC9,0x00), "gold2" },
196 { RGB(0xCD,0xAD,0x00), "gold3" },
197 { RGB(0x8B,0x75,0x00), "gold4" },
198 { RGB(0xDA,0xA5,0x20), "goldenrod" },
199 { RGB(0xFF,0xC1,0x25), "goldenrod1" },
200 { RGB(0xEE,0xB4,0x22), "goldenrod2" },
201 { RGB(0xCD,0x9B,0x1D), "goldenrod3" },
202 { RGB(0x8B,0x69,0x14), "goldenrod4" },
203 { RGB(0xBE,0xBE,0xBE), "gray" },
204 { RGB(0x00,0x00,0x01), "gray0" },
205 { RGB(0x03,0x03,0x03), "gray1" },
206 { RGB(0x1A,0x1A,0x1A), "gray10" },
207 { RGB(0xFF,0xFF,0xFF), "gray100" },
208 { RGB(0x1C,0x1C,0x1C), "gray11" },
209 { RGB(0x1F,0x1F,0x1F), "gray12" },
210 { RGB(0x21,0x21,0x21), "gray13" },
211 { RGB(0x24,0x24,0x24), "gray14" },
212 { RGB(0x26,0x26,0x26), "gray15" },
213 { RGB(0x29,0x29,0x29), "gray16" },
214 { RGB(0x2B,0x2B,0x2B), "gray17" },
215 { RGB(0x2E,0x2E,0x2E), "gray18" },
216 { RGB(0x30,0x30,0x30), "gray19" },
217 { RGB(0x05,0x05,0x05), "gray2" },
218 { RGB(0x33,0x33,0x33), "gray20" },
219 { RGB(0x36,0x36,0x36), "gray21" },
220 { RGB(0x38,0x38,0x38), "gray22" },
221 { RGB(0x3B,0x3B,0x3B), "gray23" },
222 { RGB(0x3D,0x3D,0x3D), "gray24" },
223 { RGB(0x40,0x40,0x40), "gray25" },
224 { RGB(0x42,0x42,0x42), "gray26" },
225 { RGB(0x45,0x45,0x45), "gray27" },
226 { RGB(0x47,0x47,0x47), "gray28" },
227 { RGB(0x4A,0x4A,0x4A), "gray29" },
228 { RGB(0x08,0x08,0x08), "gray3" },
229 { RGB(0x4D,0x4D,0x4D), "gray30" },
230 { RGB(0x4F,0x4F,0x4F), "gray31" },
231 { RGB(0x52,0x52,0x52), "gray32" },
232 { RGB(0x54,0x54,0x54), "gray33" },
233 { RGB(0x57,0x57,0x57), "gray34" },
234 { RGB(0x59,0x59,0x59), "gray35" },
235 { RGB(0x5C,0x5C,0x5C), "gray36" },
236 { RGB(0x5E,0x5E,0x5E), "gray37" },
237 { RGB(0x61,0x61,0x61), "gray38" },
238 { RGB(0x63,0x63,0x63), "gray39" },
239 { RGB(0x0A,0x0A,0x0A), "gray4" },
240 { RGB(0x66,0x66,0x66), "gray40" },
241 { RGB(0x69,0x69,0x69), "gray41" },
242 { RGB(0x6B,0x6B,0x6B), "gray42" },
243 { RGB(0x6E,0x6E,0x6E), "gray43" },
244 { RGB(0x70,0x70,0x70), "gray44" },
245 { RGB(0x73,0x73,0x73), "gray45" },
246 { RGB(0x75,0x75,0x75), "gray46" },
247 { RGB(0x78,0x78,0x78), "gray47" },
248 { RGB(0x7A,0x7A,0x7A), "gray48" },
249 { RGB(0x7D,0x7D,0x7D), "gray49" },
250 { RGB(0x0D,0x0D,0x0D), "gray5" },
251 { RGB(0x7F,0x7F,0x7F), "gray50" },
252 { RGB(0x82,0x82,0x82), "gray51" },
253 { RGB(0x85,0x85,0x85), "gray52" },
254 { RGB(0x87,0x87,0x87), "gray53" },
255 { RGB(0x8A,0x8A,0x8A), "gray54" },
256 { RGB(0x8C,0x8C,0x8C), "gray55" },
257 { RGB(0x8F,0x8F,0x8F), "gray56" },
258 { RGB(0x91,0x91,0x91), "gray57" },
259 { RGB(0x94,0x94,0x94), "gray58" },
260 { RGB(0x96,0x96,0x96), "gray59" },
261 { RGB(0x0F,0x0F,0x0F), "gray6" },
262 { RGB(0x99,0x99,0x99), "gray60" },
263 { RGB(0x9C,0x9C,0x9C), "gray61" },
264 { RGB(0x9E,0x9E,0x9E), "gray62" },
265 { RGB(0xA1,0xA1,0xA1), "gray63" },
266 { RGB(0xA3,0xA3,0xA3), "gray64" },
267 { RGB(0xA6,0xA6,0xA6), "gray65" },
268 { RGB(0xA8,0xA8,0xA8), "gray66" },
269 { RGB(0xAB,0xAB,0xAB), "gray67" },
270 { RGB(0xAD,0xAD,0xAD), "gray68" },
271 { RGB(0xB0,0xB0,0xB0), "gray69" },
272 { RGB(0x12,0x12,0x12), "gray7" },
273 { RGB(0xB3,0xB3,0xB3), "gray70" },
274 { RGB(0xB5,0xB5,0xB5), "gray71" },
275 { RGB(0xB8,0xB8,0xB8), "gray72" },
276 { RGB(0xBA,0xBA,0xBA), "gray73" },
277 { RGB(0xBD,0xBD,0xBD), "gray74" },
278 { RGB(0xBF,0xBF,0xBF), "gray75" },
279 { RGB(0xC2,0xC2,0xC2), "gray76" },
280 { RGB(0xC4,0xC4,0xC4), "gray77" },
281 { RGB(0xC7,0xC7,0xC7), "gray78" },
282 { RGB(0xC9,0xC9,0xC9), "gray79" },
283 { RGB(0x14,0x14,0x14), "gray8" },
284 { RGB(0xCC,0xCC,0xCC), "gray80" },
285 { RGB(0xCF,0xCF,0xCF), "gray81" },
286 { RGB(0xD1,0xD1,0xD1), "gray82" },
287 { RGB(0xD4,0xD4,0xD4), "gray83" },
288 { RGB(0xD6,0xD6,0xD6), "gray84" },
289 { RGB(0xD9,0xD9,0xD9), "gray85" },
290 { RGB(0xDB,0xDB,0xDB), "gray86" },
291 { RGB(0xDE,0xDE,0xDE), "gray87" },
292 { RGB(0xE0,0xE0,0xE0), "gray88" },
293 { RGB(0xE3,0xE3,0xE3), "gray89" },
294 { RGB(0x17,0x17,0x17), "gray9" },
295 { RGB(0xE5,0xE5,0xE5), "gray90" },
296 { RGB(0xE8,0xE8,0xE8), "gray91" },
297 { RGB(0xEB,0xEB,0xEB), "gray92" },
298 { RGB(0xED,0xED,0xED), "gray93" },
299 { RGB(0xF0,0xF0,0xF0), "gray94" },
300 { RGB(0xF2,0xF2,0xF2), "gray95" },
301 { RGB(0xF5,0xF5,0xF5), "gray96" },
302 { RGB(0xF7,0xF7,0xF7), "gray97" },
303 { RGB(0xFA,0xFA,0xFA), "gray98" },
304 { RGB(0xFC,0xFC,0xFC), "gray99" },
305 { RGB(0x00,0xFF,0x00), "green" },
306 { RGB(0xAD,0xFF,0x2F), "green yellow" },
307 { RGB(0x00,0xFF,0x00), "green1" },
308 { RGB(0x00,0xEE,0x00), "green2" },
309 { RGB(0x00,0xCD,0x00), "green3" },
310 { RGB(0x00,0x8B,0x00), "green4" },
311 { RGB(0xAD,0xFF,0x2F), "GreenYellow" },
312 { RGB(0xBE,0xBE,0xBE), "grey" },
313 { RGB(0x00,0x00,0x01), "grey0" },
314 { RGB(0x03,0x03,0x03), "grey1" },
315 { RGB(0x1A,0x1A,0x1A), "grey10" },
316 { RGB(0xFF,0xFF,0xFF), "grey100" },
317 { RGB(0x1C,0x1C,0x1C), "grey11" },
318 { RGB(0x1F,0x1F,0x1F), "grey12" },
319 { RGB(0x21,0x21,0x21), "grey13" },
320 { RGB(0x24,0x24,0x24), "grey14" },
321 { RGB(0x26,0x26,0x26), "grey15" },
322 { RGB(0x29,0x29,0x29), "grey16" },
323 { RGB(0x2B,0x2B,0x2B), "grey17" },
324 { RGB(0x2E,0x2E,0x2E), "grey18" },
325 { RGB(0x30,0x30,0x30), "grey19" },
326 { RGB(0x05,0x05,0x05), "grey2" },
327 { RGB(0x33,0x33,0x33), "grey20" },
328 { RGB(0x36,0x36,0x36), "grey21" },
329 { RGB(0x38,0x38,0x38), "grey22" },
330 { RGB(0x3B,0x3B,0x3B), "grey23" },
331 { RGB(0x3D,0x3D,0x3D), "grey24" },
332 { RGB(0x40,0x40,0x40), "grey25" },
333 { RGB(0x42,0x42,0x42), "grey26" },
334 { RGB(0x45,0x45,0x45), "grey27" },
335 { RGB(0x47,0x47,0x47), "grey28" },
336 { RGB(0x4A,0x4A,0x4A), "grey29" },
337 { RGB(0x08,0x08,0x08), "grey3" },
338 { RGB(0x4D,0x4D,0x4D), "grey30" },
339 { RGB(0x4F,0x4F,0x4F), "grey31" },
340 { RGB(0x52,0x52,0x52), "grey32" },
341 { RGB(0x54,0x54,0x54), "grey33" },
342 { RGB(0x57,0x57,0x57), "grey34" },
343 { RGB(0x59,0x59,0x59), "grey35" },
344 { RGB(0x5C,0x5C,0x5C), "grey36" },
345 { RGB(0x5E,0x5E,0x5E), "grey37" },
346 { RGB(0x61,0x61,0x61), "grey38" },
347 { RGB(0x63,0x63,0x63), "grey39" },
348 { RGB(0x0A,0x0A,0x0A), "grey4" },
349 { RGB(0x66,0x66,0x66), "grey40" },
350 { RGB(0x69,0x69,0x69), "grey41" },
351 { RGB(0x6B,0x6B,0x6B), "grey42" },
352 { RGB(0x6E,0x6E,0x6E), "grey43" },
353 { RGB(0x70,0x70,0x70), "grey44" },
354 { RGB(0x73,0x73,0x73), "grey45" },
355 { RGB(0x75,0x75,0x75), "grey46" },
356 { RGB(0x78,0x78,0x78), "grey47" },
357 { RGB(0x7A,0x7A,0x7A), "grey48" },
358 { RGB(0x7D,0x7D,0x7D), "grey49" },
359 { RGB(0x0D,0x0D,0x0D), "grey5" },
360 { RGB(0x7F,0x7F,0x7F), "grey50" },
361 { RGB(0x82,0x82,0x82), "grey51" },
362 { RGB(0x85,0x85,0x85), "grey52" },
363 { RGB(0x87,0x87,0x87), "grey53" },
364 { RGB(0x8A,0x8A,0x8A), "grey54" },
365 { RGB(0x8C,0x8C,0x8C), "grey55" },
366 { RGB(0x8F,0x8F,0x8F), "grey56" },
367 { RGB(0x91,0x91,0x91), "grey57" },
368 { RGB(0x94,0x94,0x94), "grey58" },
369 { RGB(0x96,0x96,0x96), "grey59" },
370 { RGB(0x0F,0x0F,0x0F), "grey6" },
371 { RGB(0x99,0x99,0x99), "grey60" },
372 { RGB(0x9C,0x9C,0x9C), "grey61" },
373 { RGB(0x9E,0x9E,0x9E), "grey62" },
374 { RGB(0xA1,0xA1,0xA1), "grey63" },
375 { RGB(0xA3,0xA3,0xA3), "grey64" },
376 { RGB(0xA6,0xA6,0xA6), "grey65" },
377 { RGB(0xA8,0xA8,0xA8), "grey66" },
378 { RGB(0xAB,0xAB,0xAB), "grey67" },
379 { RGB(0xAD,0xAD,0xAD), "grey68" },
380 { RGB(0xB0,0xB0,0xB0), "grey69" },
381 { RGB(0x12,0x12,0x12), "grey7" },
382 { RGB(0xB3,0xB3,0xB3), "grey70" },
383 { RGB(0xB5,0xB5,0xB5), "grey71" },
384 { RGB(0xB8,0xB8,0xB8), "grey72" },
385 { RGB(0xBA,0xBA,0xBA), "grey73" },
386 { RGB(0xBD,0xBD,0xBD), "grey74" },
387 { RGB(0xBF,0xBF,0xBF), "grey75" },
388 { RGB(0xC2,0xC2,0xC2), "grey76" },
389 { RGB(0xC4,0xC4,0xC4), "grey77" },
390 { RGB(0xC7,0xC7,0xC7), "grey78" },
391 { RGB(0xC9,0xC9,0xC9), "grey79" },
392 { RGB(0x14,0x14,0x14), "grey8" },
393 { RGB(0xCC,0xCC,0xCC), "grey80" },
394 { RGB(0xCF,0xCF,0xCF), "grey81" },
395 { RGB(0xD1,0xD1,0xD1), "grey82" },
396 { RGB(0xD4,0xD4,0xD4), "grey83" },
397 { RGB(0xD6,0xD6,0xD6), "grey84" },
398 { RGB(0xD9,0xD9,0xD9), "grey85" },
399 { RGB(0xDB,0xDB,0xDB), "grey86" },
400 { RGB(0xDE,0xDE,0xDE), "grey87" },
401 { RGB(0xE0,0xE0,0xE0), "grey88" },
402 { RGB(0xE3,0xE3,0xE3), "grey89" },
403 { RGB(0x17,0x17,0x17), "grey9" },
404 { RGB(0xE5,0xE5,0xE5), "grey90" },
405 { RGB(0xE8,0xE8,0xE8), "grey91" },
406 { RGB(0xEB,0xEB,0xEB), "grey92" },
407 { RGB(0xED,0xED,0xED), "grey93" },
408 { RGB(0xF0,0xF0,0xF0), "grey94" },
409 { RGB(0xF2,0xF2,0xF2), "grey95" },
410 { RGB(0xF5,0xF5,0xF5), "grey96" },
411 { RGB(0xF7,0xF7,0xF7), "grey97" },
412 { RGB(0xFA,0xFA,0xFA), "grey98" },
413 { RGB(0xFC,0xFC,0xFC), "grey99" },
414 { RGB(0xF0,0xFF,0xF0), "honeydew" },
415 { RGB(0xF0,0xFF,0xF0), "honeydew1" },
416 { RGB(0xE0,0xEE,0xE0), "honeydew2" },
417 { RGB(0xC1,0xCD,0xC1), "honeydew3" },
418 { RGB(0x83,0x8B,0x83), "honeydew4" },
419 { RGB(0xFF,0x69,0xB4), "hot pink" },
420 { RGB(0xFF,0x69,0xB4), "HotPink" },
421 { RGB(0xFF,0x6E,0xB4), "HotPink1" },
422 { RGB(0xEE,0x6A,0xA7), "HotPink2" },
423 { RGB(0xCD,0x60,0x90), "HotPink3" },
424 { RGB(0x8B,0x3A,0x62), "HotPink4" },
425 { RGB(0xCD,0x5C,0x5C), "indian red" },
426 { RGB(0xCD,0x5C,0x5C), "IndianRed" },
427 { RGB(0xFF,0x6A,0x6A), "IndianRed1" },
428 { RGB(0xEE,0x63,0x63), "IndianRed2" },
429 { RGB(0xCD,0x55,0x55), "IndianRed3" },
430 { RGB(0x8B,0x3A,0x3A), "IndianRed4" },
431 { RGB(0xFF,0xFF,0xF0), "ivory" },
432 { RGB(0xFF,0xFF,0xF0), "ivory1" },
433 { RGB(0xEE,0xEE,0xE0), "ivory2" },
434 { RGB(0xCD,0xCD,0xC1), "ivory3" },
435 { RGB(0x8B,0x8B,0x83), "ivory4" },
436 { RGB(0xF0,0xE6,0x8C), "khaki" },
437 { RGB(0xFF,0xF6,0x8F), "khaki1" },
438 { RGB(0xEE,0xE6,0x85), "khaki2" },
439 { RGB(0xCD,0xC6,0x73), "khaki3" },
440 { RGB(0x8B,0x86,0x4E), "khaki4" },
441 { RGB(0xE6,0xE6,0xFA), "lavender" },
442 { RGB(0xFF,0xF0,0xF5), "lavender blush" },
443 { RGB(0xFF,0xF0,0xF5), "LavenderBlush" },
444 { RGB(0xFF,0xF0,0xF5), "LavenderBlush1" },
445 { RGB(0xEE,0xE0,0xE5), "LavenderBlush2" },
446 { RGB(0xCD,0xC1,0xC5), "LavenderBlush3" },
447 { RGB(0x8B,0x83,0x86), "LavenderBlush4" },
448 { RGB(0x7C,0xFC,0x00), "lawn green" },
449 { RGB(0x7C,0xFC,0x00), "LawnGreen" },
450 { RGB(0xFF,0xFA,0xCD), "lemon chiffon" },
451 { RGB(0xFF,0xFA,0xCD), "LemonChiffon" },
452 { RGB(0xFF,0xFA,0xCD), "LemonChiffon1" },
453 { RGB(0xEE,0xE9,0xBF), "LemonChiffon2" },
454 { RGB(0xCD,0xC9,0xA5), "LemonChiffon3" },
455 { RGB(0x8B,0x89,0x70), "LemonChiffon4" },
456 { RGB(0xAD,0xD8,0xE6), "light blue" },
457 { RGB(0xF0,0x80,0x80), "light coral" },
458 { RGB(0xE0,0xFF,0xFF), "light cyan" },
459 { RGB(0xEE,0xDD,0x82), "light goldenrod" },
460 { RGB(0xFA,0xFA,0xD2), "light goldenrod yellow" },
461 { RGB(0xD3,0xD3,0xD3), "light gray" },
462 { RGB(0xD3,0xD3,0xD3), "light grey" },
463 { RGB(0xFF,0xB6,0xC1), "light pink" },
464 { RGB(0xFF,0xA0,0x7A), "light salmon" },
465 { RGB(0x20,0xB2,0xAA), "light sea green" },
466 { RGB(0x87,0xCE,0xFA), "light sky blue" },
467 { RGB(0x84,0x70,0xFF), "light slate blue" },
468 { RGB(0x77,0x88,0x99), "light slate gray" },
469 { RGB(0x77,0x88,0x99), "light slate grey" },
470 { RGB(0xB0,0xC4,0xDE), "light steel blue" },
471 { RGB(0xFF,0xFF,0xE0), "light yellow" },
472 { RGB(0xAD,0xD8,0xE6), "LightBlue" },
473 { RGB(0xBF,0xEF,0xFF), "LightBlue1" },
474 { RGB(0xB2,0xDF,0xEE), "LightBlue2" },
475 { RGB(0x9A,0xC0,0xCD), "LightBlue3" },
476 { RGB(0x68,0x83,0x8B), "LightBlue4" },
477 { RGB(0xF0,0x80,0x80), "LightCoral" },
478 { RGB(0xE0,0xFF,0xFF), "LightCyan" },
479 { RGB(0xE0,0xFF,0xFF), "LightCyan1" },
480 { RGB(0xD1,0xEE,0xEE), "LightCyan2" },
481 { RGB(0xB4,0xCD,0xCD), "LightCyan3" },
482 { RGB(0x7A,0x8B,0x8B), "LightCyan4" },
483 { RGB(0xEE,0xDD,0x82), "LightGoldenrod" },
484 { RGB(0xFF,0xEC,0x8B), "LightGoldenrod1" },
485 { RGB(0xEE,0xDC,0x82), "LightGoldenrod2" },
486 { RGB(0xCD,0xBE,0x70), "LightGoldenrod3" },
487 { RGB(0x8B,0x81,0x4C), "LightGoldenrod4" },
488 { RGB(0xFA,0xFA,0xD2), "LightGoldenrodYellow" },
489 { RGB(0xD3,0xD3,0xD3), "LightGray" },
490 { RGB(0xD3,0xD3,0xD3), "LightGrey" },
491 { RGB(0xFF,0xB6,0xC1), "LightPink" },
492 { RGB(0xFF,0xAE,0xB9), "LightPink1" },
493 { RGB(0xEE,0xA2,0xAD), "LightPink2" },
494 { RGB(0xCD,0x8C,0x95), "LightPink3" },
495 { RGB(0x8B,0x5F,0x65), "LightPink4" },
496 { RGB(0xFF,0xA0,0x7A), "LightSalmon" },
497 { RGB(0xFF,0xA0,0x7A), "LightSalmon1" },
498 { RGB(0xEE,0x95,0x72), "LightSalmon2" },
499 { RGB(0xCD,0x81,0x62), "LightSalmon3" },
500 { RGB(0x8B,0x57,0x42), "LightSalmon4" },
501 { RGB(0x20,0xB2,0xAA), "LightSeaGreen" },
502 { RGB(0x87,0xCE,0xFA), "LightSkyBlue" },
503 { RGB(0xB0,0xE2,0xFF), "LightSkyBlue1" },
504 { RGB(0xA4,0xD3,0xEE), "LightSkyBlue2" },
505 { RGB(0x8D,0xB6,0xCD), "LightSkyBlue3" },
506 { RGB(0x60,0x7B,0x8B), "LightSkyBlue4" },
507 { RGB(0x84,0x70,0xFF), "LightSlateBlue" },
508 { RGB(0x77,0x88,0x99), "LightSlateGray" },
509 { RGB(0x77,0x88,0x99), "LightSlateGrey" },
510 { RGB(0xB0,0xC4,0xDE), "LightSteelBlue" },
511 { RGB(0xCA,0xE1,0xFF), "LightSteelBlue1" },
512 { RGB(0xBC,0xD2,0xEE), "LightSteelBlue2" },
513 { RGB(0xA2,0xB5,0xCD), "LightSteelBlue3" },
514 { RGB(0x6E,0x7B,0x8B), "LightSteelBlue4" },
515 { RGB(0xFF,0xFF,0xE0), "LightYellow" },
516 { RGB(0xFF,0xFF,0xE0), "LightYellow1" },
517 { RGB(0xEE,0xEE,0xD1), "LightYellow2" },
518 { RGB(0xCD,0xCD,0xB4), "LightYellow3" },
519 { RGB(0x8B,0x8B,0x7A), "LightYellow4" },
520 { RGB(0x32,0xCD,0x32), "lime green" },
521 { RGB(0x32,0xCD,0x32), "LimeGreen" },
522 { RGB(0xFA,0xF0,0xE6), "linen" },
523 { RGB(0xFF,0x00,0xFF), "magenta" },
524 { RGB(0xFF,0x00,0xFF), "magenta1" },
525 { RGB(0xEE,0x00,0xEE), "magenta2" },
526 { RGB(0xCD,0x00,0xCD), "magenta3" },
527 { RGB(0x8B,0x00,0x8B), "magenta4" },
528 { RGB(0xB0,0x30,0x60), "maroon" },
529 { RGB(0xFF,0x34,0xB3), "maroon1" },
530 { RGB(0xEE,0x30,0xA7), "maroon2" },
531 { RGB(0xCD,0x29,0x90), "maroon3" },
532 { RGB(0x8B,0x1C,0x62), "maroon4" },
533 { RGB(0x66,0xCD,0xAA), "medium aquamarine" },
534 { RGB(0x00,0x00,0xCD), "medium blue" },
535 { RGB(0xBA,0x55,0xD3), "medium orchid" },
536 { RGB(0x93,0x70,0xDB), "medium purple" },
537 { RGB(0x3C,0xB3,0x71), "medium sea green" },
538 { RGB(0x7B,0x68,0xEE), "medium slate blue" },
539 { RGB(0x00,0xFA,0x9A), "medium spring green" },
540 { RGB(0x48,0xD1,0xCC), "medium turquoise" },
541 { RGB(0xC7,0x15,0x85), "medium violet red" },
542 { RGB(0x66,0xCD,0xAA), "MediumAquamarine" },
543 { RGB(0x00,0x00,0xCD), "MediumBlue" },
544 { RGB(0xBA,0x55,0xD3), "MediumOrchid" },
545 { RGB(0xE0,0x66,0xFF), "MediumOrchid1" },
546 { RGB(0xD1,0x5F,0xEE), "MediumOrchid2" },
547 { RGB(0xB4,0x52,0xCD), "MediumOrchid3" },
548 { RGB(0x7A,0x37,0x8B), "MediumOrchid4" },
549 { RGB(0x93,0x70,0xDB), "MediumPurple" },
550 { RGB(0xAB,0x82,0xFF), "MediumPurple1" },
551 { RGB(0x9F,0x79,0xEE), "MediumPurple2" },
552 { RGB(0x89,0x68,0xCD), "MediumPurple3" },
553 { RGB(0x5D,0x47,0x8B), "MediumPurple4" },
554 { RGB(0x3C,0xB3,0x71), "MediumSeaGreen" },
555 { RGB(0x7B,0x68,0xEE), "MediumSlateBlue" },
556 { RGB(0x00,0xFA,0x9A), "MediumSpringGreen" },
557 { RGB(0x48,0xD1,0xCC), "MediumTurquoise" },
558 { RGB(0xC7,0x15,0x85), "MediumVioletRed" },
559 { RGB(0x19,0x19,0x70), "midnight blue" },
560 { RGB(0x19,0x19,0x70), "MidnightBlue" },
561 { RGB(0xF5,0xFF,0xFA), "mint cream" },
562 { RGB(0xF5,0xFF,0xFA), "MintCream" },
563 { RGB(0xFF,0xE4,0xE1), "misty rose" },
564 { RGB(0xFF,0xE4,0xE1), "MistyRose" },
565 { RGB(0xFF,0xE4,0xE1), "MistyRose1" },
566 { RGB(0xEE,0xD5,0xD2), "MistyRose2" },
567 { RGB(0xCD,0xB7,0xB5), "MistyRose3" },
568 { RGB(0x8B,0x7D,0x7B), "MistyRose4" },
569 { RGB(0xFF,0xE4,0xB5), "moccasin" },
570 { RGB(0xFF,0xDE,0xAD), "navajo white" },
571 { RGB(0xFF,0xDE,0xAD), "NavajoWhite" },
572 { RGB(0xFF,0xDE,0xAD), "NavajoWhite1" },
573 { RGB(0xEE,0xCF,0xA1), "NavajoWhite2" },
574 { RGB(0xCD,0xB3,0x8B), "NavajoWhite3" },
575 { RGB(0x8B,0x79,0x5E), "NavajoWhite4" },
576 { RGB(0x00,0x00,0x80), "navy" },
577 { RGB(0x00,0x00,0x80), "navy blue" },
578 { RGB(0x00,0x00,0x80), "NavyBlue" },
579 { RGB(0xFD,0xF5,0xE6), "old lace" },
580 { RGB(0xFD,0xF5,0xE6), "OldLace" },
581 { RGB(0x6B,0x8E,0x23), "olive drab" },
582 { RGB(0x6B,0x8E,0x23), "OliveDrab" },
583 { RGB(0xC0,0xFF,0x3E), "OliveDrab1" },
584 { RGB(0xB3,0xEE,0x3A), "OliveDrab2" },
585 { RGB(0x9A,0xCD,0x32), "OliveDrab3" },
586 { RGB(0x69,0x8B,0x22), "OliveDrab4" },
587 { RGB(0xFF,0xA5,0x00), "orange" },
588 { RGB(0xFF,0x45,0x00), "orange red" },
589 { RGB(0xFF,0xA5,0x00), "orange1" },
590 { RGB(0xEE,0x9A,0x00), "orange2" },
591 { RGB(0xCD,0x85,0x00), "orange3" },
592 { RGB(0x8B,0x5A,0x00), "orange4" },
593 { RGB(0xFF,0x45,0x00), "OrangeRed" },
594 { RGB(0xFF,0x45,0x00), "OrangeRed1" },
595 { RGB(0xEE,0x40,0x00), "OrangeRed2" },
596 { RGB(0xCD,0x37,0x00), "OrangeRed3" },
597 { RGB(0x8B,0x25,0x00), "OrangeRed4" },
598 { RGB(0xDA,0x70,0xD6), "orchid" },
599 { RGB(0xFF,0x83,0xFA), "orchid1" },
600 { RGB(0xEE,0x7A,0xE9), "orchid2" },
601 { RGB(0xCD,0x69,0xC9), "orchid3" },
602 { RGB(0x8B,0x47,0x89), "orchid4" },
603 { RGB(0xEE,0xE8,0xAA), "pale goldenrod" },
604 { RGB(0x98,0xFB,0x98), "pale green" },
605 { RGB(0xAF,0xEE,0xEE), "pale turquoise" },
606 { RGB(0xDB,0x70,0x93), "pale violet red" },
607 { RGB(0xEE,0xE8,0xAA), "PaleGoldenrod" },
608 { RGB(0x98,0xFB,0x98), "PaleGreen" },
609 { RGB(0x9A,0xFF,0x9A), "PaleGreen1" },
610 { RGB(0x90,0xEE,0x90), "PaleGreen2" },
611 { RGB(0x7C,0xCD,0x7C), "PaleGreen3" },
612 { RGB(0x54,0x8B,0x54), "PaleGreen4" },
613 { RGB(0xAF,0xEE,0xEE), "PaleTurquoise" },
614 { RGB(0xBB,0xFF,0xFF), "PaleTurquoise1" },
615 { RGB(0xAE,0xEE,0xEE), "PaleTurquoise2" },
616 { RGB(0x96,0xCD,0xCD), "PaleTurquoise3" },
617 { RGB(0x66,0x8B,0x8B), "PaleTurquoise4" },
618 { RGB(0xDB,0x70,0x93), "PaleVioletRed" },
619 { RGB(0xFF,0x82,0xAB), "PaleVioletRed1" },
620 { RGB(0xEE,0x79,0x9F), "PaleVioletRed2" },
621 { RGB(0xCD,0x68,0x89), "PaleVioletRed3" },
622 { RGB(0x8B,0x47,0x5D), "PaleVioletRed4" },
623 { RGB(0xFF,0xEF,0xD5), "papaya whip" },
624 { RGB(0xFF,0xEF,0xD5), "PapayaWhip" },
625 { RGB(0xFF,0xDA,0xB9), "peach puff" },
626 { RGB(0xFF,0xDA,0xB9), "PeachPuff" },
627 { RGB(0xFF,0xDA,0xB9), "PeachPuff1" },
628 { RGB(0xEE,0xCB,0xAD), "PeachPuff2" },
629 { RGB(0xCD,0xAF,0x95), "PeachPuff3" },
630 { RGB(0x8B,0x77,0x65), "PeachPuff4" },
631 { RGB(0xCD,0x85,0x3F), "peru" },
632 { RGB(0xFF,0xC0,0xCB), "pink" },
633 { RGB(0xFF,0xB5,0xC5), "pink1" },
634 { RGB(0xEE,0xA9,0xB8), "pink2" },
635 { RGB(0xCD,0x91,0x9E), "pink3" },
636 { RGB(0x8B,0x63,0x6C), "pink4" },
637 { RGB(0xDD,0xA0,0xDD), "plum" },
638 { RGB(0xFF,0xBB,0xFF), "plum1" },
639 { RGB(0xEE,0xAE,0xEE), "plum2" },
640 { RGB(0xCD,0x96,0xCD), "plum3" },
641 { RGB(0x8B,0x66,0x8B), "plum4" },
642 { RGB(0xB0,0xE0,0xE6), "powder blue" },
643 { RGB(0xB0,0xE0,0xE6), "PowderBlue" },
644 { RGB(0xA0,0x20,0xF0), "purple" },
645 { RGB(0x9B,0x30,0xFF), "purple1" },
646 { RGB(0x91,0x2C,0xEE), "purple2" },
647 { RGB(0x7D,0x26,0xCD), "purple3" },
648 { RGB(0x55,0x1A,0x8B), "purple4" },
649 { RGB(0xFF,0x00,0x00), "red" },
650 { RGB(0xFF,0x00,0x00), "red1" },
651 { RGB(0xEE,0x00,0x00), "red2" },
652 { RGB(0xCD,0x00,0x00), "red3" },
653 { RGB(0x8B,0x00,0x00), "red4" },
654 { RGB(0xBC,0x8F,0x8F), "rosy brown" },
655 { RGB(0xBC,0x8F,0x8F), "RosyBrown" },
656 { RGB(0xFF,0xC1,0xC1), "RosyBrown1" },
657 { RGB(0xEE,0xB4,0xB4), "RosyBrown2" },
658 { RGB(0xCD,0x9B,0x9B), "RosyBrown3" },
659 { RGB(0x8B,0x69,0x69), "RosyBrown4" },
660 { RGB(0x41,0x69,0xE1), "royal blue" },
661 { RGB(0x41,0x69,0xE1), "RoyalBlue" },
662 { RGB(0x48,0x76,0xFF), "RoyalBlue1" },
663 { RGB(0x43,0x6E,0xEE), "RoyalBlue2" },
664 { RGB(0x3A,0x5F,0xCD), "RoyalBlue3" },
665 { RGB(0x27,0x40,0x8B), "RoyalBlue4" },
666 { RGB(0x8B,0x45,0x13), "saddle brown" },
667 { RGB(0x8B,0x45,0x13), "SaddleBrown" },
668 { RGB(0xFA,0x80,0x72), "salmon" },
669 { RGB(0xFF,0x8C,0x69), "salmon1" },
670 { RGB(0xEE,0x82,0x62), "salmon2" },
671 { RGB(0xCD,0x70,0x54), "salmon3" },
672 { RGB(0x8B,0x4C,0x39), "salmon4" },
673 { RGB(0xF4,0xA4,0x60), "sandy brown" },
674 { RGB(0xF4,0xA4,0x60), "SandyBrown" },
675 { RGB(0x2E,0x8B,0x57), "sea green" },
676 { RGB(0x2E,0x8B,0x57), "SeaGreen" },
677 { RGB(0x54,0xFF,0x9F), "SeaGreen1" },
678 { RGB(0x4E,0xEE,0x94), "SeaGreen2" },
679 { RGB(0x43,0xCD,0x80), "SeaGreen3" },
680 { RGB(0x2E,0x8B,0x57), "SeaGreen4" },
681 { RGB(0xFF,0xF5,0xEE), "seashell" },
682 { RGB(0xFF,0xF5,0xEE), "seashell1" },
683 { RGB(0xEE,0xE5,0xDE), "seashell2" },
684 { RGB(0xCD,0xC5,0xBF), "seashell3" },
685 { RGB(0x8B,0x86,0x82), "seashell4" },
686 { RGB(0xA0,0x52,0x2D), "sienna" },
687 { RGB(0xFF,0x82,0x47), "sienna1" },
688 { RGB(0xEE,0x79,0x42), "sienna2" },
689 { RGB(0xCD,0x68,0x39), "sienna3" },
690 { RGB(0x8B,0x47,0x26), "sienna4" },
691 { RGB(0x87,0xCE,0xEB), "sky blue" },
692 { RGB(0x87,0xCE,0xEB), "SkyBlue" },
693 { RGB(0x87,0xCE,0xFF), "SkyBlue1" },
694 { RGB(0x7E,0xC0,0xEE), "SkyBlue2" },
695 { RGB(0x6C,0xA6,0xCD), "SkyBlue3" },
696 { RGB(0x4A,0x70,0x8B), "SkyBlue4" },
697 { RGB(0x6A,0x5A,0xCD), "slate blue" },
698 { RGB(0x70,0x80,0x90), "slate gray" },
699 { RGB(0x70,0x80,0x90), "slate grey" },
700 { RGB(0x6A,0x5A,0xCD), "SlateBlue" },
701 { RGB(0x83,0x6F,0xFF), "SlateBlue1" },
702 { RGB(0x7A,0x67,0xEE), "SlateBlue2" },
703 { RGB(0x69,0x59,0xCD), "SlateBlue3" },
704 { RGB(0x47,0x3C,0x8B), "SlateBlue4" },
705 { RGB(0x70,0x80,0x90), "SlateGray" },
706 { RGB(0xC6,0xE2,0xFF), "SlateGray1" },
707 { RGB(0xB9,0xD3,0xEE), "SlateGray2" },
708 { RGB(0x9F,0xB6,0xCD), "SlateGray3" },
709 { RGB(0x6C,0x7B,0x8B), "SlateGray4" },
710 { RGB(0x70,0x80,0x90), "SlateGrey" },
711 { RGB(0xFF,0xFA,0xFA), "snow" },
712 { RGB(0xFF,0xFA,0xFA), "snow1" },
713 { RGB(0xEE,0xE9,0xE9), "snow2" },
714 { RGB(0xCD,0xC9,0xC9), "snow3" },
715 { RGB(0x8B,0x89,0x89), "snow4" },
716 { RGB(0x00,0xFF,0x7F), "spring green" },
717 { RGB(0x00,0xFF,0x7F), "SpringGreen" },
718 { RGB(0x00,0xFF,0x7F), "SpringGreen1" },
719 { RGB(0x00,0xEE,0x76), "SpringGreen2" },
720 { RGB(0x00,0xCD,0x66), "SpringGreen3" },
721 { RGB(0x00,0x8B,0x45), "SpringGreen4" },
722 { RGB(0x46,0x82,0xB4), "steel blue" },
723 { RGB(0x46,0x82,0xB4), "SteelBlue" },
724 { RGB(0x63,0xB8,0xFF), "SteelBlue1" },
725 { RGB(0x5C,0xAC,0xEE), "SteelBlue2" },
726 { RGB(0x4F,0x94,0xCD), "SteelBlue3" },
727 { RGB(0x36,0x64,0x8B), "SteelBlue4" },
728 { RGB(0xD2,0xB4,0x8C), "tan" },
729 { RGB(0xFF,0xA5,0x4F), "tan1" },
730 { RGB(0xEE,0x9A,0x49), "tan2" },
731 { RGB(0xCD,0x85,0x3F), "tan3" },
732 { RGB(0x8B,0x5A,0x2B), "tan4" },
733 { RGB(0xD8,0xBF,0xD8), "thistle" },
734 { RGB(0xFF,0xE1,0xFF), "thistle1" },
735 { RGB(0xEE,0xD2,0xEE), "thistle2" },
736 { RGB(0xCD,0xB5,0xCD), "thistle3" },
737 { RGB(0x8B,0x7B,0x8B), "thistle4" },
738 { RGB(0xFF,0x63,0x47), "tomato" },
739 { RGB(0xFF,0x63,0x47), "tomato1" },
740 { RGB(0xEE,0x5C,0x42), "tomato2" },
741 { RGB(0xCD,0x4F,0x39), "tomato3" },
742 { RGB(0x8B,0x36,0x26), "tomato4" },
743 { RGB(0x40,0xE0,0xD0), "turquoise" },
744 { RGB(0x00,0xF5,0xFF), "turquoise1" },
745 { RGB(0x00,0xE5,0xEE), "turquoise2" },
746 { RGB(0x00,0xC5,0xCD), "turquoise3" },
747 { RGB(0x00,0x86,0x8B), "turquoise4" },
748 { RGB(0xEE,0x82,0xEE), "violet" },
749 { RGB(0xD0,0x20,0x90), "violet red" },
750 { RGB(0xD0,0x20,0x90), "VioletRed" },
751 { RGB(0xFF,0x3E,0x96), "VioletRed1" },
752 { RGB(0xEE,0x3A,0x8C), "VioletRed2" },
753 { RGB(0xCD,0x32,0x78), "VioletRed3" },
754 { RGB(0x8B,0x22,0x52), "VioletRed4" },
755 { RGB(0xF5,0xDE,0xB3), "wheat" },
756 { RGB(0xFF,0xE7,0xBA), "wheat1" },
757 { RGB(0xEE,0xD8,0xAE), "wheat2" },
758 { RGB(0xCD,0xBA,0x96), "wheat3" },
759 { RGB(0x8B,0x7E,0x66), "wheat4" },
760 { RGB(0xFF,0xFF,0xFF), "white" },
761 { RGB(0xF5,0xF5,0xF5), "white smoke" },
762 { RGB(0xF5,0xF5,0xF5), "WhiteSmoke" },
763 { RGB(0xFF,0xFF,0x00), "yellow" },
764 { RGB(0x9A,0xCD,0x32), "yellow green" },
765 { RGB(0xFF,0xFF,0x00), "yellow1" },
766 { RGB(0xEE,0xEE,0x00), "yellow2" },
767 { RGB(0xCD,0xCD,0x00), "yellow3" },
768 { RGB(0x8B,0x8B,0x00), "yellow4" },
769 { RGB(0x9A,0xCD,0x32), "YellowGreen" },
774 int span = (int)(strlen(str)-1) / 3;
776 sprintf_s(format, "%%%dx%%%dx%%%dx", span, span, span);
777 if(sscanf_s(str+1, format, &r, &g, &b) == 3) {
788 if(r < 1 && g < 1 && b < 1) b++;
795 for(i = 0 ; i < sizeof(colors) / sizeof(colors[0]) ; i++) {
796 if(!strcasecmp(colors[i].name, str)) {
797 ret = colors[i].color;
803 fprintf(stderr, "ERROR: invalid color. \"%s\"\n", str);
808 static void extract(char *str, std::string& app, std::string& name, std::string& value)
810 char *c1, *c2, *c3, *c4;
814 c1 = strchr(str, '*');
816 c2 = strchr(c1, ':');
820 for(c3 = c2-2 ; c3 > c1 && *c3 <= ' ' ; c3--);
821 if(*++c3 <= ' ') *c3 = 0;
824 c4 = c2 + strlen(c2)-1;
825 for( ; c2 < c4 && *c2<=' ' && *c2>0 ; c2++);
826 for(c3 = c4 ; c3 > c2 && *c3<=' ' && *c2>0 ; c3--);
827 if(*++c3 <= ' ' && *c3 > 0) *c3 = 0;
831 static bool lookupBoolean(const char *value)
833 if(!strcasecmp(value, "true") ||
834 !strcasecmp(value, "yes") ||
835 !strcasecmp(value, "on") ||
836 !strcasecmp(value, "1"))
841 static void usage_fmtL(const char *name, const char *type)
845 fprintf(stdout, " %s:", name);
846 i = 3 + strlen(name);
847 for( ; i < 23 ; fputc(' ', stdout), i++);
848 fprintf(stdout, "%s\n", type ? type : "");
851 static void usage_fmtS(const char *name, const char *type, const char *desc)
855 if(type && !strcmp(type, "boolean")) {
856 fprintf(stdout, " -/+%s", name);
857 i = 5 + strlen(name);
860 fprintf(stdout, " -%s <%s>", name, type);
861 i = 6 + strlen(name) + strlen(type);
864 fprintf(stdout, " -%s", name);
865 i = 3 + strlen(name);
867 for( ; i < 22 ; fputc(' ', stdout), i++);
868 fprintf(stdout, " : %s\n", desc ? desc : "");
872 /*****************************************************************************/
875 void ckOpt::cmdsMake(int argc, char *argv[])
879 for(int i = 0 ; i < argc ; i++) {
881 while(!strchr(" &()[]{}^=;!'+,`~", *chk)) chk++;
894 void ckOpt::geometry(const char *str)
906 for( ; *c != 0 && '0' <= *c && *c <= '9' ; c++)
907 w = w * 10 + (*c - '0');
909 for(c++ ; *c != 0 && '0' <= *c && *c <= '9' ; c++)
910 h = h * 10 + (*c - '0');
913 if(*c == '-') { minusX = true; c++; }
914 else if(*c == '+') { c++; }
915 for( ; *c != 0 && '0' <= *c && *c <= '9' ; c++)
916 x = x * 10 + (*c - '0');
919 if(*c == '-') { minusY = true; c++; }
920 else if(*c == '+') { c++; }
921 for( ; *c != 0 && '0' <= *c && *c <= '9' ; c++)
922 y = y * 10 + (*c - '0');
929 m_winCharW = (w>0) ? w : 1;
930 m_winCharH = (h>0) ? h : 1;
933 /*****************************************************************************/
944 m_colors[0] = RGB(0x00, 0x00, 0x01);
945 m_colors[1] = RGB(0x00, 0x00, 0x80);
946 m_colors[2] = RGB(0x00, 0x80, 0x00);
947 m_colors[3] = RGB(0x00, 0x80, 0x80);
948 m_colors[4] = RGB(0x80, 0x00, 0x00);
949 m_colors[5] = RGB(0x80, 0x00, 0x80);
950 m_colors[6] = RGB(0x80, 0x80, 0x00);
951 m_colors[7] = RGB(0xC0, 0xC0, 0xC0);
952 m_colors[8] = RGB(0x80, 0x80, 0x80);
953 m_colors[9] = RGB(0x00, 0x00, 0xFF);
954 m_colors[10] = RGB(0x00, 0xFF, 0x00);
955 m_colors[11] = RGB(0x00, 0xFF, 0xFF);
956 m_colors[12] = RGB(0xFF, 0x00, 0x00);
957 m_colors[13] = RGB(0xFF, 0x00, 0xFF);
958 m_colors[14] = RGB(0xFF, 0xFF, 0x00);
959 m_colors[15] = RGB(0xFF, 0xFF, 0xFF);
960 m_colorFg = RGB(0xC0, 0xC0, 0xC0); // cursor fg
961 m_colorBg = RGB(0x00, 0x00, 0x01); // cursor bg
962 m_colorCursor = RGB(0xC0, 0xC0, 0x80);
963 m_colorCursorIme = RGB(0xC0, 0x00, 0x00);
964 m_scrollHide = false;
965 m_scrollRight = true;
970 m_isTranspColor = false;
973 m_config_file[0] = '\0';
980 #define _CHK_L(longName) (longName && !strcmp(name, longName))
981 #define _CHK_S(shortName) (!rsrc && shortName && !strcmp(name, shortName))
983 #define CHK_MISC(longName, shortName, func) \
984 if(_CHK_L(longName) || _CHK_S(shortName)) { \
985 if(!value) return(0); \
989 #define CHK_BOOL(longName, shortName, var) \
990 if(_CHK_L(longName)) { \
991 if(!value) return(0); \
992 var = lookupBoolean(value); \
995 if(_CHK_S(shortName)) { \
1000 int ckOpt::setOption(const char *name, const char *value, bool rsrc)
1007 else if(*name == '+')
1011 for( ; *name=='-' || *name=='+' ; name++);
1014 CHK_MISC("foreground", "fg", lookupColor(value, m_colorFg));
1015 CHK_MISC("background", "bg", lookupColor(value, m_colorBg));
1016 CHK_MISC("cursorColor", "cr", lookupColor(value, m_colorCursor));
1017 CHK_MISC("cursorImeColor", "cri", lookupColor(value, m_colorCursorIme));
1018 CHK_MISC("backgroundBitmap", "bitmap", m_bgBmp = value);
1019 CHK_MISC("geometry", "g", geometry(value));
1020 CHK_BOOL(NULL, "iconic", m_isIconic);
1021 CHK_MISC("font", "fn", m_font = value);
1022 CHK_MISC("fontSize", "fs", m_fontSize = atoi(value));
1023 CHK_BOOL("scrollHide", "sh", m_scrollHide);
1024 CHK_BOOL("scrollRight", "sr", m_scrollRight);
1025 CHK_MISC("saveLines", "sl", m_saveLines = atoi(value));
1026 CHK_MISC("internalBorder", "b", m_borderSize = atoi(value));
1027 CHK_MISC("lineSpace", "lsp", m_lineSpace = atoi(value));
1028 CHK_MISC("transp", "tr", m_transp = atoi(value));
1029 CHK_MISC("transpColor", "trc", m_isTranspColor = lookupColor(value,m_transpColor));
1030 CHK_BOOL("topmost", "top", m_isTopMost);
1031 CHK_MISC("chdir", "cd", m_curDir = value);
1032 CHK_MISC("exec", "x", m_cmd = value);
1033 CHK_MISC("title", "tl", m_title = value);
1034 CHK_MISC("config", "c", setFile(value);loadXdefaults() );
1038 if(sscanf_s(name, "color%u", &i)==1 && 0<=i && i<=15) {
1039 if(!value) return(0);
1040 lookupColor(value, m_colors[i]);
1046 static void usage(bool isLong)
1048 static const char* str[] = {
1049 "foreground", "fg", "color", "foreground color",
1050 "background", "bg", "color", "background color",
1051 "cursorColor", "cr", "color", "cursor color",
1052 "cursorImeColor", "cri", "color", "cursor color IME-on",
1053 "color0", NULL, "color", "",
1054 "color1", NULL, "color", "",
1055 "color2", NULL, "color", "",
1056 "color3", NULL, "color", "",
1057 "color4", NULL, "color", "",
1058 "color5", NULL, "color", "",
1059 "color6", NULL, "color", "",
1060 "color7", NULL, "color", "",
1061 "color8", NULL, "color", "",
1062 "color9", NULL, "color", "",
1063 "color10", NULL, "color", "",
1064 "color11", NULL, "color", "",
1065 "color12", NULL, "color", "",
1066 "color13", NULL, "color", "",
1067 "color14", NULL, "color", "",
1068 "color15", NULL, "color", "",
1069 "backgroundBitmap", "bitmap", "string", "background bmp file",
1070 "geometry", "g", "string", "window layout. ( ex. 80x24+0+0 )",
1071 NULL, "iconic", "boolean", "start iconic",
1072 "font", "fn", "string", "text font name",
1073 "fontSize", "fs", "number", "text font size",
1074 "scrollHide", "sh", "boolean", "turn on/off scrollbar hide",
1075 "scrollRight", "sr", "boolean", "turn on/off scrollbar right",
1076 "saveLines", "sl", "number", "save lines",
1077 "internalBorder", "b", "number", "internal border in pixels",
1078 "lineSpace", "lsp", "number", "number of extra pixels between rows",
1079 "transp", "tr", "number", "alpha 0 ~ 255",
1080 "transpColor", "trc", "color", "color key",
1081 "topmost", "top", "boolean", "always on top",
1082 "chdir", "cd", "string", "set current dir",
1083 "exec", "x", "string", "exec shell",
1084 "title", "tl", "string", "window title",
1085 "config", "c", "string", "configration file",
1089 fprintf(stdout, "%s",
1090 "ckw version " VERSION_STRING " , build " BUILDDATE_STRING "\n"
1091 COPYRIGHT_STRING "\n"
1093 "Usage: ckw [options] [-c configration file] [-e command args]\n"
1097 fprintf(stdout, "%s", "where resources (long-options) include:\n");
1098 for(i = 0 ; i < sizeof(str)/sizeof(str[0]) ; i+=4)
1099 usage_fmtL(str[i+0], str[i+2]);
1100 fprintf(stdout, "\n%s\n", " -help to list options\n");
1103 fprintf(stdout, "%s", "where options include:\n");
1104 for(i = 0 ; i < sizeof(str)/sizeof(str[0]) ; i+=4)
1105 usage_fmtS(str[i+1], str[i+2], str[i+3]);
1106 fprintf(stdout, "\n%s\n", " --help to list long-options\n");
1110 void ckOpt::_loadXdefaults(const char *path)
1114 std::string app, name, value;
1116 fopen_s(&fp, path, "r");
1120 buf[0] = buf[sizeof(buf)-1] = 0;
1121 fgets(buf, sizeof(buf)-2, fp);
1122 if(!buf[0] || buf[0] == '!')
1125 extract(buf, app, name, value);
1127 if(name.size() < 1 || value.size() < 1)
1129 if(app.size() > 0 && strcasecmp(app.c_str(), "Ckw"))
1132 setOption(name.c_str(), value.c_str(), true);
1137 void ckOpt::setFile(const char *path /*=NULL*/)
1141 strcpy_s(m_config_file, path);
1144 m_config_file[0] = '\0';
1148 static bool getconfigfile(const char* env, char *cfgfile, char *path, int size)
1150 if(GetEnvironmentVariableA(env, path, size)) {
1151 sprintf_s(path, size, "%s\\%s", path, cfgfile);
1152 if(PathFileExistsA(path) && !PathIsDirectoryA(path)) {
1159 void ckOpt::loadXdefaults()
1161 char path[MAX_PATH+1];
1163 if(m_config_file[0] == '\0')
1165 char cfgfile[MAX_PATH] = "_";
1167 if (0 != GetModuleFileNameA(NULL, path, MAX_PATH)) {
1168 char szDrive[MAX_PATH];
1169 char szDir[MAX_PATH];
1170 char szFile[MAX_PATH];
1171 char szBuf[MAX_PATH];
1172 _splitpath_s(path, szDrive, szDir, szFile, szBuf);
1173 strcat_s(cfgfile, szFile);
1176 // HOME or USERPROFILE
1177 if (!getconfigfile("HOME", cfgfile, path, MAX_PATH)) {
1178 getconfigfile("USERPROFILE", cfgfile, path, MAX_PATH);
1180 if (path[0] != '\0') _loadXdefaults(path);
1182 // directory execute exists
1183 _makepath_s(path, szDrive, szDir, cfgfile, NULL);
1184 _loadXdefaults(path);
1185 _makepath_s(path, szDrive, szDir, szFile, ".cfg");
1186 _loadXdefaults(path);
1192 strcpy_s(path, m_config_file);
1193 _loadXdefaults(path);
1196 if(GetEnvironmentVariableA("HOME", path, MAX_PATH)) {
1197 strcat_s(path, "\\.Xdefaults");
1198 _loadXdefaults(path);
1202 bool ckOpt::set(int argc, char *argv[])
1208 if(strcmp("-e", argv[i]) == 0) {
1213 cmdsMake(argc-i, argv+i);
1216 if(strcmp("-help", argv[i]) == 0) {
1220 if(strcmp("--help", argv[i]) == 0) {
1225 skip = setOption(argv[i], (i+1<argc) ? argv[i+1] : NULL, false);