You are here

function csstidy_optimise::cut_color in Advanced CSS/JS Aggregation 7

Same name and namespace in other branches
  1. 6 advagg_css_compress/csstidy/class.csstidy_optimise.inc \csstidy_optimise::cut_color()

Color compression function. Converts all rgb() values to #-values and uses the short-form if possible. Also replaces 4 color names by #-values.

@version 1.1

Parameters

string $color:

Return value

string

1 call to csstidy_optimise::cut_color()
csstidy_optimise::subvalue in advagg_css_compress/csstidy/class.csstidy_optimise.inc
Optimises a sub-value @access public @version 1.0

File

advagg_css_compress/csstidy/class.csstidy_optimise.inc, line 283

Class

csstidy_optimise
CSS Optimising Class

Code

function cut_color($color) {
  $replace_colors =& $GLOBALS['csstidy']['replace_colors'];

  // rgb(0,0,0) -> #000000 (or #000 in this case later)
  if (strtolower(substr($color, 0, 4)) === 'rgb(') {
    $color_tmp = substr($color, 4, strlen($color) - 5);
    $color_tmp = explode(',', $color_tmp);
    for ($i = 0; $i < count($color_tmp); $i++) {
      $color_tmp[$i] = trim($color_tmp[$i]);
      if (substr($color_tmp[$i], -1) === '%') {
        $color_tmp[$i] = round(255 * $color_tmp[$i] / 100);
      }
      if ($color_tmp[$i] > 255) {
        $color_tmp[$i] = 255;
      }
    }
    $color = '#';
    for ($i = 0; $i < 3; $i++) {
      if ($color_tmp[$i] < 16) {
        $color .= '0' . dechex($color_tmp[$i]);
      }
      else {
        $color .= dechex($color_tmp[$i]);
      }
    }
  }

  // Fix bad color names
  if (isset($replace_colors[strtolower($color)])) {
    $color = $replace_colors[strtolower($color)];
  }

  // #aabbcc -> #abc
  if (strlen($color) == 7) {
    $color_temp = strtolower($color);
    if ($color_temp[0] === '#' && $color_temp[1] == $color_temp[2] && $color_temp[3] == $color_temp[4] && $color_temp[5] == $color_temp[6]) {
      $color = '#' . $color[1] . $color[3] . $color[5];
    }
  }
  switch (strtolower($color)) {

    /* color name -> hex code */
    case 'black':
      return '#000';
    case 'fuchsia':
      return '#f0f';
    case 'white':
      return '#fff';
    case 'yellow':
      return '#ff0';

    /* hex code -> color name */
    case '#800000':
      return 'maroon';
    case '#ffa500':
      return 'orange';
    case '#808000':
      return 'olive';
    case '#800080':
      return 'purple';
    case '#008000':
      return 'green';
    case '#000080':
      return 'navy';
    case '#008080':
      return 'teal';
    case '#c0c0c0':
      return 'silver';
    case '#808080':
      return 'gray';
    case '#f00':
      return 'red';
  }
  return $color;
}