Java 的 Markdown 解析器 commonmark-java

BSD
Java 查看源码»
跨平台
2017-08-09
局长

commonmark-java 是一个 Markdown 解析器,一个基于 CommonMark 规范解析和渲染 Markdown 文本的 Java 库。具有以下特性:

  • 小(最小化的依赖)

  • 快 (比 pegdown 快 10-20 倍,在仓库中可查看 benchmarks)

  • 灵活 (解析后可操作 AST,自定义 HTML 渲染)

  • 可扩展(表格,删除线,自动链接等等)

Maven:

<dependency>
    <groupId>com.atlassian.commonmark</groupId>
    <artifactId>commonmark</artifactId>
    <version>0.9.0</version>
</dependency>

解析和渲染成 HTML

import org.commonmark.node.*;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;

Parser parser = Parser.builder().build();
Node document = parser.parse("This is *Sparta*");
HtmlRenderer renderer = HtmlRenderer.builder().build();
renderer.render(document);  // "<p>This is <em>Sparta</em></p>\n"

你也可以对输出 HTML 进行属性定制:

Parser parser = Parser.builder().build();
HtmlRenderer renderer = HtmlRenderer.builder()
        .attributeProviderFactory(new AttributeProviderFactory() {
            public AttributeProvider create(AttributeProviderContext context) {
                return new ImageAttributeProvider();
            }
        })
        .build();

Node document = parser.parse("![text](/url.png)");
renderer.render(document);
// "<p><img src=\"/url.png\" alt=\"text\" class=\"border\" /></p>\n"

class ImageAttributeProvider implements AttributeProvider {
    @Override
    public void setAttributes(Node node, String tagName, Map<String, String> attributes) {
        if (node instanceof Image) {
            attributes.put("class", "border");
        }
    }
}

对输出的 HTML 进行渲染定制:

Parser parser = Parser.builder().build();
HtmlRenderer renderer = HtmlRenderer.builder()
        .nodeRendererFactory(new HtmlNodeRendererFactory() {
            public NodeRenderer create(HtmlNodeRendererContext context) {
                return new IndentedCodeBlockNodeRenderer(context);
            }
        })
        .build();

Node document = parser.parse("Example:\n\n    code");
renderer.render(document);
// "<p>Example:</p>\n<pre>code\n</pre>\n"

class IndentedCodeBlockNodeRenderer implements NodeRenderer {

    private final HtmlWriter html;

    IndentedCodeBlockNodeRenderer(HtmlNodeRendererContext context) {
        this.html = context.getWriter();
    }

    @Override
    public Set<Class<? extends Node>> getNodeTypes() {
        // Return the node types we want to use this renderer for.
        return Collections.<Class<? extends Node>>singleton(IndentedCodeBlock.class);
    }

    @Override
    public void render(Node node) {
        // We only handle one type as per getNodeTypes, so we can just cast it here.
        IndentedCodeBlock codeBlock = (IndentedCodeBlock) node;
        html.line();
        html.tag("pre");
        html.text(codeBlock.getLiteral());
        html.tag("/pre");
        html.line();
    }
}
的码云指数为
超过 的项目
加载中

评论(5)

谦谦君子淑女好逑
谦谦君子淑女好逑
解析的扩展类型太少,和我从js库markdown-it翻译过来的效率差不了多少,JIT编译过后就更没什么差别了。
Mr_Qi
Mr_Qi
jira那家公司吧
花米
花米
好东西,我也比下下楼有头发
小柒2012
小柒2012
鹅厂作品,值得信赖,我比楼下有头发~~~
红薯
红薯
大厂作品,值得信赖

暂无资讯

暂无问答

Java实例教程

Java当前日期/时间 Java将字符串转换为日期 Java当前工作目录 Java正则表达式 Java立方体 编译并执行Java Online 用于连接两个数组的Java程序 Java添加两个数组 字符串的Java字符 Java多字符...

2018/11/02 10:48
14
0
JVM -verbose参数详解(转)

转自:http://www.javaranger.com/archives/367 java -verbose[:class|gc|jni] 在输出设备上显示虚拟机运行信息。 1.java -verbose:class 在程序运行的时候有多少类被加载!你可以用verbose...

2014/12/04 22:33
4K
1
41 Websites Every Java Developer Should Bookmark

41 Websites Every Java Developer Should Bookmark Category - Java News Oracle Technology Network - java.sun.com Well, this is the best place to start with! Being an official Java...

2014/02/21 08:49
38
0
Java学习线路图

Java学习线路图 Java教程 Java 教程 Java 简介 Java 开发环境配置 Java 基础语法 Java 对象和类 Java 基本数据类型 Java变量类型 Java修饰符 Java运算符 Java循环结构 Java分支结构 Java Num...

2018/10/10 17:41
14
0
Ubuntu 13.10 64位下安装配置 JDK 7

第一步:下载 jdk-7u45-linux-x64.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7u45-b18/jdk-7u45-linux-x64.tar.gz 或者直接下载:http://download.oracle.com/otn-pub/ja...

2014/03/24 18:19
2.4K
0
JDBC十佳实践

Java程序员的JDBC十佳实践 Java JDBC 最佳实践 JDBC Best Practices are some coding practices which Java programmer should follow while writing JDBC code. As discussed in how to co...

2014/09/18 17:28
33
0
[Java] JAVA和JVM运行原理

JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。 编译器负责把Jav...

2014/03/12 10:54
242
0
Java JDBC实例

了解如何在Java编程中使用JDBC。下面是最常用的例子: JDBC如何与数据库建立连接? JDBC如何创建,编辑和使用Java的alter table? JDBC如何显示数据库表的内容是什么? JDBC如何更新,编辑和...

2014/04/02 21:11
63
0
安装android studio for Ubuntu12.04.4-------(1)

1安装jdk8 joe@joe-Aspire-Z3730:~$ sudo add-apt-repository ppa:webupd8team/java You are about to add the following PPA to your system: Oracle Java (JDK) Installer (automatically...

2018/03/17 22:17
7
0
JVM学习心得体会 (第一天)

Java虚拟机(JVM)是Java语言的基础。它是Java技术的重要组成部分。它是一个抽象的计算机,和实际的计算机一样,它具有一个指令集并使用不同的存储区域。

2013/06/25 15:27
150
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部