1191fca82e1aa1d3361f8f416b2ade8beac6b5b8dcristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CCCC OOO L OOO RRRR % 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C O O L O O R R % 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C O O L O O RRRR % 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C O O L O O R R % 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CCCC OOO LLLLL OOO R R % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickCore Color Methods % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 15de984cdc3631106b1cbbb8d3972b76a0fc27e8e8cristy% Cristy % 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% July 1992 % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 197ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% We use linked-lists because splay-trees do not currently support duplicate 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% key / value pairs (.e.g X11 green compliance and SVG green compliance). 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h" 454c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/cache-view.h" 464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/cache.h" 474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color-private.h" 49c7b79fc84ba64846c11bcfffeb38ddf81ec806f9cristy#include "MagickCore/colorspace-private.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/client.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/configure.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/gem.h" 55d1dd6e4fefa0810b9893e6ac9418f79c97c1b39acristy#include "MagickCore/gem-private.h" 564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/geometry.h" 574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image-private.h" 584c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 594c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor.h" 604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor-private.h" 614c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/option.h" 624c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel-accessor.h" 634c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantize.h" 644c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum.h" 654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h" 664c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/semaphore.h" 674c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 684c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/token.h" 694c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h" 70d1dd6e4fefa0810b9893e6ac9418f79c97c1b39acristy#include "MagickCore/utility-private.h" 714c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/xml-tree.h" 723291f51a77fdd817efb58d652c78c407cbfdf7d1cristy#include "MagickCore/xml-tree-private.h" 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Define declarations. 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ColorFilename "colors.xml" 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8054a531d335ea060a99bead94dcdf45f18496fa83cristy Typedef declarations. 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 82e3e77a19c40caafb77339e5a126c532bf2984c01cristytypedef struct _ColorMapInfo 83e3e77a19c40caafb77339e5a126c532bf2984c01cristy{ 84e3e77a19c40caafb77339e5a126c532bf2984c01cristy const char 85e3e77a19c40caafb77339e5a126c532bf2984c01cristy *name; 86e3e77a19c40caafb77339e5a126c532bf2984c01cristy 8797b47b2d6007e4d573b7e5c299480259e4f01d25cristy const unsigned char 88e3e77a19c40caafb77339e5a126c532bf2984c01cristy red, 89e3e77a19c40caafb77339e5a126c532bf2984c01cristy green, 9097b47b2d6007e4d573b7e5c299480259e4f01d25cristy blue; 9197b47b2d6007e4d573b7e5c299480259e4f01d25cristy 9297b47b2d6007e4d573b7e5c299480259e4f01d25cristy const float 93e3e77a19c40caafb77339e5a126c532bf2984c01cristy alpha; 94e3e77a19c40caafb77339e5a126c532bf2984c01cristy 95bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy const ssize_t 96e3e77a19c40caafb77339e5a126c532bf2984c01cristy compliance; 97e3e77a19c40caafb77339e5a126c532bf2984c01cristy} ColorMapInfo; 9854a531d335ea060a99bead94dcdf45f18496fa83cristy 9954a531d335ea060a99bead94dcdf45f18496fa83cristy/* 10054a531d335ea060a99bead94dcdf45f18496fa83cristy Static declarations. 10154a531d335ea060a99bead94dcdf45f18496fa83cristy*/ 102e3e77a19c40caafb77339e5a126c532bf2984c01cristystatic const ColorMapInfo 103e3e77a19c40caafb77339e5a126c532bf2984c01cristy ColorMap[] = 104e3e77a19c40caafb77339e5a126c532bf2984c01cristy { 105a60c02075c4071dd1801b41db0b478f68683a6fecristy { "none", 0, 0, 0, 0, SVGCompliance | XPMCompliance }, 106e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "black", 0, 0, 0, 1, SVGCompliance | X11Compliance | XPMCompliance }, 107e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "red", 255, 0, 0, 1, SVGCompliance | X11Compliance | XPMCompliance }, 108e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "magenta", 255, 0, 255, 1, SVGCompliance | X11Compliance | XPMCompliance }, 109e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "green", 0, 128, 0, 1, SVGCompliance }, 110e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "cyan", 0, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance }, 111e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "blue", 0, 0, 255, 1, SVGCompliance | X11Compliance | XPMCompliance }, 112e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "yellow", 255, 255, 0, 1, SVGCompliance | X11Compliance | XPMCompliance }, 1131def290290b92a89b30f02ed921ecba7e26a0ab8cristy { "white", 255, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance }, 114e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "AliceBlue", 240, 248, 255, 1, SVGCompliance | X11Compliance | XPMCompliance }, 115e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "AntiqueWhite", 250, 235, 215, 1, SVGCompliance | X11Compliance | XPMCompliance }, 116e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "AntiqueWhite1", 255, 239, 219, 1, X11Compliance }, 117e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "AntiqueWhite2", 238, 223, 204, 1, X11Compliance }, 118e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "AntiqueWhite3", 205, 192, 176, 1, X11Compliance }, 119e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "AntiqueWhite4", 139, 131, 120, 1, X11Compliance }, 120e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "aqua", 0, 255, 255, 1, SVGCompliance }, 121e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "aquamarine", 127, 255, 212, 1, SVGCompliance | X11Compliance | XPMCompliance }, 122e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "aquamarine1", 127, 255, 212, 1, X11Compliance }, 123e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "aquamarine2", 118, 238, 198, 1, X11Compliance }, 124e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "aquamarine3", 102, 205, 170, 1, X11Compliance }, 125e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "aquamarine4", 69, 139, 116, 1, X11Compliance }, 126e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "azure", 240, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance }, 127e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "azure1", 240, 255, 255, 1, X11Compliance }, 128e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "azure2", 224, 238, 238, 1, X11Compliance }, 129e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "azure3", 193, 205, 205, 1, X11Compliance }, 130e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "azure4", 131, 139, 139, 1, X11Compliance }, 131e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "beige", 245, 245, 220, 1, SVGCompliance | X11Compliance | XPMCompliance }, 132e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "bisque", 255, 228, 196, 1, SVGCompliance | X11Compliance | XPMCompliance }, 133e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "bisque1", 255, 228, 196, 1, X11Compliance }, 134e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "bisque2", 238, 213, 183, 1, X11Compliance }, 135e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "bisque3", 205, 183, 158, 1, X11Compliance }, 136e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "bisque4", 139, 125, 107, 1, X11Compliance }, 137e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "BlanchedAlmond", 255, 235, 205, 1, SVGCompliance | X11Compliance | XPMCompliance }, 138e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "blue1", 0, 0, 255, 1, X11Compliance }, 139e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "blue2", 0, 0, 238, 1, X11Compliance }, 140e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "blue3", 0, 0, 205, 1, X11Compliance }, 141e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "blue4", 0, 0, 139, 1, X11Compliance }, 142e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "BlueViolet", 138, 43, 226, 1, SVGCompliance | X11Compliance | XPMCompliance }, 143e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "brown", 165, 42, 42, 1, SVGCompliance | X11Compliance | XPMCompliance }, 144e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "brown1", 255, 64, 64, 1, X11Compliance }, 145e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "brown2", 238, 59, 59, 1, X11Compliance }, 146e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "brown3", 205, 51, 51, 1, X11Compliance }, 147e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "brown4", 139, 35, 35, 1, X11Compliance }, 148e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "burlywood", 222, 184, 135, 1, SVGCompliance | X11Compliance | XPMCompliance }, 149e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "burlywood1", 255, 211, 155, 1, X11Compliance }, 150e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "burlywood2", 238, 197, 145, 1, X11Compliance }, 151e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "burlywood3", 205, 170, 125, 1, X11Compliance }, 152e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "burlywood4", 139, 115, 85, 1, X11Compliance }, 153e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "CadetBlue", 95, 158, 160, 1, SVGCompliance | X11Compliance | XPMCompliance }, 154e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "CadetBlue1", 152, 245, 255, 1, X11Compliance }, 155e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "CadetBlue2", 142, 229, 238, 1, X11Compliance }, 156e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "CadetBlue3", 122, 197, 205, 1, X11Compliance }, 157e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "CadetBlue4", 83, 134, 139, 1, X11Compliance }, 158e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "chartreuse", 127, 255, 0, 1, SVGCompliance | X11Compliance | XPMCompliance }, 159e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "chartreuse1", 127, 255, 0, 1, X11Compliance }, 160e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "chartreuse2", 118, 238, 0, 1, X11Compliance }, 161e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "chartreuse3", 102, 205, 0, 1, X11Compliance }, 162e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "chartreuse4", 69, 139, 0, 1, X11Compliance }, 163e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "chocolate", 210, 105, 30, 1, SVGCompliance | X11Compliance | XPMCompliance }, 164e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "chocolate1", 255, 127, 36, 1, X11Compliance }, 165e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "chocolate2", 238, 118, 33, 1, X11Compliance }, 166e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "chocolate3", 205, 102, 29, 1, X11Compliance }, 167e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "chocolate4", 139, 69, 19, 1, X11Compliance }, 168e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "coral", 255, 127, 80, 1, SVGCompliance | X11Compliance | XPMCompliance }, 169e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "coral1", 255, 114, 86, 1, X11Compliance }, 170e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "coral2", 238, 106, 80, 1, X11Compliance }, 171e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "coral3", 205, 91, 69, 1, X11Compliance }, 172e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "coral4", 139, 62, 47, 1, X11Compliance }, 173e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "CornflowerBlue", 100, 149, 237, 1, SVGCompliance | X11Compliance | XPMCompliance }, 174e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "cornsilk", 255, 248, 220, 1, SVGCompliance | X11Compliance | XPMCompliance }, 175e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "cornsilk1", 255, 248, 220, 1, X11Compliance }, 176e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "cornsilk2", 238, 232, 205, 1, X11Compliance }, 177e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "cornsilk3", 205, 200, 177, 1, X11Compliance }, 178e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "cornsilk4", 139, 136, 120, 1, X11Compliance }, 179e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "crimson", 220, 20, 60, 1, SVGCompliance }, 180e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "cyan1", 0, 255, 255, 1, X11Compliance }, 181e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "cyan2", 0, 238, 238, 1, X11Compliance }, 182e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "cyan3", 0, 205, 205, 1, X11Compliance }, 183e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "cyan4", 0, 139, 139, 1, X11Compliance }, 184e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkBlue", 0, 0, 139, 1, SVGCompliance | X11Compliance }, 185e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkCyan", 0, 139, 139, 1, SVGCompliance | X11Compliance }, 186e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkGoldenrod", 184, 134, 11, 1, SVGCompliance | X11Compliance | XPMCompliance }, 187e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkGoldenrod1", 255, 185, 15, 1, X11Compliance }, 188e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkGoldenrod2", 238, 173, 14, 1, X11Compliance }, 189e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkGoldenrod3", 205, 149, 12, 1, X11Compliance }, 190e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkGoldenrod4", 139, 101, 8, 1, X11Compliance }, 191e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkGray", 169, 169, 169, 1, SVGCompliance | X11Compliance }, 192e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkGreen", 0, 100, 0, 1, SVGCompliance | X11Compliance | XPMCompliance }, 193e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkGrey", 169, 169, 169, 1, SVGCompliance | X11Compliance }, 194e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkKhaki", 189, 183, 107, 1, SVGCompliance | X11Compliance | XPMCompliance }, 195e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkMagenta", 139, 0, 139, 1, SVGCompliance | X11Compliance }, 196e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOliveGreen", 85, 107, 47, 1, SVGCompliance | X11Compliance | XPMCompliance }, 197e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOliveGreen1", 202, 255, 112, 1, X11Compliance }, 198e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOliveGreen2", 188, 238, 104, 1, X11Compliance }, 199e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOliveGreen3", 162, 205, 90, 1, X11Compliance }, 200e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOliveGreen4", 110, 139, 61, 1, X11Compliance }, 201e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOrange", 255, 140, 0, 1, SVGCompliance | X11Compliance | XPMCompliance }, 202e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOrange1", 255, 127, 0, 1, X11Compliance }, 203e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOrange2", 238, 118, 0, 1, X11Compliance }, 204e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOrange3", 205, 102, 0, 1, X11Compliance }, 205e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOrange4", 139, 69, 0, 1, X11Compliance }, 206e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOrchid", 153, 50, 204, 1, SVGCompliance | X11Compliance | XPMCompliance }, 207e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOrchid1", 191, 62, 255, 1, X11Compliance }, 208e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOrchid2", 178, 58, 238, 1, X11Compliance }, 209e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOrchid3", 154, 50, 205, 1, X11Compliance }, 210e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkOrchid4", 104, 34, 139, 1, X11Compliance }, 211e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkRed", 139, 0, 0, 1, SVGCompliance | X11Compliance }, 212e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSalmon", 233, 150, 122, 1, SVGCompliance | X11Compliance | XPMCompliance }, 213e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSeaGreen", 143, 188, 143, 1, SVGCompliance | X11Compliance | XPMCompliance }, 214e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSeaGreen1", 193, 255, 193, 1, X11Compliance }, 215e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSeaGreen2", 180, 238, 180, 1, X11Compliance }, 216e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSeaGreen3", 155, 205, 155, 1, X11Compliance }, 217e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSeaGreen4", 105, 139, 105, 1, X11Compliance }, 218e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSlateBlue", 72, 61, 139, 1, SVGCompliance | X11Compliance | XPMCompliance }, 219e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSlateGray", 47, 79, 79, 1, SVGCompliance | X11Compliance | XPMCompliance }, 220e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSlateGray1", 151, 255, 255, 1, X11Compliance }, 221e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSlateGray2", 141, 238, 238, 1, X11Compliance }, 222e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSlateGray3", 121, 205, 205, 1, X11Compliance }, 223e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSlateGray4", 82, 139, 139, 1, X11Compliance }, 224e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkSlateGrey", 47, 79, 79, 1, SVGCompliance | X11Compliance }, 225e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkTurquoise", 0, 206, 209, 1, SVGCompliance | X11Compliance | XPMCompliance }, 226e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DarkViolet", 148, 0, 211, 1, SVGCompliance | X11Compliance | XPMCompliance }, 227e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DeepPink", 255, 20, 147, 1, SVGCompliance | X11Compliance | XPMCompliance }, 228e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DeepPink1", 255, 20, 147, 1, X11Compliance }, 229e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DeepPink2", 238, 18, 137, 1, X11Compliance }, 230e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DeepPink3", 205, 16, 118, 1, X11Compliance }, 231e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DeepPink4", 139, 10, 80, 1, X11Compliance }, 232e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DeepSkyBlue", 0, 191, 255, 1, SVGCompliance | X11Compliance | XPMCompliance }, 233e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DeepSkyBlue1", 0, 191, 255, 1, X11Compliance }, 234e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DeepSkyBlue2", 0, 178, 238, 1, X11Compliance }, 235e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DeepSkyBlue3", 0, 154, 205, 1, X11Compliance }, 236e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DeepSkyBlue4", 0, 104, 139, 1, X11Compliance }, 237e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DimGray", 105, 105, 105, 1, SVGCompliance | X11Compliance | XPMCompliance }, 238e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DimGrey", 105, 105, 105, 1, SVGCompliance | X11Compliance }, 239e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DodgerBlue", 30, 144, 255, 1, SVGCompliance | X11Compliance | XPMCompliance }, 240e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DodgerBlue1", 30, 144, 255, 1, X11Compliance }, 241e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DodgerBlue2", 28, 134, 238, 1, X11Compliance }, 242e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DodgerBlue3", 24, 116, 205, 1, X11Compliance }, 243e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "DodgerBlue4", 16, 78, 139, 1, X11Compliance }, 244e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "firebrick", 178, 34, 34, 1, SVGCompliance | X11Compliance | XPMCompliance }, 245e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "firebrick1", 255, 48, 48, 1, X11Compliance }, 246e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "firebrick2", 238, 44, 44, 1, X11Compliance }, 247e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "firebrick3", 205, 38, 38, 1, X11Compliance }, 248e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "firebrick4", 139, 26, 26, 1, X11Compliance }, 249e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "FloralWhite", 255, 250, 240, 1, SVGCompliance | X11Compliance | XPMCompliance }, 250e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "ForestGreen", 34, 139, 34, 1, SVGCompliance | X11Compliance | XPMCompliance }, 251e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "fractal", 128, 128, 128, 1, SVGCompliance }, 252e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "freeze", 0, 0, 0, 0, SVGCompliance }, 253e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "fuchsia", 255, 0, 255, 1, SVGCompliance }, 254e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gainsboro", 220, 220, 220, 1, SVGCompliance | X11Compliance | XPMCompliance }, 255e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "GhostWhite", 248, 248, 255, 1, SVGCompliance | X11Compliance | XPMCompliance }, 256e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gold", 255, 215, 0, 1, SVGCompliance | X11Compliance | XPMCompliance }, 257e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gold1", 255, 215, 0, 1, X11Compliance }, 258e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gold2", 238, 201, 0, 1, X11Compliance }, 259e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gold3", 205, 173, 0, 1, X11Compliance }, 260e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gold4", 139, 117, 0, 1, X11Compliance }, 261e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "goldenrod", 218, 165, 32, 1, SVGCompliance | X11Compliance | XPMCompliance }, 262e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "goldenrod1", 255, 193, 37, 1, X11Compliance }, 263e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "goldenrod2", 238, 180, 34, 1, X11Compliance }, 264e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "goldenrod3", 205, 155, 29, 1, X11Compliance }, 265e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "goldenrod4", 139, 105, 20, 1, X11Compliance }, 266e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray", 126, 126, 126, 1, SVGCompliance }, 267e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray", 190, 190, 190, 1, X11Compliance | XPMCompliance }, 268e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray0", 0, 0, 0, 1, X11Compliance | XPMCompliance }, 269e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray1", 3, 3, 3, 1, X11Compliance | XPMCompliance }, 270e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray10", 26, 26, 26, 1, X11Compliance | XPMCompliance }, 271e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray100", 255, 255, 255, 1, X11Compliance | XPMCompliance }, 272e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray100", 255, 255, 255, 1, X11Compliance | XPMCompliance }, 273e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray11", 28, 28, 28, 1, X11Compliance | XPMCompliance }, 274e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray12", 31, 31, 31, 1, X11Compliance | XPMCompliance }, 275e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray13", 33, 33, 33, 1, X11Compliance | XPMCompliance }, 276e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray14", 36, 36, 36, 1, X11Compliance | XPMCompliance }, 277e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray15", 38, 38, 38, 1, X11Compliance | XPMCompliance }, 278e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray16", 41, 41, 41, 1, X11Compliance | XPMCompliance }, 279e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray17", 43, 43, 43, 1, X11Compliance | XPMCompliance }, 280e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray18", 46, 46, 46, 1, X11Compliance | XPMCompliance }, 281e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray19", 48, 48, 48, 1, X11Compliance | XPMCompliance }, 282e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray2", 5, 5, 5, 1, X11Compliance | XPMCompliance }, 283e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray20", 51, 51, 51, 1, X11Compliance | XPMCompliance }, 284e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray21", 54, 54, 54, 1, X11Compliance | XPMCompliance }, 285e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray22", 56, 56, 56, 1, X11Compliance | XPMCompliance }, 286e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray23", 59, 59, 59, 1, X11Compliance | XPMCompliance }, 287e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray24", 61, 61, 61, 1, X11Compliance | XPMCompliance }, 288e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray25", 64, 64, 64, 1, X11Compliance | XPMCompliance }, 289e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray26", 66, 66, 66, 1, X11Compliance | XPMCompliance }, 290e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray27", 69, 69, 69, 1, X11Compliance | XPMCompliance }, 291e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray28", 71, 71, 71, 1, X11Compliance | XPMCompliance }, 292e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray29", 74, 74, 74, 1, X11Compliance | XPMCompliance }, 293e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray3", 8, 8, 8, 1, X11Compliance | XPMCompliance }, 294e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray30", 77, 77, 77, 1, X11Compliance | XPMCompliance }, 295e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray31", 79, 79, 79, 1, X11Compliance | XPMCompliance }, 296e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray32", 82, 82, 82, 1, X11Compliance | XPMCompliance }, 297e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray33", 84, 84, 84, 1, X11Compliance | XPMCompliance }, 298e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray34", 87, 87, 87, 1, X11Compliance | XPMCompliance }, 299e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray35", 89, 89, 89, 1, X11Compliance | XPMCompliance }, 300e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray36", 92, 92, 92, 1, X11Compliance | XPMCompliance }, 301e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray37", 94, 94, 94, 1, X11Compliance | XPMCompliance }, 302e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray38", 97, 97, 97, 1, X11Compliance | XPMCompliance }, 303e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray39", 99, 99, 99, 1, X11Compliance | XPMCompliance }, 304e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray4", 10, 10, 10, 1, X11Compliance | XPMCompliance }, 305e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray40", 102, 102, 102, 1, X11Compliance | XPMCompliance }, 306e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray41", 105, 105, 105, 1, X11Compliance | XPMCompliance }, 307e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray42", 107, 107, 107, 1, X11Compliance | XPMCompliance }, 308e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray43", 110, 110, 110, 1, X11Compliance | XPMCompliance }, 309e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray44", 112, 112, 112, 1, X11Compliance | XPMCompliance }, 310e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray45", 115, 115, 115, 1, X11Compliance | XPMCompliance }, 311e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray46", 117, 117, 117, 1, X11Compliance | XPMCompliance }, 312e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray47", 120, 120, 120, 1, X11Compliance | XPMCompliance }, 313e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray48", 122, 122, 122, 1, X11Compliance | XPMCompliance }, 314e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray49", 125, 125, 125, 1, X11Compliance | XPMCompliance }, 315e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray5", 13, 13, 13, 1, X11Compliance | XPMCompliance }, 31697b47b2d6007e4d573b7e5c299480259e4f01d25cristy { "gray50", 127, 127, 127, 1, X11Compliance | XPMCompliance }, 317e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray51", 130, 130, 130, 1, X11Compliance | XPMCompliance }, 318e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray52", 133, 133, 133, 1, X11Compliance | XPMCompliance }, 319e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray53", 135, 135, 135, 1, X11Compliance | XPMCompliance }, 320e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray54", 138, 138, 138, 1, X11Compliance | XPMCompliance }, 321e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray55", 140, 140, 140, 1, X11Compliance | XPMCompliance }, 322e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray56", 143, 143, 143, 1, X11Compliance | XPMCompliance }, 323e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray57", 145, 145, 145, 1, X11Compliance | XPMCompliance }, 324e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray58", 148, 148, 148, 1, X11Compliance | XPMCompliance }, 325e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray59", 150, 150, 150, 1, X11Compliance | XPMCompliance }, 326e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray6", 15, 15, 15, 1, X11Compliance | XPMCompliance }, 327e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray60", 153, 153, 153, 1, X11Compliance | XPMCompliance }, 328e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray61", 156, 156, 156, 1, X11Compliance | XPMCompliance }, 329e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray62", 158, 158, 158, 1, X11Compliance | XPMCompliance }, 330e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray63", 161, 161, 161, 1, X11Compliance | XPMCompliance }, 331e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray64", 163, 163, 163, 1, X11Compliance | XPMCompliance }, 332e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray65", 166, 166, 166, 1, X11Compliance | XPMCompliance }, 333e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray66", 168, 168, 168, 1, X11Compliance | XPMCompliance }, 334e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray67", 171, 171, 171, 1, X11Compliance | XPMCompliance }, 335e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray68", 173, 173, 173, 1, X11Compliance | XPMCompliance }, 336e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray69", 176, 176, 176, 1, X11Compliance | XPMCompliance }, 337e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray7", 18, 18, 18, 1, X11Compliance | XPMCompliance }, 338e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray70", 179, 179, 179, 1, X11Compliance | XPMCompliance }, 339e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray71", 181, 181, 181, 1, X11Compliance | XPMCompliance }, 340e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray72", 184, 184, 184, 1, X11Compliance | XPMCompliance }, 341e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray73", 186, 186, 186, 1, X11Compliance | XPMCompliance }, 342e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray74", 189, 189, 189, 1, X11Compliance | XPMCompliance }, 343e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray75", 191, 191, 191, 1, X11Compliance | XPMCompliance }, 344e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray76", 194, 194, 194, 1, X11Compliance | XPMCompliance }, 345e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray77", 196, 196, 196, 1, X11Compliance | XPMCompliance }, 346e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray78", 199, 199, 199, 1, X11Compliance | XPMCompliance }, 347e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray79", 201, 201, 201, 1, X11Compliance | XPMCompliance }, 348e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray8", 20, 20, 20, 1, X11Compliance | XPMCompliance }, 349e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray80", 204, 204, 204, 1, X11Compliance | XPMCompliance }, 350e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray81", 207, 207, 207, 1, X11Compliance | XPMCompliance }, 351e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray82", 209, 209, 209, 1, X11Compliance | XPMCompliance }, 352e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray83", 212, 212, 212, 1, X11Compliance | XPMCompliance }, 353e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray84", 214, 214, 214, 1, X11Compliance | XPMCompliance }, 354e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray85", 217, 217, 217, 1, X11Compliance | XPMCompliance }, 355e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray86", 219, 219, 219, 1, X11Compliance | XPMCompliance }, 356e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray87", 222, 222, 222, 1, X11Compliance | XPMCompliance }, 357e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray88", 224, 224, 224, 1, X11Compliance | XPMCompliance }, 358e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray89", 227, 227, 227, 1, X11Compliance | XPMCompliance }, 359e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray9", 23, 23, 23, 1, X11Compliance | XPMCompliance }, 360e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray90", 229, 229, 229, 1, X11Compliance | XPMCompliance }, 361e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray91", 232, 232, 232, 1, X11Compliance | XPMCompliance }, 362e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray92", 235, 235, 235, 1, X11Compliance | XPMCompliance }, 363e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray93", 237, 237, 237, 1, X11Compliance | XPMCompliance }, 364e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray94", 240, 240, 240, 1, X11Compliance | XPMCompliance }, 365e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray95", 242, 242, 242, 1, X11Compliance | XPMCompliance }, 366e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray96", 245, 245, 245, 1, X11Compliance | XPMCompliance }, 367e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray97", 247, 247, 247, 1, X11Compliance | XPMCompliance }, 368e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray98", 250, 250, 250, 1, X11Compliance | XPMCompliance }, 369e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "gray99", 252, 252, 252, 1, X11Compliance | XPMCompliance }, 370e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "green", 0, 255, 0, 1, X11Compliance | XPMCompliance }, 371e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "green1", 0, 255, 0, 1, X11Compliance }, 372e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "green2", 0, 238, 0, 1, X11Compliance }, 373e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "green3", 0, 205, 0, 1, X11Compliance }, 374e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "green4", 0, 139, 0, 1, X11Compliance }, 375e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "GreenYellow", 173, 255, 47, 1, X11Compliance | XPMCompliance }, 376e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey", 190, 190, 190, 1, SVGCompliance | X11Compliance }, 377e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey0", 0, 0, 0, 1, SVGCompliance | X11Compliance }, 378e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey1", 3, 3, 3, 1, SVGCompliance | X11Compliance }, 379e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey10", 26, 26, 26, 1, SVGCompliance | X11Compliance }, 380e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey100", 255, 255, 255, 1, SVGCompliance | X11Compliance }, 381e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey11", 28, 28, 28, 1, SVGCompliance | X11Compliance }, 382e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey12", 31, 31, 31, 1, SVGCompliance | X11Compliance }, 383e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey13", 33, 33, 33, 1, SVGCompliance | X11Compliance }, 384e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey14", 36, 36, 36, 1, SVGCompliance | X11Compliance }, 385e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey15", 38, 38, 38, 1, SVGCompliance | X11Compliance }, 386e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey16", 41, 41, 41, 1, SVGCompliance | X11Compliance }, 387e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey17", 43, 43, 43, 1, SVGCompliance | X11Compliance }, 388e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey18", 46, 46, 46, 1, SVGCompliance | X11Compliance }, 389e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey19", 48, 48, 48, 1, SVGCompliance | X11Compliance }, 390e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey2", 5, 5, 5, 1, SVGCompliance | X11Compliance }, 391e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey20", 51, 51, 51, 1, SVGCompliance | X11Compliance }, 392e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey21", 54, 54, 54, 1, SVGCompliance | X11Compliance }, 393e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey22", 56, 56, 56, 1, SVGCompliance | X11Compliance }, 394e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey23", 59, 59, 59, 1, SVGCompliance | X11Compliance }, 395e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey24", 61, 61, 61, 1, SVGCompliance | X11Compliance }, 396e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey25", 64, 64, 64, 1, SVGCompliance | X11Compliance }, 397e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey26", 66, 66, 66, 1, SVGCompliance | X11Compliance }, 398e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey27", 69, 69, 69, 1, SVGCompliance | X11Compliance }, 399e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey28", 71, 71, 71, 1, SVGCompliance | X11Compliance }, 400e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey29", 74, 74, 74, 1, SVGCompliance | X11Compliance }, 401e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey3", 8, 8, 8, 1, SVGCompliance | X11Compliance }, 402e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey30", 77, 77, 77, 1, SVGCompliance | X11Compliance }, 403e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey31", 79, 79, 79, 1, SVGCompliance | X11Compliance }, 404e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey32", 82, 82, 82, 1, SVGCompliance | X11Compliance }, 405e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey33", 84, 84, 84, 1, SVGCompliance | X11Compliance }, 406e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey34", 87, 87, 87, 1, SVGCompliance | X11Compliance }, 407e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey35", 89, 89, 89, 1, SVGCompliance | X11Compliance }, 408e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey36", 92, 92, 92, 1, SVGCompliance | X11Compliance }, 409e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey37", 94, 94, 94, 1, SVGCompliance | X11Compliance }, 410e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey38", 97, 97, 97, 1, SVGCompliance | X11Compliance }, 411e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey39", 99, 99, 99, 1, SVGCompliance | X11Compliance }, 412e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey4", 10, 10, 10, 1, SVGCompliance | X11Compliance }, 413e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey40", 102, 102, 102, 1, SVGCompliance | X11Compliance }, 414e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey41", 105, 105, 105, 1, SVGCompliance | X11Compliance }, 415e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey42", 107, 107, 107, 1, SVGCompliance | X11Compliance }, 416e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey43", 110, 110, 110, 1, SVGCompliance | X11Compliance }, 417e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey44", 112, 112, 112, 1, SVGCompliance | X11Compliance }, 418e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey45", 115, 115, 115, 1, SVGCompliance | X11Compliance }, 419e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey46", 117, 117, 117, 1, SVGCompliance | X11Compliance }, 420e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey47", 120, 120, 120, 1, SVGCompliance | X11Compliance }, 421e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey48", 122, 122, 122, 1, SVGCompliance | X11Compliance }, 422e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey49", 125, 125, 125, 1, SVGCompliance | X11Compliance }, 423e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey5", 13, 13, 13, 1, SVGCompliance | X11Compliance }, 424e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey50", 127, 127, 127, 1, SVGCompliance | X11Compliance }, 425e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey51", 130, 130, 130, 1, SVGCompliance | X11Compliance }, 426e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey52", 133, 133, 133, 1, SVGCompliance | X11Compliance }, 427e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey53", 135, 135, 135, 1, SVGCompliance | X11Compliance }, 428e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey54", 138, 138, 138, 1, SVGCompliance | X11Compliance }, 429e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey55", 140, 140, 140, 1, SVGCompliance | X11Compliance }, 430e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey56", 143, 143, 143, 1, SVGCompliance | X11Compliance }, 431e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey57", 145, 145, 145, 1, SVGCompliance | X11Compliance }, 432e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey58", 148, 148, 148, 1, SVGCompliance | X11Compliance }, 433e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey59", 150, 150, 150, 1, SVGCompliance | X11Compliance }, 434e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey6", 15, 15, 15, 1, SVGCompliance | X11Compliance }, 435e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey60", 153, 153, 153, 1, SVGCompliance | X11Compliance }, 436e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey61", 156, 156, 156, 1, SVGCompliance | X11Compliance }, 437e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey62", 158, 158, 158, 1, SVGCompliance | X11Compliance }, 438e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey63", 161, 161, 161, 1, SVGCompliance | X11Compliance }, 439e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey64", 163, 163, 163, 1, SVGCompliance | X11Compliance }, 440e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey65", 166, 166, 166, 1, SVGCompliance | X11Compliance }, 441e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey66", 168, 168, 168, 1, SVGCompliance | X11Compliance }, 442e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey67", 171, 171, 171, 1, SVGCompliance | X11Compliance }, 443e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey68", 173, 173, 173, 1, SVGCompliance | X11Compliance }, 444e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey69", 176, 176, 176, 1, SVGCompliance | X11Compliance }, 445e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey7", 18, 18, 18, 1, SVGCompliance | X11Compliance }, 446e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey70", 179, 179, 179, 1, SVGCompliance | X11Compliance }, 447e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey71", 181, 181, 181, 1, SVGCompliance | X11Compliance }, 448e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey72", 184, 184, 184, 1, SVGCompliance | X11Compliance }, 449e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey73", 186, 186, 186, 1, SVGCompliance | X11Compliance }, 450e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey74", 189, 189, 189, 1, SVGCompliance | X11Compliance }, 451e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey75", 191, 191, 191, 1, SVGCompliance | X11Compliance }, 452e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey76", 194, 194, 194, 1, SVGCompliance | X11Compliance }, 453e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey77", 196, 196, 196, 1, SVGCompliance | X11Compliance }, 454e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey78", 199, 199, 199, 1, SVGCompliance | X11Compliance }, 455e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey79", 201, 201, 201, 1, SVGCompliance | X11Compliance }, 456e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey8", 20, 20, 20, 1, SVGCompliance | X11Compliance }, 457e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey80", 204, 204, 204, 1, SVGCompliance | X11Compliance }, 458e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey81", 207, 207, 207, 1, SVGCompliance | X11Compliance }, 459e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey82", 209, 209, 209, 1, SVGCompliance | X11Compliance }, 460e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey83", 212, 212, 212, 1, SVGCompliance | X11Compliance }, 461e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey84", 214, 214, 214, 1, SVGCompliance | X11Compliance }, 462e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey85", 217, 217, 217, 1, SVGCompliance | X11Compliance }, 463e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey86", 219, 219, 219, 1, SVGCompliance | X11Compliance }, 464e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey87", 222, 222, 222, 1, SVGCompliance | X11Compliance }, 465e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey88", 224, 224, 224, 1, SVGCompliance | X11Compliance }, 466e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey89", 227, 227, 227, 1, SVGCompliance | X11Compliance }, 467e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey9", 23, 23, 23, 1, SVGCompliance | X11Compliance }, 468e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey90", 229, 229, 229, 1, SVGCompliance | X11Compliance }, 469e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey91", 232, 232, 232, 1, SVGCompliance | X11Compliance }, 470e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey92", 235, 235, 235, 1, SVGCompliance | X11Compliance }, 471e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey93", 237, 237, 237, 1, SVGCompliance | X11Compliance }, 472e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey94", 240, 240, 240, 1, SVGCompliance | X11Compliance }, 473e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey95", 242, 242, 242, 1, SVGCompliance | X11Compliance }, 474e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey96", 245, 245, 245, 1, SVGCompliance | X11Compliance }, 475e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey97", 247, 247, 247, 1, SVGCompliance | X11Compliance }, 476e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey98", 250, 250, 250, 1, SVGCompliance | X11Compliance }, 477e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "grey99", 252, 252, 252, 1, SVGCompliance | X11Compliance }, 478e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "honeydew", 240, 255, 240, 1, SVGCompliance | X11Compliance | XPMCompliance }, 479e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "honeydew1", 240, 255, 240, 1, X11Compliance }, 480e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "honeydew2", 224, 238, 224, 1, X11Compliance }, 481e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "honeydew3", 193, 205, 193, 1, X11Compliance }, 482e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "honeydew4", 131, 139, 131, 1, X11Compliance }, 483e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "HotPink", 255, 105, 180, 1, SVGCompliance | X11Compliance | XPMCompliance }, 484e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "HotPink1", 255, 110, 180, 1, X11Compliance }, 485e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "HotPink2", 238, 106, 167, 1, X11Compliance }, 486e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "HotPink3", 205, 96, 144, 1, X11Compliance }, 487e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "HotPink4", 139, 58, 98, 1, X11Compliance }, 488e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "IndianRed", 205, 92, 92, 1, SVGCompliance | X11Compliance | XPMCompliance }, 489e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "IndianRed1", 255, 106, 106, 1, X11Compliance }, 490e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "IndianRed2", 238, 99, 99, 1, X11Compliance }, 491e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "IndianRed3", 205, 85, 85, 1, X11Compliance }, 492e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "IndianRed4", 139, 58, 58, 1, X11Compliance }, 493e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "indigo", 75, 0, 130, 1, SVGCompliance }, 494e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "ivory", 255, 255, 240, 1, SVGCompliance | X11Compliance | XPMCompliance }, 495e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "ivory1", 255, 255, 240, 1, X11Compliance }, 496e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "ivory2", 238, 238, 224, 1, X11Compliance }, 497e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "ivory3", 205, 205, 193, 1, X11Compliance }, 498e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "ivory4", 139, 139, 131, 1, X11Compliance }, 499e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "khaki", 240, 230, 140, 1, SVGCompliance | X11Compliance | XPMCompliance }, 500e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "khaki1", 255, 246, 143, 1, X11Compliance }, 501e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "khaki2", 238, 230, 133, 1, X11Compliance }, 502e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "khaki3", 205, 198, 115, 1, X11Compliance }, 503e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "khaki4", 139, 134, 78, 1, X11Compliance }, 504e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "lavender", 230, 230, 250, 1, SVGCompliance | X11Compliance | XPMCompliance }, 505e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LavenderBlush", 255, 240, 245, 1, SVGCompliance | X11Compliance | XPMCompliance }, 506e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LavenderBlush1", 255, 240, 245, 1, X11Compliance }, 507e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LavenderBlush2", 238, 224, 229, 1, X11Compliance }, 508e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LavenderBlush3", 205, 193, 197, 1, X11Compliance }, 509e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LavenderBlush4", 139, 131, 134, 1, X11Compliance }, 510e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LawnGreen", 124, 252, 0, 1, SVGCompliance | X11Compliance | XPMCompliance }, 511e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LemonChiffon", 255, 250, 205, 1, SVGCompliance | X11Compliance | XPMCompliance }, 512e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LemonChiffon1", 255, 250, 205, 1, X11Compliance }, 513e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LemonChiffon2", 238, 233, 191, 1, X11Compliance }, 514e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LemonChiffon3", 205, 201, 165, 1, X11Compliance }, 515e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LemonChiffon4", 139, 137, 112, 1, X11Compliance }, 516e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightBlue", 173, 216, 230, 1, SVGCompliance | X11Compliance | XPMCompliance }, 517e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightBlue1", 191, 239, 255, 1, X11Compliance }, 518e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightBlue2", 178, 223, 238, 1, X11Compliance }, 519e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightBlue3", 154, 192, 205, 1, X11Compliance }, 520e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightBlue4", 104, 131, 139, 1, X11Compliance }, 521e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightCoral", 240, 128, 128, 1, SVGCompliance | X11Compliance | XPMCompliance }, 522e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightCyan", 224, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance }, 523e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightCyan1", 224, 255, 255, 1, X11Compliance }, 524e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightCyan2", 209, 238, 238, 1, X11Compliance }, 525e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightCyan3", 180, 205, 205, 1, X11Compliance }, 526e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightCyan4", 122, 139, 139, 1, X11Compliance }, 527e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightGoldenrod", 238, 221, 130, 1, X11Compliance | XPMCompliance }, 528e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightGoldenrod1", 255, 236, 139, 1, X11Compliance }, 529e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightGoldenrod2", 238, 220, 130, 1, X11Compliance }, 530e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightGoldenrod3", 205, 190, 112, 1, X11Compliance }, 531e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightGoldenrod4", 139, 129, 76, 1, X11Compliance }, 532e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightGoldenrodYellow", 250, 250, 210, 1, SVGCompliance | X11Compliance | XPMCompliance }, 533e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightGray", 211, 211, 211, 1, SVGCompliance | X11Compliance | XPMCompliance }, 534e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightGreen", 144, 238, 144, 1, SVGCompliance | X11Compliance }, 535e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightGrey", 211, 211, 211, 1, SVGCompliance | X11Compliance }, 536e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightPink", 255, 182, 193, 1, SVGCompliance | X11Compliance | XPMCompliance }, 537e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightPink1", 255, 174, 185, 1, X11Compliance }, 538e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightPink2", 238, 162, 173, 1, X11Compliance }, 539e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightPink3", 205, 140, 149, 1, X11Compliance }, 540e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightPink4", 139, 95, 101, 1, X11Compliance }, 541e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSalmon", 255, 160, 122, 1, SVGCompliance | X11Compliance | XPMCompliance }, 542e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSalmon1", 255, 160, 122, 1, X11Compliance }, 543e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSalmon2", 238, 149, 114, 1, X11Compliance }, 544e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSalmon3", 205, 129, 98, 1, X11Compliance }, 545e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSalmon4", 139, 87, 66, 1, X11Compliance }, 546e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSeaGreen", 32, 178, 170, 1, SVGCompliance | X11Compliance | XPMCompliance }, 547e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSkyBlue", 135, 206, 250, 1, SVGCompliance | X11Compliance | XPMCompliance }, 548e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSkyBlue1", 176, 226, 255, 1, X11Compliance }, 549e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSkyBlue2", 164, 211, 238, 1, X11Compliance }, 550e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSkyBlue3", 141, 182, 205, 1, X11Compliance }, 551e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSkyBlue4", 96, 123, 139, 1, X11Compliance }, 552e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSlateBlue", 132, 112, 255, 1, X11Compliance | XPMCompliance }, 553e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSlateGray", 119, 136, 153, 1, SVGCompliance | X11Compliance | XPMCompliance }, 554e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSlateGrey", 119, 136, 153, 1, SVGCompliance | X11Compliance }, 555e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSteelBlue", 176, 196, 222, 1, SVGCompliance | X11Compliance | XPMCompliance }, 556e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSteelBlue1", 202, 225, 255, 1, X11Compliance }, 557e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSteelBlue2", 188, 210, 238, 1, X11Compliance }, 558e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSteelBlue3", 162, 181, 205, 1, X11Compliance }, 559e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightSteelBlue4", 110, 123, 139, 1, X11Compliance }, 560e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightYellow", 255, 255, 224, 1, SVGCompliance | X11Compliance | XPMCompliance }, 561e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightYellow1", 255, 255, 224, 1, X11Compliance }, 562e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightYellow2", 238, 238, 209, 1, X11Compliance }, 563e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightYellow3", 205, 205, 180, 1, X11Compliance }, 564e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LightYellow4", 139, 139, 122, 1, X11Compliance }, 565e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "lime", 0, 255, 0, 1, SVGCompliance }, 566e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "LimeGreen", 50, 205, 50, 1, SVGCompliance | X11Compliance | XPMCompliance }, 567e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "linen", 250, 240, 230, 1, SVGCompliance | X11Compliance | XPMCompliance }, 568e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "magenta1", 255, 0, 255, 1, X11Compliance }, 569e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "magenta2", 238, 0, 238, 1, X11Compliance }, 570e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "magenta3", 205, 0, 205, 1, X11Compliance }, 571e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "magenta4", 139, 0, 139, 1, X11Compliance }, 572e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "maroon", 128, 0, 0, 1, SVGCompliance }, 573e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "maroon", 176, 48, 96, 1, X11Compliance | XPMCompliance }, 574e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "maroon1", 255, 52, 179, 1, X11Compliance }, 575e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "maroon2", 238, 48, 167, 1, X11Compliance }, 576e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "maroon3", 205, 41, 144, 1, X11Compliance }, 577e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "maroon4", 139, 28, 98, 1, X11Compliance }, 578e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumAquamarine", 102, 205, 170, 1, SVGCompliance | X11Compliance | XPMCompliance }, 579e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumBlue", 0, 0, 205, 1, SVGCompliance | X11Compliance | XPMCompliance }, 580e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumForestGreen", 50, 129, 75, 1, X11Compliance | XPMCompliance }, 581e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumGoldenRod", 209, 193, 102, 1, X11Compliance | XPMCompliance }, 582e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumOrchid", 186, 85, 211, 1, SVGCompliance | X11Compliance | XPMCompliance }, 583e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumOrchid1", 224, 102, 255, 1, X11Compliance }, 584e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumOrchid2", 209, 95, 238, 1, X11Compliance }, 585e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumOrchid3", 180, 82, 205, 1, X11Compliance }, 586e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumOrchid4", 122, 55, 139, 1, X11Compliance }, 587e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumPurple", 147, 112, 219, 1, SVGCompliance | X11Compliance | XPMCompliance }, 588e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumPurple1", 171, 130, 255, 1, X11Compliance }, 589e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumPurple2", 159, 121, 238, 1, X11Compliance }, 590e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumPurple3", 137, 104, 205, 1, X11Compliance }, 591e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumPurple4", 93, 71, 139, 1, X11Compliance }, 592e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumSeaGreen", 60, 179, 113, 1, SVGCompliance | X11Compliance | XPMCompliance }, 593e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumSlateBlue", 123, 104, 238, 1, SVGCompliance | X11Compliance | XPMCompliance }, 594e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumSpringGreen", 0, 250, 154, 1, SVGCompliance | X11Compliance | XPMCompliance }, 595e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumTurquoise", 72, 209, 204, 1, SVGCompliance | X11Compliance | XPMCompliance }, 596e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MediumVioletRed", 199, 21, 133, 1, SVGCompliance | X11Compliance | XPMCompliance }, 597e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MidnightBlue", 25, 25, 112, 1, SVGCompliance | X11Compliance | XPMCompliance }, 598e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MintCream", 245, 255, 250, 1, SVGCompliance | X11Compliance | XPMCompliance }, 599e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MistyRose", 255, 228, 225, 1, SVGCompliance | X11Compliance | XPMCompliance }, 600e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MistyRose1", 255, 228, 225, 1, X11Compliance }, 601e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MistyRose2", 238, 213, 210, 1, X11Compliance }, 602e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MistyRose3", 205, 183, 181, 1, X11Compliance }, 603e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "MistyRose4", 139, 125, 123, 1, X11Compliance }, 604e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "moccasin", 255, 228, 181, 1, SVGCompliance | X11Compliance | XPMCompliance }, 605e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "NavajoWhite", 255, 222, 173, 1, SVGCompliance | X11Compliance | XPMCompliance }, 606e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "NavajoWhite1", 255, 222, 173, 1, X11Compliance }, 607e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "NavajoWhite2", 238, 207, 161, 1, X11Compliance }, 608e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "NavajoWhite3", 205, 179, 139, 1, X11Compliance }, 609e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "NavajoWhite4", 139, 121, 94, 1, X11Compliance }, 610e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "navy", 0, 0, 128, 1, SVGCompliance | X11Compliance | XPMCompliance }, 611e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "NavyBlue", 0, 0, 128, 1, X11Compliance | XPMCompliance }, 612e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "matte", 0, 0, 0, 0, SVGCompliance }, 613e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OldLace", 253, 245, 230, 1, SVGCompliance | X11Compliance | XPMCompliance }, 614e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "olive", 128, 128, 0, 1, SVGCompliance }, 615e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OliveDrab", 107, 142, 35, 1, SVGCompliance | X11Compliance | XPMCompliance }, 616e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OliveDrab1", 192, 255, 62, 1, X11Compliance }, 617e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OliveDrab2", 179, 238, 58, 1, X11Compliance }, 618e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OliveDrab3", 154, 205, 50, 1, X11Compliance }, 619e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OliveDrab4", 105, 139, 34, 1, X11Compliance }, 620e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "opaque", 0, 0, 0, 1, SVGCompliance }, 621e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "orange", 255, 165, 0, 1, SVGCompliance | X11Compliance | XPMCompliance }, 622e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "orange1", 255, 165, 0, 1, X11Compliance }, 623e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "orange2", 238, 154, 0, 1, X11Compliance }, 624e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "orange3", 205, 133, 0, 1, X11Compliance }, 625e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "orange4", 139, 90, 0, 1, X11Compliance }, 626e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OrangeRed", 255, 69, 0, 1, SVGCompliance | X11Compliance | XPMCompliance }, 627e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OrangeRed1", 255, 69, 0, 1, X11Compliance }, 628e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OrangeRed2", 238, 64, 0, 1, X11Compliance }, 629e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OrangeRed3", 205, 55, 0, 1, X11Compliance }, 630e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "OrangeRed4", 139, 37, 0, 1, X11Compliance }, 631e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "orchid", 218, 112, 214, 1, SVGCompliance | X11Compliance | XPMCompliance }, 632e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "orchid1", 255, 131, 250, 1, X11Compliance }, 633e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "orchid2", 238, 122, 233, 1, X11Compliance }, 634e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "orchid3", 205, 105, 201, 1, X11Compliance }, 635e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "orchid4", 139, 71, 137, 1, X11Compliance }, 636e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleGoldenrod", 238, 232, 170, 1, SVGCompliance | X11Compliance | XPMCompliance }, 637e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleGreen", 152, 251, 152, 1, SVGCompliance | X11Compliance | XPMCompliance }, 638e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleGreen1", 154, 255, 154, 1, X11Compliance }, 639e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleGreen2", 144, 238, 144, 1, X11Compliance }, 640e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleGreen3", 124, 205, 124, 1, X11Compliance }, 641e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleGreen4", 84, 139, 84, 1, X11Compliance }, 642e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleTurquoise", 175, 238, 238, 1, SVGCompliance | X11Compliance | XPMCompliance }, 643e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleTurquoise1", 187, 255, 255, 1, X11Compliance }, 644e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleTurquoise2", 174, 238, 238, 1, X11Compliance }, 645e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleTurquoise3", 150, 205, 205, 1, X11Compliance }, 646e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleTurquoise4", 102, 139, 139, 1, X11Compliance }, 647e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleVioletRed", 219, 112, 147, 1, SVGCompliance | X11Compliance | XPMCompliance }, 648e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleVioletRed1", 255, 130, 171, 1, X11Compliance }, 649e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleVioletRed2", 238, 121, 159, 1, X11Compliance }, 650e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleVioletRed3", 205, 104, 137, 1, X11Compliance }, 651e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PaleVioletRed4", 139, 71, 93, 1, X11Compliance }, 652e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PapayaWhip", 255, 239, 213, 1, SVGCompliance | X11Compliance | XPMCompliance }, 653e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PeachPuff", 255, 218, 185, 1, SVGCompliance | X11Compliance | XPMCompliance }, 654e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PeachPuff1", 255, 218, 185, 1, X11Compliance }, 655e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PeachPuff2", 238, 203, 173, 1, X11Compliance }, 656e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PeachPuff3", 205, 175, 149, 1, X11Compliance }, 657e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PeachPuff4", 139, 119, 101, 1, X11Compliance }, 658e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "peru", 205, 133, 63, 1, SVGCompliance | X11Compliance | XPMCompliance }, 659e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "pink", 255, 192, 203, 1, SVGCompliance | X11Compliance | XPMCompliance }, 660e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "pink1", 255, 181, 197, 1, X11Compliance }, 661e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "pink2", 238, 169, 184, 1, X11Compliance }, 662e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "pink3", 205, 145, 158, 1, X11Compliance }, 663e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "pink4", 139, 99, 108, 1, X11Compliance }, 664e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "plum", 221, 160, 221, 1, SVGCompliance | X11Compliance | XPMCompliance }, 665e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "plum1", 255, 187, 255, 1, X11Compliance }, 666e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "plum2", 238, 174, 238, 1, X11Compliance }, 667e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "plum3", 205, 150, 205, 1, X11Compliance }, 668e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "plum4", 139, 102, 139, 1, X11Compliance }, 669e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "PowderBlue", 176, 224, 230, 1, SVGCompliance | X11Compliance | XPMCompliance }, 670e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "purple", 128, 0, 128, 1, SVGCompliance }, 671e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "purple", 160, 32, 240, 1, X11Compliance | XPMCompliance }, 672e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "purple1", 155, 48, 255, 1, X11Compliance }, 673e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "purple2", 145, 44, 238, 1, X11Compliance }, 674e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "purple3", 125, 38, 205, 1, X11Compliance }, 675e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "purple4", 85, 26, 139, 1, X11Compliance }, 676e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "red1", 255, 0, 0, 1, X11Compliance }, 677e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "red2", 238, 0, 0, 1, X11Compliance }, 678e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "red3", 205, 0, 0, 1, X11Compliance }, 679e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "red4", 139, 0, 0, 1, X11Compliance }, 680e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "RosyBrown", 188, 143, 143, 1, SVGCompliance | X11Compliance | XPMCompliance }, 681e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "RosyBrown1", 255, 193, 193, 1, X11Compliance }, 682e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "RosyBrown2", 238, 180, 180, 1, X11Compliance }, 683e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "RosyBrown3", 205, 155, 155, 1, X11Compliance }, 684e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "RosyBrown4", 139, 105, 105, 1, X11Compliance }, 685e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "RoyalBlue", 65, 105, 225, 1, SVGCompliance | X11Compliance | XPMCompliance }, 686e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "RoyalBlue1", 72, 118, 255, 1, X11Compliance }, 687e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "RoyalBlue2", 67, 110, 238, 1, X11Compliance }, 688e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "RoyalBlue3", 58, 95, 205, 1, X11Compliance }, 689e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "RoyalBlue4", 39, 64, 139, 1, X11Compliance }, 690e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SaddleBrown", 139, 69, 19, 1, SVGCompliance | X11Compliance | XPMCompliance }, 691e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "salmon", 250, 128, 114, 1, SVGCompliance | X11Compliance | XPMCompliance }, 692e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "salmon1", 255, 140, 105, 1, X11Compliance }, 693e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "salmon2", 238, 130, 98, 1, X11Compliance }, 694e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "salmon3", 205, 112, 84, 1, X11Compliance }, 695e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "salmon4", 139, 76, 57, 1, X11Compliance }, 696e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SandyBrown", 244, 164, 96, 1, SVGCompliance | X11Compliance | XPMCompliance }, 697e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SeaGreen", 46, 139, 87, 1, SVGCompliance | X11Compliance | XPMCompliance }, 698e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SeaGreen1", 84, 255, 159, 1, X11Compliance }, 699e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SeaGreen2", 78, 238, 148, 1, X11Compliance }, 700e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SeaGreen3", 67, 205, 128, 1, X11Compliance }, 701e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SeaGreen4", 46, 139, 87, 1, X11Compliance }, 702e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "seashell", 255, 245, 238, 1, SVGCompliance | X11Compliance | XPMCompliance }, 703e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "seashell1", 255, 245, 238, 1, X11Compliance }, 704e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "seashell2", 238, 229, 222, 1, X11Compliance }, 705e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "seashell3", 205, 197, 191, 1, X11Compliance }, 706e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "seashell4", 139, 134, 130, 1, X11Compliance }, 707e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "sienna", 160, 82, 45, 1, SVGCompliance | X11Compliance | XPMCompliance }, 708e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "sienna1", 255, 130, 71, 1, X11Compliance }, 709e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "sienna2", 238, 121, 66, 1, X11Compliance }, 710e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "sienna3", 205, 104, 57, 1, X11Compliance }, 711e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "sienna4", 139, 71, 38, 1, X11Compliance }, 712e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "silver", 192, 192, 192, 1, SVGCompliance }, 713e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SkyBlue", 135, 206, 235, 1, SVGCompliance | X11Compliance | XPMCompliance }, 714e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SkyBlue1", 135, 206, 255, 1, X11Compliance }, 715e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SkyBlue2", 126, 192, 238, 1, X11Compliance }, 716e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SkyBlue3", 108, 166, 205, 1, X11Compliance }, 717e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SkyBlue4", 74, 112, 139, 1, X11Compliance }, 718e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateBlue", 106, 90, 205, 1, SVGCompliance | X11Compliance | XPMCompliance }, 719e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateBlue1", 131, 111, 255, 1, X11Compliance }, 720e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateBlue2", 122, 103, 238, 1, X11Compliance }, 721e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateBlue3", 105, 89, 205, 1, X11Compliance }, 722e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateBlue4", 71, 60, 139, 1, X11Compliance }, 723e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateGray", 112, 128, 144, 1, SVGCompliance | X11Compliance | XPMCompliance }, 724e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateGray1", 198, 226, 255, 1, X11Compliance }, 725e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateGray2", 185, 211, 238, 1, X11Compliance }, 726e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateGray3", 159, 182, 205, 1, X11Compliance }, 727e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateGray4", 108, 123, 139, 1, X11Compliance }, 728e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SlateGrey", 112, 128, 144, 1, SVGCompliance | X11Compliance }, 729e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "snow", 255, 250, 250, 1, SVGCompliance | X11Compliance | XPMCompliance }, 730e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "snow1", 255, 250, 250, 1, X11Compliance }, 731e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "snow2", 238, 233, 233, 1, X11Compliance }, 732e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "snow3", 205, 201, 201, 1, X11Compliance }, 733e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "snow4", 139, 137, 137, 1, X11Compliance }, 734e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SpringGreen", 0, 255, 127, 1, SVGCompliance | X11Compliance | XPMCompliance }, 735e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SpringGreen1", 0, 255, 127, 1, X11Compliance }, 736e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SpringGreen2", 0, 238, 118, 1, X11Compliance }, 737e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SpringGreen3", 0, 205, 102, 1, X11Compliance }, 738e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SpringGreen4", 0, 139, 69, 1, X11Compliance }, 739e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SteelBlue", 70, 130, 180, 1, SVGCompliance | X11Compliance | XPMCompliance }, 740e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SteelBlue1", 99, 184, 255, 1, X11Compliance }, 741e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SteelBlue2", 92, 172, 238, 1, X11Compliance }, 742e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SteelBlue3", 79, 148, 205, 1, X11Compliance }, 743e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "SteelBlue4", 54, 100, 139, 1, X11Compliance }, 744e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "tan", 210, 180, 140, 1, SVGCompliance | X11Compliance | XPMCompliance }, 745e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "tan1", 255, 165, 79, 1, X11Compliance }, 746e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "tan2", 238, 154, 73, 1, X11Compliance }, 747e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "tan3", 205, 133, 63, 1, X11Compliance }, 748e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "tan4", 139, 90, 43, 1, X11Compliance }, 749e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "teal", 0, 128, 128, 1, SVGCompliance }, 750e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "thistle", 216, 191, 216, 1, SVGCompliance | X11Compliance | XPMCompliance }, 751e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "thistle1", 255, 225, 255, 1, X11Compliance }, 752e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "thistle2", 238, 210, 238, 1, X11Compliance }, 753e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "thistle3", 205, 181, 205, 1, X11Compliance }, 754e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "thistle4", 139, 123, 139, 1, X11Compliance }, 755e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "tomato", 255, 99, 71, 1, SVGCompliance | X11Compliance | XPMCompliance }, 756e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "tomato1", 255, 99, 71, 1, X11Compliance }, 757e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "tomato2", 238, 92, 66, 1, X11Compliance }, 758e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "tomato3", 205, 79, 57, 1, X11Compliance }, 759e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "tomato4", 139, 54, 38, 1, X11Compliance }, 760e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "transparent", 0, 0, 0, 0, SVGCompliance }, 761e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "turquoise", 64, 224, 208, 1, SVGCompliance | X11Compliance | XPMCompliance }, 762e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "turquoise1", 0, 245, 255, 1, X11Compliance }, 763e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "turquoise2", 0, 229, 238, 1, X11Compliance }, 764e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "turquoise3", 0, 197, 205, 1, X11Compliance }, 765e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "turquoise4", 0, 134, 139, 1, X11Compliance }, 766e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "violet", 238, 130, 238, 1, SVGCompliance | X11Compliance | XPMCompliance }, 767e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "VioletRed", 208, 32, 144, 1, X11Compliance | XPMCompliance }, 768e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "VioletRed1", 255, 62, 150, 1, X11Compliance }, 769e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "VioletRed2", 238, 58, 140, 1, X11Compliance }, 770e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "VioletRed3", 205, 50, 120, 1, X11Compliance }, 771e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "VioletRed4", 139, 34, 82, 1, X11Compliance }, 772e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "wheat", 245, 222, 179, 1, SVGCompliance | X11Compliance | XPMCompliance }, 773e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "wheat1", 255, 231, 186, 1, X11Compliance }, 774e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "wheat2", 238, 216, 174, 1, X11Compliance }, 775e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "wheat3", 205, 186, 150, 1, X11Compliance }, 776e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "wheat4", 139, 126, 102, 1, X11Compliance }, 777e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "WhiteSmoke", 245, 245, 245, 1, SVGCompliance | X11Compliance | XPMCompliance }, 778e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "yellow1", 255, 255, 0, 1, X11Compliance }, 779e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "yellow2", 238, 238, 0, 1, X11Compliance }, 780e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "yellow3", 205, 205, 0, 1, X11Compliance }, 781e3e77a19c40caafb77339e5a126c532bf2984c01cristy { "yellow4", 139, 139, 0, 1, X11Compliance }, 78254a531d335ea060a99bead94dcdf45f18496fa83cristy { "YellowGreen", 154, 205, 50, 1, SVGCompliance | X11Compliance | XPMCompliance } 783e3e77a19c40caafb77339e5a126c532bf2984c01cristy }; 7843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Static declarations. 7873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7883ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic LinkedListInfo 78986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy *color_cache = (LinkedListInfo *) NULL; 7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7913ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic SemaphoreInfo 7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *color_semaphore = (SemaphoreInfo *) NULL; 7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Forward declarations. 7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType 79886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy IsColorCacheInstantiated(ExceptionInfo *), 799cd2cd1803dda951bcfff101c44032ae17e52655fcristy LoadColorCache(LinkedListInfo *,const char *,const char *,const size_t, 800cd2cd1803dda951bcfff101c44032ae17e52655fcristy ExceptionInfo *); 80186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 80286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy/* 80386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 80486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 80586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 80686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 80786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% A c q u i r e C o l o r C a c h e % 80886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 80986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 81086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 81186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 81286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 81386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% AcquireColorCache() caches one or more color configurations which provides a 81486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% mapping between color attributes and a color name. 81586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 81686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% The format of the AcquireColorCache method is: 81786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 81886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% LinkedListInfo *AcquireColorCache(const char *filename, 81986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% ExceptionInfo *exception) 82086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 82186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% A description of each parameter follows: 82286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 82386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% o filename: the font file name. 82486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 82586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% o exception: return any errors or warnings in this structure. 82686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 82786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy*/ 82886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristystatic LinkedListInfo *AcquireColorCache(const char *filename, 82986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ExceptionInfo *exception) 83086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy{ 83186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy LinkedListInfo 832b18d864b3f06e9272582b7736230d934d715d542dirk *cache; 83386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 83486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy MagickStatusType 83586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy status; 83686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 83786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy register ssize_t 83886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy i; 83986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 84086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy /* 84186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy Load external color map. 84286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy */ 843b18d864b3f06e9272582b7736230d934d715d542dirk cache=NewLinkedList(0); 844b18d864b3f06e9272582b7736230d934d715d542dirk if (cache == (LinkedListInfo *) NULL) 84586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 84686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy status=MagickTrue; 847b18d864b3f06e9272582b7736230d934d715d542dirk#if !defined(MAGICKCORE_ZERO_CONFIGURATION_SUPPORT) 84886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy { 849b18d864b3f06e9272582b7736230d934d715d542dirk const StringInfo 850b18d864b3f06e9272582b7736230d934d715d542dirk *option; 851b18d864b3f06e9272582b7736230d934d715d542dirk 852b18d864b3f06e9272582b7736230d934d715d542dirk LinkedListInfo 853b18d864b3f06e9272582b7736230d934d715d542dirk *options; 854b18d864b3f06e9272582b7736230d934d715d542dirk 855b18d864b3f06e9272582b7736230d934d715d542dirk options=GetConfigureOptions(filename,exception); 85686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy option=(const StringInfo *) GetNextValueInLinkedList(options); 857b18d864b3f06e9272582b7736230d934d715d542dirk while (option != (const StringInfo *) NULL) 858b18d864b3f06e9272582b7736230d934d715d542dirk { 859b18d864b3f06e9272582b7736230d934d715d542dirk status&=LoadColorCache(cache,(const char *) GetStringInfoDatum(option), 860b18d864b3f06e9272582b7736230d934d715d542dirk GetStringInfoPath(option),0,exception); 861b18d864b3f06e9272582b7736230d934d715d542dirk option=(const StringInfo *) GetNextValueInLinkedList(options); 862b18d864b3f06e9272582b7736230d934d715d542dirk } 863b18d864b3f06e9272582b7736230d934d715d542dirk options=DestroyConfigureOptions(options); 86486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy } 865b18d864b3f06e9272582b7736230d934d715d542dirk#endif 86686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy /* 86786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy Load built-in color map. 86886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy */ 86986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy for (i=0; i < (ssize_t) (sizeof(ColorMap)/sizeof(*ColorMap)); i++) 87086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy { 87186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ColorInfo 87286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy *color_info; 87386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 87486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy register const ColorMapInfo 87586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy *p; 87686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 87786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=ColorMap+i; 87886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_info=(ColorInfo *) AcquireMagickMemory(sizeof(*color_info)); 87986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (color_info == (ColorInfo *) NULL) 88086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy { 88186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy (void) ThrowMagickException(exception,GetMagickModule(), 88286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResourceLimitError,"MemoryAllocationFailed","`%s'",p->name); 88386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy continue; 88486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy } 88586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy (void) ResetMagickMemory(color_info,0,sizeof(*color_info)); 88686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_info->path=(char *) "[built-in]"; 88786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_info->name=(char *) p->name; 88886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy GetPixelInfo((Image *) NULL,&color_info->color); 88986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_info->color.red=(double) ScaleCharToQuantum(p->red); 89086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_info->color.green=(double) ScaleCharToQuantum(p->green); 89186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_info->color.blue=(double) ScaleCharToQuantum(p->blue); 89286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_info->color.alpha=(double) (QuantumRange*p->alpha); 89386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_info->compliance=(ComplianceType) p->compliance; 89486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_info->exempt=MagickTrue; 895e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy color_info->signature=MagickCoreSignature; 896b18d864b3f06e9272582b7736230d934d715d542dirk status&=AppendValueToLinkedList(cache,color_info); 8975d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (status == MagickFalse) 89886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy (void) ThrowMagickException(exception,GetMagickModule(), 89986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResourceLimitError,"MemoryAllocationFailed","`%s'",color_info->name); 90086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy } 901b18d864b3f06e9272582b7736230d934d715d542dirk return(cache); 90286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy} 903b18d864b3f06e9272582b7736230d934d715d542dirk 9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 909f34a145c545cb86152ad42a787f6d5fffea6b77ccristy+ C o l o r C o m p o n e n t G e n e s i s % 9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 915f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% ColorComponentGenesis() instantiates the color component. 9163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 917f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% The format of the ColorComponentGenesis method is: 9183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 919f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% MagickBooleanType ColorComponentGenesis(void) 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9225ff4eaf57b3cd47d0371f204f865cbba614674a0cristyMagickPrivate MagickBooleanType ColorComponentGenesis(void) 9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 9247c9770650f31145e0fe8811d10b2e0ecd47697c8cristy if (color_semaphore == (SemaphoreInfo *) NULL) 9257c9770650f31145e0fe8811d10b2e0ecd47697c8cristy color_semaphore=AcquireSemaphoreInfo(); 926f34a145c545cb86152ad42a787f6d5fffea6b77ccristy return(MagickTrue); 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 934f34a145c545cb86152ad42a787f6d5fffea6b77ccristy+ C o l o r C o m p o n e n t T e r m i n u s % 9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 940f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% ColorComponentTerminus() destroys the color component. 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 942f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% The format of the ColorComponentTerminus method is: 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 944f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% ColorComponentTerminus(void) 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void *DestroyColorElement(void *color_info) 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register ColorInfo 9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 9523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(ColorInfo *) color_info; 9545d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (p->exempt == MagickFalse) 955e3e77a19c40caafb77339e5a126c532bf2984c01cristy { 956e3e77a19c40caafb77339e5a126c532bf2984c01cristy if (p->path != (char *) NULL) 957e3e77a19c40caafb77339e5a126c532bf2984c01cristy p->path=DestroyString(p->path); 958e3e77a19c40caafb77339e5a126c532bf2984c01cristy if (p->name != (char *) NULL) 959e3e77a19c40caafb77339e5a126c532bf2984c01cristy p->name=DestroyString(p->name); 960e3e77a19c40caafb77339e5a126c532bf2984c01cristy } 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(ColorInfo *) RelinquishMagickMemory(p); 9623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((void *) NULL); 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9655ff4eaf57b3cd47d0371f204f865cbba614674a0cristyMagickPrivate void ColorComponentTerminus(void) 9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 96718b17443128598500357da7bff2f01683cf32890cristy if (color_semaphore == (SemaphoreInfo *) NULL) 96804b11db5504ecdf205114ae7e9e68774a1ff0b9bcristy ActivateSemaphoreInfo(&color_semaphore); 969f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(color_semaphore); 97086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (color_cache != (LinkedListInfo *) NULL) 97186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_cache=DestroyLinkedList(color_cache,DestroyColorElement); 972f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(color_semaphore); 9733d162a93f537cb7cbb6d9fa3b8e73e8f992a527acristy RelinquishSemaphoreInfo(&color_semaphore); 9743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 9773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 981a60c02075c4071dd1801b41db0b478f68683a6fecristy+ G e t C o l o r C o m p l i a n c e % 9823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 987a60c02075c4071dd1801b41db0b478f68683a6fecristy% GetColorInfo() searches the color list for the specified name and standards 988a60c02075c4071dd1801b41db0b478f68683a6fecristy% compliance and if found returns attributes for that color. 9893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetColorInfo method is: 9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 992101ab708b0574518ac5715da4d3915400e9df79acristy% const PixelInfo *GetColorInfo(const char *name, 993a60c02075c4071dd1801b41db0b478f68683a6fecristy% const ComplianceType compliance,ExceptionInfo *exception) 9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o name: the color name. 9983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 999a60c02075c4071dd1801b41db0b478f68683a6fecristy% o compliance: Adhere to this color standard: SVG, X11, or XPM. 1000a60c02075c4071dd1801b41db0b478f68683a6fecristy% 10013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1004a60c02075c4071dd1801b41db0b478f68683a6fecristyMagickExport const ColorInfo *GetColorCompliance(const char *name, 1005a60c02075c4071dd1801b41db0b478f68683a6fecristy const ComplianceType compliance,ExceptionInfo *exception) 10063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 10073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1008151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy colorname[MagickPathExtent]; 10093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const ColorInfo 10113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 10123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 10143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 10175d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsColorCacheInstantiated(exception) == MagickFalse) 1018cd2cd1803dda951bcfff101c44032ae17e52655fcristy return((const ColorInfo *) NULL); 10193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Strip names of whitespace. 10213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 102249d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy *colorname='\0'; 102349d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy if (name != (const char *) NULL) 1024151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(colorname,name,MagickPathExtent); 10253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=colorname; *q != '\0'; q++) 10263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isspace((int) ((unsigned char) *q)) == 0) 10283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 1029151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(q,q+1,MagickPathExtent); 10303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q--; 10313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Search for color tag. 10343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 1035f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(color_semaphore); 103686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResetLinkedListIterator(color_cache); 103786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const ColorInfo *) GetNextValueInLinkedList(color_cache); 103849d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy if ((name == (const char *) NULL) || (LocaleCompare(name,"*") == 0)) 103949d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy { 104049d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy UnlockSemaphoreInfo(color_semaphore); 104149d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy return(p); 104249d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy } 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (p != (const ColorInfo *) NULL) 10443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1045a60c02075c4071dd1801b41db0b478f68683a6fecristy if (((p->compliance & compliance) != 0) && 1046a60c02075c4071dd1801b41db0b478f68683a6fecristy (LocaleCompare(colorname,p->name) == 0)) 10473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 104886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const ColorInfo *) GetNextValueInLinkedList(color_cache); 10493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (ColorInfo *) NULL) 10513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning, 1052efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "UnrecognizedColor","`%s'",name); 10533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 105486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy (void) InsertValueInLinkedList(color_cache,0, 105586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy RemoveElementByValueFromLinkedList(color_cache,p)); 1056f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(color_semaphore); 10573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(p); 10583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 10593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 10613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1065a60c02075c4071dd1801b41db0b478f68683a6fecristy+ G e t C o l o r I n f o % 1066a60c02075c4071dd1801b41db0b478f68683a6fecristy% % 1067a60c02075c4071dd1801b41db0b478f68683a6fecristy% % 1068a60c02075c4071dd1801b41db0b478f68683a6fecristy% % 1069a60c02075c4071dd1801b41db0b478f68683a6fecristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1070a60c02075c4071dd1801b41db0b478f68683a6fecristy% 1071a60c02075c4071dd1801b41db0b478f68683a6fecristy% GetColorInfo() searches the color list for the specified name and if found 1072a60c02075c4071dd1801b41db0b478f68683a6fecristy% returns attributes for that color. 1073a60c02075c4071dd1801b41db0b478f68683a6fecristy% 1074a60c02075c4071dd1801b41db0b478f68683a6fecristy% The format of the GetColorInfo method is: 1075a60c02075c4071dd1801b41db0b478f68683a6fecristy% 1076101ab708b0574518ac5715da4d3915400e9df79acristy% const PixelInfo *GetColorInfo(const char *name, 1077a60c02075c4071dd1801b41db0b478f68683a6fecristy% ExceptionInfo *exception) 1078a60c02075c4071dd1801b41db0b478f68683a6fecristy% 1079a60c02075c4071dd1801b41db0b478f68683a6fecristy% A description of each parameter follows: 1080a60c02075c4071dd1801b41db0b478f68683a6fecristy% 1081a60c02075c4071dd1801b41db0b478f68683a6fecristy% o color_info: search the color list for the specified name and if found 1082a60c02075c4071dd1801b41db0b478f68683a6fecristy% return attributes for that color. 1083a60c02075c4071dd1801b41db0b478f68683a6fecristy% 1084a60c02075c4071dd1801b41db0b478f68683a6fecristy% o name: the color name. 1085a60c02075c4071dd1801b41db0b478f68683a6fecristy% 1086a60c02075c4071dd1801b41db0b478f68683a6fecristy% o exception: return any errors or warnings in this structure. 1087a60c02075c4071dd1801b41db0b478f68683a6fecristy% 1088a60c02075c4071dd1801b41db0b478f68683a6fecristy*/ 1089a60c02075c4071dd1801b41db0b478f68683a6fecristyMagickExport const ColorInfo *GetColorInfo(const char *name, 1090a60c02075c4071dd1801b41db0b478f68683a6fecristy ExceptionInfo *exception) 1091a60c02075c4071dd1801b41db0b478f68683a6fecristy{ 1092a60c02075c4071dd1801b41db0b478f68683a6fecristy return(GetColorCompliance(name,AllCompliance,exception)); 1093a60c02075c4071dd1801b41db0b478f68683a6fecristy} 1094a60c02075c4071dd1801b41db0b478f68683a6fecristy 1095a60c02075c4071dd1801b41db0b478f68683a6fecristy/* 1096a60c02075c4071dd1801b41db0b478f68683a6fecristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1097a60c02075c4071dd1801b41db0b478f68683a6fecristy% % 1098a60c02075c4071dd1801b41db0b478f68683a6fecristy% % 1099a60c02075c4071dd1801b41db0b478f68683a6fecristy% % 1100f34a145c545cb86152ad42a787f6d5fffea6b77ccristy+ C o n c a t e n a t e C o l o r C o m p o n e n t % 1101f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 1102f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 1103f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 1104f34a145c545cb86152ad42a787f6d5fffea6b77ccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1105f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1106f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% ConcatenateColorComponent() returns the pixel as a canonical string. 1107f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1108f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% The format of the ConcatenateColorComponent() method is: 1109f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 11104c08aed51c5899665ade97263692328eea4af106cristy% void ConcatenateColorComponent(const PixelInfo *pixel, 11114b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy% const PixelChannel channel,const ComplianceType compliance, 1112fa806a74dd82d44b9f4e860add18bd65b200d23acristy% char *tuple) 1113f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1114f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% A description of each parameter follows. 1115f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1116f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% o pixel: The pixel. 1117f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 11184b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy% o channel: The pixel channel. 1119f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1120f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% o compliance: Adhere to this color standard: SVG, X11, or XPM. 1121f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1122fa806a74dd82d44b9f4e860add18bd65b200d23acristy% o tuple: The color tuple. 1123f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1124f34a145c545cb86152ad42a787f6d5fffea6b77ccristy*/ 11254c08aed51c5899665ade97263692328eea4af106cristyMagickExport void ConcatenateColorComponent(const PixelInfo *pixel, 11264b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy const PixelChannel channel,const ComplianceType compliance,char *tuple) 1127f34a145c545cb86152ad42a787f6d5fffea6b77ccristy{ 1128f34a145c545cb86152ad42a787f6d5fffea6b77ccristy char 11294b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy component[MagickPathExtent]; 1130f34a145c545cb86152ad42a787f6d5fffea6b77ccristy 1131a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 1132f34a145c545cb86152ad42a787f6d5fffea6b77ccristy color; 1133f34a145c545cb86152ad42a787f6d5fffea6b77ccristy 1134f34a145c545cb86152ad42a787f6d5fffea6b77ccristy color=0.0; 11354b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy switch (channel) 1136f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 1137ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy case RedPixelChannel: 1138f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 1139f34a145c545cb86152ad42a787f6d5fffea6b77ccristy color=pixel->red; 1140f34a145c545cb86152ad42a787f6d5fffea6b77ccristy break; 1141f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 1142ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy case GreenPixelChannel: 1143f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 1144f34a145c545cb86152ad42a787f6d5fffea6b77ccristy color=pixel->green; 1145f34a145c545cb86152ad42a787f6d5fffea6b77ccristy break; 1146f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 1147ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy case BluePixelChannel: 1148f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 1149f34a145c545cb86152ad42a787f6d5fffea6b77ccristy color=pixel->blue; 1150f34a145c545cb86152ad42a787f6d5fffea6b77ccristy break; 1151f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 1152ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy case AlphaPixelChannel: 1153f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 11544c08aed51c5899665ade97263692328eea4af106cristy color=pixel->alpha; 1155f34a145c545cb86152ad42a787f6d5fffea6b77ccristy break; 1156f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 1157ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy case BlackPixelChannel: 1158f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 11594c08aed51c5899665ade97263692328eea4af106cristy color=pixel->black; 1160f34a145c545cb86152ad42a787f6d5fffea6b77ccristy break; 1161f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 1162f34a145c545cb86152ad42a787f6d5fffea6b77ccristy default: 1163f34a145c545cb86152ad42a787f6d5fffea6b77ccristy break; 1164f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 1165b7604280ece8d25d15d99cd9283e28c62539a160cristy if (compliance == NoCompliance) 1166b7604280ece8d25d15d99cd9283e28c62539a160cristy { 11673da9d107ead340372f99cecbe8bbc67fba0f8377Cristy if (pixel->colorspace == LabColorspace) 11683da9d107ead340372f99cecbe8bbc67fba0f8377Cristy { 11694b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%.*g", 11703da9d107ead340372f99cecbe8bbc67fba0f8377Cristy GetMagickPrecision(),(double) color); 11714b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 11723da9d107ead340372f99cecbe8bbc67fba0f8377Cristy return; 11733da9d107ead340372f99cecbe8bbc67fba0f8377Cristy } 11744b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%.*g", 11752b6b6afc1601ce0f8b0a0c09690cf8f5e44da96eCristy GetMagickPrecision(),(double) ClampToQuantum(color)); 11764b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 1177b7604280ece8d25d15d99cd9283e28c62539a160cristy return; 1178b7604280ece8d25d15d99cd9283e28c62539a160cristy } 1179f34a145c545cb86152ad42a787f6d5fffea6b77ccristy if (compliance != SVGCompliance) 1180f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 1181f34a145c545cb86152ad42a787f6d5fffea6b77ccristy if (pixel->depth > 16) 1182f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 11834b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%10lu", 1184ec727933837db4d5ad754af383e49dcaadccecbcCristy (unsigned long) ScaleQuantumToLong(ClampToQuantum(color))); 11854b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 1186f34a145c545cb86152ad42a787f6d5fffea6b77ccristy return; 1187f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 1188f34a145c545cb86152ad42a787f6d5fffea6b77ccristy if (pixel->depth > 8) 1189f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 11904b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%5d", 1191ce70c17bb6433add2eb069515a4f3105989e0662cristy ScaleQuantumToShort(ClampToQuantum(color))); 11924b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 1193f34a145c545cb86152ad42a787f6d5fffea6b77ccristy return; 1194f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 11954b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%3d", 1196ce70c17bb6433add2eb069515a4f3105989e0662cristy ScaleQuantumToChar(ClampToQuantum(color))); 11974b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 1198f34a145c545cb86152ad42a787f6d5fffea6b77ccristy return; 1199f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 12004b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy if (channel == AlphaPixelChannel) 1201f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 12024b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%.*g", 1203228ebae598a625a9f67137439e5fe445dc32e6d0Cristy GetMagickPrecision(),QuantumScale*ClampToQuantum(color)); 12044b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 1205f34a145c545cb86152ad42a787f6d5fffea6b77ccristy return; 1206f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 120794d535de97796790e76b0448ea6da125264c55a7cristy if ((pixel->colorspace == HCLColorspace) || 12089e2436a78bdabef900e018dc77c0cc497bf6fbafcristy (pixel->colorspace == HCLpColorspace) || 120994d535de97796790e76b0448ea6da125264c55a7cristy (pixel->colorspace == HSBColorspace) || 12109e2436a78bdabef900e018dc77c0cc497bf6fbafcristy (pixel->colorspace == HSIColorspace) || 121194d535de97796790e76b0448ea6da125264c55a7cristy (pixel->colorspace == HSLColorspace) || 12129e2436a78bdabef900e018dc77c0cc497bf6fbafcristy (pixel->colorspace == HSVColorspace) || 121394d535de97796790e76b0448ea6da125264c55a7cristy (pixel->colorspace == HWBColorspace)) 12142675ec7527b570287785fac2e5b9ee160392b2efcristy { 12154b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy if (channel == RedPixelChannel) 12164b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%.*g", 12172b6b6afc1601ce0f8b0a0c09690cf8f5e44da96eCristy GetMagickPrecision(),(double) ClampToQuantum(360.0*QuantumScale* 12182b6b6afc1601ce0f8b0a0c09690cf8f5e44da96eCristy color)); 1219ec727933837db4d5ad754af383e49dcaadccecbcCristy else 12204b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%.*g%%", 12212b6b6afc1601ce0f8b0a0c09690cf8f5e44da96eCristy GetMagickPrecision(),(double) ClampToQuantum(100.0*QuantumScale* 12222b6b6afc1601ce0f8b0a0c09690cf8f5e44da96eCristy color)); 12234b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 12242675ec7527b570287785fac2e5b9ee160392b2efcristy return; 12252675ec7527b570287785fac2e5b9ee160392b2efcristy } 12263da9d107ead340372f99cecbe8bbc67fba0f8377Cristy if (pixel->colorspace == LabColorspace) 12273da9d107ead340372f99cecbe8bbc67fba0f8377Cristy { 12284b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%.*g%%", 12293da9d107ead340372f99cecbe8bbc67fba0f8377Cristy GetMagickPrecision(),100.0*QuantumScale*color); 12304b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 12313da9d107ead340372f99cecbe8bbc67fba0f8377Cristy return; 12323da9d107ead340372f99cecbe8bbc67fba0f8377Cristy } 12333da9d107ead340372f99cecbe8bbc67fba0f8377Cristy if (pixel->depth > 8) 1234f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 12354b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%.*g%%", 12362b6b6afc1601ce0f8b0a0c09690cf8f5e44da96eCristy GetMagickPrecision(),(double) ClampToQuantum(100.0*QuantumScale*color)); 12374b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 1238f34a145c545cb86152ad42a787f6d5fffea6b77ccristy return; 1239f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 12404b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) FormatLocaleString(component,MagickPathExtent,"%d",ScaleQuantumToChar( 1241fa806a74dd82d44b9f4e860add18bd65b200d23acristy ClampToQuantum(color))); 12424b63e3e8d1a9cce6215bc62a2e86fbfd723964a3Cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 1243f34a145c545cb86152ad42a787f6d5fffea6b77ccristy} 1244f34a145c545cb86152ad42a787f6d5fffea6b77ccristy 1245f34a145c545cb86152ad42a787f6d5fffea6b77ccristy/* 1246f34a145c545cb86152ad42a787f6d5fffea6b77ccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1247f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 1248f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 1249f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 12503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t C o l o r I n f o L i s t % 12513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetColorInfoList() returns any colors that match the specified pattern. 12573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetColorInfoList function is: 12593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const ColorInfo **GetColorInfoList(const char *pattern, 1261bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *number_colors,ExceptionInfo *exception) 12623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pattern: Specifies a pointer to a text string containing a pattern. 12663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o number_colors: This integer returns the number of colors in the list. 12683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 12703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 12723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 12743ed852eea50f9d4cd633efb8c2b054b8e33c253cristyextern "C" { 12753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 12763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12773ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic int ColorInfoCompare(const void *x,const void *y) 12783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const ColorInfo 12803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **p, 12813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **q; 12823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1283f0dedd8a238827ee137f219eae28f1fd4a27cca3dirk int 1284f0dedd8a238827ee137f219eae28f1fd4a27cca3dirk cmp; 1285f0dedd8a238827ee137f219eae28f1fd4a27cca3dirk 12863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(const ColorInfo **) x, 12873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(const ColorInfo **) y; 1288f0dedd8a238827ee137f219eae28f1fd4a27cca3dirk cmp=LocaleCompare((*p)->path,(*q)->path); 1289f0dedd8a238827ee137f219eae28f1fd4a27cca3dirk if (cmp == 0) 12903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(LocaleCompare((*p)->name,(*q)->name)); 1291f0dedd8a238827ee137f219eae28f1fd4a27cca3dirk return(cmp); 12923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 12953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 12973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12983ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport const ColorInfo **GetColorInfoList(const char *pattern, 1299bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *number_colors,ExceptionInfo *exception) 13003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 13013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const ColorInfo 13023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **colors; 13033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const ColorInfo 13053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 13063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1307bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 13083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 13093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 13113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate color list. 13123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 13133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(pattern != (char *) NULL); 13143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",pattern); 1315bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy assert(number_colors != (size_t *) NULL); 13163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *number_colors=0; 13173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=GetColorInfo("*",exception); 13183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (const ColorInfo *) NULL) 13193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((const ColorInfo **) NULL); 13203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=(const ColorInfo **) AcquireQuantumMemory((size_t) 132186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy GetNumberOfElementsInLinkedList(color_cache)+1UL,sizeof(*colors)); 13223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colors == (const ColorInfo **) NULL) 13233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((const ColorInfo **) NULL); 13243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 13253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Generate color list. 13263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 1327f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(color_semaphore); 132886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResetLinkedListIterator(color_cache); 132986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const ColorInfo *) GetNextValueInLinkedList(color_cache); 13303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; p != (const ColorInfo *) NULL; ) 13313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1332b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if ((p->stealth == MagickFalse) && 1333b9dbc296c59e91df014757130b4e584c7fb6c74ddirk (GlobExpression(p->name,pattern,MagickFalse) != MagickFalse)) 13343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors[i++]=p; 133586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const ColorInfo *) GetNextValueInLinkedList(color_cache); 13363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1337f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(color_semaphore); 13383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy qsort((void *) colors,(size_t) i,sizeof(*colors),ColorInfoCompare); 13393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors[i]=(ColorInfo *) NULL; 1340bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy *number_colors=(size_t) i; 13413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(colors); 13423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 13453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t C o l o r L i s t % 13503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetColorList() returns any colors that match the specified pattern. 13563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetColorList function is: 13583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1359bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% char **GetColorList(const char *pattern,size_t *number_colors, 13603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 13613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 13633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pattern: Specifies a pointer to a text string containing a pattern. 13653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o number_colors: This integer returns the number of colors in the list. 13673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 13693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 13713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 13733ed852eea50f9d4cd633efb8c2b054b8e33c253cristyextern "C" { 13743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 13753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13763ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic int ColorCompare(const void *x,const void *y) 13773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 13783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 13793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **p, 13803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **q; 13813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(const char **) x; 13833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(const char **) y; 13843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(LocaleCompare(*p,*q)); 13853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 13883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 13903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13913ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char **GetColorList(const char *pattern, 1392bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *number_colors,ExceptionInfo *exception) 13933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 13943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 13953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **colors; 13963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const ColorInfo 13983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 13993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1400bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 14013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 14023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate color list. 14053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 14063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(pattern != (char *) NULL); 14073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",pattern); 1408bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy assert(number_colors != (size_t *) NULL); 14093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *number_colors=0; 14103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=GetColorInfo("*",exception); 14113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (const ColorInfo *) NULL) 14123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 14133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=(char **) AcquireQuantumMemory((size_t) 141486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy GetNumberOfElementsInLinkedList(color_cache)+1UL,sizeof(*colors)); 14153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colors == (char **) NULL) 14163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 14173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Generate color list. 14193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 1420f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(color_semaphore); 142186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResetLinkedListIterator(color_cache); 142286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const ColorInfo *) GetNextValueInLinkedList(color_cache); 14233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; p != (const ColorInfo *) NULL; ) 14243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1425b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if ((p->stealth == MagickFalse) && 1426b9dbc296c59e91df014757130b4e584c7fb6c74ddirk (GlobExpression(p->name,pattern,MagickFalse) != MagickFalse)) 14273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors[i++]=ConstantString(p->name); 142886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const ColorInfo *) GetNextValueInLinkedList(color_cache); 14293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1430f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(color_semaphore); 14313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy qsort((void *) colors,(size_t) i,sizeof(*colors),ColorCompare); 14323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors[i]=(char *) NULL; 1433bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy *number_colors=(size_t) i; 14343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(colors); 14353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 14363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 14383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ G e t C o l o r T u p l e % 14433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetColorTuple() returns a color as a color tuple string (e.g. rgba(255,0,0)) 14493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% or hex string (e.g. #FF0000). 14503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetColorTuple method is: 14523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14534c08aed51c5899665ade97263692328eea4af106cristy% GetColorTuple(const PixelInfo *pixel,const MagickBooleanType hex, 14543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *tuple) 14553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 14573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixel: the pixel. 14593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o hex: A value other than zero returns the tuple in a hexidecimal format. 14613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o tuple: Return the color tuple as this string. 14633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 14653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1466b9dbc296c59e91df014757130b4e584c7fb6c74ddirkstatic inline MagickBooleanType IsSVGCompliant(const PixelInfo *pixel) 1467b9dbc296c59e91df014757130b4e584c7fb6c74ddirk{ 1468b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define SVGCompliant(component) ((double) \ 1469b9dbc296c59e91df014757130b4e584c7fb6c74ddirk ScaleCharToQuantum(ScaleQuantumToChar(ClampToQuantum(component)))) 1470b9dbc296c59e91df014757130b4e584c7fb6c74ddirk 1471b9dbc296c59e91df014757130b4e584c7fb6c74ddirk /* 1472b9dbc296c59e91df014757130b4e584c7fb6c74ddirk SVG requires color depths > 8 expressed as percentages. 1473b9dbc296c59e91df014757130b4e584c7fb6c74ddirk */ 1474b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (fabs(SVGCompliant(pixel->red)-pixel->red) >= MagickEpsilon) 1475b9dbc296c59e91df014757130b4e584c7fb6c74ddirk return(MagickFalse); 1476b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (fabs(SVGCompliant(pixel->green)-pixel->green) >= MagickEpsilon) 1477b9dbc296c59e91df014757130b4e584c7fb6c74ddirk return(MagickFalse); 1478b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (fabs(SVGCompliant(pixel->blue)-pixel->blue) >= MagickEpsilon) 1479b9dbc296c59e91df014757130b4e584c7fb6c74ddirk return(MagickFalse); 1480b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if ((pixel->colorspace == CMYKColorspace) && 1481b9dbc296c59e91df014757130b4e584c7fb6c74ddirk (fabs(SVGCompliant(pixel->black)-pixel->black) >= MagickEpsilon)) 1482b9dbc296c59e91df014757130b4e584c7fb6c74ddirk return(MagickFalse); 1483b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if ((pixel->alpha_trait != UndefinedPixelTrait) && 1484b9dbc296c59e91df014757130b4e584c7fb6c74ddirk (fabs(SVGCompliant(pixel->alpha)-pixel->alpha) >= MagickEpsilon)) 1485b9dbc296c59e91df014757130b4e584c7fb6c74ddirk return(MagickFalse); 1486b9dbc296c59e91df014757130b4e584c7fb6c74ddirk return(MagickTrue); 1487b9dbc296c59e91df014757130b4e584c7fb6c74ddirk} 1488b9dbc296c59e91df014757130b4e584c7fb6c74ddirk 14894c08aed51c5899665ade97263692328eea4af106cristystatic void ConcatentateHexColorComponent(const PixelInfo *pixel, 1490d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy const PixelChannel channel,char *tuple) 14913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 14923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1493151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy component[MagickPathExtent]; 14943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1495a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 14963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color; 14973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=0.0; 14993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (channel) 15003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1501d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy case RedPixelChannel: 15023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=pixel->red; 15043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1506d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy case GreenPixelChannel: 15073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=pixel->green; 15093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1511d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy case BluePixelChannel: 15123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=pixel->blue; 15143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1516d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy case AlphaPixelChannel: 15173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15184c08aed51c5899665ade97263692328eea4af106cristy color=pixel->alpha; 15193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1521d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy case BlackPixelChannel: 15223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15234c08aed51c5899665ade97263692328eea4af106cristy color=pixel->black; 15243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 15273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pixel->depth > 32) 15303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1531151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(component,MagickPathExtent,"%08lX%08lX", 15322a79056aaa95f5eaef0284ae5bec1e86cb7ab0e1cristy (unsigned long) ScaleQuantumToLong(ClampToQuantum(color)), 1533f1d91246f9ab47d524abc076c6ead91e5cc27d03cristy (unsigned long) ScaleQuantumToLong(ClampToQuantum(color))); 1534151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 15353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 15363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pixel->depth > 16) 15383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1539151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(component,MagickPathExtent,"%08X", 1540ce70c17bb6433add2eb069515a4f3105989e0662cristy (unsigned int) ScaleQuantumToLong(ClampToQuantum(color))); 1541151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 15423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 15433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pixel->depth > 8) 15453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1546151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(component,MagickPathExtent,"%04X", 1547ce70c17bb6433add2eb069515a4f3105989e0662cristy ScaleQuantumToShort(ClampToQuantum(color))); 1548151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 15493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 15503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1551151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(component,MagickPathExtent,"%02X", 1552ce70c17bb6433add2eb069515a4f3105989e0662cristy ScaleQuantumToChar(ClampToQuantum(color))); 1553151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,component,MagickPathExtent); 15543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 15553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 15563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15574c08aed51c5899665ade97263692328eea4af106cristyMagickExport void GetColorTuple(const PixelInfo *pixel, 15583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const MagickBooleanType hex,char *tuple) 15593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 15604c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 15613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color; 15623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15634c08aed51c5899665ade97263692328eea4af106cristy assert(pixel != (const PixelInfo *) NULL); 15643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(tuple != (char *) NULL); 15653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",tuple); 15663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *tuple='\0'; 156711a7cb75e76e53a2e23eff142605ebd2f8b603f3dirk if (hex != MagickFalse) 15683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 15703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert pixel to hex color. 15713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 1572151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,"#",MagickPathExtent); 1573d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy ConcatentateHexColorComponent(pixel,RedPixelChannel,tuple); 1574d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy ConcatentateHexColorComponent(pixel,GreenPixelChannel,tuple); 1575d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy ConcatentateHexColorComponent(pixel,BluePixelChannel,tuple); 15763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pixel->colorspace == CMYKColorspace) 1577d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy ConcatentateHexColorComponent(pixel,BlackPixelChannel,tuple); 15784f8af9c2d0487c7d5bef677accb959ffcd25b2f0dirk if (pixel->alpha_trait != UndefinedPixelTrait) 1579d3090f92b8f346df0a8191d5aa3f9d14be5a32d5cristy ConcatentateHexColorComponent(pixel,AlphaPixelChannel,tuple); 15803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 15813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 15833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert pixel to rgb() or cmyk() color. 15843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 15853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=(*pixel); 1586b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (color.depth > 8 && IsSVGCompliant(pixel) != MagickFalse) 1587b9dbc296c59e91df014757130b4e584c7fb6c74ddirk color.depth=8; 1588042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy (void) ConcatenateMagickString(tuple,CommandOptionToMnemonic( 1589151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickColorspaceOptions,(ssize_t) color.colorspace),MagickPathExtent); 159017f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (color.alpha_trait != UndefinedPixelTrait) 1591151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,"a",MagickPathExtent); 1592151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,"(",MagickPathExtent); 1593e913961573cd6c95fa84ed380a4ab920663cdd78cristy if (color.colorspace == GRAYColorspace) 1594e913961573cd6c95fa84ed380a4ab920663cdd78cristy ConcatenateColorComponent(&color,GrayPixelChannel,SVGCompliance,tuple); 1595e913961573cd6c95fa84ed380a4ab920663cdd78cristy else 1596e913961573cd6c95fa84ed380a4ab920663cdd78cristy { 1597e913961573cd6c95fa84ed380a4ab920663cdd78cristy ConcatenateColorComponent(&color,RedPixelChannel,SVGCompliance,tuple); 1598151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,",",MagickPathExtent); 1599e913961573cd6c95fa84ed380a4ab920663cdd78cristy ConcatenateColorComponent(&color,GreenPixelChannel,SVGCompliance,tuple); 1600151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,",",MagickPathExtent); 1601e913961573cd6c95fa84ed380a4ab920663cdd78cristy ConcatenateColorComponent(&color,BluePixelChannel,SVGCompliance,tuple); 1602e913961573cd6c95fa84ed380a4ab920663cdd78cristy } 16033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (color.colorspace == CMYKColorspace) 16043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1605151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,",",MagickPathExtent); 1606ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy ConcatenateColorComponent(&color,BlackPixelChannel,SVGCompliance,tuple); 16073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 160817f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (color.alpha_trait != UndefinedPixelTrait) 16093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1610151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,",",MagickPathExtent); 1611ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy ConcatenateColorComponent(&color,AlphaPixelChannel,SVGCompliance,tuple); 16123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1613151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(tuple,")",MagickPathExtent); 1614f2e1166e90de2dfe2e6a2aed7cd5f73640f34a7acristy LocaleLower(tuple); 1615f2e1166e90de2dfe2e6a2aed7cd5f73640f34a7acristy return; 16163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 162386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy+ I s C o l o r C a c h e I n s t a n t i a t e d % 16243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 162986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% IsColorCacheInstantiated() determines if the color list is instantiated. If 1630904e591bcf6bce4c0086cc200d0efe7fdd3834aecristy% not, it instantiates the list and returns it. 16313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1632904e591bcf6bce4c0086cc200d0efe7fdd3834aecristy% The format of the IsColorInstantiated method is: 16333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 163486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% MagickBooleanType IsColorCacheInstantiated(ExceptionInfo *exception) 16353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 16373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 16393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 164186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristystatic MagickBooleanType IsColorCacheInstantiated(ExceptionInfo *exception) 16423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 164386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (color_cache == (LinkedListInfo *) NULL) 164486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy { 164586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (color_semaphore == (SemaphoreInfo *) NULL) 164686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ActivateSemaphoreInfo(&color_semaphore); 164786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy LockSemaphoreInfo(color_semaphore); 164886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (color_cache == (LinkedListInfo *) NULL) 164986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy color_cache=AcquireColorCache(ColorFilename,exception); 165086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy UnlockSemaphoreInfo(color_semaphore); 165186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy } 165286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy return(color_cache != (LinkedListInfo *) NULL ? MagickTrue : MagickFalse); 16533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1660a060829f41c741d75c680e3a6863c9caae1009e4cristy+ I s E q u i v a l e n t A l p h a % 16613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16664c08aed51c5899665ade97263692328eea4af106cristy% IsEquivalentAlpha() returns true if the distance between two alpha values is 16674c08aed51c5899665ade97263692328eea4af106cristy% less than the specified distance in a linear color space. This method is 16684c08aed51c5899665ade97263692328eea4af106cristy% used by MatteFloodFill() and other algorithms which compare two alpha values. 16693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16704c08aed51c5899665ade97263692328eea4af106cristy% The format of the IsEquivalentAlpha method is: 16713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1672101ab708b0574518ac5715da4d3915400e9df79acristy% void IsEquivalentAlpha(const Image *image,const PixelInfo *p, 1673101ab708b0574518ac5715da4d3915400e9df79acristy% const PixelInfo *q) 16743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 16783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o p: Pixel p. 16803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o q: Pixel q. 16823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1684a060829f41c741d75c680e3a6863c9caae1009e4cristyMagickPrivate MagickBooleanType IsEquivalentAlpha(const Image *image, 1685101ab708b0574518ac5715da4d3915400e9df79acristy const PixelInfo *p,const PixelInfo *q) 16863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1687a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 16883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz, 16893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel; 16903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1691a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy register double 16924c08aed51c5899665ade97263692328eea4af106cristy distance; 16933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 169417f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (image->alpha_trait == UndefinedPixelTrait) 16954c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 16964c08aed51c5899665ade97263692328eea4af106cristy if (p->alpha == q->alpha) 16974c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 1698043a981a1f6b2393520e911594ce29ef5b060ee5cristy fuzz=MagickMax(image->fuzz,MagickSQ1_2); 1699043a981a1f6b2393520e911594ce29ef5b060ee5cristy fuzz*=fuzz; 1700a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel=(double) p->alpha-(double) q->alpha; 17014c08aed51c5899665ade97263692328eea4af106cristy distance=pixel*pixel; 1702a3240b423a364b396844d8eb99fa8794c53092e1cristy if (distance > fuzz) 1703a3240b423a364b396844d8eb99fa8794c53092e1cristy return(MagickFalse); 17043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 17053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 17063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1712a060829f41c741d75c680e3a6863c9caae1009e4cristy+ I s E q u i v a l e n t I m a g e % 17133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17184c08aed51c5899665ade97263692328eea4af106cristy% IsEquivalentImage() returns true if the target is similar to a region of the 17193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% image. 17203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17214c08aed51c5899665ade97263692328eea4af106cristy% The format of the IsEquivalentImage method is: 17223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17234c08aed51c5899665ade97263692328eea4af106cristy% MagickBooleanType IsEquivalentImage(const Image *image, 1724bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% const Image *target_image,ssize_t *x_offset,ssize_t *y_offset, 17253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 17263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 17283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 17303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o target_image: the target image. 17323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o x_offset: On input the starting x position to search for a match; 17343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% on output the x position of the first match found. 17353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o y_offset: On input the starting y position to search for a match; 17373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% on output the y position of the first match found. 17383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 17403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 17424c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType IsEquivalentImage(const Image *image, 1743bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy const Image *target_image,ssize_t *x_offset,ssize_t *y_offset, 17443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo *exception) 17453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define SearchImageText " Searching image... " 17473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1748c4c8d13c0996fea659ce63c682c803e74c1abc8acristy CacheView 1749c4c8d13c0996fea659ce63c682c803e74c1abc8acristy *image_view, 1750c4c8d13c0996fea659ce63c682c803e74c1abc8acristy *target_view; 1751c4c8d13c0996fea659ce63c682c803e74c1abc8acristy 17523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 17533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 17543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17554c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 17563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target, 17573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel; 17583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17594c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 17603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 17613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 17623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1763bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 17643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 17653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 17663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17679d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 17689d314ff2c17a77996c05413c2013880387e50f0ecristy j, 17699d314ff2c17a77996c05413c2013880387e50f0ecristy y; 17709d314ff2c17a77996c05413c2013880387e50f0ecristy 17713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 1772e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 1773b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (image->debug != MagickFalse) 17743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 17753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(target_image != (Image *) NULL); 1776e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(target_image->signature == MagickCoreSignature); 1777bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy assert(x_offset != (ssize_t *) NULL); 1778bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy assert(y_offset != (ssize_t *) NULL); 17793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 17803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=0; 1781da16f16767eb31921af855f17bda465fffc4e000cristy status=MagickTrue; 17824c08aed51c5899665ade97263692328eea4af106cristy GetPixelInfo(image,&pixel); 17834c08aed51c5899665ade97263692328eea4af106cristy GetPixelInfo(image,&target); 178446ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy image_view=AcquireVirtualCacheView(image,exception); 178546ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy target_view=AcquireVirtualCacheView(target_image,exception); 1786bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=(*y_offset); y < (ssize_t) image->rows; y++) 17873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1788bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=y == 0 ? *x_offset : 0; x < (ssize_t) image->columns; x++) 17893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1790bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (j=0; j < (ssize_t) target_image->rows; j++) 17913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1792bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) target_image->columns; i++) 17933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 17943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=GetCacheViewVirtualPixels(image_view,x+i,y+j,1,1,exception); 1795a31a727484794644b37a1de0b21c0ced859a0302cristy if (p == (const Quantum *) NULL) 1796a31a727484794644b37a1de0b21c0ced859a0302cristy break; 1797803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,&pixel); 17983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=GetCacheViewVirtualPixels(target_view,i,j,1,1,exception); 1799a31a727484794644b37a1de0b21c0ced859a0302cristy if (q == (const Quantum *) NULL) 1800a31a727484794644b37a1de0b21c0ced859a0302cristy break; 1801803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,q,&target); 1802b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (IsFuzzyEquivalencePixelInfo(&pixel,&target) == MagickFalse) 18033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 18043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1805bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy if (i < (ssize_t) target_image->columns) 18063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 18073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1808bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy if (j == (ssize_t) target_image->rows) 18093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 18103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1811bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy if (x < (ssize_t) image->columns) 18123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 18138b27a6dc4e1e93c0583226a4351c00af1829b5bdcristy if (image->progress_monitor != (MagickProgressMonitor) NULL) 18143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 18158b27a6dc4e1e93c0583226a4351c00af1829b5bdcristy MagickBooleanType 18168b27a6dc4e1e93c0583226a4351c00af1829b5bdcristy proceed; 18178b27a6dc4e1e93c0583226a4351c00af1829b5bdcristy 1818bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy proceed=SetImageProgress(image,SearchImageText,(MagickOffsetType) y, 1819bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy image->rows); 1820b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (proceed == MagickFalse) 18218b27a6dc4e1e93c0583226a4351c00af1829b5bdcristy status=MagickFalse; 18223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 18233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 18243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_view=DestroyCacheView(target_view); 18253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_view=DestroyCacheView(image_view); 18263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *x_offset=x; 18273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *y_offset=y; 1828b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (status == MagickFalse) 1829da16f16767eb31921af855f17bda465fffc4e000cristy return(status); 1830b9dbc296c59e91df014757130b4e584c7fb6c74ddirk return(y < (ssize_t) image->rows ? MagickTrue : MagickFalse); 18313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 18323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1838a060829f41c741d75c680e3a6863c9caae1009e4cristy+ I s E q u i v a l e n t I n t e n s i t y % 1839a060829f41c741d75c680e3a6863c9caae1009e4cristy% % 1840a060829f41c741d75c680e3a6863c9caae1009e4cristy% % 1841a060829f41c741d75c680e3a6863c9caae1009e4cristy% % 1842a060829f41c741d75c680e3a6863c9caae1009e4cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1843a060829f41c741d75c680e3a6863c9caae1009e4cristy% 1844a060829f41c741d75c680e3a6863c9caae1009e4cristy% IsEquivalentIntensity() returns true if the distance between two intensity 1845a060829f41c741d75c680e3a6863c9caae1009e4cristy% values is less than the specified distance in a linear color space. 1846a060829f41c741d75c680e3a6863c9caae1009e4cristy% 1847a060829f41c741d75c680e3a6863c9caae1009e4cristy% The format of the IsEquivalentIntensity method is: 1848a060829f41c741d75c680e3a6863c9caae1009e4cristy% 1849a060829f41c741d75c680e3a6863c9caae1009e4cristy% void IsEquivalentIntensity(const Image *image,const PixelInfo *p, 1850a060829f41c741d75c680e3a6863c9caae1009e4cristy% const PixelInfo *q) 1851a060829f41c741d75c680e3a6863c9caae1009e4cristy% 1852a060829f41c741d75c680e3a6863c9caae1009e4cristy% A description of each parameter follows: 1853a060829f41c741d75c680e3a6863c9caae1009e4cristy% 1854a060829f41c741d75c680e3a6863c9caae1009e4cristy% o image: the image. 1855a060829f41c741d75c680e3a6863c9caae1009e4cristy% 1856a060829f41c741d75c680e3a6863c9caae1009e4cristy% o p: Pixel p. 1857a060829f41c741d75c680e3a6863c9caae1009e4cristy% 1858a060829f41c741d75c680e3a6863c9caae1009e4cristy% o q: Pixel q. 1859a060829f41c741d75c680e3a6863c9caae1009e4cristy% 1860a060829f41c741d75c680e3a6863c9caae1009e4cristy*/ 1861a060829f41c741d75c680e3a6863c9caae1009e4cristyMagickPrivate MagickBooleanType IsEquivalentIntensity(const Image *image, 1862a060829f41c741d75c680e3a6863c9caae1009e4cristy const PixelInfo *p,const PixelInfo *q) 1863a060829f41c741d75c680e3a6863c9caae1009e4cristy{ 1864a060829f41c741d75c680e3a6863c9caae1009e4cristy double 1865a060829f41c741d75c680e3a6863c9caae1009e4cristy fuzz, 1866a060829f41c741d75c680e3a6863c9caae1009e4cristy pixel; 1867a060829f41c741d75c680e3a6863c9caae1009e4cristy 1868a060829f41c741d75c680e3a6863c9caae1009e4cristy register double 1869a060829f41c741d75c680e3a6863c9caae1009e4cristy distance; 1870a060829f41c741d75c680e3a6863c9caae1009e4cristy 187111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy if (GetPixelInfoIntensity(image,p) == GetPixelInfoIntensity(image,q)) 1872a060829f41c741d75c680e3a6863c9caae1009e4cristy return(MagickTrue); 1873043a981a1f6b2393520e911594ce29ef5b060ee5cristy fuzz=MagickMax(image->fuzz,MagickSQ1_2); 1874043a981a1f6b2393520e911594ce29ef5b060ee5cristy fuzz*=fuzz; 187511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy pixel=GetPixelInfoIntensity(image,p)-GetPixelInfoIntensity(image,q); 1876a060829f41c741d75c680e3a6863c9caae1009e4cristy distance=pixel*pixel; 1877a060829f41c741d75c680e3a6863c9caae1009e4cristy if (distance > fuzz) 1878a060829f41c741d75c680e3a6863c9caae1009e4cristy return(MagickFalse); 1879a060829f41c741d75c680e3a6863c9caae1009e4cristy return(MagickTrue); 1880a060829f41c741d75c680e3a6863c9caae1009e4cristy} 1881a060829f41c741d75c680e3a6863c9caae1009e4cristy 1882a060829f41c741d75c680e3a6863c9caae1009e4cristy/* 1883a060829f41c741d75c680e3a6863c9caae1009e4cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1884a060829f41c741d75c680e3a6863c9caae1009e4cristy% % 1885a060829f41c741d75c680e3a6863c9caae1009e4cristy% % 1886a060829f41c741d75c680e3a6863c9caae1009e4cristy% % 18873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L i s t C o l o r I n f o % 18883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ListColorInfo() lists color names to the specified file. Color names 18943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% are a convenience. Rather than defining a color by its red, green, and 18953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% blue intensities just use a color name such as white, blue, or yellow. 18963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ListColorInfo method is: 18983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType ListColorInfo(FILE *file,ExceptionInfo *exception) 19003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 19023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o file: List color names to this file handle. 19043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 19063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 19083ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport MagickBooleanType ListColorInfo(FILE *file, 19093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo *exception) 19103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 19113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1912151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy tuple[MagickPathExtent]; 19133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 19153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *path; 19163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const ColorInfo 19183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **color_info; 19193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1920bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 19213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 19223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1923bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 19243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors; 19253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 19273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy List name and attributes of each color in the list. 19283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 19293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (file == (const FILE *) NULL) 19303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=stdout; 19313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_info=GetColorInfoList("*",&number_colors,exception); 19323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (color_info == (const ColorInfo **) NULL) 19333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 19343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy path=(const char *) NULL; 1935bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) number_colors; i++) 19363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 193711a7cb75e76e53a2e23eff142605ebd2f8b603f3dirk if (color_info[i]->stealth != MagickFalse) 19383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 19393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((path == (const char *) NULL) || 19403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (LocaleCompare(path,color_info[i]->path) != 0)) 19413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 19423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (color_info[i]->path != (char *) NULL) 1943b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"\nPath: %s\n\n",color_info[i]->path); 19441e604812fad85bb96f757a2393015ae3d061c39acristy (void) FormatLocaleFile(file, 19451e604812fad85bb96f757a2393015ae3d061c39acristy "Name Color " 19463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " Compliance\n"); 19471e604812fad85bb96f757a2393015ae3d061c39acristy (void) FormatLocaleFile(file, 19481e604812fad85bb96f757a2393015ae3d061c39acristy "-------------------------------------------------" 19493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "------------------------------\n"); 19503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy path=color_info[i]->path; 1952b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"%-21.21s ",color_info[i]->name); 19533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GetColorTuple(&color_info[i]->color,MagickFalse,tuple); 1954b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"%-45.45s ",tuple); 19553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((color_info[i]->compliance & SVGCompliance) != 0) 1956b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"SVG "); 19573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((color_info[i]->compliance & X11Compliance) != 0) 1958b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"X11 "); 19593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((color_info[i]->compliance & XPMCompliance) != 0) 1960b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"XPM "); 1961b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"\n"); 19623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_info=(const ColorInfo **) RelinquishMagickMemory((void *) color_info); 19643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fflush(file); 19653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 19663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 19673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 19693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1973fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk+ L o a d C o l o r C a c h e % 19743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 197986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% LoadColorCache() loads the color configurations which provides a mapping 19803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% between color attributes and a color name. 19813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 198286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% The format of the LoadColorCache method is: 19833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1984b18d864b3f06e9272582b7736230d934d715d542dirk% MagickBooleanType LoadColorCache(LinkedListInfo *cache,const char *xml, 1985b18d864b3f06e9272582b7736230d934d715d542dirk% const char *filename,const size_t depth,ExceptionInfo *exception) 19863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 19883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o xml: The color list in XML format. 19903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: The color list filename. 19923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o depth: depth of <include /> statements. 19943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 19963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1998b18d864b3f06e9272582b7736230d934d715d542dirkstatic MagickBooleanType LoadColorCache(LinkedListInfo *cache,const char *xml, 1999b18d864b3f06e9272582b7736230d934d715d542dirk const char *filename,const size_t depth,ExceptionInfo *exception) 20003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 20013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 2002151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy keyword[MagickPathExtent], 20033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *token; 20043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorInfo 20063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *color_info; 20073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 20093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 20103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2011759ba919e9fe454989454f481f4055fd38b32307cristy MagickStatusType 20123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 20133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2014fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk size_t 2015fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk extent; 2016fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk 20173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Load the color map file. 20193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(ConfigureEvent,GetMagickModule(), 20213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "Loading color file \"%s\" ...",filename); 20223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (xml == (char *) NULL) 20233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 20243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickTrue; 20253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_info=(ColorInfo *) NULL; 20263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy token=AcquireString(xml); 2027fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk extent=strlen(token)+MagickPathExtent; 20283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=(char *) xml; *q != '\0'; ) 20293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Interpret XML. 20323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20338bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 20343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*token == '\0') 20353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 2036151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(keyword,token,MagickPathExtent); 20373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleNCompare(keyword,"<!DOCTYPE",9) == 0) 20383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Doctype element. 20413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((LocaleNCompare(q,"]>",2) != 0) && (*q != '\0')) 20438bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 20443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 20453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleNCompare(keyword,"<!--",4) == 0) 20473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Comment element. 20503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((LocaleNCompare(q,"->",2) != 0) && (*q != '\0')) 20528bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 20533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 20543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(keyword,"<include") == 0) 20563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include element. 20593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (((*token != '/') && (*(token+1) != '>')) && (*q != '\0')) 20613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2062151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(keyword,token,MagickPathExtent); 20638bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 20643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*token != '=') 20653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 20668bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 20673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(keyword,"file") == 0) 20683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (depth > 200) 20703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ThrowMagickException(exception,GetMagickModule(), 2071efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy ConfigureError,"IncludeElementNestedTooDeeply","`%s'",token); 20723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 20733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 2075151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy path[MagickPathExtent], 2076b81f0abf7970b3c3e43ba0c95266a1c252806425dirk *file_xml; 20773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GetPathComponent(filename,HeadPath,path); 20793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*path != '\0') 20803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(path,DirectorySeparator, 2081151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 20823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*token == *DirectorySeparator) 2083151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(path,token,MagickPathExtent); 20843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 2085151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(path,token,MagickPathExtent); 2086b81f0abf7970b3c3e43ba0c95266a1c252806425dirk file_xml=FileToXML(path,~0UL); 2087b81f0abf7970b3c3e43ba0c95266a1c252806425dirk if (file_xml != (char *) NULL) 20883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2089b18d864b3f06e9272582b7736230d934d715d542dirk status&=LoadColorCache(cache,file_xml,path,depth+1, 2090cd2cd1803dda951bcfff101c44032ae17e52655fcristy exception); 2091b81f0abf7970b3c3e43ba0c95266a1c252806425dirk file_xml=DestroyString(file_xml); 20923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 20973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(keyword,"<color") == 0) 20993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Color element. 21023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 210373bd4a51b419e914565bdf204bf1540dc4c8ee26cristy color_info=(ColorInfo *) AcquireMagickMemory(sizeof(*color_info)); 21043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (color_info == (ColorInfo *) NULL) 21053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 21063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(color_info,0,sizeof(*color_info)); 21073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_info->path=ConstantString(filename); 2108e3e77a19c40caafb77339e5a126c532bf2984c01cristy color_info->exempt=MagickFalse; 2109e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy color_info->signature=MagickCoreSignature; 21103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 21113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (color_info == (ColorInfo *) NULL) 21133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 21143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(keyword,"/>") == 0) 21153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2116b18d864b3f06e9272582b7736230d934d715d542dirk status=AppendValueToLinkedList(cache,color_info); 21175d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (status == MagickFalse) 21183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ThrowMagickException(exception,GetMagickModule(), 2119efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy ResourceLimitError,"MemoryAllocationFailed","`%s'", 21203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_info->name); 21213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_info=(ColorInfo *) NULL; 2122d45122f9ea3f4b2f73f275c9c53f8174b3ced4fdcristy continue; 21233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21248bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,(const char **) NULL,extent,token); 21253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*token != '=') 21263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 21278bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 21288bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 21293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (*keyword) 21303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'C': 21323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'c': 21333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) keyword,"color") == 0) 21353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 213670cddf74d40a102c89f3197264ef289ee1647a8acristy (void) QueryColorCompliance(token,AllCompliance,&color_info->color, 213770cddf74d40a102c89f3197264ef289ee1647a8acristy exception); 21383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) keyword,"compliance") == 0) 21413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2142bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy ssize_t 21433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compliance; 21443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compliance=color_info->compliance; 214611a7cb75e76e53a2e23eff142605ebd2f8b603f3dirk if (GlobExpression(token,"*SVG*",MagickTrue) != MagickFalse) 21473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compliance|=SVGCompliance; 214811a7cb75e76e53a2e23eff142605ebd2f8b603f3dirk if (GlobExpression(token,"*X11*",MagickTrue) != MagickFalse) 21493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compliance|=X11Compliance; 215011a7cb75e76e53a2e23eff142605ebd2f8b603f3dirk if (GlobExpression(token,"*XPM*",MagickTrue) != MagickFalse) 21513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compliance|=XPMCompliance; 21523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_info->compliance=(ComplianceType) compliance; 21533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'N': 21583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'n': 21593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) keyword,"name") == 0) 21613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_info->name=ConstantString(token); 21633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'S': 21683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 's': 21693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) keyword,"stealth") == 0) 21713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21726f2013165d72f7d8ef5f66bb9453126d88113809anthony color_info->stealth=IsStringTrue(token); 21733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 21783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy token=(char *) RelinquishMagickMemory(token); 2182759ba919e9fe454989454f481f4055fd38b32307cristy return(status != 0 ? MagickTrue : MagickFalse); 21833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 21843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 21863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 21873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2190269c9413034627692b2a7d0a352f9dee4e8eada8cristy+ Q u e r y C o l o r C o m p l i a n c e % 21913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 21953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 219670cddf74d40a102c89f3197264ef289ee1647a8acristy% QueryColorCompliance() returns the red, green, blue, and alpha intensities 219770cddf74d40a102c89f3197264ef289ee1647a8acristy% for a given color name and standards compliance. 21983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21997efab4e8380bf7bb214c25ffb60fa66659bd78b3anthony% The format of the QueryColorCompliance method is: 22003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22017efab4e8380bf7bb214c25ffb60fa66659bd78b3anthony% MagickBooleanType QueryColorCompliance(const char *name, 2202101ab708b0574518ac5715da4d3915400e9df79acristy% const ComplianceType compliance,PixelInfo *color, 22033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 22043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 22063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o name: the color name (e.g. white, blue, yellow). 22083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2209a60c02075c4071dd1801b41db0b478f68683a6fecristy% o compliance: Adhere to this color standard: SVG, X11, or XPM. 2210a60c02075c4071dd1801b41db0b478f68683a6fecristy% 22113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o color: the red, green, blue, and opacity intensities values of the 22123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% named color in this structure. 22133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 22153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2217a60c02075c4071dd1801b41db0b478f68683a6fecristyMagickExport MagickBooleanType QueryColorCompliance(const char *name, 2218101ab708b0574518ac5715da4d3915400e9df79acristy const ComplianceType compliance,PixelInfo *color,ExceptionInfo *exception) 22193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2220bcdf567d7dc3c69162ca349e41d43741faed2043cristy extern const char 2221bcdf567d7dc3c69162ca349e41d43741faed2043cristy BackgroundColor[]; 2222bcdf567d7dc3c69162ca349e41d43741faed2043cristy 22233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GeometryInfo 22243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy geometry_info; 22253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2226a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 22273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scale; 22283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickStatusType 22303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags; 22313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const ColorInfo 22333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 22343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2235bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 22363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 22373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22389d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 22399d314ff2c17a77996c05413c2013880387e50f0ecristy type; 22409d314ff2c17a77996c05413c2013880387e50f0ecristy 22413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize color return value. 22433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(name != (const char *) NULL); 22453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",name); 22464c08aed51c5899665ade97263692328eea4af106cristy assert(color != (PixelInfo *) NULL); 22474c08aed51c5899665ade97263692328eea4af106cristy GetPixelInfo((Image *) NULL,color); 22483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((name == (char *) NULL) || (*name == '\0')) 22493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy name=BackgroundColor; 22503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (isspace((int) ((unsigned char) *name)) != 0) 22513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy name++; 22523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*name == '#') 22533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 22553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c; 22563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2257101ab708b0574518ac5715da4d3915400e9df79acristy PixelPacket 22583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel; 22593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumAny 22613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy range; 22623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2263bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 22643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy depth, 22653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy n; 22663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Parse hex color. 22693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(&pixel,0,sizeof(pixel)); 22713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy name++; 227272e0b77b2b706c11850af405ed3e7c3096349ac1cristy for (n=0; isxdigit((int) ((unsigned char) name[n])) != 0; n++) ; 22733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((n % 3) == 0) 22743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 22763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel.red=pixel.green; 22783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel.green=pixel.blue; 22793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel.blue=0; 2280bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=(ssize_t) (n/3-1); i >= 0; i--) 22813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c=(*name++); 22833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel.blue<<=4; 22843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= '0') && (c <= '9')) 22853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel.blue|=(int) (c-'0'); 22863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 22873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= 'A') && (c <= 'F')) 22883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel.blue|=(int) c-((int) 'A'-10); 22893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 22903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= 'a') && (c <= 'f')) 22913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel.blue|=(int) c-((int) 'a'-10); 22923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 22933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 22943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 229572e0b77b2b706c11850af405ed3e7c3096349ac1cristy } while (isxdigit((int) ((unsigned char) *name)) != 0); 22963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy depth=4*(n/3); 22973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 22993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((n % 4) != 0) 23013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ThrowMagickException(exception,GetMagickModule(), 2303efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy OptionWarning,"UnrecognizedColor","`%s'",name); 23043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 23053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 23073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel.red=pixel.green; 23093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel.green=pixel.blue; 23104c08aed51c5899665ade97263692328eea4af106cristy pixel.blue=pixel.alpha; 23114c08aed51c5899665ade97263692328eea4af106cristy pixel.alpha=0; 2312bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=(ssize_t) (n/4-1); i >= 0; i--) 23133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c=(*name++); 23154c08aed51c5899665ade97263692328eea4af106cristy pixel.alpha<<=4; 23163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= '0') && (c <= '9')) 23174c08aed51c5899665ade97263692328eea4af106cristy pixel.alpha|=(int) (c-'0'); 23183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 23193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= 'A') && (c <= 'F')) 23204c08aed51c5899665ade97263692328eea4af106cristy pixel.alpha|=(int) c-((int) 'A'-10); 23213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 23223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= 'a') && (c <= 'f')) 23234c08aed51c5899665ade97263692328eea4af106cristy pixel.alpha|=(int) c-((int) 'a'-10); 23243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 23253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 23263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23273146b74df0c2c68063e778b6d85a94ccee13f2d2cristy } while (isxdigit((int) ((unsigned char) *name)) != 0); 23283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy depth=4*(n/4); 23293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23301c9986e46caed422e7a5bbd550ea0c9a8487acbdcristy color->colorspace=sRGBColorspace; 23311d92f7952ace182649f73e84b7ecbba1798e8fffcristy color->depth=depth; 23328a46d827a124555f0c48fb2368ec1bba8e079ab6cristy color->alpha_trait=UndefinedPixelTrait; 23333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy range=GetQuantumRange(depth); 2334a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy color->red=(double) ScaleAnyToQuantum(pixel.red,range); 2335a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy color->green=(double) ScaleAnyToQuantum(pixel.green,range); 2336a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy color->blue=(double) ScaleAnyToQuantum(pixel.blue,range); 2337a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy color->alpha=(double) OpaqueAlpha; 23383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((n % 3) != 0) 23393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23408a46d827a124555f0c48fb2368ec1bba8e079ab6cristy color->alpha_trait=BlendPixelTrait; 2341a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy color->alpha=(double) ScaleAnyToQuantum(pixel.alpha,range); 23423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23434c08aed51c5899665ade97263692328eea4af106cristy color->black=0.0; 23443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 23453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (strchr(name,'(') != (char *) NULL) 23473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 2349151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy colorspace[MagickPathExtent]; 23503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2351bbdf0cfd41c8ec46a7ebfe2d22668c45976b3a39cristy MagickBooleanType 2352bbdf0cfd41c8ec46a7ebfe2d22668c45976b3a39cristy icc_color; 2353bbdf0cfd41c8ec46a7ebfe2d22668c45976b3a39cristy 23543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Parse color of the form rgb(100,255,0). 23563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2357151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(colorspace,name,MagickPathExtent); 23583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; colorspace[i] != '\0'; i++) 23593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colorspace[i] == '(') 23603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 23613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colorspace[i--]='\0'; 2362a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy scale=(double) ScaleCharToQuantum(1); 2363bbdf0cfd41c8ec46a7ebfe2d22668c45976b3a39cristy icc_color=MagickFalse; 236413530793d24024395f2ae82e10dea13e8dcbc970cristy if (LocaleNCompare(colorspace,"device-",7) == 0) 236513530793d24024395f2ae82e10dea13e8dcbc970cristy { 2366151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(colorspace,colorspace+7,MagickPathExtent); 236713530793d24024395f2ae82e10dea13e8dcbc970cristy scale=(double) QuantumRange; 236813530793d24024395f2ae82e10dea13e8dcbc970cristy icc_color=MagickTrue; 236913530793d24024395f2ae82e10dea13e8dcbc970cristy } 2370978b6a3380b64be3643cc8a2762652ae6c942b88cristy if (LocaleCompare(colorspace,"icc-color") == 0) 2371978b6a3380b64be3643cc8a2762652ae6c942b88cristy { 2372978b6a3380b64be3643cc8a2762652ae6c942b88cristy register ssize_t 2373978b6a3380b64be3643cc8a2762652ae6c942b88cristy j; 2374978b6a3380b64be3643cc8a2762652ae6c942b88cristy 2375151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(colorspace,name+i+2,MagickPathExtent); 2376978b6a3380b64be3643cc8a2762652ae6c942b88cristy for (j=0; colorspace[j] != '\0'; j++) 2377978b6a3380b64be3643cc8a2762652ae6c942b88cristy if (colorspace[j] == ',') 2378978b6a3380b64be3643cc8a2762652ae6c942b88cristy break; 2379978b6a3380b64be3643cc8a2762652ae6c942b88cristy colorspace[j--]='\0'; 2380978b6a3380b64be3643cc8a2762652ae6c942b88cristy i+=j+3; 2381a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy scale=(double) QuantumRange; 2382bbdf0cfd41c8ec46a7ebfe2d22668c45976b3a39cristy icc_color=MagickTrue; 2383978b6a3380b64be3643cc8a2762652ae6c942b88cristy } 23843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LocaleLower(colorspace); 23858a46d827a124555f0c48fb2368ec1bba8e079ab6cristy color->alpha_trait=UndefinedPixelTrait; 23863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((i > 0) && (colorspace[i] == 'a')) 23873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colorspace[i]='\0'; 23898a46d827a124555f0c48fb2368ec1bba8e079ab6cristy color->alpha_trait=BlendPixelTrait; 23903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2391042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy type=ParseCommandOption(MagickColorspaceOptions,MagickFalse,colorspace); 23923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (type < 0) 23933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ThrowMagickException(exception,GetMagickModule(), 2395efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy OptionWarning,"UnrecognizedColor","`%s'",name); 23963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 23973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color->colorspace=(ColorspaceType) type; 23995d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if ((icc_color == MagickFalse) && (color->colorspace == RGBColorspace)) 24001d92f7952ace182649f73e84b7ecbba1798e8fffcristy { 24011d92f7952ace182649f73e84b7ecbba1798e8fffcristy color->colorspace=sRGBColorspace; /* as required by SVG standard */ 24021d92f7952ace182649f73e84b7ecbba1798e8fffcristy color->depth=8; 24031d92f7952ace182649f73e84b7ecbba1798e8fffcristy } 24043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetGeometryInfo(&geometry_info); 24053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags=ParseGeometry(name+i+1,&geometry_info); 2406af1700b2ce793566452f614cf8755cff921df3e3cristy if (flags == 0) 24073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2408af1700b2ce793566452f614cf8755cff921df3e3cristy char 2409af1700b2ce793566452f614cf8755cff921df3e3cristy *colorname; 2410af1700b2ce793566452f614cf8755cff921df3e3cristy 24112896cff2ec29964d4c25fdfcb3f93f6343f434d9cristy ColorspaceType 2412fa589d6096099562cbc2bc14e508931968a8c055dirk colorspaceType; 24132896cff2ec29964d4c25fdfcb3f93f6343f434d9cristy 2414fa589d6096099562cbc2bc14e508931968a8c055dirk colorspaceType=color->colorspace; 2415af1700b2ce793566452f614cf8755cff921df3e3cristy colorname=AcquireString(name+i+1); 2416af1700b2ce793566452f614cf8755cff921df3e3cristy (void) SubstituteString(&colorname,")",""); 2417af1700b2ce793566452f614cf8755cff921df3e3cristy (void) QueryColorCompliance(colorname,AllCompliance,color,exception); 2418af1700b2ce793566452f614cf8755cff921df3e3cristy colorname=DestroyString(colorname); 2419fa589d6096099562cbc2bc14e508931968a8c055dirk color->colorspace=colorspaceType; 24203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2421af1700b2ce793566452f614cf8755cff921df3e3cristy else 2422bf9bdc57379db69d1cb25fdb5d9aceedec022309cristy { 2423bf9bdc57379db69d1cb25fdb5d9aceedec022309cristy if ((flags & PercentValue) != 0) 2424a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy scale=(double) (QuantumRange/100.0); 2425af1700b2ce793566452f614cf8755cff921df3e3cristy if ((flags & RhoValue) != 0) 2426db5a957ef878e77725654a4c0da6f09bc4182a84Cristy color->red=(double) ClampToQuantum((MagickRealType) (scale* 24278f424002488d9f5ece29228d8ede0e39d838f38bCristy geometry_info.rho)); 2428af1700b2ce793566452f614cf8755cff921df3e3cristy if ((flags & SigmaValue) != 0) 2429db5a957ef878e77725654a4c0da6f09bc4182a84Cristy color->green=(double) ClampToQuantum((MagickRealType) (scale* 24308f424002488d9f5ece29228d8ede0e39d838f38bCristy geometry_info.sigma)); 2431af1700b2ce793566452f614cf8755cff921df3e3cristy if ((flags & XiValue) != 0) 2432db5a957ef878e77725654a4c0da6f09bc4182a84Cristy color->blue=(double) ClampToQuantum((MagickRealType) (scale* 24338f424002488d9f5ece29228d8ede0e39d838f38bCristy geometry_info.xi)); 2434a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy color->alpha=(double) OpaqueAlpha; 2435af1700b2ce793566452f614cf8755cff921df3e3cristy if ((flags & PsiValue) != 0) 2436af1700b2ce793566452f614cf8755cff921df3e3cristy { 2437af1700b2ce793566452f614cf8755cff921df3e3cristy if (color->colorspace == CMYKColorspace) 2438db5a957ef878e77725654a4c0da6f09bc4182a84Cristy color->black=(double) ClampToQuantum((MagickRealType) ( 24398f424002488d9f5ece29228d8ede0e39d838f38bCristy scale*geometry_info.psi)); 2440af1700b2ce793566452f614cf8755cff921df3e3cristy else 244117f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (color->alpha_trait != UndefinedPixelTrait) 2442d9889a7329f3039a1a12d85ebe73a178c3127849cristy color->alpha=(double) ClampToQuantum(QuantumRange* 2443af1700b2ce793566452f614cf8755cff921df3e3cristy geometry_info.psi); 2444af1700b2ce793566452f614cf8755cff921df3e3cristy } 244513530793d24024395f2ae82e10dea13e8dcbc970cristy if (((flags & ChiValue) != 0) && 244617f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy (color->alpha_trait != UndefinedPixelTrait)) 2447d9889a7329f3039a1a12d85ebe73a178c3127849cristy color->alpha=(double) ClampToQuantum(QuantumRange* 2448d9889a7329f3039a1a12d85ebe73a178c3127849cristy geometry_info.chi); 2449ce024d1ecff5ee65c6beb48e48329651d2346bb6cristy if (color->colorspace == LabColorspace) 2450ce024d1ecff5ee65c6beb48e48329651d2346bb6cristy { 2451ce024d1ecff5ee65c6beb48e48329651d2346bb6cristy if ((flags & SigmaValue) != 0) 24528f424002488d9f5ece29228d8ede0e39d838f38bCristy color->green=(MagickRealType) ClampToQuantum((MagickRealType) 2453db5a957ef878e77725654a4c0da6f09bc4182a84Cristy (scale*geometry_info.sigma+(QuantumRange+1)/2.0)); 2454ce024d1ecff5ee65c6beb48e48329651d2346bb6cristy if ((flags & XiValue) != 0) 24558f424002488d9f5ece29228d8ede0e39d838f38bCristy color->blue=(MagickRealType) ClampToQuantum((MagickRealType) 2456db5a957ef878e77725654a4c0da6f09bc4182a84Cristy (scale*geometry_info.xi+(QuantumRange+1)/2.0)); 2457ce024d1ecff5ee65c6beb48e48329651d2346bb6cristy } 2458af1700b2ce793566452f614cf8755cff921df3e3cristy if (LocaleCompare(colorspace,"gray") == 0) 2459af1700b2ce793566452f614cf8755cff921df3e3cristy { 2460af1700b2ce793566452f614cf8755cff921df3e3cristy color->colorspace=GRAYColorspace; 2461af1700b2ce793566452f614cf8755cff921df3e3cristy color->green=color->red; 2462af1700b2ce793566452f614cf8755cff921df3e3cristy color->blue=color->red; 246313530793d24024395f2ae82e10dea13e8dcbc970cristy if (((flags & SigmaValue) != 0) && 246417f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy (color->alpha_trait != UndefinedPixelTrait)) 2465d9889a7329f3039a1a12d85ebe73a178c3127849cristy color->alpha=(double) ClampToQuantum(QuantumRange* 2466af1700b2ce793566452f614cf8755cff921df3e3cristy geometry_info.sigma); 2467af1700b2ce793566452f614cf8755cff921df3e3cristy } 246894d535de97796790e76b0448ea6da125264c55a7cristy if ((LocaleCompare(colorspace,"HCL") == 0) || 246994d535de97796790e76b0448ea6da125264c55a7cristy (LocaleCompare(colorspace,"HSB") == 0) || 2470af1700b2ce793566452f614cf8755cff921df3e3cristy (LocaleCompare(colorspace,"HSL") == 0) || 2471af1700b2ce793566452f614cf8755cff921df3e3cristy (LocaleCompare(colorspace,"HWB") == 0)) 2472af1700b2ce793566452f614cf8755cff921df3e3cristy { 2473fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy double 2474fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy blue, 2475fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy green, 2476fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy red; 2477af1700b2ce793566452f614cf8755cff921df3e3cristy 247894d535de97796790e76b0448ea6da125264c55a7cristy if (LocaleCompare(colorspace,"HCL") == 0) 247994d535de97796790e76b0448ea6da125264c55a7cristy color->colorspace=HCLColorspace; 248094d535de97796790e76b0448ea6da125264c55a7cristy else 248194d535de97796790e76b0448ea6da125264c55a7cristy if (LocaleCompare(colorspace,"HSB") == 0) 248294d535de97796790e76b0448ea6da125264c55a7cristy color->colorspace=HSBColorspace; 248394d535de97796790e76b0448ea6da125264c55a7cristy else 248494d535de97796790e76b0448ea6da125264c55a7cristy if (LocaleCompare(colorspace,"HSL") == 0) 248594d535de97796790e76b0448ea6da125264c55a7cristy color->colorspace=HSLColorspace; 248694d535de97796790e76b0448ea6da125264c55a7cristy else 248794d535de97796790e76b0448ea6da125264c55a7cristy if (LocaleCompare(colorspace,"HWB") == 0) 248894d535de97796790e76b0448ea6da125264c55a7cristy color->colorspace=HWBColorspace; 2489af1700b2ce793566452f614cf8755cff921df3e3cristy scale=1.0/255.0; 2490af1700b2ce793566452f614cf8755cff921df3e3cristy if ((flags & PercentValue) != 0) 2491af1700b2ce793566452f614cf8755cff921df3e3cristy scale=1.0/100.0; 2492af1700b2ce793566452f614cf8755cff921df3e3cristy geometry_info.sigma*=scale; 2493af1700b2ce793566452f614cf8755cff921df3e3cristy geometry_info.xi*=scale; 249494d535de97796790e76b0448ea6da125264c55a7cristy if (LocaleCompare(colorspace,"HCL") == 0) 249594d535de97796790e76b0448ea6da125264c55a7cristy ConvertHCLToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0, 2496fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy 360.0)/360.0,geometry_info.sigma,geometry_info.xi,&red, 2497fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy &green,&blue); 2498af1700b2ce793566452f614cf8755cff921df3e3cristy else 249994d535de97796790e76b0448ea6da125264c55a7cristy if (LocaleCompare(colorspace,"HSB") == 0) 250094d535de97796790e76b0448ea6da125264c55a7cristy ConvertHSBToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0, 2501fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy 360.0)/360.0,geometry_info.sigma,geometry_info.xi,&red, 2502fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy &green,&blue); 2503af1700b2ce793566452f614cf8755cff921df3e3cristy else 250494d535de97796790e76b0448ea6da125264c55a7cristy if (LocaleCompare(colorspace,"HSL") == 0) 250594d535de97796790e76b0448ea6da125264c55a7cristy ConvertHSLToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0, 2506fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy 360.0)/360.0,geometry_info.sigma,geometry_info.xi,&red, 2507fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy &green,&blue); 250894d535de97796790e76b0448ea6da125264c55a7cristy else 250994d535de97796790e76b0448ea6da125264c55a7cristy ConvertHWBToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0, 2510fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy 360.0)/360.0,geometry_info.sigma,geometry_info.xi,&red, 2511fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy &green,&blue); 2512af1700b2ce793566452f614cf8755cff921df3e3cristy color->colorspace=sRGBColorspace; 2513fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy color->red=(MagickRealType) red; 2514fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy color->green=(MagickRealType) green; 2515fa5d85d3778c648bd8ab9d5566974082b2c728f2cristy color->blue=(MagickRealType) blue; 2516af1700b2ce793566452f614cf8755cff921df3e3cristy } 25173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 25193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Parse named color. 25223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2523a60c02075c4071dd1801b41db0b478f68683a6fecristy p=GetColorCompliance(name,compliance,exception); 25243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (const ColorInfo *) NULL) 25253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 25260257d3822dae3829690a64b809dbda8adc0214f9cristy color->colorspace=sRGBColorspace; 25271d92f7952ace182649f73e84b7ecbba1798e8fffcristy color->depth=8; 2528b0a657e13c4aefba39c51292005427b47277869dcristy color->alpha_trait=p->color.alpha != OpaqueAlpha ? BlendPixelTrait : 2529b0a657e13c4aefba39c51292005427b47277869dcristy UndefinedPixelTrait; 2530a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy color->red=(double) p->color.red; 2531a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy color->green=(double) p->color.green; 2532a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy color->blue=(double) p->color.blue; 2533a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy color->alpha=(double) p->color.alpha; 25344c08aed51c5899665ade97263692328eea4af106cristy color->black=0.0; 25353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 25363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 25373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 25393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 25403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2543269c9413034627692b2a7d0a352f9dee4e8eada8cristy% Q u e r y C o l o r n a m e % 25443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 25483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2549269c9413034627692b2a7d0a352f9dee4e8eada8cristy% QueryColorname() returns a named color for the given color intensity. 25503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% If an exact match is not found, a hex value is returned instead. For 25513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% example an intensity of rgb:(0,0,0) returns black whereas rgb:(223,223,223) 25523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returns #dfdfdf. 25533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2554a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony% UPDATE: the 'image' argument is no longer needed as all information should 2555a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony% have been preset using GetPixelInfo(). 2556a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony% 2557269c9413034627692b2a7d0a352f9dee4e8eada8cristy% The format of the QueryColorname method is: 25583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2559269c9413034627692b2a7d0a352f9dee4e8eada8cristy% MagickBooleanType QueryColorname(const Image *image, 2560101ab708b0574518ac5715da4d3915400e9df79acristy% const PixelInfo *color,const ComplianceType compliance,char *name, 25613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 25623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 25643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2565a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony% o image: the image. (not used! - color gets settings from GetPixelInfo() 25663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o color: the color intensities. 25683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o Compliance: Adhere to this color standard: SVG, X11, or XPM. 25703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o name: Return the color name or hex value. 25723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 25743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2576269c9413034627692b2a7d0a352f9dee4e8eada8cristy 2577a322a839a56b8d9fa40751b1906ce2a4780a24d6anthonyMagickExport MagickBooleanType QueryColorname( 2578a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony const Image *magick_unused(image),const PixelInfo *color, 2579a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony const ComplianceType compliance,char *name,ExceptionInfo *exception) 25803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 25814c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 25823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel; 25833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2584a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 2585a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony alpha; 25863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const ColorInfo 25883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 25893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2590d673a21c1646284424d570454e9dd38a82345d4bdirk magick_unreferenced(image); 25913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *name='\0'; 25923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel=(*color); 25933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (compliance == XPMCompliance) 25943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25958a46d827a124555f0c48fb2368ec1bba8e079ab6cristy pixel.alpha_trait=UndefinedPixelTrait; 2596a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if ( pixel.depth > 16 ) 2597a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony pixel.depth=16; 25983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2599b9dbc296c59e91df014757130b4e584c7fb6c74ddirk GetColorTuple(&pixel,compliance != SVGCompliance ? MagickTrue : MagickFalse, 2600b9dbc296c59e91df014757130b4e584c7fb6c74ddirk name); 2601b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (IssRGBColorspace(pixel.colorspace) == MagickFalse) 2602c7b79fc84ba64846c11bcfffeb38ddf81ec806f9cristy return(MagickFalse); 260317f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy alpha=color->alpha_trait != UndefinedPixelTrait ? color->alpha : OpaqueAlpha; 26043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) GetColorInfo("*",exception); 260586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResetLinkedListIterator(color_cache); 260686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const ColorInfo *) GetNextValueInLinkedList(color_cache); 26073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (p != (const ColorInfo *) NULL) 26083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2609aa83c2c383e62bd5342c0d38dc5f6e746998bde8cristy if (((p->compliance & compliance) != 0) && 26103bdd925dbb0804df99e548c50667670319655816cristy ((fabs((double) (p->color.red-color->red)) < MagickEpsilon)) && 26113bdd925dbb0804df99e548c50667670319655816cristy (fabs((double) (p->color.green-color->green)) < MagickEpsilon) && 26123bdd925dbb0804df99e548c50667670319655816cristy (fabs((double) (p->color.blue-color->blue)) < MagickEpsilon) && 26133bdd925dbb0804df99e548c50667670319655816cristy (fabs((double) (p->color.alpha-alpha)) < MagickEpsilon)) 26143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2615151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(name,p->name,MagickPathExtent); 26163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 261886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const ColorInfo *) GetNextValueInLinkedList(color_cache); 26193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 26213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2622