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

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

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