package org.jboss.seam.wiki.core.wikitext.renderer; import org.jboss.seam.wiki.core.wikitext.engine.WikiLink; import org.jboss.seam.wiki.core.model.WikiTextMacro; import org.jboss.seam.wiki.core.ui.WikiURLRenderer; import org.jboss.seam.Component; import java.util.List; import java.util.regex.Pattern; import java.util.regex.Matcher; /** * Convenience class that renders some sensible defaults that apply for the wiki. * * @author Christian Bauer */ public class DefaultWikiTextRenderer implements WikiTextRenderer { public static final Pattern PREFORMATTED_OPTIONS_PATTERN = Pattern.compile("^\\[(.+?)\\]\\n(?s)(.*)"); protected WikiURLRenderer wikiURLRenderer = (WikiURLRenderer) Component.getInstance(WikiURLRenderer.class); public static enum Headline { H1, H2, H3, H4 } public String renderInternalLink(WikiLink internalLink) { return !internalLink.isBroken() ? "<a href=\"" + wikiURLRenderer.renderURL(internalLink.getFile()) + "\">" + internalLink.getDescription() + "</a>" : "[Broken Link]"; } public String renderExternalLink(WikiLink externalLink) { return "<a href=\"" + externalLink.getUrl() + "\">" + externalLink.getDescription() + "</a>"; } public String renderFileAttachmentLink(int attachmentNumber, WikiLink attachmentLink) { return "[Attachment]"; } public String renderThumbnailImageLink(WikiLink link) { return "[Embedded Image]"; } public String renderMacro(WikiTextMacro macro) { return "[Macro]"; } public void setAttachmentLinks(List<WikiLink> attachmentLinks) {} public void setExternalLinks(List<WikiLink> externalLinks) {} public String renderParagraphOpenTag() { return "<p class=\"wikiPara\">\n"; } public String preformattedText(String text) { String styleClass = "wikiPreformatted"; Matcher m = PREFORMATTED_OPTIONS_PATTERN.matcher(text); if (m.matches()) { styleClass = styleClass + " " + m.group(1); text = m.group(2); } return "<pre class=\""+styleClass+"\">" + text + "</pre>\n"; } public String renderBlockquoteOpenTag() { return "<blockquote class=\"wikiBlockquote\">\n"; } public String renderHeadline1(String headline) { return "<h1 class=\"wikiHeadline1\" id=\""+getHeadlineId(Headline.H1, headline)+"\">" + getHeadlineLink(Headline.H1, headline) + "</h1>"; } public String renderHeadline2(String headline) { return "<h2 class=\"wikiHeadline2\" id=\""+getHeadlineId(Headline.H2, headline)+"\">" + getHeadlineLink(Headline.H2, headline) + "</h2>"; } public String renderHeadline3(String headline) { return "<h3 class=\"wikiHeadline3\" id=\""+getHeadlineId(Headline.H3, headline)+"\">" + getHeadlineLink(Headline.H3, headline) + "</h3>"; } public String renderHeadline4(String headline) { return "<h4 class=\"wikiHeadline4\" id=\""+getHeadlineId(Headline.H4, headline)+"\">" + getHeadlineLink(Headline.H4, headline) + "</h4>"; } public String renderOrderedListOpenTag() { return "<ol class=\"wikiOrderedList\">\n"; } public String renderOrderedListItemOpenTag() { return "<li class=\"wikiOrderedListItem\">"; } public String renderUnorderedListOpenTag() { return "<ul class=\"wikiUnorderedList\">\n"; } public String renderUnorderedListItemOpenTag() { return "<li class=\"wikiUnorderedListItem\">"; } public String renderEmphasisOpenTag() { return "<i class=\"wikiEmphasis\">"; } public String renderEmphasisCloseTag() { return "</i>"; } protected String getHeadlineId(Headline h, String headline) { return ""; } protected String getHeadlineLink(Headline h, String headline) { return headline; } }