/framework/vendor/zend/Zend/Pdf/Color/Html.php

http://zoop.googlecode.com/ · PHP · 412 lines · 331 code · 12 blank · 69 comment · 13 complexity · 6d733b74b820b5fb9022d00c8ccfc29d MD5 · raw file

  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Pdf
  17. * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  18. * @license http://framework.zend.com/license/new-bsd New BSD License
  19. * @version $Id: Html.php 20096 2010-01-06 02:05:09Z bkarwin $
  20. */
  21. /** Zend_Pdf_Color */
  22. require_once 'Zend/Pdf/Color.php';
  23. /**
  24. * HTML color implementation
  25. *
  26. * Factory class which vends Zend_Pdf_Color objects from typical HTML
  27. * representations.
  28. *
  29. * @category Zend
  30. * @package Zend_Pdf
  31. * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  32. * @license http://framework.zend.com/license/new-bsd New BSD License
  33. */
  34. class Zend_Pdf_Color_Html extends Zend_Pdf_Color
  35. {
  36. /**
  37. * Color
  38. *
  39. * @var Zend_Pdf_Color
  40. */
  41. private $_color;
  42. /**
  43. * Class constructor.
  44. *
  45. * @param mixed $color
  46. * @throws Zend_Pdf_Exception
  47. */
  48. public function __construct($color)
  49. {
  50. $this->_color = self::color($color);
  51. }
  52. /**
  53. * Instructions, which can be directly inserted into content stream
  54. * to switch color.
  55. * Color set instructions differ for stroking and nonstroking operations.
  56. *
  57. * @param boolean $stroking
  58. * @return string
  59. */
  60. public function instructions($stroking)
  61. {
  62. return $this->_color->instructions($stroking);
  63. }
  64. /**
  65. * Get color components (color space dependent)
  66. *
  67. * @return array
  68. */
  69. public function getComponents()
  70. {
  71. return $this->_color->getComponents();
  72. }
  73. /**
  74. * Creates a Zend_Pdf_Color object from the HTML representation.
  75. *
  76. * @param string $color May either be a hexidecimal number of the form
  77. * #rrggbb or one of the 140 well-known names (black, white, blue, etc.)
  78. * @return Zend_Pdf_Color
  79. */
  80. public static function color($color)
  81. {
  82. $pattern = '/^#([A-Fa-f0-9]{2})([A-Fa-f0-9]{2})([A-Fa-f0-9]{2})$/';
  83. if (preg_match($pattern, $color, $matches)) {
  84. $r = round((hexdec($matches[1]) / 255), 3);
  85. $g = round((hexdec($matches[2]) / 255), 3);
  86. $b = round((hexdec($matches[3]) / 255), 3);
  87. if (($r == $g) && ($g == $b)) {
  88. require_once 'Zend/Pdf/Color/GrayScale.php';
  89. return new Zend_Pdf_Color_GrayScale($r);
  90. } else {
  91. require_once 'Zend/Pdf/Color/Rgb.php';
  92. return new Zend_Pdf_Color_Rgb($r, $g, $b);
  93. }
  94. } else {
  95. return Zend_Pdf_Color_Html::namedColor($color);
  96. }
  97. }
  98. /**
  99. * Creates a Zend_Pdf_Color object from the named color.
  100. *
  101. * @param string $color One of the 140 well-known color names (black, white,
  102. * blue, etc.)
  103. * @return Zend_Pdf_Color
  104. */
  105. public static function namedColor($color)
  106. {
  107. switch (strtolower($color)) {
  108. case 'aqua':
  109. $r = 0.0; $g = 1.0; $b = 1.0; break;
  110. case 'black':
  111. $r = 0.0; $g = 0.0; $b = 0.0; break;
  112. case 'blue':
  113. $r = 0.0; $g = 0.0; $b = 1.0; break;
  114. case 'fuchsia':
  115. $r = 1.0; $g = 0.0; $b = 1.0; break;
  116. case 'gray':
  117. $r = 0.502; $g = 0.502; $b = 0.502; break;
  118. case 'green':
  119. $r = 0.0; $g = 0.502; $b = 0.0; break;
  120. case 'lime':
  121. $r = 0.0; $g = 1.0; $b = 0.0; break;
  122. case 'maroon':
  123. $r = 0.502; $g = 0.0; $b = 0.0; break;
  124. case 'navy':
  125. $r = 0.0; $g = 0.0; $b = 0.502; break;
  126. case 'olive':
  127. $r = 0.502; $g = 0.502; $b = 0.0; break;
  128. case 'purple':
  129. $r = 0.502; $g = 0.0; $b = 0.502; break;
  130. case 'red':
  131. $r = 1.0; $g = 0.0; $b = 0.0; break;
  132. case 'silver':
  133. $r = 0.753; $g = 0.753; $b = 0.753; break;
  134. case 'teal':
  135. $r = 0.0; $g = 0.502; $b = 0.502; break;
  136. case 'white':
  137. $r = 1.0; $g = 1.0; $b = 1.0; break;
  138. case 'yellow':
  139. $r = 1.0; $g = 1.0; $b = 0.0; break;
  140. case 'aliceblue':
  141. $r = 0.941; $g = 0.973; $b = 1.0; break;
  142. case 'antiquewhite':
  143. $r = 0.980; $g = 0.922; $b = 0.843; break;
  144. case 'aquamarine':
  145. $r = 0.498; $g = 1.0; $b = 0.831; break;
  146. case 'azure':
  147. $r = 0.941; $g = 1.0; $b = 1.0; break;
  148. case 'beige':
  149. $r = 0.961; $g = 0.961; $b = 0.863; break;
  150. case 'bisque':
  151. $r = 1.0; $g = 0.894; $b = 0.769; break;
  152. case 'blanchedalmond':
  153. $r = 1.0; $g = 1.0; $b = 0.804; break;
  154. case 'blueviolet':
  155. $r = 0.541; $g = 0.169; $b = 0.886; break;
  156. case 'brown':
  157. $r = 0.647; $g = 0.165; $b = 0.165; break;
  158. case 'burlywood':
  159. $r = 0.871; $g = 0.722; $b = 0.529; break;
  160. case 'cadetblue':
  161. $r = 0.373; $g = 0.620; $b = 0.627; break;
  162. case 'chartreuse':
  163. $r = 0.498; $g = 1.0; $b = 0.0; break;
  164. case 'chocolate':
  165. $r = 0.824; $g = 0.412; $b = 0.118; break;
  166. case 'coral':
  167. $r = 1.0; $g = 0.498; $b = 0.314; break;
  168. case 'cornflowerblue':
  169. $r = 0.392; $g = 0.584; $b = 0.929; break;
  170. case 'cornsilk':
  171. $r = 1.0; $g = 0.973; $b = 0.863; break;
  172. case 'crimson':
  173. $r = 0.863; $g = 0.078; $b = 0.235; break;
  174. case 'cyan':
  175. $r = 0.0; $g = 1.0; $b = 1.0; break;
  176. case 'darkblue':
  177. $r = 0.0; $g = 0.0; $b = 0.545; break;
  178. case 'darkcyan':
  179. $r = 0.0; $g = 0.545; $b = 0.545; break;
  180. case 'darkgoldenrod':
  181. $r = 0.722; $g = 0.525; $b = 0.043; break;
  182. case 'darkgray':
  183. $r = 0.663; $g = 0.663; $b = 0.663; break;
  184. case 'darkgreen':
  185. $r = 0.0; $g = 0.392; $b = 0.0; break;
  186. case 'darkkhaki':
  187. $r = 0.741; $g = 0.718; $b = 0.420; break;
  188. case 'darkmagenta':
  189. $r = 0.545; $g = 0.0; $b = 0.545; break;
  190. case 'darkolivegreen':
  191. $r = 0.333; $g = 0.420; $b = 0.184; break;
  192. case 'darkorange':
  193. $r = 1.0; $g = 0.549; $b = 0.0; break;
  194. case 'darkorchid':
  195. $r = 0.6; $g = 0.196; $b = 0.8; break;
  196. case 'darkred':
  197. $r = 0.545; $g = 0.0; $b = 0.0; break;
  198. case 'darksalmon':
  199. $r = 0.914; $g = 0.588; $b = 0.478; break;
  200. case 'darkseagreen':
  201. $r = 0.561; $g = 0.737; $b = 0.561; break;
  202. case 'darkslateblue':
  203. $r = 0.282; $g = 0.239; $b = 0.545; break;
  204. case 'darkslategray':
  205. $r = 0.184; $g = 0.310; $b = 0.310; break;
  206. case 'darkturquoise':
  207. $r = 0.0; $g = 0.808; $b = 0.820; break;
  208. case 'darkviolet':
  209. $r = 0.580; $g = 0.0; $b = 0.827; break;
  210. case 'deeppink':
  211. $r = 1.0; $g = 0.078; $b = 0.576; break;
  212. case 'deepskyblue':
  213. $r = 0.0; $g = 0.749; $b = 1.0; break;
  214. case 'dimgray':
  215. $r = 0.412; $g = 0.412; $b = 0.412; break;
  216. case 'dodgerblue':
  217. $r = 0.118; $g = 0.565; $b = 1.0; break;
  218. case 'firebrick':
  219. $r = 0.698; $g = 0.133; $b = 0.133; break;
  220. case 'floralwhite':
  221. $r = 1.0; $g = 0.980; $b = 0.941; break;
  222. case 'forestgreen':
  223. $r = 0.133; $g = 0.545; $b = 0.133; break;
  224. case 'gainsboro':
  225. $r = 0.863; $g = 0.863; $b = 0.863; break;
  226. case 'ghostwhite':
  227. $r = 0.973; $g = 0.973; $b = 1.0; break;
  228. case 'gold':
  229. $r = 1.0; $g = 0.843; $b = 0.0; break;
  230. case 'goldenrod':
  231. $r = 0.855; $g = 0.647; $b = 0.125; break;
  232. case 'greenyellow':
  233. $r = 0.678; $g = 1.0; $b = 0.184; break;
  234. case 'honeydew':
  235. $r = 0.941; $g = 1.0; $b = 0.941; break;
  236. case 'hotpink':
  237. $r = 1.0; $g = 0.412; $b = 0.706; break;
  238. case 'indianred':
  239. $r = 0.804; $g = 0.361; $b = 0.361; break;
  240. case 'indigo':
  241. $r = 0.294; $g = 0.0; $b = 0.510; break;
  242. case 'ivory':
  243. $r = 1.0; $g = 0.941; $b = 0.941; break;
  244. case 'khaki':
  245. $r = 0.941; $g = 0.902; $b = 0.549; break;
  246. case 'lavender':
  247. $r = 0.902; $g = 0.902; $b = 0.980; break;
  248. case 'lavenderblush':
  249. $r = 1.0; $g = 0.941; $b = 0.961; break;
  250. case 'lawngreen':
  251. $r = 0.486; $g = 0.988; $b = 0.0; break;
  252. case 'lemonchiffon':
  253. $r = 1.0; $g = 0.980; $b = 0.804; break;
  254. case 'lightblue':
  255. $r = 0.678; $g = 0.847; $b = 0.902; break;
  256. case 'lightcoral':
  257. $r = 0.941; $g = 0.502; $b = 0.502; break;
  258. case 'lightcyan':
  259. $r = 0.878; $g = 1.0; $b = 1.0; break;
  260. case 'lightgoldenrodyellow':
  261. $r = 0.980; $g = 0.980; $b = 0.824; break;
  262. case 'lightgreen':
  263. $r = 0.565; $g = 0.933; $b = 0.565; break;
  264. case 'lightgrey':
  265. $r = 0.827; $g = 0.827; $b = 0.827; break;
  266. case 'lightpink':
  267. $r = 1.0; $g = 0.714; $b = 0.757; break;
  268. case 'lightsalmon':
  269. $r = 1.0; $g = 0.627; $b = 0.478; break;
  270. case 'lightseagreen':
  271. $r = 0.125; $g = 0.698; $b = 0.667; break;
  272. case 'lightskyblue':
  273. $r = 0.529; $g = 0.808; $b = 0.980; break;
  274. case 'lightslategray':
  275. $r = 0.467; $g = 0.533; $b = 0.6; break;
  276. case 'lightsteelblue':
  277. $r = 0.690; $g = 0.769; $b = 0.871; break;
  278. case 'lightyellow':
  279. $r = 1.0; $g = 1.0; $b = 0.878; break;
  280. case 'limegreen':
  281. $r = 0.196; $g = 0.804; $b = 0.196; break;
  282. case 'linen':
  283. $r = 0.980; $g = 0.941; $b = 0.902; break;
  284. case 'magenta':
  285. $r = 1.0; $g = 0.0; $b = 1.0; break;
  286. case 'mediumaquamarine':
  287. $r = 0.4; $g = 0.804; $b = 0.667; break;
  288. case 'mediumblue':
  289. $r = 0.0; $g = 0.0; $b = 0.804; break;
  290. case 'mediumorchid':
  291. $r = 0.729; $g = 0.333; $b = 0.827; break;
  292. case 'mediumpurple':
  293. $r = 0.576; $g = 0.439; $b = 0.859; break;
  294. case 'mediumseagreen':
  295. $r = 0.235; $g = 0.702; $b = 0.443; break;
  296. case 'mediumslateblue':
  297. $r = 0.482; $g = 0.408; $b = 0.933; break;
  298. case 'mediumspringgreen':
  299. $r = 0.0; $g = 0.980; $b = 0.604; break;
  300. case 'mediumturquoise':
  301. $r = 0.282; $g = 0.820; $b = 0.8; break;
  302. case 'mediumvioletred':
  303. $r = 0.780; $g = 0.082; $b = 0.522; break;
  304. case 'midnightblue':
  305. $r = 0.098; $g = 0.098; $b = 0.439; break;
  306. case 'mintcream':
  307. $r = 0.961; $g = 1.0; $b = 0.980; break;
  308. case 'mistyrose':
  309. $r = 1.0; $g = 0.894; $b = 0.882; break;
  310. case 'moccasin':
  311. $r = 1.0; $g = 0.894; $b = 0.710; break;
  312. case 'navajowhite':
  313. $r = 1.0; $g = 0.871; $b = 0.678; break;
  314. case 'oldlace':
  315. $r = 0.992; $g = 0.961; $b = 0.902; break;
  316. case 'olivedrab':
  317. $r = 0.420; $g = 0.557; $b = 0.137; break;
  318. case 'orange':
  319. $r = 1.0; $g = 0.647; $b = 0.0; break;
  320. case 'orangered':
  321. $r = 1.0; $g = 0.271; $b = 0.0; break;
  322. case 'orchid':
  323. $r = 0.855; $g = 0.439; $b = 0.839; break;
  324. case 'palegoldenrod':
  325. $r = 0.933; $g = 0.910; $b = 0.667; break;
  326. case 'palegreen':
  327. $r = 0.596; $g = 0.984; $b = 0.596; break;
  328. case 'paleturquoise':
  329. $r = 0.686; $g = 0.933; $b = 0.933; break;
  330. case 'palevioletred':
  331. $r = 0.859; $g = 0.439; $b = 0.576; break;
  332. case 'papayawhip':
  333. $r = 1.0; $g = 0.937; $b = 0.835; break;
  334. case 'peachpuff':
  335. $r = 1.0; $g = 0.937; $b = 0.835; break;
  336. case 'peru':
  337. $r = 0.804; $g = 0.522; $b = 0.247; break;
  338. case 'pink':
  339. $r = 1.0; $g = 0.753; $b = 0.796; break;
  340. case 'plum':
  341. $r = 0.867; $g = 0.627; $b = 0.867; break;
  342. case 'powderblue':
  343. $r = 0.690; $g = 0.878; $b = 0.902; break;
  344. case 'rosybrown':
  345. $r = 0.737; $g = 0.561; $b = 0.561; break;
  346. case 'royalblue':
  347. $r = 0.255; $g = 0.412; $b = 0.882; break;
  348. case 'saddlebrown':
  349. $r = 0.545; $g = 0.271; $b = 0.075; break;
  350. case 'salmon':
  351. $r = 0.980; $g = 0.502; $b = 0.447; break;
  352. case 'sandybrown':
  353. $r = 0.957; $g = 0.643; $b = 0.376; break;
  354. case 'seagreen':
  355. $r = 0.180; $g = 0.545; $b = 0.341; break;
  356. case 'seashell':
  357. $r = 1.0; $g = 0.961; $b = 0.933; break;
  358. case 'sienna':
  359. $r = 0.627; $g = 0.322; $b = 0.176; break;
  360. case 'skyblue':
  361. $r = 0.529; $g = 0.808; $b = 0.922; break;
  362. case 'slateblue':
  363. $r = 0.416; $g = 0.353; $b = 0.804; break;
  364. case 'slategray':
  365. $r = 0.439; $g = 0.502; $b = 0.565; break;
  366. case 'snow':
  367. $r = 1.0; $g = 0.980; $b = 0.980; break;
  368. case 'springgreen':
  369. $r = 0.0; $g = 1.0; $b = 0.498; break;
  370. case 'steelblue':
  371. $r = 0.275; $g = 0.510; $b = 0.706; break;
  372. case 'tan':
  373. $r = 0.824; $g = 0.706; $b = 0.549; break;
  374. case 'thistle':
  375. $r = 0.847; $g = 0.749; $b = 0.847; break;
  376. case 'tomato':
  377. $r = 0.992; $g = 0.388; $b = 0.278; break;
  378. case 'turquoise':
  379. $r = 0.251; $g = 0.878; $b = 0.816; break;
  380. case 'violet':
  381. $r = 0.933; $g = 0.510; $b = 0.933; break;
  382. case 'wheat':
  383. $r = 0.961; $g = 0.871; $b = 0.702; break;
  384. case 'whitesmoke':
  385. $r = 0.961; $g = 0.961; $b = 0.961; break;
  386. case 'yellowgreen':
  387. $r = 0.604; $g = 0.804; $b = 0.196; break;
  388. default:
  389. require_once 'Zend/Pdf/Exception.php';
  390. throw new Zend_Pdf_Exception('Unknown color name: ' . $color);
  391. }
  392. if (($r == $g) && ($g == $b)) {
  393. require_once 'Zend/Pdf/Color/GrayScale.php';
  394. return new Zend_Pdf_Color_GrayScale($r);
  395. } else {
  396. require_once 'Zend/Pdf/Color/Rgb.php';
  397. return new Zend_Pdf_Color_Rgb($r, $g, $b);
  398. }
  399. }
  400. }