package fitnesse.wikitext.parser;
import fitnesse.html.HtmlTag;
import util.Maybe;
import java.util.List;
public class Define extends SymbolType implements Rule, Translation {
public Define() {
super("Define");
wikiMatcher(new Matcher().startLineOrCell().string("!define"));
wikiRule(this);
htmlTranslation(this);
}
public Maybe<Symbol> parse(Symbol current, Parser parser) {
if (!parser.isMoveNext(SymbolType.Whitespace)) return Symbol.nothing;
Maybe<String> name = parser.parseToAsString(SymbolType.Whitespace);
if (name.isNothing()) return Symbol.nothing;
String variableName = name.getValue();
if (!ScanString.isVariableName(variableName)) return Symbol.nothing;
Symbol next = parser.moveNext(1);
SymbolType close = next.closeType();
if (close == SymbolType.Empty) return Symbol.nothing;
Maybe<String> valueString = parser.parseToAsString(close);
if (valueString.isNothing()) return Symbol.nothing;
String variableValue = valueString.getValue();
parser.getPage().putVariable(variableName, variableValue);
return new Maybe<Symbol>(current
.add(variableName)
.add(variableValue));
}
public String toTarget(Translator translator, Symbol symbol) {
HtmlTag result = new HtmlTag("span", "variable defined: "
+ translator.translate(symbol.childAt(0))
+ "="
+ translator.translate(symbol.childAt(1)));
result.addAttribute("class", "meta");
return result.html();
}
}