package com.github.sommeri.less4j.core.compiler.expressions; import java.util.List; import java.util.Map; import com.github.sommeri.less4j.core.ast.Expression; import com.github.sommeri.less4j.core.ast.FunctionExpression; import com.github.sommeri.less4j.core.problems.ProblemsHandler; public abstract class BuiltInFunctionsPack implements FunctionsPackage { private final ProblemsHandler problemsHandler; public BuiltInFunctionsPack(ProblemsHandler problemsHandler) { this.problemsHandler = problemsHandler; } @Override public final boolean canEvaluate(FunctionExpression input, List<Expression> parameters) { return getFunctions().containsKey(normalizeName(input)); } @Override public final Expression evaluate(FunctionExpression input, List<Expression> parameters, Expression evaluatedParameter) { if (!canEvaluate(input, parameters)) return input; Function function = getFunctions().get(normalizeName(input)); return function.evaluate(parameters, problemsHandler, input, evaluatedParameter); } protected abstract Map<String, Function> getFunctions(); private String normalizeName(FunctionExpression input) { return input.getName().toLowerCase(); } }