Skip to content

Commit d3220a9

Browse files
committed
Add text content rendering support for InsExtension
See commonmark#170.
1 parent 3de7a08 commit d3220a9

6 files changed

Lines changed: 98 additions & 34 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
66
This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
77
with the exception that 0.x versions can break between minor versions.
88

9+
## Unreleased
10+
### Added
11+
- Add text content rendering support for `InsExtension`
12+
913
## [0.15.0] - 2020-05-21
1014
### Added
1115
- Extension for width/height attributes for images, thanks @dohertyfjatl

commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/InsExtension.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

33
import org.commonmark.Extension;
44
import org.commonmark.ext.ins.internal.InsDelimiterProcessor;
5-
import org.commonmark.ext.ins.internal.InsNodeRenderer;
5+
import org.commonmark.ext.ins.internal.InsHtmlNodeRenderer;
6+
import org.commonmark.ext.ins.internal.InsTextContentNodeRenderer;
7+
import org.commonmark.parser.Parser;
8+
import org.commonmark.renderer.NodeRenderer;
69
import org.commonmark.renderer.html.HtmlNodeRendererContext;
710
import org.commonmark.renderer.html.HtmlNodeRendererFactory;
8-
import org.commonmark.parser.Parser;
911
import org.commonmark.renderer.html.HtmlRenderer;
10-
import org.commonmark.renderer.NodeRenderer;
12+
import org.commonmark.renderer.text.TextContentNodeRendererContext;
13+
import org.commonmark.renderer.text.TextContentNodeRendererFactory;
14+
import org.commonmark.renderer.text.TextContentRenderer;
1115

