/vendor/dompdf/dompdf/include/css_color.cls.php

https://github.com/TechGemIN/DomPDF-Boilerplate · PHP · 287 lines · 239 code · 29 blank · 19 comment · 32 complexity · 86559107085a74e852a69a20f7e8910a MD5 · raw file

  1. <?php
  2. /**
  3. * @package dompdf
  4. * @link http://dompdf.github.com/
  5. * @author Benj Carson <benjcarson@digitaljunkies.ca>
  6. * @author Fabien MĂŠnager <fabien.menager@gmail.com>
  7. * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
  8. */
  9. class CSS_Color {
  10. static $cssColorNames = array(
  11. "aliceblue" => "F0F8FF",
  12. "antiquewhite" => "FAEBD7",
  13. "aqua" => "00FFFF",
  14. "aquamarine" => "7FFFD4",
  15. "azure" => "F0FFFF",
  16. "beige" => "F5F5DC",
  17. "bisque" => "FFE4C4",
  18. "black" => "000000",
  19. "blanchedalmond" => "FFEBCD",
  20. "blue" => "0000FF",
  21. "blueviolet" => "8A2BE2",
  22. "brown" => "A52A2A",
  23. "burlywood" => "DEB887",
  24. "cadetblue" => "5F9EA0",
  25. "chartreuse" => "7FFF00",
  26. "chocolate" => "D2691E",
  27. "coral" => "FF7F50",
  28. "cornflowerblue" => "6495ED",
  29. "cornsilk" => "FFF8DC",
  30. "crimson" => "DC143C",
  31. "cyan" => "00FFFF",
  32. "darkblue" => "00008B",
  33. "darkcyan" => "008B8B",
  34. "darkgoldenrod" => "B8860B",
  35. "darkgray" => "A9A9A9",
  36. "darkgreen" => "006400",
  37. "darkgrey" => "A9A9A9",
  38. "darkkhaki" => "BDB76B",
  39. "darkmagenta" => "8B008B",
  40. "darkolivegreen" => "556B2F",
  41. "darkorange" => "FF8C00",
  42. "darkorchid" => "9932CC",
  43. "darkred" => "8B0000",
  44. "darksalmon" => "E9967A",
  45. "darkseagreen" => "8FBC8F",
  46. "darkslateblue" => "483D8B",
  47. "darkslategray" => "2F4F4F",
  48. "darkslategrey" => "2F4F4F",
  49. "darkturquoise" => "00CED1",
  50. "darkviolet" => "9400D3",
  51. "deeppink" => "FF1493",
  52. "deepskyblue" => "00BFFF",
  53. "dimgray" => "696969",
  54. "dimgrey" => "696969",
  55. "dodgerblue" => "1E90FF",
  56. "firebrick" => "B22222",
  57. "floralwhite" => "FFFAF0",
  58. "forestgreen" => "228B22",
  59. "fuchsia" => "FF00FF",
  60. "gainsboro" => "DCDCDC",
  61. "ghostwhite" => "F8F8FF",
  62. "gold" => "FFD700",
  63. "goldenrod" => "DAA520",
  64. "gray" => "808080",
  65. "green" => "008000",
  66. "greenyellow" => "ADFF2F",
  67. "grey" => "808080",
  68. "honeydew" => "F0FFF0",
  69. "hotpink" => "FF69B4",
  70. "indianred" => "CD5C5C",
  71. "indigo" => "4B0082",
  72. "ivory" => "FFFFF0",
  73. "khaki" => "F0E68C",
  74. "lavender" => "E6E6FA",
  75. "lavenderblush" => "FFF0F5",
  76. "lawngreen" => "7CFC00",
  77. "lemonchiffon" => "FFFACD",
  78. "lightblue" => "ADD8E6",
  79. "lightcoral" => "F08080",
  80. "lightcyan" => "E0FFFF",
  81. "lightgoldenrodyellow" => "FAFAD2",
  82. "lightgray" => "D3D3D3",
  83. "lightgreen" => "90EE90",
  84. "lightgrey" => "D3D3D3",
  85. "lightpink" => "FFB6C1",
  86. "lightsalmon" => "FFA07A",
  87. "lightseagreen" => "20B2AA",
  88. "lightskyblue" => "87CEFA",
  89. "lightslategray" => "778899",
  90. "lightslategrey" => "778899",
  91. "lightsteelblue" => "B0C4DE",
  92. "lightyellow" => "FFFFE0",
  93. "lime" => "00FF00",
  94. "limegreen" => "32CD32",
  95. "linen" => "FAF0E6",
  96. "magenta" => "FF00FF",
  97. "maroon" => "800000",
  98. "mediumaquamarine" => "66CDAA",
  99. "mediumblue" => "0000CD",
  100. "mediumorchid" => "BA55D3",
  101. "mediumpurple" => "9370DB",
  102. "mediumseagreen" => "3CB371",
  103. "mediumslateblue" => "7B68EE",
  104. "mediumspringgreen" => "00FA9A",
  105. "mediumturquoise" => "48D1CC",
  106. "mediumvioletred" => "C71585",
  107. "midnightblue" => "191970",
  108. "mintcream" => "F5FFFA",
  109. "mistyrose" => "FFE4E1",
  110. "moccasin" => "FFE4B5",
  111. "navajowhite" => "FFDEAD",
  112. "navy" => "000080",
  113. "oldlace" => "FDF5E6",
  114. "olive" => "808000",
  115. "olivedrab" => "6B8E23",
  116. "orange" => "FFA500",
  117. "orangered" => "FF4500",
  118. "orchid" => "DA70D6",
  119. "palegoldenrod" => "EEE8AA",
  120. "palegreen" => "98FB98",
  121. "paleturquoise" => "AFEEEE",
  122. "palevioletred" => "DB7093",
  123. "papayawhip" => "FFEFD5",
  124. "peachpuff" => "FFDAB9",
  125. "peru" => "CD853F",
  126. "pink" => "FFC0CB",
  127. "plum" => "DDA0DD",
  128. "powderblue" => "B0E0E6",
  129. "purple" => "800080",
  130. "red" => "FF0000",
  131. "rosybrown" => "BC8F8F",
  132. "royalblue" => "4169E1",
  133. "saddlebrown" => "8B4513",
  134. "salmon" => "FA8072",
  135. "sandybrown" => "F4A460",
  136. "seagreen" => "2E8B57",
  137. "seashell" => "FFF5EE",
  138. "sienna" => "A0522D",
  139. "silver" => "C0C0C0",
  140. "skyblue" => "87CEEB",
  141. "slateblue" => "6A5ACD",
  142. "slategray" => "708090",
  143. "slategrey" => "708090",
  144. "snow" => "FFFAFA",
  145. "springgreen" => "00FF7F",
  146. "steelblue" => "4682B4",
  147. "tan" => "D2B48C",
  148. "teal" => "008080",
  149. "thistle" => "D8BFD8",
  150. "tomato" => "FF6347",
  151. "turquoise" => "40E0D0",
  152. "violet" => "EE82EE",
  153. "wheat" => "F5DEB3",
  154. "white" => "FFFFFF",
  155. "whitesmoke" => "F5F5F5",
  156. "yellow" => "FFFF00",
  157. "yellowgreen" => "9ACD32",
  158. );
  159. static function parse($color) {
  160. if ( is_array($color) ) {
  161. // Assume the array has the right format...
  162. // FIXME: should/could verify this.
  163. return $color;
  164. }
  165. static $cache = array();
  166. $color = strtolower($color);
  167. if ( isset($cache[$color]) ) {
  168. return $cache[$color];
  169. }
  170. if ( in_array($color, array("transparent", "inherit")) ) {
  171. return $cache[$color] = $color;
  172. }
  173. if ( isset(self::$cssColorNames[$color]) ) {
  174. return $cache[$color] = self::getArray(self::$cssColorNames[$color]);
  175. }
  176. $length = mb_strlen($color);
  177. // #rgb format
  178. if ( $length == 4 && $color[0] === "#" ) {
  179. return $cache[$color] = self::getArray($color[1].$color[1].$color[2].$color[2].$color[3].$color[3]);
  180. }
  181. // #rrggbb format
  182. else if ( $length == 7 && $color[0] === "#" ) {
  183. return $cache[$color] = self::getArray(mb_substr($color, 1, 6));
  184. }
  185. // rgb( r,g,b ) / rgbaa( r,g,b,Îą ) format
  186. else if ( mb_strpos($color, "rgb") !== false ) {
  187. $i = mb_strpos($color, "(");
  188. $j = mb_strpos($color, ")");
  189. // Bad color value
  190. if ( $i === false || $j === false ) {
  191. return null;
  192. }
  193. $triplet = explode(",", mb_substr($color, $i+1, $j-$i-1));
  194. // alpha transparency
  195. // FIXME: not currently using transparency
  196. $alpha = 1;
  197. if ( count( $triplet ) == 4 ) {
  198. $alpha = (float) ( trim( array_pop( $triplet ) ) );
  199. // bad value, set to fully opaque
  200. if ( $alpha > 1 || $alpha < 0 ) {
  201. $alpha = 1;
  202. }
  203. }
  204. if ( count($triplet) != 3 ) {
  205. return null;
  206. }
  207. foreach (array_keys($triplet) as $c) {
  208. $triplet[$c] = trim($triplet[$c]);
  209. if ( $triplet[$c][mb_strlen($triplet[$c]) - 1] === "%" ) {
  210. $triplet[$c] = round($triplet[$c] * 2.55);
  211. }
  212. }
  213. return $cache[$color] = self::getArray(vsprintf("%02X%02X%02X", $triplet));
  214. }
  215. // cmyk( c,m,y,k ) format
  216. // http://www.w3.org/TR/css3-gcpm/#cmyk-colors
  217. else if ( mb_strpos($color, "cmyk") !== false ) {
  218. $i = mb_strpos($color, "(");
  219. $j = mb_strpos($color, ")");
  220. // Bad color value
  221. if ( $i === false || $j === false ) {
  222. return null;
  223. }
  224. $values = explode(",", mb_substr($color, $i+1, $j-$i-1));
  225. if ( count($values) != 4 ) {
  226. return null;
  227. }
  228. foreach ($values as &$c) {
  229. $c = floatval(trim($c));
  230. if ($c > 1.0) $c = 1.0;
  231. if ($c < 0.0) $c = 0.0;
  232. }
  233. return $cache[$color] = self::getArray($values);
  234. }
  235. return null;
  236. }
  237. static function getArray($color) {
  238. $c = array(null, null, null, null, "hex" => null);
  239. if (is_array($color)) {
  240. $c = $color;
  241. $c["c"] = $c[0];
  242. $c["m"] = $c[1];
  243. $c["y"] = $c[2];
  244. $c["k"] = $c[3];
  245. $c["hex"] = "cmyk($c[0],$c[1],$c[2],$c[3])";
  246. }
  247. else {
  248. $c[0] = hexdec(mb_substr($color, 0, 2)) / 0xff;
  249. $c[1] = hexdec(mb_substr($color, 2, 2)) / 0xff;
  250. $c[2] = hexdec(mb_substr($color, 4, 2)) / 0xff;
  251. $c["r"] = $c[0];
  252. $c["g"] = $c[1];
  253. $c["b"] = $c[2];
  254. $c["hex"] = "#$color";
  255. }
  256. return $c;
  257. }
  258. }