evaluateColorFunctions function

String evaluateColorFunctions(
  1. String expr
)

Evaluates every supported colour function in expr, innermost first.

A color-mix() that cannot be evaluated is rebuilt around its own resolved body, so its inner var() references still come out substituted.

Implementation

String evaluateColorFunctions(String expr) {
  const marker = 'color-mix(';
  final idx = expr.indexOf(marker);
  if (idx == -1) return expr;

  final openIndex = idx + 'color-mix'.length;
  final closeIndex = _findMatchingParen(expr, openIndex);
  if (closeIndex == -1) return expr;

  final body = evaluateColorFunctions(
    expr.substring(openIndex + 1, closeIndex),
  );
  final replacement = evaluateColorMix(body) ?? 'color-mix($body)';

  return expr.substring(0, idx) +
      replacement +
      evaluateColorFunctions(expr.substring(closeIndex + 1));
}