Skip to content

Commit cebb010

Browse files
committed
TextContentRenderer: Fix overriding of core node rendering
1 parent 4634a00 commit cebb010

File tree

2 files changed

+45
-5
lines changed

2 files changed

+45
-5
lines changed

commonmark/src/main/java/org/commonmark/renderer/text/TextContentRenderer.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,9 @@ private class RendererContext implements TextContentNodeRendererContext {
140140
private RendererContext(TextContentWriter textContentWriter) {
141141
this.textContentWriter = textContentWriter;
142142

143-
// The first node renderer for a node type "wins".
144-
for (int i = nodeRendererFactories.size() - 1; i >= 0; i--) {
145-
TextContentNodeRendererFactory nodeRendererFactory = nodeRendererFactories.get(i);
146-
NodeRenderer nodeRenderer = nodeRendererFactory.create(this);
147-
nodeRendererMap.add(nodeRenderer);
143+
for (var factory : nodeRendererFactories) {
144+
var renderer = factory.create(this);
145+
nodeRendererMap.add(renderer);
148146
}
149147
}
150148

commonmark/src/test/java/org/commonmark/test/TextContentRendererTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
package org.commonmark.test;
22

3+
import org.commonmark.node.Link;
4+
import org.commonmark.node.Node;
5+
import org.commonmark.renderer.NodeRenderer;
36
import org.commonmark.renderer.text.LineBreakRendering;
7+
import org.commonmark.renderer.text.TextContentNodeRendererContext;
8+
import org.commonmark.renderer.text.TextContentNodeRendererFactory;
49
import org.commonmark.renderer.text.TextContentRenderer;
510
import org.commonmark.parser.Parser;
611
import org.commonmark.testutil.Asserts;
712
import org.junit.Test;
813

14+
import java.util.Set;
15+
916
import static org.junit.Assert.assertEquals;
1017

1118
public class TextContentRendererTest {
@@ -191,6 +198,41 @@ public void textContentHtml() {
191198
assertAll(html, html);
192199
}
193200

201+
@Test
202+
public void testOverrideNodeRendering() {
203+
var nodeRendererFactory = new TextContentNodeRendererFactory() {
204+
@Override
205+
public NodeRenderer create(TextContentNodeRendererContext context) {
206+
return new NodeRenderer() {
207+
208+
@Override
209+
public Set<Class<? extends Node>> getNodeTypes() {
210+
return Set.of(Link.class);
211+
}
212+
213+
@Override
214+
public void render(Node node) {
215+
context.getWriter().write('"');
216+
renderChildren(node);
217+
context.getWriter().write('"');
218+
}
219+
220+
private void renderChildren(Node parent) {
221+
Node node = parent.getFirstChild();
222+
while (node != null) {
223+
Node next = node.getNext();
224+
context.render(node);
225+
node = next;
226+
}
227+
}
228+
};
229+
}
230+
};
231+
var renderer = TextContentRenderer.builder().nodeRendererFactory(nodeRendererFactory).build();
232+
var source = "Hi [Example](https://example.com)";
233+
Asserts.assertRendering(source, "Hi \"Example\"", renderer.render(PARSER.parse(source)));
234+
}
235+
194236
private void assertCompact(String source, String expected) {
195237
var doc = PARSER.parse(source);
196238
var actualRendering = COMPACT_RENDERER.render(doc);

0 commit comments

Comments
 (0)