commomark-java是一个Markdow解析器,一个基于 CommoMark 规范解析和渲染Markdow文本的Java库。具有以下特性:
小(最小化的依赖)
快(比pegdow快10-20倍,在仓库中可查看bechmarks)
灵活(解析后可操作AST,自定义HTML渲染)
可扩展(表格,删除线,自动链接等等)
Mave:
<depedecy> <groupId>com.atlassia.commomark</groupId> <artifactId>commomark</artifactId> <versio>0.9.0</versio></depedecy>解析和渲染成HTML
import org.commomark.ode.*;import org.commomark.parser.Parser;import org.commomark.rederer.html.HtmlRederer;Parser parser = Parser.builder().build();Node documet = parser.parse("This is *Sparta*");HtmlRederer rederer = HtmlRederer.builder().build();rederer.reder(documet); // "<p>This is <em>Sparta</em></p>\"你也可以对输出HTML进行属性定制:
Parser parser = Parser.builder().build();HtmlRederer rederer = HtmlRederer.builder() .attributeProviderFactory(ew AttributeProviderFactory() { public AttributeProvider create(AttributeProviderCotext cotext) { retur ew ImageAttributeProvider(); } }) .build();Node documet = parser.parse("");rederer.reder(documet);// "<p><img src=\"/url.pg\" alt=\"text\" class=\"border\" /></p>\"class ImageAttributeProvider implemets AttributeProvider { @Override public void setAttributes(Node ode, Strig tagName, Map<Strig, Strig> attributes) { if (ode istaceof Image) { attributes.put("class", "border"); } }}对输出的HTML进行渲染定制:
Parser parser = Parser.builder().build();HtmlRederer rederer = HtmlRederer.builder() .odeRedererFactory(ew HtmlNodeRedererFactory() { public NodeRederer create(HtmlNodeRedererCotext cotext) { retur ew IdetedCodeBlockNodeRederer(cotext); } }) .build();Node documet = parser.parse("Example:\\ code");rederer.reder(documet);// "<p>Example:</p>\<pre>code\</pre>\"class IdetedCodeBlockNodeRederer implemets NodeRederer { private fial HtmlWriter html; IdetedCodeBlockNodeRederer(HtmlNodeRedererCotext cotext) { this.html = cotext.getWriter(); } @Override public Set<Class<? exteds Node>> getNodeTypes() { // Retur the ode types we wat to use this rederer for. retur Collectios.<Class<? exteds Node>>sigleto(IdetedCodeBlock.class); } @Override public void reder(Node ode) { // We oly hadle oe type as per getNodeTypes, so we ca just cast it here. IdetedCodeBlock codeBlock = (IdetedCodeBlock) ode; html.lie(); html.tag("pre"); html.text(codeBlock.getLiteral()); html.tag("/pre"); html.lie(); }}
评论