array(0,0,0), "silver" => array(192,192,192), "gray" => array(128,128,128), "white" => array(255,255,255), "maroon" => array(128,0,0), "red" => array(255,0,0), "purple" => array(128,0,128), "fuchsia" => array(255,0,255), "green" => array(0,128,0), "lime" => array(0,255,0), "olive" => array(128,128,0), "yellow" => array(255,255,0), "navy" => array(0,0,128), "blue" => array(0,0,255), "teal" => array(0,128,128), "aqua" => array(0,255,255), // Widely-used non-stadard color names "aliceblue" => array(240,248,255), "antiquewhite" => array(250,235,215), "aquamarine" => array(127,255,212), "azure" => array(240,255,255), "beige" => array(245,245,220), "bisque" => array(255,228,196), "blanchedalmond" => array(255,235,205), "blueviolet" => array(138, 43,226), "brown" => array(165, 42, 42), "burlywood" => array(222,184,135), "cadetblue" => array( 95,158,160), "chartreuse" => array(127,255, 0), "chocolate" => array(210,105, 30), "coral" => array(255,127, 80), "cornflowerblue" => array(100,149,237), "cornsilk" => array(255,248,220), "crimson" => array(220, 20, 60), "cyan" => array( 0,255,255), "darkblue" => array( 0, 0,139), "darkcyan" => array( 0,139,139), "darkgoldenrod" => array(184,134, 11), "darkgray" => array(169,169,169), "darkgreen" => array( 0,100, 0), "darkkhaki" => array(189,183,107), "darkmagenta" => array(139, 0,139), "darkolivegreen" => array( 85,107, 47), "darkorange" => array(255,140, 0), "darkorchid" => array(153, 50,204), "darkred" => array(139, 0, 0), "darksalmon" => array(233,150,122), "darkseagreen" => array(143,188,143), "darkslateblue" => array( 72, 61,139), "darkslategray" => array( 47, 79, 79), "darkturquoise" => array( 0,206,209), "darkviolet" => array(148, 0,211), "deeppink" => array(255, 20,147), "deepskyblue" => array( 0,191,255), "dimgray" => array(105,105,105), "dodgerblue" => array( 30,144,255), "firebrick" => array(178, 34, 34), "floralwhite" => array(255,250,240), "forestgreen" => array( 34,139, 34), "gainsboro" => array(220,220,220), "ghostwhite" => array(248,248,255), "gold" => array(255,215, 0), "goldenrod" => array(218,165, 32), "greenyellow" => array(173,255, 47), "honeydew" => array(240,255,240), "hotpink" => array(255,105,180), "indianred" => array(205, 92, 92), "indigo" => array( 75, 0,130), "ivory" => array(255,255,240), "khaki" => array(240,230,140), "lavender" => array(230,230,250), "lavenderblush" => array(255,240,245), "lawngreen" => array(124,252, 0), "lemonchiffon" => array(255,250,205), "lightblue" => array(173,216,230), "lightcoral" => array(240,128,128), "lightcyan" => array(224,255,255), "lightgoldenrodyellow" => array(250,250,210), "lightgreen" => array(144,238,244), "lightgrey" => array(211,211,211), "lightpink" => array(255,182,193), "lightsalmon" => array(255,160,122), "lightseagreen" => array( 32,178,170), "lightskyblue" => array(135,206,250), "lightslategray" => array(119,136,153), "lightsteelblue" => array(176,196,222), "lightyellow" => array(255,255,224), "limegreen" => array( 50,205, 50), "linen" => array(250,240,230), "magenta" => array(255, 0,255), "mediumaquamarine" => array(102,205,170), "mediumblue" => array( 0, 0,205), "mediumorchid" => array(186, 85,211), "mediumpurple" => array(147,112,219), "mediumseagreen" => array( 60,179,113), "mediumslateblue" => array(123,104,238), "mediumspringgreen" => array( 0,250,154), "mediumturquoise" => array( 72,209,204), "mediumvioletred" => array(199, 21,133), "midnightblue" => array( 25, 25,112), "mintcream" => array(245,255,250), "mistyrose" => array(255,228,225), "moccasin" => array(255,228,181), "navajowhite" => array(255,222,173), "oldlace" => array(253,245,230), "olivedrab" => array(107,142, 35), "orange" => array(255,165, 0), "orangered" => array(255, 69, 0), "orchid" => array(218,112,214), "palegoldenrod" => array(238,232,170), "palegreen" => array(152,251,152), "paleturquoise" => array(175,238,238), "palevioletred" => array(219,112,147), "papayawhip" => array(255,239,213), "peachpuff" => array(255,218,185), "peru" => array(205,133, 63), "pink" => array(255,192,203), "plum" => array(221,160,221), "powderblue" => array(176,224,230), "rosybrown" => array(188,143,143), "royalblue" => array( 65,105,225), "saddlebrown" => array(139, 69, 19), "salmon" => array(250,128,114), "sandybrown" => array(244,164, 96), "seagreen" => array( 46,139, 87), "seashell" => array(255,245,238), "sienna" => array(160, 82, 45), "skyblue" => array(135,206,235), "slateblue" => array(106, 90,205), "slategray" => array(112,128,144), "snow" => array(255,250,250), "springgreen" => array( 0,255,127), "steelblue" => array( 70,130,180), "tan" => array(210,180,140), "thistle" => array(216,191,216), "tomato" => array(255, 99, 71), "turquoise" => array( 64,224,208), "violet" => array(238,130,238), "wheat" => array(245,222,179), "whitesmoke" => array(245,245,245), "yellowgreen" => array(154,205, 50) ); function &parse_color_declaration($decl) { $color = _parse_color_declaration($decl, $success); $color_obj =& new Color($color, is_transparent($color)); return $color_obj; }; function _parse_color_declaration($decl, &$success) { $success = true; global $g_colors; if (isset($g_colors[strtolower($decl)])) { return $g_colors[strtolower($decl)]; }; // Parse color keywords switch (strtolower($decl)) { case "transparent": return array(-1,-1,-1); } // rgb(0,0,0) form if (preg_match("/rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/",$decl,$matches)) { $r = min(255,max(0,$matches[1])); $g = min(255,max(0,$matches[2])); $b = min(255,max(0,$matches[3])); return array($r,$g,$b); }; // rgb(0%,0%,0%) form if (preg_match("/rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/",$decl,$matches)) { $r = min(255,max(0,$matches[1]*255/100)); $g = min(255,max(0,$matches[2]*255/100)); $b = min(255,max(0,$matches[3]*255/100)); return array($r,$g,$b); }; // We've already checked every non-hexadecimal forms; now only color declarations starting // with # left; nevertheless, sometimes designers forget to put #-sign before the // color declaration. Thus, we'll add sharp sign automatically if it is missing // if (strlen($decl) > 0) { if ($decl{0} !== "#") { $decl = "#" . $decl; }; }; // #000000 form if (preg_match("/^#([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2})$/",$decl,$matches)) { $arrr = unpack("C",pack("H2",$matches[1])); $arrg = unpack("C",pack("H2",$matches[2])); $arrb = unpack("C",pack("H2",$matches[3])); // Note that array indices returned by unpack differ in different versions of PHP. Unfortunately // we unable to directly access values - compatibility is an issue... $r = array_pop($arrr); $g = array_pop($arrg); $b = array_pop($arrb); return array($r,$g,$b); }; // #000 form if (preg_match("/^#([[:xdigit:]])([[:xdigit:]])([[:xdigit:]])$/",$decl,$matches)) { $arrr = unpack("C",pack("H2",$matches[1].$matches[1])); $arrg = unpack("C",pack("H2",$matches[2].$matches[2])); $arrb = unpack("C",pack("H2",$matches[3].$matches[3])); // Note that array indices returned by unpack differ in different versions of PHP. Unfortunately // we unable to directly access values - compatibility is an issue... $r = array_pop($arrr); $g = array_pop($arrg); $b = array_pop($arrb); return array($r,$g,$b); }; // Transparent color - by default $success = false; return array(-1,-1,-1); } function is_transparent($color) { return $color[0] < 0; } ?>