package fitnesse.wikitext.parser; import java.util.ArrayList; import java.util.Collection; public class WikiBuilder implements Translation { private interface WikiStringBuilder { void build(Translator translator, Symbol symbol, StringBuilder wikiString); } private Collection<WikiStringBuilder> builders = new ArrayList<>(); public WikiBuilder content() { builders.add(new WikiStringBuilder() { @Override public void build(Translator translator, Symbol symbol, StringBuilder wikiString) { wikiString.append(symbol.getContent()); } }); return this; } public WikiBuilder child(final int child) { builders.add(new WikiStringBuilder() { @Override public void build(Translator translator, Symbol symbol, StringBuilder wikiString) { wikiString.append(translator.translate(symbol.childAt(child))); } }); return this; } public WikiBuilder children(final String separator) { builders.add(new WikiStringBuilder() { @Override public void build(Translator translator, Symbol symbol, StringBuilder wikiString) { int count = 0; for (Symbol child: symbol.getChildren()) { if (count > 0) wikiString.append(separator); wikiString.append(translator.translate(child)); count++; } } }); return this; } public WikiBuilder text(final String text) { builders.add(new WikiStringBuilder() { @Override public void build(Translator translator, Symbol symbol, StringBuilder wikiString) { wikiString.append(text); } }); return this; } public WikiBuilder property(final String key, final String value, final String text) { builders.add(new WikiStringBuilder() { @Override public void build(Translator translator, Symbol symbol, StringBuilder wikiString) { if (symbol.getProperty(key, "*none*").equals(value)) wikiString.append(text); } }); return this; } public WikiBuilder property(final String key) { builders.add(new WikiStringBuilder() { @Override public void build(Translator translator, Symbol symbol, StringBuilder wikiString) { if (symbol.hasProperty(key)) wikiString.append(symbol.getProperty(key)); } }); return this; } @Override public String toTarget(Translator translator, Symbol symbol) { StringBuilder result = new StringBuilder(); for (WikiStringBuilder builder: builders) { builder.build(translator, symbol, result); } return result.toString(); } }