43 #include "MagickCore/studio.h"
44 #include "MagickCore/blob.h"
45 #include "MagickCore/cache-view.h"
46 #include "MagickCore/cache.h"
47 #include "MagickCore/color.h"
48 #include "MagickCore/color-private.h"
49 #include "MagickCore/colorspace-private.h"
50 #include "MagickCore/client.h"
51 #include "MagickCore/configure.h"
52 #include "MagickCore/exception.h"
53 #include "MagickCore/exception-private.h"
54 #include "MagickCore/gem.h"
55 #include "MagickCore/gem-private.h"
56 #include "MagickCore/geometry.h"
57 #include "MagickCore/image-private.h"
58 #include "MagickCore/memory_.h"
59 #include "MagickCore/monitor.h"
60 #include "MagickCore/monitor-private.h"
61 #include "MagickCore/option.h"
62 #include "MagickCore/pixel-accessor.h"
63 #include "MagickCore/quantize.h"
64 #include "MagickCore/quantum.h"
65 #include "MagickCore/quantum-private.h"
66 #include "MagickCore/semaphore.h"
67 #include "MagickCore/string_.h"
68 #include "MagickCore/string-private.h"
69 #include "MagickCore/token.h"
70 #include "MagickCore/utility.h"
71 #include "MagickCore/utility-private.h"
72 #include "MagickCore/xml-tree.h"
73 #include "MagickCore/xml-tree-private.h"
78 #define ColorFilename "colors.xml"
106 {
"none", 0, 0, 0, 0, SVGCompliance | XPMCompliance },
107 {
"black", 0, 0, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
108 {
"red", 255, 0, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
109 {
"magenta", 255, 0, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
110 {
"green", 0, 128, 0, 1, SVGCompliance },
111 {
"cyan", 0, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
112 {
"blue", 0, 0, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
113 {
"yellow", 255, 255, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
114 {
"white", 255, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
115 {
"AliceBlue", 240, 248, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
116 {
"AntiqueWhite", 250, 235, 215, 1, SVGCompliance | X11Compliance | XPMCompliance },
117 {
"AntiqueWhite1", 255, 239, 219, 1, X11Compliance },
118 {
"AntiqueWhite2", 238, 223, 204, 1, X11Compliance },
119 {
"AntiqueWhite3", 205, 192, 176, 1, X11Compliance },
120 {
"AntiqueWhite4", 139, 131, 120, 1, X11Compliance },
121 {
"aqua", 0, 255, 255, 1, SVGCompliance },
122 {
"aquamarine", 127, 255, 212, 1, SVGCompliance | X11Compliance | XPMCompliance },
123 {
"aquamarine1", 127, 255, 212, 1, X11Compliance },
124 {
"aquamarine2", 118, 238, 198, 1, X11Compliance },
125 {
"aquamarine3", 102, 205, 170, 1, X11Compliance },
126 {
"aquamarine4", 69, 139, 116, 1, X11Compliance },
127 {
"azure", 240, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
128 {
"azure1", 240, 255, 255, 1, X11Compliance },
129 {
"azure2", 224, 238, 238, 1, X11Compliance },
130 {
"azure3", 193, 205, 205, 1, X11Compliance },
131 {
"azure4", 131, 139, 139, 1, X11Compliance },
132 {
"beige", 245, 245, 220, 1, SVGCompliance | X11Compliance | XPMCompliance },
133 {
"bisque", 255, 228, 196, 1, SVGCompliance | X11Compliance | XPMCompliance },
134 {
"bisque1", 255, 228, 196, 1, X11Compliance },
135 {
"bisque2", 238, 213, 183, 1, X11Compliance },
136 {
"bisque3", 205, 183, 158, 1, X11Compliance },
137 {
"bisque4", 139, 125, 107, 1, X11Compliance },
138 {
"BlanchedAlmond", 255, 235, 205, 1, SVGCompliance | X11Compliance | XPMCompliance },
139 {
"blue1", 0, 0, 255, 1, X11Compliance },
140 {
"blue2", 0, 0, 238, 1, X11Compliance },
141 {
"blue3", 0, 0, 205, 1, X11Compliance },
142 {
"blue4", 0, 0, 139, 1, X11Compliance },
143 {
"BlueViolet", 138, 43, 226, 1, SVGCompliance | X11Compliance | XPMCompliance },
144 {
"brown", 165, 42, 42, 1, SVGCompliance | X11Compliance | XPMCompliance },
145 {
"brown1", 255, 64, 64, 1, X11Compliance },
146 {
"brown2", 238, 59, 59, 1, X11Compliance },
147 {
"brown3", 205, 51, 51, 1, X11Compliance },
148 {
"brown4", 139, 35, 35, 1, X11Compliance },
149 {
"burlywood", 222, 184, 135, 1, SVGCompliance | X11Compliance | XPMCompliance },
150 {
"burlywood1", 255, 211, 155, 1, X11Compliance },
151 {
"burlywood2", 238, 197, 145, 1, X11Compliance },
152 {
"burlywood3", 205, 170, 125, 1, X11Compliance },
153 {
"burlywood4", 139, 115, 85, 1, X11Compliance },
154 {
"CadetBlue", 95, 158, 160, 1, SVGCompliance | X11Compliance | XPMCompliance },
155 {
"CadetBlue1", 152, 245, 255, 1, X11Compliance },
156 {
"CadetBlue2", 142, 229, 238, 1, X11Compliance },
157 {
"CadetBlue3", 122, 197, 205, 1, X11Compliance },
158 {
"CadetBlue4", 83, 134, 139, 1, X11Compliance },
159 {
"chartreuse", 127, 255, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
160 {
"chartreuse1", 127, 255, 0, 1, X11Compliance },
161 {
"chartreuse2", 118, 238, 0, 1, X11Compliance },
162 {
"chartreuse3", 102, 205, 0, 1, X11Compliance },
163 {
"chartreuse4", 69, 139, 0, 1, X11Compliance },
164 {
"chocolate", 210, 105, 30, 1, SVGCompliance | X11Compliance | XPMCompliance },
165 {
"chocolate1", 255, 127, 36, 1, X11Compliance },
166 {
"chocolate2", 238, 118, 33, 1, X11Compliance },
167 {
"chocolate3", 205, 102, 29, 1, X11Compliance },
168 {
"chocolate4", 139, 69, 19, 1, X11Compliance },
169 {
"coral", 255, 127, 80, 1, SVGCompliance | X11Compliance | XPMCompliance },
170 {
"coral1", 255, 114, 86, 1, X11Compliance },
171 {
"coral2", 238, 106, 80, 1, X11Compliance },
172 {
"coral3", 205, 91, 69, 1, X11Compliance },
173 {
"coral4", 139, 62, 47, 1, X11Compliance },
174 {
"CornflowerBlue", 100, 149, 237, 1, SVGCompliance | X11Compliance | XPMCompliance },
175 {
"cornsilk", 255, 248, 220, 1, SVGCompliance | X11Compliance | XPMCompliance },
176 {
"cornsilk1", 255, 248, 220, 1, X11Compliance },
177 {
"cornsilk2", 238, 232, 205, 1, X11Compliance },
178 {
"cornsilk3", 205, 200, 177, 1, X11Compliance },
179 {
"cornsilk4", 139, 136, 120, 1, X11Compliance },
180 {
"crimson", 220, 20, 60, 1, SVGCompliance },
181 {
"cyan1", 0, 255, 255, 1, X11Compliance },
182 {
"cyan2", 0, 238, 238, 1, X11Compliance },
183 {
"cyan3", 0, 205, 205, 1, X11Compliance },
184 {
"cyan4", 0, 139, 139, 1, X11Compliance },
185 {
"DarkBlue", 0, 0, 139, 1, SVGCompliance | X11Compliance },
186 {
"DarkCyan", 0, 139, 139, 1, SVGCompliance | X11Compliance },
187 {
"DarkGoldenrod", 184, 134, 11, 1, SVGCompliance | X11Compliance | XPMCompliance },
188 {
"DarkGoldenrod1", 255, 185, 15, 1, X11Compliance },
189 {
"DarkGoldenrod2", 238, 173, 14, 1, X11Compliance },
190 {
"DarkGoldenrod3", 205, 149, 12, 1, X11Compliance },
191 {
"DarkGoldenrod4", 139, 101, 8, 1, X11Compliance },
192 {
"DarkGray", 169, 169, 169, 1, SVGCompliance | X11Compliance },
193 {
"DarkGreen", 0, 100, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
194 {
"DarkGrey", 169, 169, 169, 1, SVGCompliance | X11Compliance },
195 {
"DarkKhaki", 189, 183, 107, 1, SVGCompliance | X11Compliance | XPMCompliance },
196 {
"DarkMagenta", 139, 0, 139, 1, SVGCompliance | X11Compliance },
197 {
"DarkOliveGreen", 85, 107, 47, 1, SVGCompliance | X11Compliance | XPMCompliance },
198 {
"DarkOliveGreen1", 202, 255, 112, 1, X11Compliance },
199 {
"DarkOliveGreen2", 188, 238, 104, 1, X11Compliance },
200 {
"DarkOliveGreen3", 162, 205, 90, 1, X11Compliance },
201 {
"DarkOliveGreen4", 110, 139, 61, 1, X11Compliance },
202 {
"DarkOrange", 255, 140, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
203 {
"DarkOrange1", 255, 127, 0, 1, X11Compliance },
204 {
"DarkOrange2", 238, 118, 0, 1, X11Compliance },
205 {
"DarkOrange3", 205, 102, 0, 1, X11Compliance },
206 {
"DarkOrange4", 139, 69, 0, 1, X11Compliance },
207 {
"DarkOrchid", 153, 50, 204, 1, SVGCompliance | X11Compliance | XPMCompliance },
208 {
"DarkOrchid1", 191, 62, 255, 1, X11Compliance },
209 {
"DarkOrchid2", 178, 58, 238, 1, X11Compliance },
210 {
"DarkOrchid3", 154, 50, 205, 1, X11Compliance },
211 {
"DarkOrchid4", 104, 34, 139, 1, X11Compliance },
212 {
"DarkRed", 139, 0, 0, 1, SVGCompliance | X11Compliance },
213 {
"DarkSalmon", 233, 150, 122, 1, SVGCompliance | X11Compliance | XPMCompliance },
214 {
"DarkSeaGreen", 143, 188, 143, 1, SVGCompliance | X11Compliance | XPMCompliance },
215 {
"DarkSeaGreen1", 193, 255, 193, 1, X11Compliance },
216 {
"DarkSeaGreen2", 180, 238, 180, 1, X11Compliance },
217 {
"DarkSeaGreen3", 155, 205, 155, 1, X11Compliance },
218 {
"DarkSeaGreen4", 105, 139, 105, 1, X11Compliance },
219 {
"DarkSlateBlue", 72, 61, 139, 1, SVGCompliance | X11Compliance | XPMCompliance },
220 {
"DarkSlateGray", 47, 79, 79, 1, SVGCompliance | X11Compliance | XPMCompliance },
221 {
"DarkSlateGray1", 151, 255, 255, 1, X11Compliance },
222 {
"DarkSlateGray2", 141, 238, 238, 1, X11Compliance },
223 {
"DarkSlateGray3", 121, 205, 205, 1, X11Compliance },
224 {
"DarkSlateGray4", 82, 139, 139, 1, X11Compliance },
225 {
"DarkSlateGrey", 47, 79, 79, 1, SVGCompliance | X11Compliance },
226 {
"DarkTurquoise", 0, 206, 209, 1, SVGCompliance | X11Compliance | XPMCompliance },
227 {
"DarkViolet", 148, 0, 211, 1, SVGCompliance | X11Compliance | XPMCompliance },
228 {
"DeepPink", 255, 20, 147, 1, SVGCompliance | X11Compliance | XPMCompliance },
229 {
"DeepPink1", 255, 20, 147, 1, X11Compliance },
230 {
"DeepPink2", 238, 18, 137, 1, X11Compliance },
231 {
"DeepPink3", 205, 16, 118, 1, X11Compliance },
232 {
"DeepPink4", 139, 10, 80, 1, X11Compliance },
233 {
"DeepSkyBlue", 0, 191, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
234 {
"DeepSkyBlue1", 0, 191, 255, 1, X11Compliance },
235 {
"DeepSkyBlue2", 0, 178, 238, 1, X11Compliance },
236 {
"DeepSkyBlue3", 0, 154, 205, 1, X11Compliance },
237 {
"DeepSkyBlue4", 0, 104, 139, 1, X11Compliance },
238 {
"DimGray", 105, 105, 105, 1, SVGCompliance | X11Compliance | XPMCompliance },
239 {
"DimGrey", 105, 105, 105, 1, SVGCompliance | X11Compliance },
240 {
"DodgerBlue", 30, 144, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
241 {
"DodgerBlue1", 30, 144, 255, 1, X11Compliance },
242 {
"DodgerBlue2", 28, 134, 238, 1, X11Compliance },
243 {
"DodgerBlue3", 24, 116, 205, 1, X11Compliance },
244 {
"DodgerBlue4", 16, 78, 139, 1, X11Compliance },
245 {
"firebrick", 178, 34, 34, 1, SVGCompliance | X11Compliance | XPMCompliance },
246 {
"firebrick1", 255, 48, 48, 1, X11Compliance },
247 {
"firebrick2", 238, 44, 44, 1, X11Compliance },
248 {
"firebrick3", 205, 38, 38, 1, X11Compliance },
249 {
"firebrick4", 139, 26, 26, 1, X11Compliance },
250 {
"FloralWhite", 255, 250, 240, 1, SVGCompliance | X11Compliance | XPMCompliance },
251 {
"ForestGreen", 34, 139, 34, 1, SVGCompliance | X11Compliance | XPMCompliance },
252 {
"fractal", 128, 128, 128, 1, SVGCompliance },
253 {
"freeze", 0, 0, 0, 0, SVGCompliance },
254 {
"fuchsia", 255, 0, 255, 1, SVGCompliance },
255 {
"gainsboro", 220, 220, 220, 1, SVGCompliance | X11Compliance | XPMCompliance },
256 {
"GhostWhite", 248, 248, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
257 {
"gold", 255, 215, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
258 {
"gold1", 255, 215, 0, 1, X11Compliance },
259 {
"gold2", 238, 201, 0, 1, X11Compliance },
260 {
"gold3", 205, 173, 0, 1, X11Compliance },
261 {
"gold4", 139, 117, 0, 1, X11Compliance },
262 {
"goldenrod", 218, 165, 32, 1, SVGCompliance | X11Compliance | XPMCompliance },
263 {
"goldenrod1", 255, 193, 37, 1, X11Compliance },
264 {
"goldenrod2", 238, 180, 34, 1, X11Compliance },
265 {
"goldenrod3", 205, 155, 29, 1, X11Compliance },
266 {
"goldenrod4", 139, 105, 20, 1, X11Compliance },
267 {
"gray", 126, 126, 126, 1, SVGCompliance },
268 {
"gray", 190, 190, 190, 1, X11Compliance | XPMCompliance },
269 {
"gray0", 0, 0, 0, 1, X11Compliance | XPMCompliance },
270 {
"gray1", 3, 3, 3, 1, X11Compliance | XPMCompliance },
271 {
"gray10", 26, 26, 26, 1, X11Compliance | XPMCompliance },
272 {
"gray100", 255, 255, 255, 1, X11Compliance | XPMCompliance },
273 {
"gray100", 255, 255, 255, 1, X11Compliance | XPMCompliance },
274 {
"gray11", 28, 28, 28, 1, X11Compliance | XPMCompliance },
275 {
"gray12", 31, 31, 31, 1, X11Compliance | XPMCompliance },
276 {
"gray13", 33, 33, 33, 1, X11Compliance | XPMCompliance },
277 {
"gray14", 36, 36, 36, 1, X11Compliance | XPMCompliance },
278 {
"gray15", 38, 38, 38, 1, X11Compliance | XPMCompliance },
279 {
"gray16", 41, 41, 41, 1, X11Compliance | XPMCompliance },
280 {
"gray17", 43, 43, 43, 1, X11Compliance | XPMCompliance },
281 {
"gray18", 46, 46, 46, 1, X11Compliance | XPMCompliance },
282 {
"gray19", 48, 48, 48, 1, X11Compliance | XPMCompliance },
283 {
"gray2", 5, 5, 5, 1, X11Compliance | XPMCompliance },
284 {
"gray20", 51, 51, 51, 1, X11Compliance | XPMCompliance },
285 {
"gray21", 54, 54, 54, 1, X11Compliance | XPMCompliance },
286 {
"gray22", 56, 56, 56, 1, X11Compliance | XPMCompliance },
287 {
"gray23", 59, 59, 59, 1, X11Compliance | XPMCompliance },
288 {
"gray24", 61, 61, 61, 1, X11Compliance | XPMCompliance },
289 {
"gray25", 64, 64, 64, 1, X11Compliance | XPMCompliance },
290 {
"gray26", 66, 66, 66, 1, X11Compliance | XPMCompliance },
291 {
"gray27", 69, 69, 69, 1, X11Compliance | XPMCompliance },
292 {
"gray28", 71, 71, 71, 1, X11Compliance | XPMCompliance },
293 {
"gray29", 74, 74, 74, 1, X11Compliance | XPMCompliance },
294 {
"gray3", 8, 8, 8, 1, X11Compliance | XPMCompliance },
295 {
"gray30", 77, 77, 77, 1, X11Compliance | XPMCompliance },
296 {
"gray31", 79, 79, 79, 1, X11Compliance | XPMCompliance },
297 {
"gray32", 82, 82, 82, 1, X11Compliance | XPMCompliance },
298 {
"gray33", 84, 84, 84, 1, X11Compliance | XPMCompliance },
299 {
"gray34", 87, 87, 87, 1, X11Compliance | XPMCompliance },
300 {
"gray35", 89, 89, 89, 1, X11Compliance | XPMCompliance },
301 {
"gray36", 92, 92, 92, 1, X11Compliance | XPMCompliance },
302 {
"gray37", 94, 94, 94, 1, X11Compliance | XPMCompliance },
303 {
"gray38", 97, 97, 97, 1, X11Compliance | XPMCompliance },
304 {
"gray39", 99, 99, 99, 1, X11Compliance | XPMCompliance },
305 {
"gray4", 10, 10, 10, 1, X11Compliance | XPMCompliance },
306 {
"gray40", 102, 102, 102, 1, X11Compliance | XPMCompliance },
307 {
"gray41", 105, 105, 105, 1, X11Compliance | XPMCompliance },
308 {
"gray42", 107, 107, 107, 1, X11Compliance | XPMCompliance },
309 {
"gray43", 110, 110, 110, 1, X11Compliance | XPMCompliance },
310 {
"gray44", 112, 112, 112, 1, X11Compliance | XPMCompliance },
311 {
"gray45", 115, 115, 115, 1, X11Compliance | XPMCompliance },
312 {
"gray46", 117, 117, 117, 1, X11Compliance | XPMCompliance },
313 {
"gray47", 120, 120, 120, 1, X11Compliance | XPMCompliance },
314 {
"gray48", 122, 122, 122, 1, X11Compliance | XPMCompliance },
315 {
"gray49", 125, 125, 125, 1, X11Compliance | XPMCompliance },
316 {
"gray5", 13, 13, 13, 1, X11Compliance | XPMCompliance },
317 {
"gray50", 127, 127, 127, 1, X11Compliance | XPMCompliance },
318 {
"gray51", 130, 130, 130, 1, X11Compliance | XPMCompliance },
319 {
"gray52", 133, 133, 133, 1, X11Compliance | XPMCompliance },
320 {
"gray53", 135, 135, 135, 1, X11Compliance | XPMCompliance },
321 {
"gray54", 138, 138, 138, 1, X11Compliance | XPMCompliance },
322 {
"gray55", 140, 140, 140, 1, X11Compliance | XPMCompliance },
323 {
"gray56", 143, 143, 143, 1, X11Compliance | XPMCompliance },
324 {
"gray57", 145, 145, 145, 1, X11Compliance | XPMCompliance },
325 {
"gray58", 148, 148, 148, 1, X11Compliance | XPMCompliance },
326 {
"gray59", 150, 150, 150, 1, X11Compliance | XPMCompliance },
327 {
"gray6", 15, 15, 15, 1, X11Compliance | XPMCompliance },
328 {
"gray60", 153, 153, 153, 1, X11Compliance | XPMCompliance },
329 {
"gray61", 156, 156, 156, 1, X11Compliance | XPMCompliance },
330 {
"gray62", 158, 158, 158, 1, X11Compliance | XPMCompliance },
331 {
"gray63", 161, 161, 161, 1, X11Compliance | XPMCompliance },
332 {
"gray64", 163, 163, 163, 1, X11Compliance | XPMCompliance },
333 {
"gray65", 166, 166, 166, 1, X11Compliance | XPMCompliance },
334 {
"gray66", 168, 168, 168, 1, X11Compliance | XPMCompliance },
335 {
"gray67", 171, 171, 171, 1, X11Compliance | XPMCompliance },
336 {
"gray68", 173, 173, 173, 1, X11Compliance | XPMCompliance },
337 {
"gray69", 176, 176, 176, 1, X11Compliance | XPMCompliance },
338 {
"gray7", 18, 18, 18, 1, X11Compliance | XPMCompliance },
339 {
"gray70", 179, 179, 179, 1, X11Compliance | XPMCompliance },
340 {
"gray71", 181, 181, 181, 1, X11Compliance | XPMCompliance },
341 {
"gray72", 184, 184, 184, 1, X11Compliance | XPMCompliance },
342 {
"gray73", 186, 186, 186, 1, X11Compliance | XPMCompliance },
343 {
"gray74", 189, 189, 189, 1, X11Compliance | XPMCompliance },
344 {
"gray75", 191, 191, 191, 1, X11Compliance | XPMCompliance },
345 {
"gray76", 194, 194, 194, 1, X11Compliance | XPMCompliance },
346 {
"gray77", 196, 196, 196, 1, X11Compliance | XPMCompliance },
347 {
"gray78", 199, 199, 199, 1, X11Compliance | XPMCompliance },
348 {
"gray79", 201, 201, 201, 1, X11Compliance | XPMCompliance },
349 {
"gray8", 20, 20, 20, 1, X11Compliance | XPMCompliance },
350 {
"gray80", 204, 204, 204, 1, X11Compliance | XPMCompliance },
351 {
"gray81", 207, 207, 207, 1, X11Compliance | XPMCompliance },
352 {
"gray82", 209, 209, 209, 1, X11Compliance | XPMCompliance },
353 {
"gray83", 212, 212, 212, 1, X11Compliance | XPMCompliance },
354 {
"gray84", 214, 214, 214, 1, X11Compliance | XPMCompliance },
355 {
"gray85", 217, 217, 217, 1, X11Compliance | XPMCompliance },
356 {
"gray86", 219, 219, 219, 1, X11Compliance | XPMCompliance },
357 {
"gray87", 222, 222, 222, 1, X11Compliance | XPMCompliance },
358 {
"gray88", 224, 224, 224, 1, X11Compliance | XPMCompliance },
359 {
"gray89", 227, 227, 227, 1, X11Compliance | XPMCompliance },
360 {
"gray9", 23, 23, 23, 1, X11Compliance | XPMCompliance },
361 {
"gray90", 229, 229, 229, 1, X11Compliance | XPMCompliance },
362 {
"gray91", 232, 232, 232, 1, X11Compliance | XPMCompliance },
363 {
"gray92", 235, 235, 235, 1, X11Compliance | XPMCompliance },
364 {
"gray93", 237, 237, 237, 1, X11Compliance | XPMCompliance },
365 {
"gray94", 240, 240, 240, 1, X11Compliance | XPMCompliance },
366 {
"gray95", 242, 242, 242, 1, X11Compliance | XPMCompliance },
367 {
"gray96", 245, 245, 245, 1, X11Compliance | XPMCompliance },
368 {
"gray97", 247, 247, 247, 1, X11Compliance | XPMCompliance },
369 {
"gray98", 250, 250, 250, 1, X11Compliance | XPMCompliance },
370 {
"gray99", 252, 252, 252, 1, X11Compliance | XPMCompliance },
371 {
"green", 0, 255, 0, 1, X11Compliance | XPMCompliance },
372 {
"green1", 0, 255, 0, 1, X11Compliance },
373 {
"green2", 0, 238, 0, 1, X11Compliance },
374 {
"green3", 0, 205, 0, 1, X11Compliance },
375 {
"green4", 0, 139, 0, 1, X11Compliance },
376 {
"GreenYellow", 173, 255, 47, 1, X11Compliance | XPMCompliance },
377 {
"grey", 190, 190, 190, 1, SVGCompliance | X11Compliance },
378 {
"grey0", 0, 0, 0, 1, SVGCompliance | X11Compliance },
379 {
"grey1", 3, 3, 3, 1, SVGCompliance | X11Compliance },
380 {
"grey10", 26, 26, 26, 1, SVGCompliance | X11Compliance },
381 {
"grey100", 255, 255, 255, 1, SVGCompliance | X11Compliance },
382 {
"grey11", 28, 28, 28, 1, SVGCompliance | X11Compliance },
383 {
"grey12", 31, 31, 31, 1, SVGCompliance | X11Compliance },
384 {
"grey13", 33, 33, 33, 1, SVGCompliance | X11Compliance },
385 {
"grey14", 36, 36, 36, 1, SVGCompliance | X11Compliance },
386 {
"grey15", 38, 38, 38, 1, SVGCompliance | X11Compliance },
387 {
"grey16", 41, 41, 41, 1, SVGCompliance | X11Compliance },
388 {
"grey17", 43, 43, 43, 1, SVGCompliance | X11Compliance },
389 {
"grey18", 46, 46, 46, 1, SVGCompliance | X11Compliance },
390 {
"grey19", 48, 48, 48, 1, SVGCompliance | X11Compliance },
391 {
"grey2", 5, 5, 5, 1, SVGCompliance | X11Compliance },
392 {
"grey20", 51, 51, 51, 1, SVGCompliance | X11Compliance },
393 {
"grey21", 54, 54, 54, 1, SVGCompliance | X11Compliance },
394 {
"grey22", 56, 56, 56, 1, SVGCompliance | X11Compliance },
395 {
"grey23", 59, 59, 59, 1, SVGCompliance | X11Compliance },
396 {
"grey24", 61, 61, 61, 1, SVGCompliance | X11Compliance },
397 {
"grey25", 64, 64, 64, 1, SVGCompliance | X11Compliance },
398 {
"grey26", 66, 66, 66, 1, SVGCompliance | X11Compliance },
399 {
"grey27", 69, 69, 69, 1, SVGCompliance | X11Compliance },
400 {
"grey28", 71, 71, 71, 1, SVGCompliance | X11Compliance },
401 {
"grey29", 74, 74, 74, 1, SVGCompliance | X11Compliance },
402 {
"grey3", 8, 8, 8, 1, SVGCompliance | X11Compliance },
403 {
"grey30", 77, 77, 77, 1, SVGCompliance | X11Compliance },
404 {
"grey31", 79, 79, 79, 1, SVGCompliance | X11Compliance },
405 {
"grey32", 82, 82, 82, 1, SVGCompliance | X11Compliance },
406 {
"grey33", 84, 84, 84, 1, SVGCompliance | X11Compliance },
407 {
"grey34", 87, 87, 87, 1, SVGCompliance | X11Compliance },
408 {
"grey35", 89, 89, 89, 1, SVGCompliance | X11Compliance },
409 {
"grey36", 92, 92, 92, 1, SVGCompliance | X11Compliance },
410 {
"grey37", 94, 94, 94, 1, SVGCompliance | X11Compliance },
411 {
"grey38", 97, 97, 97, 1, SVGCompliance | X11Compliance },
412 {
"grey39", 99, 99, 99, 1, SVGCompliance | X11Compliance },
413 {
"grey4", 10, 10, 10, 1, SVGCompliance | X11Compliance },
414 {
"grey40", 102, 102, 102, 1, SVGCompliance | X11Compliance },
415 {
"grey41", 105, 105, 105, 1, SVGCompliance | X11Compliance },
416 {
"grey42", 107, 107, 107, 1, SVGCompliance | X11Compliance },
417 {
"grey43", 110, 110, 110, 1, SVGCompliance | X11Compliance },
418 {
"grey44", 112, 112, 112, 1, SVGCompliance | X11Compliance },
419 {
"grey45", 115, 115, 115, 1, SVGCompliance | X11Compliance },
420 {
"grey46", 117, 117, 117, 1, SVGCompliance | X11Compliance },
421 {
"grey47", 120, 120, 120, 1, SVGCompliance | X11Compliance },
422 {
"grey48", 122, 122, 122, 1, SVGCompliance | X11Compliance },
423 {
"grey49", 125, 125, 125, 1, SVGCompliance | X11Compliance },
424 {
"grey5", 13, 13, 13, 1, SVGCompliance | X11Compliance },
425 {
"grey50", 127, 127, 127, 1, SVGCompliance | X11Compliance },
426 {
"grey51", 130, 130, 130, 1, SVGCompliance | X11Compliance },
427 {
"grey52", 133, 133, 133, 1, SVGCompliance | X11Compliance },
428 {
"grey53", 135, 135, 135, 1, SVGCompliance | X11Compliance },
429 {
"grey54", 138, 138, 138, 1, SVGCompliance | X11Compliance },
430 {
"grey55", 140, 140, 140, 1, SVGCompliance | X11Compliance },
431 {
"grey56", 143, 143, 143, 1, SVGCompliance | X11Compliance },
432 {
"grey57", 145, 145, 145, 1, SVGCompliance | X11Compliance },
433 {
"grey58", 148, 148, 148, 1, SVGCompliance | X11Compliance },
434 {
"grey59", 150, 150, 150, 1, SVGCompliance | X11Compliance },
435 {
"grey6", 15, 15, 15, 1, SVGCompliance | X11Compliance },
436 {
"grey60", 153, 153, 153, 1, SVGCompliance | X11Compliance },
437 {
"grey61", 156, 156, 156, 1, SVGCompliance | X11Compliance },
438 {
"grey62", 158, 158, 158, 1, SVGCompliance | X11Compliance },
439 {
"grey63", 161, 161, 161, 1, SVGCompliance | X11Compliance },
440 {
"grey64", 163, 163, 163, 1, SVGCompliance | X11Compliance },
441 {
"grey65", 166, 166, 166, 1, SVGCompliance | X11Compliance },
442 {
"grey66", 168, 168, 168, 1, SVGCompliance | X11Compliance },
443 {
"grey67", 171, 171, 171, 1, SVGCompliance | X11Compliance },
444 {
"grey68", 173, 173, 173, 1, SVGCompliance | X11Compliance },
445 {
"grey69", 176, 176, 176, 1, SVGCompliance | X11Compliance },
446 {
"grey7", 18, 18, 18, 1, SVGCompliance | X11Compliance },
447 {
"grey70", 179, 179, 179, 1, SVGCompliance | X11Compliance },
448 {
"grey71", 181, 181, 181, 1, SVGCompliance | X11Compliance },
449 {
"grey72", 184, 184, 184, 1, SVGCompliance | X11Compliance },
450 {
"grey73", 186, 186, 186, 1, SVGCompliance | X11Compliance },
451 {
"grey74", 189, 189, 189, 1, SVGCompliance | X11Compliance },
452 {
"grey75", 191, 191, 191, 1, SVGCompliance | X11Compliance },
453 {
"grey76", 194, 194, 194, 1, SVGCompliance | X11Compliance },
454 {
"grey77", 196, 196, 196, 1, SVGCompliance | X11Compliance },
455 {
"grey78", 199, 199, 199, 1, SVGCompliance | X11Compliance },
456 {
"grey79", 201, 201, 201, 1, SVGCompliance | X11Compliance },
457 {
"grey8", 20, 20, 20, 1, SVGCompliance | X11Compliance },
458 {
"grey80", 204, 204, 204, 1, SVGCompliance | X11Compliance },
459 {
"grey81", 207, 207, 207, 1, SVGCompliance | X11Compliance },
460 {
"grey82", 209, 209, 209, 1, SVGCompliance | X11Compliance },
461 {
"grey83", 212, 212, 212, 1, SVGCompliance | X11Compliance },
462 {
"grey84", 214, 214, 214, 1, SVGCompliance | X11Compliance },
463 {
"grey85", 217, 217, 217, 1, SVGCompliance | X11Compliance },
464 {
"grey86", 219, 219, 219, 1, SVGCompliance | X11Compliance },
465 {
"grey87", 222, 222, 222, 1, SVGCompliance | X11Compliance },
466 {
"grey88", 224, 224, 224, 1, SVGCompliance | X11Compliance },
467 {
"grey89", 227, 227, 227, 1, SVGCompliance | X11Compliance },
468 {
"grey9", 23, 23, 23, 1, SVGCompliance | X11Compliance },
469 {
"grey90", 229, 229, 229, 1, SVGCompliance | X11Compliance },
470 {
"grey91", 232, 232, 232, 1, SVGCompliance | X11Compliance },
471 {
"grey92", 235, 235, 235, 1, SVGCompliance | X11Compliance },
472 {
"grey93", 237, 237, 237, 1, SVGCompliance | X11Compliance },
473 {
"grey94", 240, 240, 240, 1, SVGCompliance | X11Compliance },
474 {
"grey95", 242, 242, 242, 1, SVGCompliance | X11Compliance },
475 {
"grey96", 245, 245, 245, 1, SVGCompliance | X11Compliance },
476 {
"grey97", 247, 247, 247, 1, SVGCompliance | X11Compliance },
477 {
"grey98", 250, 250, 250, 1, SVGCompliance | X11Compliance },
478 {
"grey99", 252, 252, 252, 1, SVGCompliance | X11Compliance },
479 {
"honeydew", 240, 255, 240, 1, SVGCompliance | X11Compliance | XPMCompliance },
480 {
"honeydew1", 240, 255, 240, 1, X11Compliance },
481 {
"honeydew2", 224, 238, 224, 1, X11Compliance },
482 {
"honeydew3", 193, 205, 193, 1, X11Compliance },
483 {
"honeydew4", 131, 139, 131, 1, X11Compliance },
484 {
"HotPink", 255, 105, 180, 1, SVGCompliance | X11Compliance | XPMCompliance },
485 {
"HotPink1", 255, 110, 180, 1, X11Compliance },
486 {
"HotPink2", 238, 106, 167, 1, X11Compliance },
487 {
"HotPink3", 205, 96, 144, 1, X11Compliance },
488 {
"HotPink4", 139, 58, 98, 1, X11Compliance },
489 {
"IndianRed", 205, 92, 92, 1, SVGCompliance | X11Compliance | XPMCompliance },
490 {
"IndianRed1", 255, 106, 106, 1, X11Compliance },
491 {
"IndianRed2", 238, 99, 99, 1, X11Compliance },
492 {
"IndianRed3", 205, 85, 85, 1, X11Compliance },
493 {
"IndianRed4", 139, 58, 58, 1, X11Compliance },
494 {
"indigo", 75, 0, 130, 1, SVGCompliance },
495 {
"ivory", 255, 255, 240, 1, SVGCompliance | X11Compliance | XPMCompliance },
496 {
"ivory1", 255, 255, 240, 1, X11Compliance },
497 {
"ivory2", 238, 238, 224, 1, X11Compliance },
498 {
"ivory3", 205, 205, 193, 1, X11Compliance },
499 {
"ivory4", 139, 139, 131, 1, X11Compliance },
500 {
"khaki", 240, 230, 140, 1, SVGCompliance | X11Compliance | XPMCompliance },
501 {
"khaki1", 255, 246, 143, 1, X11Compliance },
502 {
"khaki2", 238, 230, 133, 1, X11Compliance },
503 {
"khaki3", 205, 198, 115, 1, X11Compliance },
504 {
"khaki4", 139, 134, 78, 1, X11Compliance },
505 {
"lavender", 230, 230, 250, 1, SVGCompliance | X11Compliance | XPMCompliance },
506 {
"LavenderBlush", 255, 240, 245, 1, SVGCompliance | X11Compliance | XPMCompliance },
507 {
"LavenderBlush1", 255, 240, 245, 1, X11Compliance },
508 {
"LavenderBlush2", 238, 224, 229, 1, X11Compliance },
509 {
"LavenderBlush3", 205, 193, 197, 1, X11Compliance },
510 {
"LavenderBlush4", 139, 131, 134, 1, X11Compliance },
511 {
"LawnGreen", 124, 252, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
512 {
"LemonChiffon", 255, 250, 205, 1, SVGCompliance | X11Compliance | XPMCompliance },
513 {
"LemonChiffon1", 255, 250, 205, 1, X11Compliance },
514 {
"LemonChiffon2", 238, 233, 191, 1, X11Compliance },
515 {
"LemonChiffon3", 205, 201, 165, 1, X11Compliance },
516 {
"LemonChiffon4", 139, 137, 112, 1, X11Compliance },
517 {
"LightBlue", 173, 216, 230, 1, SVGCompliance | X11Compliance | XPMCompliance },
518 {
"LightBlue1", 191, 239, 255, 1, X11Compliance },
519 {
"LightBlue2", 178, 223, 238, 1, X11Compliance },
520 {
"LightBlue3", 154, 192, 205, 1, X11Compliance },
521 {
"LightBlue4", 104, 131, 139, 1, X11Compliance },
522 {
"LightCoral", 240, 128, 128, 1, SVGCompliance | X11Compliance | XPMCompliance },
523 {
"LightCyan", 224, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
524 {
"LightCyan1", 224, 255, 255, 1, X11Compliance },
525 {
"LightCyan2", 209, 238, 238, 1, X11Compliance },
526 {
"LightCyan3", 180, 205, 205, 1, X11Compliance },
527 {
"LightCyan4", 122, 139, 139, 1, X11Compliance },
528 {
"LightGoldenrod", 238, 221, 130, 1, X11Compliance | XPMCompliance },
529 {
"LightGoldenrod1", 255, 236, 139, 1, X11Compliance },
530 {
"LightGoldenrod2", 238, 220, 130, 1, X11Compliance },
531 {
"LightGoldenrod3", 205, 190, 112, 1, X11Compliance },
532 {
"LightGoldenrod4", 139, 129, 76, 1, X11Compliance },
533 {
"LightGoldenrodYellow", 250, 250, 210, 1, SVGCompliance | X11Compliance | XPMCompliance },
534 {
"LightGray", 211, 211, 211, 1, SVGCompliance | X11Compliance | XPMCompliance },
535 {
"LightGreen", 144, 238, 144, 1, SVGCompliance | X11Compliance },
536 {
"LightGrey", 211, 211, 211, 1, SVGCompliance | X11Compliance },
537 {
"LightPink", 255, 182, 193, 1, SVGCompliance | X11Compliance | XPMCompliance },
538 {
"LightPink1", 255, 174, 185, 1, X11Compliance },
539 {
"LightPink2", 238, 162, 173, 1, X11Compliance },
540 {
"LightPink3", 205, 140, 149, 1, X11Compliance },
541 {
"LightPink4", 139, 95, 101, 1, X11Compliance },
542 {
"LightSalmon", 255, 160, 122, 1, SVGCompliance | X11Compliance | XPMCompliance },
543 {
"LightSalmon1", 255, 160, 122, 1, X11Compliance },
544 {
"LightSalmon2", 238, 149, 114, 1, X11Compliance },
545 {
"LightSalmon3", 205, 129, 98, 1, X11Compliance },
546 {
"LightSalmon4", 139, 87, 66, 1, X11Compliance },
547 {
"LightSeaGreen", 32, 178, 170, 1, SVGCompliance | X11Compliance | XPMCompliance },
548 {
"LightSkyBlue", 135, 206, 250, 1, SVGCompliance | X11Compliance | XPMCompliance },
549 {
"LightSkyBlue1", 176, 226, 255, 1, X11Compliance },
550 {
"LightSkyBlue2", 164, 211, 238, 1, X11Compliance },
551 {
"LightSkyBlue3", 141, 182, 205, 1, X11Compliance },
552 {
"LightSkyBlue4", 96, 123, 139, 1, X11Compliance },
553 {
"LightSlateBlue", 132, 112, 255, 1, X11Compliance | XPMCompliance },
554 {
"LightSlateGray", 119, 136, 153, 1, SVGCompliance | X11Compliance | XPMCompliance },
555 {
"LightSlateGrey", 119, 136, 153, 1, SVGCompliance | X11Compliance },
556 {
"LightSteelBlue", 176, 196, 222, 1, SVGCompliance | X11Compliance | XPMCompliance },
557 {
"LightSteelBlue1", 202, 225, 255, 1, X11Compliance },
558 {
"LightSteelBlue2", 188, 210, 238, 1, X11Compliance },
559 {
"LightSteelBlue3", 162, 181, 205, 1, X11Compliance },
560 {
"LightSteelBlue4", 110, 123, 139, 1, X11Compliance },
561 {
"LightYellow", 255, 255, 224, 1, SVGCompliance | X11Compliance | XPMCompliance },
562 {
"LightYellow1", 255, 255, 224, 1, X11Compliance },
563 {
"LightYellow2", 238, 238, 209, 1, X11Compliance },
564 {
"LightYellow3", 205, 205, 180, 1, X11Compliance },
565 {
"LightYellow4", 139, 139, 122, 1, X11Compliance },
566 {
"lime", 0, 255, 0, 1, SVGCompliance },
567 {
"LimeGreen", 50, 205, 50, 1, SVGCompliance | X11Compliance | XPMCompliance },
568 {
"linen", 250, 240, 230, 1, SVGCompliance | X11Compliance | XPMCompliance },
569 {
"magenta1", 255, 0, 255, 1, X11Compliance },
570 {
"magenta2", 238, 0, 238, 1, X11Compliance },
571 {
"magenta3", 205, 0, 205, 1, X11Compliance },
572 {
"magenta4", 139, 0, 139, 1, X11Compliance },
573 {
"maroon", 128, 0, 0, 1, SVGCompliance },
574 {
"maroon", 176, 48, 96, 1, X11Compliance | XPMCompliance },
575 {
"maroon1", 255, 52, 179, 1, X11Compliance },
576 {
"maroon2", 238, 48, 167, 1, X11Compliance },
577 {
"maroon3", 205, 41, 144, 1, X11Compliance },
578 {
"maroon4", 139, 28, 98, 1, X11Compliance },
579 {
"MediumAquamarine", 102, 205, 170, 1, SVGCompliance | X11Compliance | XPMCompliance },
580 {
"MediumBlue", 0, 0, 205, 1, SVGCompliance | X11Compliance | XPMCompliance },
581 {
"MediumForestGreen", 50, 129, 75, 1, X11Compliance | XPMCompliance },
582 {
"MediumGoldenRod", 209, 193, 102, 1, X11Compliance | XPMCompliance },
583 {
"MediumOrchid", 186, 85, 211, 1, SVGCompliance | X11Compliance | XPMCompliance },
584 {
"MediumOrchid1", 224, 102, 255, 1, X11Compliance },
585 {
"MediumOrchid2", 209, 95, 238, 1, X11Compliance },
586 {
"MediumOrchid3", 180, 82, 205, 1, X11Compliance },
587 {
"MediumOrchid4", 122, 55, 139, 1, X11Compliance },
588 {
"MediumPurple", 147, 112, 219, 1, SVGCompliance | X11Compliance | XPMCompliance },
589 {
"MediumPurple1", 171, 130, 255, 1, X11Compliance },
590 {
"MediumPurple2", 159, 121, 238, 1, X11Compliance },
591 {
"MediumPurple3", 137, 104, 205, 1, X11Compliance },
592 {
"MediumPurple4", 93, 71, 139, 1, X11Compliance },
593 {
"MediumSeaGreen", 60, 179, 113, 1, SVGCompliance | X11Compliance | XPMCompliance },
594 {
"MediumSlateBlue", 123, 104, 238, 1, SVGCompliance | X11Compliance | XPMCompliance },
595 {
"MediumSpringGreen", 0, 250, 154, 1, SVGCompliance | X11Compliance | XPMCompliance },
596 {
"MediumTurquoise", 72, 209, 204, 1, SVGCompliance | X11Compliance | XPMCompliance },
597 {
"MediumVioletRed", 199, 21, 133, 1, SVGCompliance | X11Compliance | XPMCompliance },
598 {
"MidnightBlue", 25, 25, 112, 1, SVGCompliance | X11Compliance | XPMCompliance },
599 {
"MintCream", 245, 255, 250, 1, SVGCompliance | X11Compliance | XPMCompliance },
600 {
"MistyRose", 255, 228, 225, 1, SVGCompliance | X11Compliance | XPMCompliance },
601 {
"MistyRose1", 255, 228, 225, 1, X11Compliance },
602 {
"MistyRose2", 238, 213, 210, 1, X11Compliance },
603 {
"MistyRose3", 205, 183, 181, 1, X11Compliance },
604 {
"MistyRose4", 139, 125, 123, 1, X11Compliance },
605 {
"moccasin", 255, 228, 181, 1, SVGCompliance | X11Compliance | XPMCompliance },
606 {
"NavajoWhite", 255, 222, 173, 1, SVGCompliance | X11Compliance | XPMCompliance },
607 {
"NavajoWhite1", 255, 222, 173, 1, X11Compliance },
608 {
"NavajoWhite2", 238, 207, 161, 1, X11Compliance },
609 {
"NavajoWhite3", 205, 179, 139, 1, X11Compliance },
610 {
"NavajoWhite4", 139, 121, 94, 1, X11Compliance },
611 {
"navy", 0, 0, 128, 1, SVGCompliance | X11Compliance | XPMCompliance },
612 {
"NavyBlue", 0, 0, 128, 1, X11Compliance | XPMCompliance },
613 {
"matte", 0, 0, 0, 0, SVGCompliance },
614 {
"OldLace", 253, 245, 230, 1, SVGCompliance | X11Compliance | XPMCompliance },
615 {
"olive", 128, 128, 0, 1, SVGCompliance },
616 {
"OliveDrab", 107, 142, 35, 1, SVGCompliance | X11Compliance | XPMCompliance },
617 {
"OliveDrab1", 192, 255, 62, 1, X11Compliance },
618 {
"OliveDrab2", 179, 238, 58, 1, X11Compliance },
619 {
"OliveDrab3", 154, 205, 50, 1, X11Compliance },
620 {
"OliveDrab4", 105, 139, 34, 1, X11Compliance },
621 {
"opaque", 0, 0, 0, 1, SVGCompliance },
622 {
"orange", 255, 165, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
623 {
"orange1", 255, 165, 0, 1, X11Compliance },
624 {
"orange2", 238, 154, 0, 1, X11Compliance },
625 {
"orange3", 205, 133, 0, 1, X11Compliance },
626 {
"orange4", 139, 90, 0, 1, X11Compliance },
627 {
"OrangeRed", 255, 69, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
628 {
"OrangeRed1", 255, 69, 0, 1, X11Compliance },
629 {
"OrangeRed2", 238, 64, 0, 1, X11Compliance },
630 {
"OrangeRed3", 205, 55, 0, 1, X11Compliance },
631 {
"OrangeRed4", 139, 37, 0, 1, X11Compliance },
632 {
"orchid", 218, 112, 214, 1, SVGCompliance | X11Compliance | XPMCompliance },
633 {
"orchid1", 255, 131, 250, 1, X11Compliance },
634 {
"orchid2", 238, 122, 233, 1, X11Compliance },
635 {
"orchid3", 205, 105, 201, 1, X11Compliance },
636 {
"orchid4", 139, 71, 137, 1, X11Compliance },
637 {
"PaleGoldenrod", 238, 232, 170, 1, SVGCompliance | X11Compliance | XPMCompliance },
638 {
"PaleGreen", 152, 251, 152, 1, SVGCompliance | X11Compliance | XPMCompliance },
639 {
"PaleGreen1", 154, 255, 154, 1, X11Compliance },
640 {
"PaleGreen2", 144, 238, 144, 1, X11Compliance },
641 {
"PaleGreen3", 124, 205, 124, 1, X11Compliance },
642 {
"PaleGreen4", 84, 139, 84, 1, X11Compliance },
643 {
"PaleTurquoise", 175, 238, 238, 1, SVGCompliance | X11Compliance | XPMCompliance },
644 {
"PaleTurquoise1", 187, 255, 255, 1, X11Compliance },
645 {
"PaleTurquoise2", 174, 238, 238, 1, X11Compliance },
646 {
"PaleTurquoise3", 150, 205, 205, 1, X11Compliance },
647 {
"PaleTurquoise4", 102, 139, 139, 1, X11Compliance },
648 {
"PaleVioletRed", 219, 112, 147, 1, SVGCompliance | X11Compliance | XPMCompliance },
649 {
"PaleVioletRed1", 255, 130, 171, 1, X11Compliance },
650 {
"PaleVioletRed2", 238, 121, 159, 1, X11Compliance },
651 {
"PaleVioletRed3", 205, 104, 137, 1, X11Compliance },
652 {
"PaleVioletRed4", 139, 71, 93, 1, X11Compliance },
653 {
"PapayaWhip", 255, 239, 213, 1, SVGCompliance | X11Compliance | XPMCompliance },
654 {
"PeachPuff", 255, 218, 185, 1, SVGCompliance | X11Compliance | XPMCompliance },
655 {
"PeachPuff1", 255, 218, 185, 1, X11Compliance },
656 {
"PeachPuff2", 238, 203, 173, 1, X11Compliance },
657 {
"PeachPuff3", 205, 175, 149, 1, X11Compliance },
658 {
"PeachPuff4", 139, 119, 101, 1, X11Compliance },
659 {
"peru", 205, 133, 63, 1, SVGCompliance | X11Compliance | XPMCompliance },
660 {
"pink", 255, 192, 203, 1, SVGCompliance | X11Compliance | XPMCompliance },
661 {
"pink1", 255, 181, 197, 1, X11Compliance },
662 {
"pink2", 238, 169, 184, 1, X11Compliance },
663 {
"pink3", 205, 145, 158, 1, X11Compliance },
664 {
"pink4", 139, 99, 108, 1, X11Compliance },
665 {
"plum", 221, 160, 221, 1, SVGCompliance | X11Compliance | XPMCompliance },
666 {
"plum1", 255, 187, 255, 1, X11Compliance },
667 {
"plum2", 238, 174, 238, 1, X11Compliance },
668 {
"plum3", 205, 150, 205, 1, X11Compliance },
669 {
"plum4", 139, 102, 139, 1, X11Compliance },
670 {
"PowderBlue", 176, 224, 230, 1, SVGCompliance | X11Compliance | XPMCompliance },
671 {
"purple", 128, 0, 128, 1, SVGCompliance },
672 {
"purple", 160, 32, 240, 1, X11Compliance | XPMCompliance },
673 {
"purple1", 155, 48, 255, 1, X11Compliance },
674 {
"purple2", 145, 44, 238, 1, X11Compliance },
675 {
"purple3", 125, 38, 205, 1, X11Compliance },
676 {
"purple4", 85, 26, 139, 1, X11Compliance },
677 {
"red1", 255, 0, 0, 1, X11Compliance },
678 {
"red2", 238, 0, 0, 1, X11Compliance },
679 {
"red3", 205, 0, 0, 1, X11Compliance },
680 {
"red4", 139, 0, 0, 1, X11Compliance },
681 {
"RosyBrown", 188, 143, 143, 1, SVGCompliance | X11Compliance | XPMCompliance },
682 {
"RosyBrown1", 255, 193, 193, 1, X11Compliance },
683 {
"RosyBrown2", 238, 180, 180, 1, X11Compliance },
684 {
"RosyBrown3", 205, 155, 155, 1, X11Compliance },
685 {
"RosyBrown4", 139, 105, 105, 1, X11Compliance },
686 {
"RoyalBlue", 65, 105, 225, 1, SVGCompliance | X11Compliance | XPMCompliance },
687 {
"RoyalBlue1", 72, 118, 255, 1, X11Compliance },
688 {
"RoyalBlue2", 67, 110, 238, 1, X11Compliance },
689 {
"RoyalBlue3", 58, 95, 205, 1, X11Compliance },
690 {
"RoyalBlue4", 39, 64, 139, 1, X11Compliance },
691 {
"SaddleBrown", 139, 69, 19, 1, SVGCompliance | X11Compliance | XPMCompliance },
692 {
"salmon", 250, 128, 114, 1, SVGCompliance | X11Compliance | XPMCompliance },
693 {
"salmon1", 255, 140, 105, 1, X11Compliance },
694 {
"salmon2", 238, 130, 98, 1, X11Compliance },
695 {
"salmon3", 205, 112, 84, 1, X11Compliance },
696 {
"salmon4", 139, 76, 57, 1, X11Compliance },
697 {
"SandyBrown", 244, 164, 96, 1, SVGCompliance | X11Compliance | XPMCompliance },
698 {
"SeaGreen", 46, 139, 87, 1, SVGCompliance | X11Compliance | XPMCompliance },
699 {
"SeaGreen1", 84, 255, 159, 1, X11Compliance },
700 {
"SeaGreen2", 78, 238, 148, 1, X11Compliance },
701 {
"SeaGreen3", 67, 205, 128, 1, X11Compliance },
702 {
"SeaGreen4", 46, 139, 87, 1, X11Compliance },
703 {
"seashell", 255, 245, 238, 1, SVGCompliance | X11Compliance | XPMCompliance },
704 {
"seashell1", 255, 245, 238, 1, X11Compliance },
705 {
"seashell2", 238, 229, 222, 1, X11Compliance },
706 {
"seashell3", 205, 197, 191, 1, X11Compliance },
707 {
"seashell4", 139, 134, 130, 1, X11Compliance },
708 {
"sienna", 160, 82, 45, 1, SVGCompliance | X11Compliance | XPMCompliance },
709 {
"sienna1", 255, 130, 71, 1, X11Compliance },
710 {
"sienna2", 238, 121, 66, 1, X11Compliance },
711 {
"sienna3", 205, 104, 57, 1, X11Compliance },
712 {
"sienna4", 139, 71, 38, 1, X11Compliance },
713 {
"silver", 192, 192, 192, 1, SVGCompliance },
714 {
"SkyBlue", 135, 206, 235, 1, SVGCompliance | X11Compliance | XPMCompliance },
715 {
"SkyBlue1", 135, 206, 255, 1, X11Compliance },
716 {
"SkyBlue2", 126, 192, 238, 1, X11Compliance },
717 {
"SkyBlue3", 108, 166, 205, 1, X11Compliance },
718 {
"SkyBlue4", 74, 112, 139, 1, X11Compliance },
719 {
"SlateBlue", 106, 90, 205, 1, SVGCompliance | X11Compliance | XPMCompliance },
720 {
"SlateBlue1", 131, 111, 255, 1, X11Compliance },
721 {
"SlateBlue2", 122, 103, 238, 1, X11Compliance },
722 {
"SlateBlue3", 105, 89, 205, 1, X11Compliance },
723 {
"SlateBlue4", 71, 60, 139, 1, X11Compliance },
724 {
"SlateGray", 112, 128, 144, 1, SVGCompliance | X11Compliance | XPMCompliance },
725 {
"SlateGray1", 198, 226, 255, 1, X11Compliance },
726 {
"SlateGray2", 185, 211, 238, 1, X11Compliance },
727 {
"SlateGray3", 159, 182, 205, 1, X11Compliance },
728 {
"SlateGray4", 108, 123, 139, 1, X11Compliance },
729 {
"SlateGrey", 112, 128, 144, 1, SVGCompliance | X11Compliance },
730 {
"snow", 255, 250, 250, 1, SVGCompliance | X11Compliance | XPMCompliance },
731 {
"snow1", 255, 250, 250, 1, X11Compliance },
732 {
"snow2", 238, 233, 233, 1, X11Compliance },
733 {
"snow3", 205, 201, 201, 1, X11Compliance },
734 {
"snow4", 139, 137, 137, 1, X11Compliance },
735 {
"SpringGreen", 0, 255, 127, 1, SVGCompliance | X11Compliance | XPMCompliance },
736 {
"SpringGreen1", 0, 255, 127, 1, X11Compliance },
737 {
"SpringGreen2", 0, 238, 118, 1, X11Compliance },
738 {
"SpringGreen3", 0, 205, 102, 1, X11Compliance },
739 {
"SpringGreen4", 0, 139, 69, 1, X11Compliance },
740 {
"SteelBlue", 70, 130, 180, 1, SVGCompliance | X11Compliance | XPMCompliance },
741 {
"SteelBlue1", 99, 184, 255, 1, X11Compliance },
742 {
"SteelBlue2", 92, 172, 238, 1, X11Compliance },
743 {
"SteelBlue3", 79, 148, 205, 1, X11Compliance },
744 {
"SteelBlue4", 54, 100, 139, 1, X11Compliance },
745 {
"tan", 210, 180, 140, 1, SVGCompliance | X11Compliance | XPMCompliance },
746 {
"tan1", 255, 165, 79, 1, X11Compliance },
747 {
"tan2", 238, 154, 73, 1, X11Compliance },
748 {
"tan3", 205, 133, 63, 1, X11Compliance },
749 {
"tan4", 139, 90, 43, 1, X11Compliance },
750 {
"teal", 0, 128, 128, 1, SVGCompliance },
751 {
"thistle", 216, 191, 216, 1, SVGCompliance | X11Compliance | XPMCompliance },
752 {
"thistle1", 255, 225, 255, 1, X11Compliance },
753 {
"thistle2", 238, 210, 238, 1, X11Compliance },
754 {
"thistle3", 205, 181, 205, 1, X11Compliance },
755 {
"thistle4", 139, 123, 139, 1, X11Compliance },
756 {
"tomato", 255, 99, 71, 1, SVGCompliance | X11Compliance | XPMCompliance },
757 {
"tomato1", 255, 99, 71, 1, X11Compliance },
758 {
"tomato2", 238, 92, 66, 1, X11Compliance },
759 {
"tomato3", 205, 79, 57, 1, X11Compliance },
760 {
"tomato4", 139, 54, 38, 1, X11Compliance },
761 {
"transparent", 0, 0, 0, 0, SVGCompliance },
762 {
"turquoise", 64, 224, 208, 1, SVGCompliance | X11Compliance | XPMCompliance },
763 {
"turquoise1", 0, 245, 255, 1, X11Compliance },
764 {
"turquoise2", 0, 229, 238, 1, X11Compliance },
765 {
"turquoise3", 0, 197, 205, 1, X11Compliance },
766 {
"turquoise4", 0, 134, 139, 1, X11Compliance },
767 {
"violet", 238, 130, 238, 1, SVGCompliance | X11Compliance | XPMCompliance },
768 {
"VioletRed", 208, 32, 144, 1, X11Compliance | XPMCompliance },
769 {
"VioletRed1", 255, 62, 150, 1, X11Compliance },
770 {
"VioletRed2", 238, 58, 140, 1, X11Compliance },
771 {
"VioletRed3", 205, 50, 120, 1, X11Compliance },
772 {
"VioletRed4", 139, 34, 82, 1, X11Compliance },
773 {
"wheat", 245, 222, 179, 1, SVGCompliance | X11Compliance | XPMCompliance },
774 {
"wheat1", 255, 231, 186, 1, X11Compliance },
775 {
"wheat2", 238, 216, 174, 1, X11Compliance },
776 {
"wheat3", 205, 186, 150, 1, X11Compliance },
777 {
"wheat4", 139, 126, 102, 1, X11Compliance },
778 {
"WhiteSmoke", 245, 245, 245, 1, SVGCompliance | X11Compliance | XPMCompliance },
779 {
"yellow1", 255, 255, 0, 1, X11Compliance },
780 {
"yellow2", 238, 238, 0, 1, X11Compliance },
781 {
"yellow3", 205, 205, 0, 1, X11Compliance },
782 {
"yellow4", 139, 139, 0, 1, X11Compliance },
783 {
"YellowGreen", 154, 205, 50, 1, SVGCompliance | X11Compliance | XPMCompliance }
798 static MagickBooleanType
801 #if !MAGICKCORE_ZERO_CONFIGURATION_SUPPORT
802 static MagickBooleanType
803 LoadColorCache(
LinkedListInfo *,
const char *,
const char *,
const size_t,
848 cache=NewLinkedList(0);
850 #if !MAGICKCORE_ZERO_CONFIGURATION_SUPPORT
858 options=GetConfigureOptions(filename,exception);
859 option=(
const StringInfo *) GetNextValueInLinkedList(options);
862 status&=LoadColorCache(cache,(
const char *) GetStringInfoDatum(option),
863 GetStringInfoPath(option),0,exception);
864 option=(
const StringInfo *) GetNextValueInLinkedList(options);
866 options=DestroyConfigureOptions(options);
869 magick_unreferenced(filename);
874 for (i=0; i < (ssize_t) (
sizeof(Colormap)/
sizeof(*Colormap)); i++)
883 color_info=(
ColorInfo *) AcquireMagickMemory(
sizeof(*color_info));
886 (void) ThrowMagickException(exception,GetMagickModule(),
887 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",p->name);
890 (void) memset(color_info,0,
sizeof(*color_info));
891 color_info->path=(
char *)
"[built-in]";
892 color_info->name=(
char *) p->name;
893 GetPixelInfo((
Image *) NULL,&color_info->color);
894 color_info->color.red=(double) ScaleCharToQuantum(p->red);
895 color_info->color.green=(double) ScaleCharToQuantum(p->green);
896 color_info->color.blue=(double) ScaleCharToQuantum(p->blue);
897 color_info->color.alpha=((double) QuantumRange*p->alpha);
898 color_info->compliance=(ComplianceType) p->compliance;
899 color_info->exempt=MagickTrue;
900 color_info->signature=MagickCoreSignature;
901 status&=AppendValueToLinkedList(cache,color_info);
902 if (status == MagickFalse)
903 (void) ThrowMagickException(exception,GetMagickModule(),
904 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",color_info->name);
927 MagickPrivate MagickBooleanType ColorComponentGenesis(
void)
930 color_semaphore=AcquireSemaphoreInfo();
953 static void *DestroyColorElement(
void *color_info)
959 if (p->exempt == MagickFalse)
961 if (p->path != (
char *) NULL)
962 p->path=DestroyString(p->path);
963 if (p->name != (
char *) NULL)
964 p->name=DestroyString(p->name);
966 p=(
ColorInfo *) RelinquishMagickMemory(p);
967 return((
void *) NULL);
970 MagickPrivate
void ColorComponentTerminus(
void)
973 ActivateSemaphoreInfo(&color_semaphore);
974 LockSemaphoreInfo(color_semaphore);
976 color_cache=DestroyLinkedList(color_cache,DestroyColorElement);
977 UnlockSemaphoreInfo(color_semaphore);
978 RelinquishSemaphoreInfo(&color_semaphore);
1009 MagickExport
const ColorInfo *GetColorCompliance(
const char *name,
1013 colorname[MagickPathExtent];
1022 if (IsColorCacheInstantiated(exception) == MagickFalse)
1028 if (name != (
const char *) NULL)
1029 (void) CopyMagickString(colorname,name,MagickPathExtent);
1030 for (q=colorname; *q !=
'\0'; q++)
1032 if (isspace((
int) ((
unsigned char) *q)) == 0)
1034 (void) CopyMagickString(q,q+1,MagickPathExtent);
1040 LockSemaphoreInfo(color_semaphore);
1041 ResetLinkedListIterator(color_cache);
1042 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1043 if ((name == (
const char *) NULL) || (LocaleCompare(name,
"*") == 0))
1045 UnlockSemaphoreInfo(color_semaphore);
1050 if (((p->compliance & compliance) != 0) &&
1051 (LocaleCompare(colorname,p->name) == 0))
1053 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1056 (
void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
1057 "UnrecognizedColor",
"`%s'",name);
1059 (
void) InsertValueInLinkedList(color_cache,0,
1060 RemoveElementByValueFromLinkedList(color_cache,p));
1061 UnlockSemaphoreInfo(color_semaphore);
1094 MagickExport
const ColorInfo *GetColorInfo(
const char *name,
1097 return(GetColorCompliance(name,AllCompliance,exception));
1131 static inline MagickBooleanType IsSVGCompliant(
const PixelInfo *pixel)
1133 #define SVGCompliant(component) ((double) \
1134 ScaleCharToQuantum(ScaleQuantumToChar(ClampToQuantum(component))))
1135 #define SVGEpsilon 1.0e-6
1140 if (fabs((
double) (SVGCompliant(pixel->red)-pixel->red)) >= SVGEpsilon)
1141 return(MagickFalse);
1142 if (fabs((
double) (SVGCompliant(pixel->green)-pixel->green)) >= SVGEpsilon)
1143 return(MagickFalse);
1144 if (fabs((
double) (SVGCompliant(pixel->blue)-pixel->blue)) >= SVGEpsilon)
1145 return(MagickFalse);
1146 if ((pixel->colorspace == CMYKColorspace) &&
1147 (fabs((
double) (SVGCompliant(pixel->black)-pixel->black)) >= SVGEpsilon))
1148 return(MagickFalse);
1152 MagickExport
void ConcatenateColorComponent(
const PixelInfo *pixel,
1153 const PixelChannel channel,
const ComplianceType compliance,
char *tuple)
1155 #define IsColorComponentFactional(color) \
1156 ((color)-ScaleCharToQuantum(ScaleQuantumToChar(color)))
1159 component[MagickPathExtent];
1167 if ((compliance != NoCompliance) || (pixel->depth <= 8))
1169 if ((compliance != NoCompliance) &&
1170 (IssRGBCompatibleColorspace(pixel->colorspace) != MagickFalse) &&
1171 (IsSVGCompliant(pixel) == MagickFalse))
1175 case RedPixelChannel:
1178 if (IsHueCompatibleColorspace(pixel->colorspace) != MagickFalse)
1180 if ((compliance != NoCompliance) && (pixel->colorspace == LabColorspace))
1184 case GreenPixelChannel:
1187 if (IsHueCompatibleColorspace(pixel->colorspace) != MagickFalse)
1189 if ((compliance != NoCompliance) && (pixel->colorspace == LabColorspace))
1190 color-=QuantumRange/2.0f;
1193 case BluePixelChannel:
1196 if (IsHueCompatibleColorspace(pixel->colorspace) != MagickFalse)
1198 if (pixel->colorspace == LabColorspace)
1199 color-=QuantumRange/2.0f;
1202 case AlphaPixelChannel:
1205 if (compliance != NoCompliance)
1209 case BlackPixelChannel:
1214 case IndexPixelChannel:
1222 if ((scale != 100.0f) || (pixel->colorspace == LabColorspace))
1223 (void) FormatLocaleString(component,MagickPathExtent,
"%.*g",
1224 GetMagickPrecision(),(double) (scale*QuantumScale*color));
1226 (
void) FormatLocaleString(component,MagickPathExtent,
"%.*g%%",
1227 GetMagickPrecision(),(
double) (scale*QuantumScale*color));
1228 (void) ConcatenateMagickString(tuple,component,MagickPathExtent);
1259 #if defined(__cplusplus) || defined(c_plusplus)
1263 static int ColorInfoCompare(
const void *x,
const void *y)
1274 cmp=LocaleCompare((*p)->path,(*q)->path);
1276 return(LocaleCompare((*p)->name,(*q)->name));
1280 #if defined(__cplusplus) || defined(c_plusplus)
1284 MagickExport
const ColorInfo **GetColorInfoList(
const char *pattern,
1299 assert(pattern != (
char *) NULL);
1300 assert(number_colors != (
size_t *) NULL);
1301 if (IsEventLogging() != MagickFalse)
1302 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",pattern);
1304 p=GetColorInfo(
"*",exception);
1307 colors=(
const ColorInfo **) AcquireQuantumMemory((
size_t)
1308 GetNumberOfElementsInLinkedList(color_cache)+1UL,
sizeof(*colors));
1309 if (colors == (
const ColorInfo **) NULL)
1314 LockSemaphoreInfo(color_semaphore);
1315 ResetLinkedListIterator(color_cache);
1316 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1317 for (i=0; p != (
const ColorInfo *) NULL; )
1319 if ((p->stealth == MagickFalse) &&
1320 (GlobExpression(p->name,pattern,MagickFalse) != MagickFalse))
1322 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1324 UnlockSemaphoreInfo(color_semaphore);
1325 qsort((
void *) colors,(
size_t) i,
sizeof(*colors),ColorInfoCompare);
1327 *number_colors=(size_t) i;
1359 #if defined(__cplusplus) || defined(c_plusplus)
1363 static int ColorCompare(
const void *x,
const void *y)
1369 p=(
const char **) x;
1370 q=(
const char **) y;
1371 return(LocaleCompare(*p,*q));
1374 #if defined(__cplusplus) || defined(c_plusplus)
1378 MagickExport
char **GetColorList(
const char *pattern,
1393 assert(pattern != (
char *) NULL);
1394 assert(number_colors != (
size_t *) NULL);
1395 if (IsEventLogging() != MagickFalse)
1396 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",pattern);
1398 p=GetColorInfo(
"*",exception);
1400 return((
char **) NULL);
1401 colors=(
char **) AcquireQuantumMemory((
size_t)
1402 GetNumberOfElementsInLinkedList(color_cache)+1UL,
sizeof(*colors));
1403 if (colors == (
char **) NULL)
1404 return((
char **) NULL);
1408 LockSemaphoreInfo(color_semaphore);
1409 ResetLinkedListIterator(color_cache);
1410 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1411 for (i=0; p != (
const ColorInfo *) NULL; )
1413 if ((p->stealth == MagickFalse) &&
1414 (GlobExpression(p->name,pattern,MagickFalse) != MagickFalse))
1415 colors[i++]=ConstantString(p->name);
1416 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1418 UnlockSemaphoreInfo(color_semaphore);
1419 qsort((
void *) colors,(
size_t) i,
sizeof(*colors),ColorCompare);
1420 colors[i]=(
char *) NULL;
1421 *number_colors=(size_t) i;
1454 static void ConcatentateHexColorComponent(
const PixelInfo *pixel,
1455 const PixelChannel channel,
char *tuple)
1458 component[MagickPathExtent];
1466 case RedPixelChannel:
1471 case GreenPixelChannel:
1476 case BluePixelChannel:
1481 case AlphaPixelChannel:
1486 case BlackPixelChannel:
1494 if (pixel->depth > 32)
1496 (void) FormatLocaleString(component,MagickPathExtent,
"%08lX%08lX",
1497 (
unsigned long) ScaleQuantumToLong(ClampToQuantum(color)),
1498 (
unsigned long) ScaleQuantumToLong(ClampToQuantum(color)));
1499 (void) ConcatenateMagickString(tuple,component,MagickPathExtent);
1502 if (pixel->depth > 16)
1504 (void) FormatLocaleString(component,MagickPathExtent,
"%08X",
1505 (
unsigned int) ScaleQuantumToLong(ClampToQuantum(color)));
1506 (void) ConcatenateMagickString(tuple,component,MagickPathExtent);
1509 if (pixel->depth > 8)
1511 (void) FormatLocaleString(component,MagickPathExtent,
"%04X",
1512 ScaleQuantumToShort(ClampToQuantum(color)));
1513 (void) ConcatenateMagickString(tuple,component,MagickPathExtent);
1516 (void) FormatLocaleString(component,MagickPathExtent,
"%02X",
1517 ScaleQuantumToChar(ClampToQuantum(color)));
1518 (void) ConcatenateMagickString(tuple,component,MagickPathExtent);
1522 MagickExport
void GetColorTuple(
const PixelInfo *pixel,
1523 const MagickBooleanType hex,
char *tuple)
1528 assert(pixel != (
const PixelInfo *) NULL);
1529 assert(tuple != (
char *) NULL);
1530 if (IsEventLogging() != MagickFalse)
1531 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",tuple);
1533 if (hex != MagickFalse)
1538 (void) ConcatenateMagickString(tuple,
"#",MagickPathExtent);
1539 ConcatentateHexColorComponent(pixel,RedPixelChannel,tuple);
1540 ConcatentateHexColorComponent(pixel,GreenPixelChannel,tuple);
1541 ConcatentateHexColorComponent(pixel,BluePixelChannel,tuple);
1542 if (pixel->colorspace == CMYKColorspace)
1543 ConcatentateHexColorComponent(pixel,BlackPixelChannel,tuple);
1544 if (pixel->alpha_trait != UndefinedPixelTrait)
1545 ConcatentateHexColorComponent(pixel,AlphaPixelChannel,tuple);
1552 if ((color.depth > 8) && (IsSVGCompliant(pixel) != MagickFalse))
1554 (void) ConcatenateMagickString(tuple,CommandOptionToMnemonic(
1555 MagickColorspaceOptions,(ssize_t) color.colorspace),MagickPathExtent);
1556 if (color.alpha_trait != UndefinedPixelTrait)
1557 (void) ConcatenateMagickString(tuple,
"a",MagickPathExtent);
1558 (void) ConcatenateMagickString(tuple,
"(",MagickPathExtent);
1559 if ((color.colorspace == LinearGRAYColorspace) ||
1560 (color.colorspace == GRAYColorspace))
1561 ConcatenateColorComponent(&color,GrayPixelChannel,SVGCompliance,tuple);
1564 ConcatenateColorComponent(&color,RedPixelChannel,SVGCompliance,tuple);
1565 (void) ConcatenateMagickString(tuple,
",",MagickPathExtent);
1566 ConcatenateColorComponent(&color,GreenPixelChannel,SVGCompliance,tuple);
1567 (void) ConcatenateMagickString(tuple,
",",MagickPathExtent);
1568 ConcatenateColorComponent(&color,BluePixelChannel,SVGCompliance,tuple);
1570 if (color.colorspace == CMYKColorspace)
1572 (void) ConcatenateMagickString(tuple,
",",MagickPathExtent);
1573 ConcatenateColorComponent(&color,BlackPixelChannel,SVGCompliance,tuple);
1575 if (color.alpha_trait != UndefinedPixelTrait)
1577 (void) ConcatenateMagickString(tuple,
",",MagickPathExtent);
1578 ConcatenateColorComponent(&color,AlphaPixelChannel,SVGCompliance,tuple);
1580 (void) ConcatenateMagickString(tuple,
")",MagickPathExtent);
1608 static MagickBooleanType IsColorCacheInstantiated(
ExceptionInfo *exception)
1613 ActivateSemaphoreInfo(&color_semaphore);
1614 LockSemaphoreInfo(color_semaphore);
1616 color_cache=AcquireColorCache(ColorFilename,exception);
1617 UnlockSemaphoreInfo(color_semaphore);
1619 return(color_cache != (
LinkedListInfo *) NULL ? MagickTrue : MagickFalse);
1651 MagickPrivate MagickBooleanType IsEquivalentAlpha(
const Image *image,
1661 if (image->alpha_trait == UndefinedPixelTrait)
1663 if (p->alpha == q->alpha)
1665 fuzz=MagickMax(image->fuzz,MagickSQ1_2);
1667 pixel=(double) p->alpha-(
double) q->alpha;
1668 distance=pixel*pixel;
1669 if (distance > fuzz)
1670 return(MagickFalse);
1709 MagickExport MagickBooleanType IsEquivalentImage(
const Image *image,
1710 const Image *target_image,ssize_t *x_offset,ssize_t *y_offset,
1713 #define SearchImageText " Searching image... "
1738 assert(image != (
Image *) NULL);
1739 assert(image->signature == MagickCoreSignature);
1740 assert(target_image != (
Image *) NULL);
1741 assert(target_image->signature == MagickCoreSignature);
1742 assert(x_offset != (ssize_t *) NULL);
1743 assert(y_offset != (ssize_t *) NULL);
1745 if (IsEventLogging() != MagickFalse)
1746 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
1749 GetPixelInfo(image,&pixel);
1750 GetPixelInfo(image,&target);
1751 image_view=AcquireVirtualCacheView(image,exception);
1752 target_view=AcquireVirtualCacheView(target_image,exception);
1753 for (y=(*y_offset); y < (ssize_t) image->rows; y++)
1755 for (x=y == 0 ? *x_offset : 0; x < (ssize_t) image->columns; x++)
1757 for (j=0; j < (ssize_t) target_image->rows; j++)
1759 for (i=0; i < (ssize_t) target_image->columns; i++)
1761 p=GetCacheViewVirtualPixels(image_view,x+i,y+j,1,1,exception);
1762 if (p == (
const Quantum *) NULL)
1764 GetPixelInfoPixel(image,p,&pixel);
1765 q=GetCacheViewVirtualPixels(target_view,i,j,1,1,exception);
1766 if (q == (
const Quantum *) NULL)
1768 GetPixelInfoPixel(image,q,&target);
1769 if (IsFuzzyEquivalencePixelInfo(&pixel,&target) == MagickFalse)
1772 if (i < (ssize_t) target_image->columns)
1775 if (j == (ssize_t) target_image->rows)
1778 if (x < (ssize_t) image->columns)
1780 if (image->progress_monitor != (MagickProgressMonitor) NULL)
1785 proceed=SetImageProgress(image,SearchImageText,(MagickOffsetType) y,
1787 if (proceed == MagickFalse)
1791 target_view=DestroyCacheView(target_view);
1792 image_view=DestroyCacheView(image_view);
1795 if (status == MagickFalse)
1797 return(y < (ssize_t) image->rows ? MagickTrue : MagickFalse);
1828 MagickPrivate MagickBooleanType IsEquivalentIntensity(
const Image *image,
1838 if (GetPixelInfoIntensity(image,p) == GetPixelInfoIntensity(image,q))
1840 fuzz=MagickMax(image->fuzz,MagickSQ1_2);
1842 pixel=GetPixelInfoIntensity(image,p)-GetPixelInfoIntensity(image,q);
1843 distance=pixel*pixel;
1844 if (distance > fuzz)
1845 return(MagickFalse);
1875 MagickExport MagickBooleanType ListColorInfo(FILE *file,
1879 tuple[MagickPathExtent];
1896 if (file == (
const FILE *) NULL)
1898 color_info=GetColorInfoList(
"*",&number_colors,exception);
1899 if (color_info == (
const ColorInfo **) NULL)
1900 return(MagickFalse);
1901 path=(
const char *) NULL;
1902 for (i=0; i < (ssize_t) number_colors; i++)
1904 if (color_info[i]->stealth != MagickFalse)
1906 if ((path == (
const char *) NULL) ||
1907 (LocaleCompare(path,color_info[i]->path) != 0))
1909 if (color_info[i]->path != (
char *) NULL)
1910 (
void) FormatLocaleFile(file,
"\nPath: %s\n\n",color_info[i]->path);
1911 (void) FormatLocaleFile(file,
1914 (void) FormatLocaleFile(file,
1915 "-------------------------------------------------"
1916 "------------------------------\n");
1918 path=color_info[i]->path;
1919 (void) FormatLocaleFile(file,
"%-21.21s ",color_info[i]->name);
1920 GetColorTuple(&color_info[i]->color,MagickFalse,tuple);
1921 (void) FormatLocaleFile(file,
"%-45.45s ",tuple);
1922 if ((color_info[i]->compliance & SVGCompliance) != 0)
1923 (
void) FormatLocaleFile(file,
"SVG ");
1924 if ((color_info[i]->compliance & X11Compliance) != 0)
1925 (void) FormatLocaleFile(file,
"X11 ");
1926 if ((color_info[i]->compliance & XPMCompliance) != 0)
1927 (
void) FormatLocaleFile(file,
"XPM ");
1928 (void) FormatLocaleFile(file,
"\n");
1930 color_info=(
const ColorInfo **) RelinquishMagickMemory((
void *) color_info);
1931 (void) fflush(file);
1935 #if !MAGICKCORE_ZERO_CONFIGURATION_SUPPORT
1966 static MagickBooleanType LoadColorCache(
LinkedListInfo *cache,
const char *xml,
1967 const char *filename,
const size_t depth,
ExceptionInfo *exception)
1970 keyword[MagickPathExtent],
1988 (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
1989 "Loading color file \"%s\" ...",filename);
1990 if (xml == (
char *) NULL)
1991 return(MagickFalse);
1994 token=AcquireString(xml);
1995 extent=strlen(token)+MagickPathExtent;
1996 for (q=(
char *) xml; *q !=
'\0'; )
2001 (void) GetNextToken(q,&q,extent,token);
2004 (void) CopyMagickString(keyword,token,MagickPathExtent);
2005 if (LocaleNCompare(keyword,
"<!DOCTYPE",9) == 0)
2010 while ((LocaleNCompare(q,
"]>",2) != 0) && (*q !=
'\0'))
2011 (
void) GetNextToken(q,&q,extent,token);
2014 if (LocaleNCompare(keyword,
"<!--",4) == 0)
2019 while ((LocaleNCompare(q,
"->",2) != 0) && (*q !=
'\0'))
2020 (void) GetNextToken(q,&q,extent,token);
2023 if (LocaleCompare(keyword,
"<include") == 0)
2028 while (((*token !=
'/') && (*(token+1) !=
'>')) && (*q !=
'\0'))
2030 (void) CopyMagickString(keyword,token,MagickPathExtent);
2031 (void) GetNextToken(q,&q,extent,token);
2034 (void) GetNextToken(q,&q,extent,token);
2035 if (LocaleCompare(keyword,
"file") == 0)
2037 if (depth > MagickMaxRecursionDepth)
2038 (void) ThrowMagickException(exception,GetMagickModule(),
2039 ConfigureError,
"IncludeElementNestedTooDeeply",
"`%s'",token);
2043 path[MagickPathExtent],
2046 GetPathComponent(filename,HeadPath,path);
2048 (void) ConcatenateMagickString(path,DirectorySeparator,
2050 if (*token == *DirectorySeparator)
2051 (void) CopyMagickString(path,token,MagickPathExtent);
2053 (
void) ConcatenateMagickString(path,token,MagickPathExtent);
2054 file_xml=FileToXML(path,~0UL);
2055 if (file_xml != (
char *) NULL)
2057 status&=LoadColorCache(cache,file_xml,path,depth+1,
2059 file_xml=DestroyString(file_xml);
2066 if (LocaleCompare(keyword,
"<color") == 0)
2071 color_info=(
ColorInfo *) AcquireCriticalMemory(
sizeof(*color_info));
2072 (void) memset(color_info,0,
sizeof(*color_info));
2073 color_info->path=ConstantString(filename);
2074 color_info->exempt=MagickFalse;
2075 color_info->signature=MagickCoreSignature;
2080 if ((LocaleCompare(keyword,
"/>") == 0) ||
2081 (LocaleCompare(keyword,
"</policy>") == 0))
2083 status=AppendValueToLinkedList(cache,color_info);
2084 if (status == MagickFalse)
2085 (void) ThrowMagickException(exception,GetMagickModule(),
2086 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",
2091 (void) GetNextToken(q,(
const char **) NULL,extent,token);
2094 (void) GetNextToken(q,&q,extent,token);
2095 (void) GetNextToken(q,&q,extent,token);
2101 if (LocaleCompare((
char *) keyword,
"color") == 0)
2103 (void) QueryColorCompliance(token,AllCompliance,&color_info->color,
2107 if (LocaleCompare((
char *) keyword,
"compliance") == 0)
2112 compliance=color_info->compliance;
2113 if (StringLocateSubstring(token,
"SVG") != (
char *) NULL)
2114 compliance|=SVGCompliance;
2115 if (StringLocateSubstring(token,
"X11") != (
char *) NULL)
2116 compliance|=X11Compliance;
2117 if (StringLocateSubstring(token,
"XPM") != (
char *) NULL)
2118 compliance|=XPMCompliance;
2119 color_info->compliance=(ComplianceType) compliance;
2127 if (LocaleCompare((
char *) keyword,
"name") == 0)
2129 color_info->name=ConstantString(token);
2137 if (LocaleCompare((
char *) keyword,
"stealth") == 0)
2139 color_info->stealth=IsStringTrue(token);
2148 token=(
char *) RelinquishMagickMemory(token);
2149 return(status != 0 ? MagickTrue : MagickFalse);
2186 static MagickStatusType ParseCSSColor(
const char *magick_restrict color,
2198 SetGeometryInfo(geometry_info);
2200 if ((color == (
char *) NULL) || (*color ==
'\0'))
2205 for (i=0; (i < 5) && (*q !=
')') && (*q !=
'\0'); i++)
2214 intensity=(float) StringToDouble(p,&q);
2219 intensity*=0.01*255.0;
2226 geometry_info->rho=intensity;
2228 if (LocaleNCompare(q,
"deg",3) == 0)
2234 geometry_info->sigma=intensity;
2240 geometry_info->xi=intensity;
2246 geometry_info->psi=intensity;
2252 geometry_info->chi=intensity;
2257 while (isspace((
int) ((
unsigned char) *q)) != 0)
2270 MagickExport MagickBooleanType QueryColorCompliance(
const char *name,
2295 if ((name == (
char *) NULL) || (*name ==
'\0'))
2296 name=BackgroundColor;
2297 if (IsEventLogging() != MagickFalse)
2298 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",name);
2299 if (strlen(name) > MagickPathExtent)
2301 (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
2302 "UnrecognizedColor",
"`%s'",name);
2303 return(MagickFalse);
2305 while (isspace((
int) ((
unsigned char) *name)) != 0)
2307 GetPixelInfo((
Image *) NULL,color);
2326 (void) memset(&pixel,0,
sizeof(pixel));
2328 for (n=0; isxdigit((
int) ((
unsigned char) name[n])) != 0; n++) ;
2329 if ((n == 3) || (n == 6) || (n == 9) || (n == 12) || (n == 24) ||
2334 pixel.red=pixel.green;
2335 pixel.green=pixel.blue;
2337 for (i=(ssize_t) (n/3-1); i >= 0; i--)
2341 if ((c >=
'0') && (c <=
'9'))
2342 pixel.blue|=(int) (c-
'0');
2344 if ((c >=
'A') && (c <=
'F'))
2345 pixel.blue|=(int) c-((
int)
'A'-10);
2347 if ((c >=
'a') && (c <=
'f'))
2348 pixel.blue|=(int) c-((
int)
'a'-10);
2350 return(MagickFalse);
2352 }
while (isxdigit((
int) ((
unsigned char) *name)) != 0);
2357 if ((n != 4) && (n != 8) && (n != 16) && (n != 32) && (n != 64))
2359 (void) ThrowMagickException(exception,GetMagickModule(),
2360 OptionWarning,
"UnrecognizedColor",
"`%s'",name);
2361 return(MagickFalse);
2365 pixel.red=pixel.green;
2366 pixel.green=pixel.blue;
2367 pixel.blue=pixel.alpha;
2369 for (i=(ssize_t) (n/4-1); i >= 0; i--)
2373 if ((c >=
'0') && (c <=
'9'))
2374 pixel.alpha|=(int) (c-
'0');
2376 if ((c >=
'A') && (c <=
'F'))
2377 pixel.alpha|=(int) c-((
int)
'A'-10);
2379 if ((c >=
'a') && (c <=
'f'))
2380 pixel.alpha|=(int) c-((
int)
'a'-10);
2382 return(MagickFalse);
2384 }
while (isxdigit((
int) ((
unsigned char) *name)) != 0);
2387 color->colorspace=sRGBColorspace;
2389 color->alpha_trait=UndefinedPixelTrait;
2390 range=GetQuantumRange(depth);
2391 color->red=(double) ScaleAnyToQuantum(pixel.red,range);
2392 color->green=(double) ScaleAnyToQuantum(pixel.green,range);
2393 color->blue=(double) ScaleAnyToQuantum(pixel.blue,range);
2394 color->alpha=(double) OpaqueAlpha;
2397 color->alpha_trait=BlendPixelTrait;
2398 color->alpha=(double) ScaleAnyToQuantum(pixel.alpha,range);
2403 if (strchr(name,
'(') != (
char *) NULL)
2406 colorspace[2*MagickPathExtent];
2414 (void) memset(colorspace,0,
sizeof(colorspace));
2415 (void) CopyMagickString(colorspace,name,MagickPathExtent);
2416 for (i=0; colorspace[i] !=
'\0'; i++)
2417 if (colorspace[i] ==
'(')
2419 colorspace[i--]=
'\0';
2420 scale=(double) ScaleCharToQuantum(1);
2421 icc_color=MagickFalse;
2422 if (LocaleNCompare(colorspace,
"device-",7) == 0)
2424 (void) CopyMagickString(colorspace,colorspace+7,MagickPathExtent);
2425 if (strchr(name,
'%') == (
char *) NULL)
2426 scale=(double) QuantumRange;
2427 icc_color=MagickTrue;
2429 if ((LocaleCompare(colorspace,
"color") == 0) ||
2430 (LocaleCompare(colorspace,
"icc-color") == 0))
2435 (void) CopyMagickString(colorspace,name+i+2,MagickPathExtent);
2436 for (j=0; colorspace[j] !=
'\0'; j++)
2437 if ((colorspace[j] ==
' ') || (colorspace[j] ==
','))
2439 colorspace[j--]=
'\0';
2441 scale=(double) QuantumRange;
2442 icc_color=MagickTrue;
2444 LocaleLower(colorspace);
2445 color->alpha_trait=UndefinedPixelTrait;
2446 if ((i > 0) && (colorspace[i] ==
'a'))
2449 color->alpha_trait=BlendPixelTrait;
2451 type=ParseCommandOption(MagickColorspaceOptions,MagickFalse,colorspace);
2454 (void) ThrowMagickException(exception,GetMagickModule(),
2455 OptionWarning,
"UnrecognizedColor",
"`%s'",name);
2456 return(MagickFalse);
2458 color->colorspace=(ColorspaceType) type;
2459 if ((icc_color == MagickFalse) && (color->colorspace == RGBColorspace))
2461 color->colorspace=sRGBColorspace;
2464 if (i >= (ssize_t) strlen(name))
2465 flags=ParseCSSColor(name,&geometry_info);
2467 flags=ParseCSSColor(name+i+1,&geometry_info);
2479 colorspaceType=color->colorspace;
2480 if (i >= (ssize_t) strlen(name))
2481 colorname=AcquireString(name);
2483 colorname=AcquireString(name+i+1);
2484 (void) SubstituteString(&colorname,
"(",
"");
2485 (void) SubstituteString(&colorname,
")",
"");
2487 if (LocaleCompare(name,colorname) != 0)
2488 status=QueryColorCompliance(colorname,AllCompliance,color,
2490 color->colorspace=colorspaceType;
2491 if (*colorname ==
'\0')
2493 (void) ThrowMagickException(exception,GetMagickModule(),
2494 OptionWarning,
"UnrecognizedColor",
"`%s'",name);
2497 colorname=DestroyString(colorname);
2500 if ((flags & AlphaValue) != 0)
2501 color->alpha_trait=BlendPixelTrait;
2502 if ((flags & RhoValue) != 0)
2503 color->red=(double) ClampToQuantum((MagickRealType) (scale*
2504 geometry_info.rho));
2505 if ((flags & SigmaValue) != 0)
2506 color->green=(
double) ClampToQuantum((MagickRealType) (scale*
2507 geometry_info.sigma));
2508 if ((flags & XiValue) != 0)
2509 color->blue=(double) ClampToQuantum((MagickRealType) (scale*
2511 color->alpha=(double) OpaqueAlpha;
2512 if ((flags & PsiValue) != 0)
2514 if (color->colorspace == CMYKColorspace)
2515 color->black=(double) ClampToQuantum((MagickRealType) (scale*
2516 geometry_info.psi));
2518 if (color->alpha_trait != UndefinedPixelTrait)
2520 if ((flags & AlphaValue) != 0)
2521 color->alpha=(
double) ClampToQuantum((MagickRealType) (scale*
2522 geometry_info.psi));
2524 color->alpha=(double) ClampToQuantum((MagickRealType) (
2525 QuantumRange*geometry_info.psi));
2528 if (((flags & ChiValue) != 0) &&
2529 (color->alpha_trait != UndefinedPixelTrait))
2530 color->alpha=(
double) ClampToQuantum(QuantumRange*geometry_info.chi);
2531 if (color->colorspace == LabColorspace)
2533 color->red=(MagickRealType) ClampToQuantum((MagickRealType)
2534 (QuantumRange*geometry_info.rho/100.0));
2535 if ((flags & SigmaValue) != 0)
2536 color->green=(MagickRealType) ClampToQuantum((MagickRealType)
2537 (scale*geometry_info.sigma+(QuantumRange+1)/2.0));
2538 if ((flags & XiValue) != 0)
2539 color->blue=(MagickRealType) ClampToQuantum((MagickRealType)
2540 (scale*geometry_info.xi+(QuantumRange+1)/2.0));
2542 if ((LocaleCompare(colorspace,
"gray") == 0) ||
2543 (LocaleCompare(colorspace,
"lineargray") == 0))
2545 color->green=color->red;
2546 color->blue=color->red;
2547 if (((flags & SigmaValue) != 0) &&
2548 (color->alpha_trait != UndefinedPixelTrait))
2549 color->alpha=(
double) ClampToQuantum(QuantumRange*
2550 geometry_info.sigma);
2552 if ((LocaleCompare(colorspace,
"HCL") == 0) ||
2553 (LocaleCompare(colorspace,
"HSB") == 0) ||
2554 (LocaleCompare(colorspace,
"HSL") == 0) ||
2555 (LocaleCompare(colorspace,
"HSV") == 0) ||
2556 (LocaleCompare(colorspace,
"HWB") == 0))
2564 geometry_info.sigma*=scale;
2565 geometry_info.xi*=scale;
2569 switch (color->colorspace)
2573 ConvertHCLToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,360.0)/
2574 360.0,geometry_info.sigma,geometry_info.xi,&red,&green,&blue);
2579 ConvertHSBToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,360.0)/
2580 360.0,geometry_info.sigma,geometry_info.xi,&red,&green,&blue);
2585 ConvertHSLToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,360.0)/
2586 360.0,geometry_info.sigma,geometry_info.xi,&red,&green,&blue);
2591 ConvertHSVToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,360.0)/
2592 360.0,geometry_info.sigma,geometry_info.xi,&red,&green,&blue);
2597 ConvertHWBToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,360.0)/
2598 360.0,geometry_info.sigma,geometry_info.xi,&red,&green,&blue);
2604 color->colorspace=sRGBColorspace;
2605 color->red=(MagickRealType) red;
2606 color->green=(MagickRealType) green;
2607 color->blue=(MagickRealType) blue;
2614 p=GetColorCompliance(name,compliance,exception);
2616 return(MagickFalse);
2617 color->colorspace=sRGBColorspace;
2618 if ((LocaleNCompare(name,
"gray",4) == 0) ||
2619 (LocaleNCompare(name,
"grey",4) == 0))
2620 color->colorspace=GRAYColorspace;
2622 color->alpha_trait=p->color.alpha != OpaqueAlpha ? BlendPixelTrait :
2623 UndefinedPixelTrait;
2624 color->red=(double) p->color.red;
2625 color->green=(
double) p->color.green;
2626 color->blue=(double) p->color.blue;
2627 color->alpha=(
double) p->color.alpha;
2671 MagickExport MagickBooleanType QueryColorname(
2673 const ComplianceType compliance,
char *name,
ExceptionInfo *exception)
2684 magick_unreferenced(image);
2687 if (compliance == XPMCompliance)
2689 pixel.alpha_trait=UndefinedPixelTrait;
2690 if (pixel.depth > 16)
2693 GetColorTuple(&pixel,compliance != SVGCompliance ? MagickTrue : MagickFalse,
2695 if (IssRGBColorspace(pixel.colorspace) == MagickFalse)
2696 return(MagickFalse);
2697 alpha=color->alpha_trait != UndefinedPixelTrait ? color->alpha : OpaqueAlpha;
2698 (void) GetColorInfo(
"*",exception);
2699 ResetLinkedListIterator(color_cache);
2700 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
2703 if (((p->compliance & compliance) != 0) &&
2704 ((fabs((
double) (p->color.red-color->red)) < MagickEpsilon)) &&
2705 (fabs((
double) (p->color.green-color->green)) < MagickEpsilon) &&
2706 (fabs((
double) (p->color.blue-color->blue)) < MagickEpsilon) &&
2707 (fabs((
double) (p->color.alpha-alpha)) < MagickEpsilon))
2709 (void) CopyMagickString(name,p->name,MagickPathExtent);
2712 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);