Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package org.commonmark.ext.gfm.strikethrough;

import org.commonmark.Extension;
import org.commonmark.content.TextContentRenderer;
import org.commonmark.content.renderer.TextContentNodeRendererContext;
import org.commonmark.content.renderer.TextContentNodeRendererFactory;
import org.commonmark.ext.gfm.strikethrough.internal.StrikethroughDelimiterProcessor;
import org.commonmark.ext.gfm.strikethrough.internal.StrikethroughNodeRenderer;
import org.commonmark.html.renderer.NodeRenderer;
import org.commonmark.html.renderer.NodeRendererContext;
import org.commonmark.html.renderer.NodeRendererFactory;
import org.commonmark.parser.Parser;
import org.commonmark.ext.gfm.strikethrough.internal.StrikethroughHtmlNodeRenderer;
import org.commonmark.ext.gfm.strikethrough.internal.StrikethroughTextContentNodeRenderer;
import org.commonmark.html.HtmlRenderer;
import org.commonmark.html.renderer.HtmlNodeRendererContext;
import org.commonmark.html.renderer.HtmlNodeRendererFactory;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.NodeRenderer;

/**
* Extension for GFM strikethrough using ~~ (GitHub Flavored Markdown).
Expand All @@ -20,7 +24,8 @@
* The parsed strikethrough text regions are turned into {@link Strikethrough} nodes.
* </p>
*/
public class StrikethroughExtension implements Parser.ParserExtension, HtmlRenderer.HtmlRendererExtension {
public class StrikethroughExtension implements Parser.ParserExtension, HtmlRenderer.HtmlRendererExtension,
TextContentRenderer.TextContentRendererExtension {

private StrikethroughExtension() {
}
Expand All @@ -36,10 +41,20 @@ public void extend(Parser.Builder parserBuilder) {

@Override
public void extend(HtmlRenderer.Builder rendererBuilder) {
rendererBuilder.nodeRendererFactory(new NodeRendererFactory() {
rendererBuilder.nodeRendererFactory(new HtmlNodeRendererFactory() {
@Override
public NodeRenderer create(HtmlNodeRendererContext context) {
return new StrikethroughHtmlNodeRenderer(context);
}
});
}

@Override
public void extend(TextContentRenderer.Builder rendererBuilder) {
rendererBuilder.nodeRendererFactory(new TextContentNodeRendererFactory() {
@Override
public NodeRenderer create(NodeRendererContext context) {
return new StrikethroughNodeRenderer(context);
public NodeRenderer create(TextContentNodeRendererContext context) {
return new StrikethroughTextContentNodeRenderer(context);
}
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.commonmark.ext.gfm.strikethrough.internal;

import org.commonmark.html.HtmlWriter;
import org.commonmark.html.renderer.HtmlNodeRendererContext;
import org.commonmark.node.Node;

import java.util.Collections;
import java.util.Map;

public class StrikethroughHtmlNodeRenderer extends StrikethroughNodeRenderer {

private final HtmlNodeRendererContext context;
private final HtmlWriter html;

public StrikethroughHtmlNodeRenderer(HtmlNodeRendererContext context) {
super(context);
this.context = context;
this.html = context.getWriter();
}

@Override
public void render(Node node) {
Map<String, String> attributes = context.extendAttributes(node, Collections.<String, String>emptyMap());
html.tag("del", attributes);
renderChildren(node);
html.tag("/del");
}
}
Original file line number Diff line number Diff line change
@@ -1,39 +1,27 @@
package org.commonmark.ext.gfm.strikethrough.internal;

import org.commonmark.ext.gfm.strikethrough.Strikethrough;
import org.commonmark.html.HtmlWriter;
import org.commonmark.html.renderer.NodeRenderer;
import org.commonmark.html.renderer.NodeRendererContext;
import org.commonmark.node.Node;
import org.commonmark.renderer.NodeRenderer;
import org.commonmark.renderer.NodeRendererContext;

import java.util.Collections;
import java.util.Map;
import java.util.Set;

public class StrikethroughNodeRenderer implements NodeRenderer {
abstract class StrikethroughNodeRenderer implements NodeRenderer {

private final NodeRendererContext context;
private final HtmlWriter html;

public StrikethroughNodeRenderer(NodeRendererContext context) {
this.context = context;
this.html = context.getHtmlWriter();
}

@Override
public Set<Class<? extends Node>> getNodeTypes() {
return Collections.<Class<? extends Node>>singleton(Strikethrough.class);
}

@Override
public void render(Node node) {
Map<String, String> attributes = context.extendAttributes(node, Collections.<String, String>emptyMap());
html.tag("del", attributes);
renderChildren(node);
html.tag("/del");
}

private void renderChildren(Node parent) {
protected void renderChildren(Node parent) {
Node node = parent.getFirstChild();
while (node != null) {
Node next = node.getNext();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.commonmark.ext.gfm.strikethrough.internal;

import org.commonmark.content.TextContentWriter;
import org.commonmark.content.renderer.TextContentNodeRendererContext;
import org.commonmark.node.Node;

public class StrikethroughTextContentNodeRenderer extends StrikethroughNodeRenderer {

private final TextContentWriter textContent;

public StrikethroughTextContentNodeRenderer(TextContentNodeRendererContext context) {
super(context);
this.textContent = context.getWriter();
}

@Override
public void render(Node node) {
textContent.write('/');
renderChildren(node);
textContent.write('/');
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.commonmark.ext.gfm.strikethrough;

import org.commonmark.Extension;
import org.commonmark.content.TextContentRenderer;
import org.commonmark.html.HtmlRenderer;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
Expand All @@ -16,7 +17,9 @@ public class StrikethroughTest extends RenderingTestCase {

private static final Set<Extension> EXTENSIONS = Collections.singleton(StrikethroughExtension.create());
private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS).build();
private static final HtmlRenderer RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS).build();
private static final HtmlRenderer HTML_RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS).build();
private static final TextContentRenderer CONTENT_RENDERER = TextContentRenderer.builder()
.extensions(EXTENSIONS).build();

@Test
public void oneTildeIsNotEnough() {
Expand Down Expand Up @@ -80,8 +83,14 @@ public void delimited() {
assertEquals("~~", strikethrough.getClosingDelimiter());
}

@Test
public void textContentRenderer() {
Node document = PARSER.parse("~~foo~~");
assertEquals("/foo/", CONTENT_RENDERER.render(document));
}

@Override
protected String render(String source) {
return RENDERER.render(PARSER.parse(source));
return HTML_RENDERER.render(PARSER.parse(source));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import org.commonmark.Extension;
import org.commonmark.ext.gfm.tables.internal.TableBlockParser;
import org.commonmark.ext.gfm.tables.internal.TableNodeRenderer;
import org.commonmark.html.renderer.NodeRenderer;
import org.commonmark.html.renderer.NodeRendererContext;
import org.commonmark.html.renderer.NodeRendererFactory;
import org.commonmark.parser.Parser;
import org.commonmark.html.HtmlRenderer;
import org.commonmark.html.renderer.HtmlNodeRendererContext;
import org.commonmark.html.renderer.HtmlNodeRendererFactory;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.NodeRenderer;

/**
* Extension for GFM tables using "|" pipes (GitHub Flavored Markdown).
Expand Down Expand Up @@ -36,9 +36,9 @@ public void extend(Parser.Builder parserBuilder) {

@Override
public void extend(HtmlRenderer.Builder rendererBuilder) {
rendererBuilder.nodeRendererFactory(new NodeRendererFactory() {
rendererBuilder.nodeRendererFactory(new HtmlNodeRendererFactory() {
@Override
public NodeRenderer create(NodeRendererContext context) {
public NodeRenderer create(HtmlNodeRendererContext context) {
return new TableNodeRenderer(context);
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@

import org.commonmark.ext.gfm.tables.*;
import org.commonmark.html.HtmlWriter;
import org.commonmark.html.renderer.NodeRenderer;
import org.commonmark.html.renderer.NodeRendererContext;
import org.commonmark.html.renderer.HtmlNodeRendererContext;
import org.commonmark.node.Node;
import org.commonmark.renderer.NodeRenderer;

import java.util.*;

public class TableNodeRenderer implements NodeRenderer {

private final HtmlWriter htmlWriter;
private final NodeRendererContext context;
private final HtmlNodeRendererContext context;

public TableNodeRenderer(NodeRendererContext context) {
this.htmlWriter = context.getHtmlWriter();
public TableNodeRenderer(HtmlNodeRendererContext context) {
this.htmlWriter = context.getWriter();
this.context = context;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import org.commonmark.Extension;
import org.commonmark.ext.ins.internal.InsDelimiterProcessor;
import org.commonmark.ext.ins.internal.InsNodeRenderer;
import org.commonmark.html.renderer.NodeRenderer;
import org.commonmark.html.renderer.NodeRendererContext;
import org.commonmark.html.renderer.NodeRendererFactory;
import org.commonmark.html.renderer.HtmlNodeRendererContext;
import org.commonmark.html.renderer.HtmlNodeRendererFactory;
import org.commonmark.parser.Parser;
import org.commonmark.html.HtmlRenderer;
import org.commonmark.renderer.NodeRenderer;

/**
* Extension for ins using ++
Expand Down Expand Up @@ -36,9 +36,9 @@ public void extend(Parser.Builder parserBuilder) {

@Override
public void extend(HtmlRenderer.Builder rendererBuilder) {
rendererBuilder.nodeRendererFactory(new NodeRendererFactory() {
rendererBuilder.nodeRendererFactory(new HtmlNodeRendererFactory() {
@Override
public NodeRenderer create(NodeRendererContext context) {
public NodeRenderer create(HtmlNodeRendererContext context) {
return new InsNodeRenderer(context);
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@

import org.commonmark.ext.ins.Ins;
import org.commonmark.html.HtmlWriter;
import org.commonmark.html.renderer.NodeRenderer;
import org.commonmark.html.renderer.NodeRendererContext;
import org.commonmark.html.renderer.HtmlNodeRendererContext;
import org.commonmark.node.Node;
import org.commonmark.renderer.NodeRenderer;

import java.util.Collections;
import java.util.Map;
import java.util.Set;

public class InsNodeRenderer implements NodeRenderer {

private final NodeRendererContext context;
private final HtmlNodeRendererContext context;
private final HtmlWriter html;

public InsNodeRenderer(NodeRendererContext context) {
public InsNodeRenderer(HtmlNodeRendererContext context) {
this.context = context;
this.html = context.getHtmlWriter();
this.html = context.getWriter();
}

@Override
Expand Down
Loading