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

info.bliki.wiki.tags.RefTag Maven / Gradle / Ivy

The newest version!
package info.bliki.wiki.tags;

import info.bliki.htmlcleaner.TagNode;
import info.bliki.wiki.filter.Encoder;
import info.bliki.wiki.filter.ITextConverter;
import info.bliki.wiki.model.IWikiModel;
import info.bliki.wiki.tags.util.IBodyTag;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * Wiki tag for references <ref>reference text...</ref>
 *
 * See Footnotes
 */
public class RefTag extends HTMLTag implements IBodyTag {

    public RefTag() {
        super("ref");
    }

    @Override
    public void renderHTML(ITextConverter converter, Appendable writer, IWikiModel model) throws IOException {
        TagNode node = this;
        List children = node.getChildren();
        int len = children.size();
        len = len == 0 ? 16 : len * 64;
        StringBuilder buf = new StringBuilder(len);
        renderHTMLWithoutTag(converter, buf, model);
        Map map = getAttributes();
        String value = map.get("name");
        String reference = buf.toString();
        String[] offset = model.addToReferences(reference, value);
        if (null == value) {
            value = offset[0];
        }
        String ref = (null == offset[1]) ? offset[0] : offset[1];

        writer.append("[");
        writer.append(offset[0]);
        writer.append("]");
    }

    @Override
    public boolean isReduceTokenStack() {
        return false;
    }
}