function loop_color_range() { $args = func_get_args(); $source_colors = array(); while ($args && ($color = Color::parse($args[0]))) { $source_colors[] = $color; array_shift($args); } $steps = max(1, isset($args[0]) ? (int) $args[0] : 1); $generated_colors = array(); foreach ($source_colors as $index => $source_color) { $generated_colors[] = new Color($source_color); // Generate the in-between colors. $next_source_color = isset($source_colors[$index + 1]) ? $source_colors[$index + 1] : null; if (!$next_source_color) { break; } for ($i = 0; $i < $steps; $i++) { $rgba = array(); foreach ($source_color as $component_index => $component_value) { if ($component_diff = $next_source_color[$component_index] - $component_value) { $component_step = $component_diff / ($steps + 1); $rgba[] = min(round($component_value + $component_step * ($i + 1), 2), 255); } else { $rgba[] = $component_value; } } $generated_colors[] = new Color($rgba); } } return $generated_colors; }
function color_capture($process) { $captured_keywords = $process->string->captureDirectives('color', array('singles' => true)); if ($captured_keywords) { $native_keywords = Color::getKeywords(); $custom_keywords = array(); $process->colorKeywords = $native_keywords; foreach ($captured_keywords as $key => $value) { $value = $process->functions->apply($value); if (!isset($native_keywords[$key]) && ($rgba = Color::parse($value))) { $custom_keywords[] = $key; $process->stat['colors'][$key] = new Color($rgba); $process->colorKeywords[$key] = $rgba; } } if ($custom_keywords) { $GLOBALS['CSSCRUSH_COLOR_PATT'] = Regex::make('~{{ LB }}(?<color_keyword>' . implode('|', $custom_keywords) . '){{ RB }}~iS'); } } }