protected function op_color_color($op, $left, $right)
{
$out = array('color');
foreach (range(1, 3) as $i) {
$lval = isset($left[$i]) ? $left[$i] : 0;
$rval = isset($right[$i]) ? $right[$i] : 0;
switch ($op) {
case '+':
$out[] = $lval + $rval;
break;
case '-':
$out[] = $lval - $rval;
break;
case '*':
$out[] = $lval * $rval;
break;
case '%':
$out[] = $lval % $rval;
break;
case '/':
if ($rval == 0) {
$this->throwError("color: Can't divide by zero");
}
$out[] = $lval / $rval;
break;
case "==":
return $this->op_eq($left, $right);
case "!=":
return $this->op_neq($left, $right);
default:
$this->throwError("color: unknown op {$op}");
}
}
if (isset($left[4])) {
$out[4] = $left[4];
} elseif (isset($right[4])) {
$out[4] = $right[4];
}
return $this->fixColor($out);
}