1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2015 年 6 月 2 日 |
---|
#7 在 #cmark
27KB
602 行
rcmark
cmark 的 Rust 绑定。
构建
首先需要安装 CMake 和 pkg-config,除非你已经在某处安装了 libcmark。然后,只需运行
$ cargo build
lib.rs
:
libcmark 的 Rust 绑定
此库包含对 libcmark C 库的绑定,这是 CommonMark 标准的 C 参考实现。此绑定不执行底层库之外的任何额外的解析工作,因此应该很准确。
节点
Node
是 rcmark 的核心抽象。节点可以通过程序或通过解析 CommonMark 源来构建。所有节点都有一个类型,并且可能有父、子和兄弟节点。根据节点类型,有多种属性可用。如果某个属性不适用于给定的节点类型,则尝试访问它将引发 panic。
use rcmark::{Node, NodeType, ListType};
let mut root = Node::new(NodeType::Document);
let mut heading = Node::new(NodeType::Header);
heading.set_header_level(1);
let mut heading_text = Node::new(NodeType::Text);
heading_text.set_literal("Hello, World!");
heading.prepend_child(&mut heading_text);
root.prepend_child(&mut heading);
解析文档
可以通过 Parser
实例或单个 parse_document
函数来完成解析。
use rcmark::{Parser, parse_document, DEFAULT, NORMALIZE};
let doc = parse_document("**Hello**, `World!`", DEFAULT);
assert_eq!(doc.start_line(), 1);
let mut parser = Parser::new(NORMALIZE);
parser.feed("# Hello, World!");
let doc2 = parser.finish();
渲染文档
可以手动进行渲染,但 libcmark 也提供了渲染到 XML、HTML、man 页面和 CommonMark 的函数。
let doc = rcmark::parse_document("# Hello", rcmark::DEFAULT);
assert_eq!(rcmark::render_xml(&doc, rcmark::DEFAULT),
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\
<!DOCTYPE CommonMark SYSTEM \"CommonMark.dtd\">\n\
<document>\n \
<header level=\"1\">\n \
<text>Hello</text>\n \
</header>\n\
</document>\n");
assert_eq!(rcmark::render_html(&doc, rcmark::DEFAULT),
"<h1>Hello</h1>\n");
assert_eq!(rcmark::render_man(&doc, rcmark::DEFAULT),
".SH\nHello\n");
assert_eq!(rcmark::render_commonmark(&doc, rcmark::DEFAULT, 2),
"# Hello\n");
依赖项
~185KB