2021-08-07
This commit is contained in:
15
markdown/build.gradle.kts
Normal file
15
markdown/build.gradle.kts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* Examples for Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id("elex-java")
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
|
||||||
|
implementation("com.vladsch.flexmark:flexmark-all:0.62.2")
|
||||||
|
}
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Examples for Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples;
|
||||||
|
|
||||||
|
import com.vladsch.flexmark.ext.abbreviation.AbbreviationExtension;
|
||||||
|
import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension;
|
||||||
|
import com.vladsch.flexmark.ext.aside.AsideExtension;
|
||||||
|
import com.vladsch.flexmark.ext.attributes.AttributesExtension;
|
||||||
|
import com.vladsch.flexmark.ext.autolink.AutolinkExtension;
|
||||||
|
import com.vladsch.flexmark.ext.definition.DefinitionExtension;
|
||||||
|
import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceExtension;
|
||||||
|
import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
|
||||||
|
import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension;
|
||||||
|
import com.vladsch.flexmark.ext.ins.InsExtension;
|
||||||
|
import com.vladsch.flexmark.ext.media.tags.MediaTagsExtension;
|
||||||
|
import com.vladsch.flexmark.ext.superscript.SuperscriptExtension;
|
||||||
|
import com.vladsch.flexmark.ext.tables.TablesExtension;
|
||||||
|
import com.vladsch.flexmark.ext.typographic.TypographicExtension;
|
||||||
|
import com.vladsch.flexmark.ext.yaml.front.matter.AbstractYamlFrontMatterVisitor;
|
||||||
|
import com.vladsch.flexmark.ext.yaml.front.matter.YamlFrontMatterExtension;
|
||||||
|
import com.vladsch.flexmark.ext.youtube.embedded.YouTubeLinkExtension;
|
||||||
|
import com.vladsch.flexmark.html.HtmlRenderer;
|
||||||
|
import com.vladsch.flexmark.parser.Parser;
|
||||||
|
import com.vladsch.flexmark.util.ast.Node;
|
||||||
|
import com.vladsch.flexmark.util.data.MutableDataSet;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class MarkdownParser {
|
||||||
|
private static final Parser PARSER;
|
||||||
|
private static final HtmlRenderer RENDERER;
|
||||||
|
private static final AbstractYamlFrontMatterVisitor YAML_VISITOR;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final Node document;
|
||||||
|
|
||||||
|
static {
|
||||||
|
final MutableDataSet options = new MutableDataSet();
|
||||||
|
options.set(
|
||||||
|
Parser.EXTENSIONS,
|
||||||
|
Arrays.asList(
|
||||||
|
AbbreviationExtension.create(),
|
||||||
|
AnchorLinkExtension.create(),
|
||||||
|
AsideExtension.create(),
|
||||||
|
AttributesExtension.create(),
|
||||||
|
AutolinkExtension.create(),
|
||||||
|
DefinitionExtension.create(),
|
||||||
|
EnumeratedReferenceExtension.create(),
|
||||||
|
FootnoteExtension.create(),
|
||||||
|
StrikethroughSubscriptExtension.create(),
|
||||||
|
InsExtension.create(),
|
||||||
|
MediaTagsExtension.create(),
|
||||||
|
SuperscriptExtension.create(),
|
||||||
|
TablesExtension.create(),
|
||||||
|
TypographicExtension.create(),
|
||||||
|
YamlFrontMatterExtension.create(),
|
||||||
|
YouTubeLinkExtension.create()
|
||||||
|
));
|
||||||
|
options.set(HtmlRenderer.SOFT_BREAK, "<br />\n");
|
||||||
|
options.set(HtmlRenderer.GENERATE_HEADER_ID, true);
|
||||||
|
|
||||||
|
PARSER = Parser.builder(options).build();
|
||||||
|
RENDERER = HtmlRenderer.builder(options).build();
|
||||||
|
|
||||||
|
YAML_VISITOR = new AbstractYamlFrontMatterVisitor() {
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public MarkdownParser(final String md) {
|
||||||
|
document = PARSER.parse(md);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, List<String>> getYaml() {
|
||||||
|
YAML_VISITOR.visit(document);
|
||||||
|
return YAML_VISITOR.getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHtml() {
|
||||||
|
return RENDERER.render(document);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* Examples for Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples;
|
||||||
12
markdown/src/main/resources/sample.md
Normal file
12
markdown/src/main/resources/sample.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
description: this is a sample text.
|
||||||
|
order: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
# Markdown
|
||||||
|
|
||||||
|
This is a sample document.
|
||||||
|
|
||||||
|
* First
|
||||||
|
* Second
|
||||||
|
* Third
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Examples for Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples;
|
||||||
|
|
||||||
|
import com.elex_project.abraxas.IOz;
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
class MarkdownParserTest {
|
||||||
|
|
||||||
|
private static String md;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
private static void beforeAll() throws IOException {
|
||||||
|
md = IOz.readStringFrom(MarkdownParserTest.class
|
||||||
|
.getResourceAsStream("/sample.md"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void parse() throws IOException {
|
||||||
|
MarkdownParser markdownParser = new MarkdownParser(md);
|
||||||
|
String html = markdownParser.getHtml();
|
||||||
|
System.out.println(html);
|
||||||
|
|
||||||
|
Map<String, List<String>> yaml = markdownParser.getYaml();
|
||||||
|
for (String key : yaml.keySet()) {
|
||||||
|
System.out.println(key + " : " + yaml.get(key).get(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,5 +12,5 @@ include(
|
|||||||
"ssh",
|
"ssh",
|
||||||
"web-socket-servlet", "web-socket-client",
|
"web-socket-servlet", "web-socket-client",
|
||||||
"thread", "hibernate", "jdbc-sqlite",
|
"thread", "hibernate", "jdbc-sqlite",
|
||||||
"xml", "jackson", "jsoup"
|
"xml", "jackson", "jsoup", "markdown"
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user