1 module hunt.markdown.ext.table.TableExtension; 2 3 import hunt.markdown.Extension; 4 import hunt.markdown.ext.table.internal.TableBlockParser; 5 import hunt.markdown.ext.table.internal.TableHtmlNodeRenderer; 6 import hunt.markdown.ext.table.internal.TableTextContentNodeRenderer; 7 import hunt.markdown.renderer.html.HtmlRenderer; 8 import hunt.markdown.renderer.html.HtmlNodeRendererContext; 9 import hunt.markdown.renderer.html.HtmlNodeRendererFactory; 10 import hunt.markdown.parser.Parser; 11 import hunt.markdown.renderer.NodeRenderer; 12 import hunt.markdown.renderer.text.TextContentNodeRendererContext; 13 import hunt.markdown.renderer.text.TextContentNodeRendererFactory; 14 import hunt.markdown.renderer.text.TextContentRenderer; 15 16 /** 17 * Extension for GFM tables using "|" pipes (GitHub Flavored Markdown). 18 * <p> 19 * Create it with {@link #create()} and then configure it on the builders 20 * ({@link hunt.markdown.parser.Parser.Builder#extensions(Iterable)}, 21 * {@link HtmlRenderer.Builder#extensions(Iterable)}). 22 * </p> 23 * <p> 24 * The parsed tables are turned into {@link TableBlock} blocks. 25 * </p> 26 */ 27 class TableExtension : Parser.ParserExtension, HtmlRenderer.HtmlRendererExtension, 28 TextContentRenderer.TextContentRendererExtension { 29 30 private this() { 31 } 32 33 public static Extension create() { 34 return new TableExtension(); 35 } 36 37 override public void extend(Parser.Builder parserBuilder) { 38 parserBuilder.customBlockParserFactory(new TableBlockParser.Factory()); 39 } 40 41 override public void extend(HtmlRenderer.Builder rendererBuilder) { 42 rendererBuilder.nodeRendererFactory(new class HtmlNodeRendererFactory { 43 override public NodeRenderer create(HtmlNodeRendererContext context) { 44 return new TableHtmlNodeRenderer(context); 45 } 46 }); 47 } 48 49 override public void extend(TextContentRenderer.Builder rendererBuilder) { 50 rendererBuilder.nodeRendererFactory(new class TextContentNodeRendererFactory { 51 override public NodeRenderer create(TextContentNodeRendererContext context) { 52 return new TableTextContentNodeRenderer(context); 53 } 54 }); 55 } 56 }