
fitnesse.wikitext.parser.HashTable Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fitnesse Show documentation
Show all versions of fitnesse Show documentation
The fully integrated standalone wiki, and acceptance testing framework.
package fitnesse.wikitext.parser;
import fitnesse.html.HtmlTag;
public class HashTable extends SymbolType implements Rule, Translation {
private static final SymbolType[] terminators = new SymbolType[] {SymbolType.Colon, SymbolType.Comma, SymbolType.CloseBrace};
public HashTable() {
super("HashTable");
wikiMatcher(new Matcher().string("!{"));
wikiRule(this);
htmlTranslation(this);
}
@Override
public Maybe parse(Symbol current, Parser parser) {
while (true) {
Symbol row = new Symbol(SymbolType.SymbolList);
current.add(row);
for (int i = 0; i < 2; i++) {
Symbol cell = parser.parseToIgnoreFirst(terminators);
if (parser.atEnd() || cell.getChildren().isEmpty()) return Symbol.nothing;
row.add(cell);
}
if (parser.getCurrent().isType(SymbolType.CloseBrace)) break;
}
return new Maybe<>(current);
}
private static final String[] cellClasses = {"hash_key", "hash_value"};
@Override
public String toTarget(Translator translator, Symbol symbol) {
HtmlTag table = new HtmlTag("table");
table.addAttribute("class", "hash_table");
for (Symbol child: symbol.getChildren()) {
HtmlTag row = new HtmlTag("tr");
row.addAttribute("class", "hash_row");
table.add(row);
for (int i = 0; i < 2; i++) {
String body = translator.translate(child.childAt(i));
HtmlTag cell = new HtmlTag("td", body.trim());
cell.addAttribute("class", cellClasses[i]);
row.add(cell);
}
}
return table.html();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy