Skip to content

Commit 1062936

Browse files
authored
Merge pull request #274 from commonmark/dingus-app
Add DingusApp for quickly testing out renderings
2 parents 376fc8e + 77c5853 commit 1062936

1 file changed

Lines changed: 114 additions & 0 deletions

File tree

  • commonmark-integration-test/src/test/java/org/commonmark/ui
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package org.commonmark.ui;
2+
3+
import org.commonmark.parser.Parser;
4+
import org.commonmark.renderer.html.HtmlRenderer;
5+
import org.commonmark.renderer.text.TextContentRenderer;
6+
7+
import java.awt.*;
8+
import javax.swing.*;
9+
import javax.swing.event.ChangeEvent;
10+
import javax.swing.event.ChangeListener;
11+
import javax.swing.event.DocumentEvent;
12+
import javax.swing.event.DocumentListener;
13+
14+
/**
15+
* Simple UI to quickly test out different rendering of CommonMark inputs.
16+
* Similar to <a href="https://spec.commonmark.org/dingus/">commonmark.js dingus</a>.
17+
**/
18+
public class DingusApp {
19+
20+
private final Parser parser = Parser.builder().build();
21+
private final TextContentRenderer textRenderer = TextContentRenderer.builder().build();
22+
private final HtmlRenderer htmlRenderer = HtmlRenderer.builder().build();
23+
24+
private final JTabbedPane tabbedPane;
25+
private final JEditorPane htmlVisualRendererOutput;
26+
private final JTextArea htmlSourceRendererOutput;
27+
private final JTextArea textRendererOutput;
28+
29+
public static void main(String[] args) {
30+
new DingusApp().run();
31+
}
32+
33+
private DingusApp() {
34+
tabbedPane = new JTabbedPane();
35+
36+
htmlVisualRendererOutput = new JEditorPane();
37+
htmlVisualRendererOutput.setEnabled(false);
38+
htmlVisualRendererOutput.setContentType("text/html");
39+
40+
htmlSourceRendererOutput = new JTextArea();
41+
htmlSourceRendererOutput.setEnabled(false);
42+
htmlSourceRendererOutput.setLineWrap(true);
43+
htmlSourceRendererOutput.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
44+
45+
textRendererOutput = new JTextArea();
46+
textRendererOutput.setEnabled(false);
47+
textRendererOutput.setLineWrap(true);
48+
textRendererOutput.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
49+
}
50+
51+
private void run() {
52+
JFrame frame = new JFrame("commonmark-java dingus");
53+
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
54+
frame.setMinimumSize(new Dimension(400, 300));
55+
frame.setSize(new Dimension(1200, 675));
56+
57+
final JTextArea input = new JTextArea();
58+
input.setBorder(BorderFactory.createTitledBorder("Input"));
59+
input.setLineWrap(true);
60+
input.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
61+
62+
input.getDocument().addDocumentListener(new DocumentListener() {
63+
@Override
64+
public void insertUpdate(DocumentEvent e) {
65+
updateOutput(input.getText());
66+
}
67+
68+
@Override
69+
public void removeUpdate(DocumentEvent e) {
70+
updateOutput(input.getText());
71+
}
72+
73+
@Override
74+
public void changedUpdate(DocumentEvent e) {
75+
}
76+
});
77+
78+
tabbedPane.addTab("HTML rendered", htmlVisualRendererOutput);
79+
tabbedPane.addTab("HTML source", htmlSourceRendererOutput);
80+
tabbedPane.addTab("Plain text", textRendererOutput);
81+
82+
tabbedPane.addChangeListener(new ChangeListener() {
83+
@Override
84+
public void stateChanged(ChangeEvent e) {
85+
updateOutput(input.getText());
86+
}
87+
});
88+
89+
input.setText("# Example\n" +
90+
"Enter text *here* and see how it renders on the right.\n\n" +
91+
"* Try\n* this\n\n" +
92+
"```\nor this\n```");
93+
updateOutput(input.getText());
94+
95+
frame.setLayout(new GridLayout());
96+
frame.add(input);
97+
frame.add(tabbedPane);
98+
99+
frame.setVisible(true);
100+
}
101+
102+
private void updateOutput(String inputText) {
103+
if (tabbedPane.getSelectedComponent() == htmlVisualRendererOutput) {
104+
String rendered = htmlRenderer.render(parser.parse(inputText));
105+
htmlVisualRendererOutput.setText(rendered);
106+
} else if (tabbedPane.getSelectedComponent() == htmlSourceRendererOutput) {
107+
String rendered = htmlRenderer.render(parser.parse(inputText));
108+
htmlSourceRendererOutput.setText(rendered);
109+
} else if (tabbedPane.getSelectedComponent() == textRendererOutput) {
110+
String rendered = textRenderer.render(parser.parse(inputText));
111+
textRendererOutput.setText(rendered);
112+
}
113+
}
114+
}

0 commit comments

Comments
 (0)