Skip to content

Commit 55a2f10

Browse files
committed
fix: Add MarkdownParser interface to support mulitple parsers
1 parent c33c715 commit 55a2f10

File tree

5 files changed

+365
-296
lines changed

5 files changed

+365
-296
lines changed

markdown/src/main/java/org/apache/zeppelin/markdown/Markdown.java renamed to markdown/src/main/java/org/apache/zeppelin/markdown/MarkdownInterpreter.java

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -28,52 +28,35 @@
2828
import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion;
2929
import org.apache.zeppelin.scheduler.Scheduler;
3030
import org.apache.zeppelin.scheduler.SchedulerFactory;
31-
import org.pegdown.Extensions;
32-
import org.pegdown.LinkRenderer;
33-
import org.pegdown.PegDownProcessor;
34-
import org.pegdown.ast.RootNode;
3531
import org.slf4j.Logger;
3632
import org.slf4j.LoggerFactory;
3733

38-
/** Markdown interpreter for Zeppelin. */
39-
public class Markdown extends Interpreter {
40-
private PegDownProcessor md;
41-
static final Logger LOGGER = LoggerFactory.getLogger(Markdown.class);
34+
/** MarkdownInterpreter interpreter for Zeppelin. */
35+
public class MarkdownInterpreter extends Interpreter {
36+
private final Logger logger = LoggerFactory.getLogger(MarkdownInterpreter.class);
4237

43-
public Markdown(Properties property) {
44-
super(property);
45-
}
38+
private MarkdownParser parser;
4639

47-
/** wrap with markdown class div to styling DOM using css */
48-
public static String wrapHtmlWithMarkdownClassDiv(String html) {
49-
return new StringBuilder()
50-
.append("<div class=\"markdown-body\">\n")
51-
.append(html)
52-
.append("\n</div>")
53-
.toString();
40+
public MarkdownInterpreter(Properties property) {
41+
super(property);
5442
}
5543

5644
@Override
5745
public void open() {
58-
int pegdownOptions = Extensions.ALL_WITH_OPTIONALS - Extensions.ANCHORLINKS;
59-
md = new PegDownProcessor(pegdownOptions, 5000);
46+
parser = new PegdownParser();
6047
}
6148

6249
@Override
6350
public void close() {}
6451

6552
@Override
66-
public InterpreterResult interpret(String st, InterpreterContext interpreterContext) {
53+
public InterpreterResult interpret(String markdownText, InterpreterContext interpreterContext) {
6754
String html;
6855

6956
try {
70-
String parsed = md.markdownToHtml(st);
71-
if (null == parsed) throw new RuntimeException("Cannot parse markdown syntax string to HTML");
72-
73-
html = wrapHtmlWithMarkdownClassDiv(parsed);
74-
75-
} catch (java.lang.RuntimeException e) {
76-
LOGGER.error("Exception in Markdown while interpret ", e);
57+
html = parser.render(markdownText);
58+
} catch (Exception e) {
59+
logger.error("Exception in MarkdownInterpreter while interpret ", e);
7760
return new InterpreterResult(Code.ERROR, InterpreterUtils.getMostRelevantMessage(e));
7861
}
7962

@@ -96,7 +79,7 @@ public int getProgress(InterpreterContext context) {
9679
@Override
9780
public Scheduler getScheduler() {
9881
return SchedulerFactory.singleton()
99-
.createOrGetParallelScheduler(Markdown.class.getName() + this.hashCode(), 5);
82+
.createOrGetParallelScheduler(MarkdownInterpreter.class.getName() + this.hashCode(), 5);
10083
}
10184

10285
@Override
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.apache.zeppelin.markdown;
2+
3+
/** Abstract Markdown Parser. */
4+
public interface MarkdownParser {
5+
String render(String markdownText);
6+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.apache.zeppelin.markdown;
2+
3+
import org.pegdown.Extensions;
4+
import org.pegdown.PegDownProcessor;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
8+
/** Pegdown Markdown Parser. */
9+
public class PegdownParser implements MarkdownParser {
10+
private PegDownProcessor processor;
11+
12+
private final Logger logger = LoggerFactory.getLogger(PegdownParser.class);
13+
14+
public PegdownParser() {
15+
int pegdownOptions = Extensions.ALL_WITH_OPTIONALS - Extensions.ANCHORLINKS;
16+
int parsingTimeoutAsMillis = 5000;
17+
processor = new PegDownProcessor(pegdownOptions, parsingTimeoutAsMillis);
18+
}
19+
20+
@Override
21+
public String render(String markdownText) {
22+
String html = "";
23+
24+
try {
25+
String parsed = processor.markdownToHtml(markdownText);
26+
if (null == parsed) throw new RuntimeException("Cannot parse markdown syntax string to HTML");
27+
28+
html = wrapWithMarkdownClassDiv(parsed);
29+
30+
} catch (RuntimeException e) {
31+
logger.error("Failed to parsed markdown text", e);
32+
}
33+
34+
return html;
35+
}
36+
37+
/** wrap with markdown class div to styling DOM using css */
38+
public static String wrapWithMarkdownClassDiv(String html) {
39+
return new StringBuilder()
40+
.append("<div class=\"markdown-body\">\n")
41+
.append(html)
42+
.append("\n</div>")
43+
.toString();
44+
}
45+
}

markdown/src/test/java/org/apache/zeppelin/markdown/MarkdownTest.java

Lines changed: 0 additions & 267 deletions
This file was deleted.

0 commit comments

Comments
 (0)