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