/* * Thanks to Bent Andre Solheim for the improved header rendering. */ package net.sourceforge.phpeclipse.wiki.renderer; import java.io.IOException; import java.io.StringWriter; import net.sourceforge.phpeclipse.wiki.builder.BuilderRenderEngine; import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin; import org.eclipse.core.resources.IProject; import org.radeox.api.engine.RenderEngine; import org.radeox.api.engine.context.InitialRenderContext; import org.radeox.engine.context.BaseInitialRenderContext; import org.radeox.macro.MacroRepository; public final class WikipediaContentRenderer extends AbstractContentRenderer { public static final String BULLET_MARKUP = "*"; public static final String ALT_BULLET_MARKUP = "-"; protected InitialRenderContext context; protected BuilderRenderEngine engine; protected void initialise() { } protected void appendHeader(String line) { String header = getHeaderText(line); String headerStartTag = "

"; getBuffer().append(headerStartTag); getBuffer().append(header); getBuffer().append("

"); } private int getHeaderSize(String line) { int size = 0; int index = 0; while (index < line.length() && line.charAt(index) != ' ') { if (line.charAt(index) == '1') { size++; } index++; } return size; } private String getHeaderCss(int size) { int max = Math.min(3, size); StringBuffer css = new StringBuffer(); css.append("class=\"").append("heading"); for (int i = 0; i < max; i++) { css.append("-1"); } css.append("\""); return css.toString(); } protected String getHeaderText(String line) { return line.substring(line.indexOf(' ')).trim(); } protected int getListDepth(String line) { char bullet = getBullet(line); for (int i = 0; i < line.length(); i++) { if (line.charAt(i) != bullet) { return i; } } return line.length(); } private char getBullet(String line) { char bullet = line.startsWith(WikipediaContentRenderer.BULLET_MARKUP) ? WikipediaContentRenderer.BULLET_MARKUP.charAt(0) : WikipediaContentRenderer.ALT_BULLET_MARKUP.charAt(0); return bullet; } protected boolean isHeader(String line) { return line.startsWith("1") && line.indexOf(' ') > 0; } protected boolean isList(String line) { return !line.trim().equals("----") && (line.startsWith(WikipediaContentRenderer.BULLET_MARKUP) || line.startsWith(WikipediaContentRenderer.ALT_BULLET_MARKUP)); } protected boolean process(String line) { if (line.trim().matches("^----*$")) { appendHR(); return true; } return false; } protected String processTags(String line) { line = line.replaceAll("\\\\", "
"); line = extractMacroMarkup(line); line = replacePair(line, "__", "", ""); line = replacePair(line, "~~", "", ""); line = replacePair(line, "--", "", ""); return line; } private String extractMacroMarkup(String line) { return line.replaceAll("\\{.*?\\}", ""); } protected String getListtext(String line) { return line.substring(getListDepth(line)).trim(); } protected String getTableTag() { return ""; } public final void render(String content, StringBuffer buf, int level, boolean completeHTMLPage) { try { buffer = buf; if (completeHTMLPage) { appendHeader(); } StringWriter writer = new StringWriter(); try { engine.setLevel(level); engine.render(writer, content, context); buffer.append(writer); } catch (IOException e) { // never reach } if (completeHTMLPage) { appendFooter(); } // return buffer.toString(); } catch (Exception e) { WikiEditorPlugin.getDefault().log(buffer.toString()); WikiEditorPlugin.getDefault().log(e.getLocalizedMessage(), e); // return "

" + e.getLocalizedMessage() + "

"; } } /* * (non-Javadoc) * * @see net.sourceforge.phpeclipse.wiki.renderer.IContentRenderer#setProject(org.eclipse.core.resources.IProject) */ public void setProject(IProject project) { super.setProject(project); context = new BaseInitialRenderContext(); engine = new BuilderRenderEngine(project, context); context.setRenderEngine(engine); MacroRepository repository = MacroRepository.getInstance(); repository.setInitialContext(context); } }