-
Notifications
You must be signed in to change notification settings - Fork 274
/
Copy pathNodeRendererSample3.java
134 lines (114 loc) · 5.1 KB
/
NodeRendererSample3.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package com.vladsch.flexmark.java.samples;
import com.vladsch.flexmark.ast.Emphasis;
import com.vladsch.flexmark.ast.Paragraph;
import com.vladsch.flexmark.ast.SoftLineBreak;
import com.vladsch.flexmark.ast.StrongEmphasis;
import com.vladsch.flexmark.ext.autolink.AutolinkExtension;
import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.html.HtmlWriter;
import com.vladsch.flexmark.html.renderer.NodeRenderer;
import com.vladsch.flexmark.html.renderer.NodeRendererContext;
import com.vladsch.flexmark.html.renderer.NodeRendererFactory;
import com.vladsch.flexmark.html.renderer.NodeRenderingHandler;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.test.util.AstCollectingVisitor;
import com.vladsch.flexmark.util.ast.Node;
import com.vladsch.flexmark.util.data.DataHolder;
import com.vladsch.flexmark.util.data.MutableDataHolder;
import com.vladsch.flexmark.util.data.MutableDataSet;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class NodeRendererSample3 {
static class SampleExtension implements HtmlRenderer.HtmlRendererExtension {
@Override
public void rendererOptions(@NotNull MutableDataHolder options) {
// add any configuration settings to options you want to apply to everything, here
}
@Override
public void extend(@NotNull HtmlRenderer.Builder htmlRendererBuilder, @NotNull String rendererType) {
htmlRendererBuilder.nodeRendererFactory(new SampleNodeRenderer.Factory());
}
static SampleExtension create() {
return new SampleExtension();
}
}
static class SampleNodeRenderer implements NodeRenderer {
public SampleNodeRenderer(DataHolder options) {
}
@Override
public Set<NodeRenderingHandler<?>> getNodeRenderingHandlers() {
return new HashSet<>(Arrays.asList(
new NodeRenderingHandler<>(Paragraph.class, this::render),
new NodeRenderingHandler<>(SoftLineBreak.class, this::render),
new NodeRenderingHandler<>(StrongEmphasis.class, this::render),
new NodeRenderingHandler<>(Emphasis.class, this::render)
));
}
private void render(Paragraph node, NodeRendererContext context, HtmlWriter html) {
context.renderChildren(node);
if (node.getNext() != null) {
html.tag("br/").line();
}
}
private void render(SoftLineBreak node, NodeRendererContext context, HtmlWriter html) {
html.tag("br/").line();
}
private void render(StrongEmphasis node, NodeRendererContext context, HtmlWriter html) {
html.tag("b");
context.renderChildren(node);
html.tag("/b");
}
private void render(Emphasis node, NodeRendererContext context, HtmlWriter html) {
html.tag("i");
context.renderChildren(node);
html.tag("/i");
}
public static class Factory implements NodeRendererFactory {
@NotNull
@Override
public NodeRenderer apply(@NotNull DataHolder options) {
return new SampleNodeRenderer(options);
}
}
}
static String commonMark(String markdown) {
MutableDataHolder options = new MutableDataSet();
options.set(Parser.EXTENSIONS, Arrays.asList(AutolinkExtension.create(), SampleExtension.create()));
// change soft break to hard break
options.set(HtmlRenderer.SOFT_BREAK, "<br/>");
Parser parser = Parser.builder(options).build();
Node document = parser.parse(markdown);
String ast = new AstCollectingVisitor().collectAndGetAstText(document);
System.out.println(markdown);
System.out.println("---------------------------------");
System.out.println(ast);
System.out.println("---------------------------------");
HtmlRenderer renderer = HtmlRenderer.builder(options).build();
String html = renderer.render(document);
return html;
}
public static void main(String[] args) {
String html = commonMark("" +
"[Some partly [green] green [/green] text here](https://www.example.com)\n" +
"** [green] foo [/green] **" +
"");
System.out.println(html);
System.out.println("---------------------------------");
String html2 = commonMark("" +
"[link ref [green] green [/green] ]\n" +
"\n" +
"\n" +
"[link ref [green] green [/green] ]: https://example.com\n" +
"");
System.out.println(html2);
System.out.println("---------------------------------");
String html3 = commonMark("" +
"[Some partly [green] green [/green] text here](https://www.example.com)\n" +
"**[green] foo [/green]**" +
"");
System.out.println(html3);
System.out.println("---------------------------------");
}
}