package fitnesse.wikitext.parser;
import util.FormattedExpression;
import util.Maybe;
public class Evaluator extends SymbolType implements Rule, Translation {
public static final Evaluator symbolType = new Evaluator();
public Evaluator() {
super("Evaluator");
wikiMatcher(new Matcher().string("${="));
wikiRule(this);
htmlTranslation(this);
}
public Maybe<Symbol> parse(Symbol current, Parser parser) {
Symbol body = parser.parseTo(SymbolType.CloseEvaluator);
if (parser.atEnd()) return Symbol.nothing;
return new Maybe<Symbol>(current.add(body));
}
public String toTarget(Translator translator, Symbol symbol) {
String body = translator.translate(symbol.childAt(0));
Maybe<String> result = new FormattedExpression(body).evaluate();
if (result.isNothing()) return translator.formatMessage(result.because());
return result.getValue();
}
}