| | import com.vladsch.flexmark.superscript.SuperscriptExtension; |
| | import java.util.ArrayList; |
| | -import java.util.List; |
| | - |
| | +import java.util.Collection; |
| | |
| | /** |
| | * Responsible for parsing a Markdown document and rendering it as HTML. |
| | * |
| | * @author White Magic Software, Ltd. |
| | */ |
| | public class MarkdownProcessor extends AbstractProcessor<String> { |
| | |
| | - private List<Extension> extensions; |
| | + private final static HtmlRenderer RENDERER; |
| | + private final static Parser PARSER; |
| | + |
| | + static { |
| | + final Collection<Extension> extensions = new ArrayList<>(); |
| | + extensions.add( TablesExtension.create() ); |
| | + extensions.add( SuperscriptExtension.create() ); |
| | + extensions.add( StrikethroughSubscriptExtension.create() ); |
| | + |
| | + RENDERER = HtmlRenderer.builder().extensions( extensions ).build(); |
| | + PARSER = Parser.builder().extensions( extensions ).build(); |
| | + } |
| | |
| | /** |
 |
| | */ |
| | private Node parse( final String markdown ) { |
| | - return createParser().parse( markdown ); |
| | + return getParser().parse( markdown ); |
| | } |
| | |
 |
| | */ |
| | private String toHtml( final String markdown ) { |
| | - return createRenderer().render( parse( markdown ) ); |
| | - } |
| | - |
| | - /** |
| | - * Returns the list of extensions to use when parsing and rendering Markdown |
| | - * into HTML. |
| | - * |
| | - * @return A non-null list of Markdown extensions. |
| | - */ |
| | - private synchronized List<Extension> getExtensions() { |
| | - if( this.extensions == null ) { |
| | - this.extensions = createExtensions(); |
| | - } |
| | - |
| | - return this.extensions; |
| | - } |
| | - |
| | - /** |
| | - * Creates a list that includes a TablesExtension. Subclasses may override |
| | - * this method to insert more extensions, or remove the table extension. |
| | - * |
| | - * @return A list with an extension for parsing and rendering tables. |
| | - */ |
| | - protected List<Extension> createExtensions() { |
| | - final List<Extension> result = new ArrayList<>(); |
| | - result.add( TablesExtension.create() ); |
| | - result.add( SuperscriptExtension.create() ); |
| | - result.add( StrikethroughSubscriptExtension.create() ); |
| | - return result; |
| | + return getRenderer().render( parse( markdown ) ); |
| | } |
| | |
| | /** |
| | * Creates the Markdown document processor. |
| | * |
| | * @return A Parser that can build an abstract syntax tree. |
| | */ |
| | - private Parser createParser() { |
| | - return Parser.builder().extensions( getExtensions() ).build(); |
| | + private Parser getParser() { |
| | + return PARSER; |
| | } |
| | |
| | - /** |
| | - * Creates the HTML document renderer. |
| | - * |
| | - * @return A renderer that can convert a Markdown AST to HTML. |
| | - */ |
| | - private HtmlRenderer createRenderer() { |
| | - return HtmlRenderer.builder().extensions( getExtensions() ).build(); |
| | + private HtmlRenderer getRenderer() { |
| | + return RENDERER; |
| | } |
| | } |