package com.niklim.clicktrace.service;
import java.io.StringReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xwiki.component.embed.EmbeddableComponentManager;
import org.xwiki.rendering.converter.Converter;
import org.xwiki.rendering.renderer.printer.DefaultWikiPrinter;
import org.xwiki.rendering.renderer.printer.WikiPrinter;
import org.xwiki.rendering.syntax.Syntax;
import com.niklim.clicktrace.props.UserProperties.MarkupSyntax;
/**
* Transforms Markup to HTML. See {@link MarkupSyntax} for supported syntax.
*/
public class MarkupParser {
private static final Logger log = LoggerFactory.getLogger(MarkupParser.class);
private static EmbeddableComponentManager componentManager = new EmbeddableComponentManager();
static {
componentManager.initialize(Thread.currentThread().getContextClassLoader());
}
private MarkupSyntax syntax;
public MarkupParser(MarkupSyntax syntax) {
this.syntax = syntax;
}
public String toHtml(String markup) {
if (syntax == MarkupSyntax.MARKDOWN) {
return convertMarkup(markup, Syntax.MARKDOWN_1_0);
} else if (syntax == MarkupSyntax.CONFLUENCE) {
return convertMarkup(markup, Syntax.CONFLUENCE_1_0);
} else {
log.error("Unknown Markup syntax '{}'", syntax);
return markup;
}
}
private String convertMarkup(String markup, Syntax sourceSyntax) {
WikiPrinter printer = new DefaultWikiPrinter();
try {
Converter converter = componentManager.getInstance(Converter.class);
converter.convert(new StringReader(markup), sourceSyntax, Syntax.XHTML_1_0, printer);
} catch (Exception e) {
log.error(sourceSyntax.getType().getName() + " markup conversion error.", e);
return markup;
}
return printer.toString();
}
}