package fitnesse.wikitext.parser;
public class Variable extends SymbolType implements Rule, Translation {
public static final Variable symbolType = new Variable();
public Variable() {
super("Variable");
wikiMatcher(new Matcher().string("${"));
wikiRule(this);
htmlTranslation(this);
}
@Override
public Maybe<Symbol> parse(Symbol current, Parser parser) {
Maybe<String> name = parser.parseToAsString(SymbolType.CloseBrace);
if (name.isNothing() || name.getValue().isEmpty()) return Symbol.nothing;
String variableName = name.getValue();
if (!ScanString.isVariableName(variableName)) return Symbol.nothing;
current.add(variableName);
Maybe<String> variableValue = parser.getVariableSource().findVariable(variableName);
if (variableValue.isNothing()) {
current.add(new Symbol(SymbolType.Meta).add("undefined variable: " + variableName));
}
else {
Symbol variableValueSymbol = parser.parseWithParent(variableValue.getValue(), null);
current.add(variableValueSymbol);
}
return new Maybe<>(current);
}
@Override
public String toTarget(Translator translator, Symbol symbol) {
return translator.translate(symbol.childAt(1));
}
}