1216
/**
1317
* Extension for ins using ++
@@ -20,7 +24,9 @@
2024
* The parsed ins text regions are turned into {@link Ins} nodes.
2125
* </p>
2226
*/
23-
public class InsExtension implements Parser.ParserExtension, HtmlRenderer.HtmlRendererExtension {
27+
public class InsExtension implements Parser.ParserExtension,
28+
HtmlRenderer.HtmlRendererExtension,
29+
TextContentRenderer.TextContentRendererExtension {
2430

2531
private InsExtension() {
2632
}
@@ -39,7 +45,17 @@ public void extend(HtmlRenderer.Builder rendererBuilder) {
3945
rendererBuilder.nodeRendererFactory(new HtmlNodeRendererFactory() {
4046
@Override
4147
public NodeRenderer create(HtmlNodeRendererContext context) {
42-
return new InsNodeRenderer(context);
48+
return new InsHtmlNodeRenderer(context);
49+
}
50+
});
51+
}
52+
53+
@Override
54+
public void extend(TextContentRenderer.Builder rendererBuilder) {
55+
rendererBuilder.nodeRendererFactory(new TextContentNodeRendererFactory() {
56+
@Override
57+
public NodeRenderer create(TextContentNodeRendererContext context) {
58+
return new InsTextContentNodeRenderer(context);
4359
}
4460
});
4561
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.commonmark.ext.ins.internal;
2+
3+
import org.commonmark.node.Node;
4+
import org.commonmark.renderer.html.HtmlNodeRendererContext;
5+
import org.commonmark.renderer.html.HtmlWriter;
6+
7+
import java.util.Collections;
8+
import java.util.Map;
9+
10+
public class InsHtmlNodeRenderer extends InsNodeRenderer {
11+
12+
private final HtmlNodeRendererContext context;
13+
private final HtmlWriter html;
14+
15+
public InsHtmlNodeRenderer(HtmlNodeRendererContext context) {
16+
this.context = context;
17+
this.html = context.getWriter();
18+
}
19+
20+
@Override
21+
public void render(Node node) {
22+
Map<String, String> attributes = context.extendAttributes(node, "ins", Collections.<String, String>emptyMap());
23+
html.tag("ins", attributes);
24+
renderChildren(node);
25+
html.tag("/ins");
26+
}
27+
28+
private void renderChildren(Node parent) {
29+
Node node = parent.getFirstChild();
30+
while (node != null) {
31+
Node next = node.getNext();
32+
context.render(node);
33+
node = next;
34+
}
35+
}
36+
}
Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,16 @@
11
package org.commonmark.ext.ins.internal;
22

33
import org.commonmark.ext.ins.Ins;
4-
import org.commonmark.renderer.html.HtmlWriter;
5-
import org.commonmark.renderer.html.HtmlNodeRendererContext;
64
import org.commonmark.node.Node;
75
import org.commonmark.renderer.NodeRenderer;
86

97
import java.util.Collections;
10-
import java.util.Map;
118
import java.util.Set;
129

13-
public class InsNodeRenderer implements NodeRenderer {
14-
15-
private final HtmlNodeRendererContext context;
16-
private final HtmlWriter html;
17-
18-
public InsNodeRenderer(HtmlNodeRendererContext context) {
19-
this.context = context;
20-
this.html = context.getWriter();
21-
}
10+
abstract class InsNodeRenderer implements NodeRenderer {
2211

2312
@Override
2413
public Set<Class<? extends Node>> getNodeTypes() {
2514
return Collections.<Class<? extends Node>>singleton(Ins.class);
2615
}
27-
28-
@Override
29-
public void render(Node node) {
30-
Map<String, String> attributes = context.extendAttributes(node, "ins", Collections.<String, String>emptyMap());
31-
html.tag("ins", attributes);
32-
renderChildren(node);
33-
html.tag("/ins");
34-
}
35-
36-
private void renderChildren(Node parent) {
37-
Node node = parent.getFirstChild();
38-
while (node != null) {
39-
Node next = node.getNext();
40-
context.render(node);
41-
node = next;
42-
}
43-
}
4416
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.commonmark.ext.ins.internal;
2+
3+
import org.commonmark.node.Node;
4+
import org.commonmark.renderer.text.TextContentNodeRendererContext;
5+
6+
public class InsTextContentNodeRenderer extends InsNodeRenderer {
7+
8+
private final TextContentNodeRendererContext context;
9+
10+
public InsTextContentNodeRenderer(TextContentNodeRendererContext context) {
11+
this.context = context;
12+
}
13+
14+
@Override
15+
public void render(Node node) {
16+
renderChildren(node);
17+
}
18+
19+
private void renderChildren(Node parent) {
20+
Node node = parent.getFirstChild();
21+
while (node != null) {
22+
Node next = node.getNext();
23+
context.render(node);
24+
node = next;
25+
}
26+
}
27+
}

commonmark-ext-ins/src/test/java/org/commonmark/ext/ins/InsTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.commonmark.node.Node;
55
import org.commonmark.parser.Parser;
66
import org.commonmark.renderer.html.HtmlRenderer;
7+
import org.commonmark.renderer.text.TextContentRenderer;
78
import org.commonmark.testutil.RenderingTestCase;
89
import org.junit.Test;
910

@@ -17,6 +18,8 @@ public class InsTest extends RenderingTestCase {
1718
private static final Set<Extension> EXTENSIONS = Collections.singleton(InsExtension.create());
1819
private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS).build();
1920
private static final HtmlRenderer RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS).build();
21+
private static final TextContentRenderer CONTENT_RENDERER = TextContentRenderer.builder()
22+
.extensions(EXTENSIONS).build();
2023

2124
@Test
2225
public void onePlusIsNotEnough() {
@@ -80,6 +83,12 @@ public void delimited() {
8083
assertEquals("++", ins.getClosingDelimiter());
8184
}
8285

86+
@Test
87+
public void textContentRenderer() {
88+
Node document = PARSER.parse("++foo++");
89+
assertEquals("foo", CONTENT_RENDERER.render(document));
90+
}
91+
8392
@Override
8493
protected String render(String source) {
8594
return RENDERER.render(PARSER.parse(source));

0 commit comments

Comments
 (0)