|
2 | 2 |
|
3 | 3 | import org.commonmark.node.*; |
4 | 4 | import org.commonmark.parser.Parser; |
| 5 | +import org.commonmark.renderer.NodeRenderer; |
| 6 | +import org.commonmark.renderer.html.HtmlNodeRendererContext; |
| 7 | +import org.commonmark.renderer.html.HtmlNodeRendererFactory; |
| 8 | +import org.commonmark.renderer.html.HtmlRenderer; |
5 | 9 | import org.junit.Test; |
6 | 10 |
|
| 11 | +import java.util.Set; |
| 12 | + |
7 | 13 | import static org.commonmark.testutil.Asserts.assertRendering; |
8 | 14 | import static org.junit.Assert.assertEquals; |
9 | 15 |
|
@@ -300,6 +306,35 @@ public void testSoftLineBreaks() { |
300 | 306 | assertRoundTrip("foo\nbar\n"); |
301 | 307 | } |
302 | 308 |
|
| 309 | + @Test |
| 310 | + public void overrideNodeRender() { |
| 311 | + var nodeRendererFactory = new MarkdownNodeRendererFactory() { |
| 312 | + @Override |
| 313 | + public NodeRenderer create(MarkdownNodeRendererContext context) { |
| 314 | + return new NodeRenderer() { |
| 315 | + @Override |
| 316 | + public Set<Class<? extends Node>> getNodeTypes() { |
| 317 | + return Set.of(Heading.class); |
| 318 | + } |
| 319 | + |
| 320 | + @Override |
| 321 | + public void render(Node node) { |
| 322 | + context.getWriter().raw("# Custom heading"); |
| 323 | + } |
| 324 | + }; |
| 325 | + } |
| 326 | + |
| 327 | + @Override |
| 328 | + public Set<Character> getSpecialCharacters() { |
| 329 | + return Set.of(); |
| 330 | + } |
| 331 | + }; |
| 332 | + |
| 333 | + MarkdownRenderer renderer = MarkdownRenderer.builder().nodeRendererFactory(nodeRendererFactory).build(); |
| 334 | + String rendered = renderer.render(parse("# Hello")); |
| 335 | + assertEquals("# Custom heading\n", rendered); |
| 336 | + } |
| 337 | + |
303 | 338 | private void assertRoundTrip(String input) { |
304 | 339 | String rendered = parseAndRender(input); |
305 | 340 | assertEquals(input, rendered); |
|
0 commit comments