All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fitnesse.wikitext.parser.WikiBuilder Maven / Gradle / Ivy

There is a newer version: 20250223
Show newest version
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 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();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy