4 releases
0.2.3 | Aug 3, 2023 |
---|---|
0.2.2 | Aug 2, 2023 |
0.2.1 | Jul 25, 2023 |
0.2.0 | Jul 25, 2023 |
0.1.0 |
|
#2376 in Parser implementations
61KB
1.5K
SLoC
pegmd
Parses a Markdown document that follows CommonMark v0.30 to an abstract syntax tree by defining its parsing expression
grammar (PEG) with pest. The crate also optionally provides a transformer to emit the AST as HTML if the html
feature included.
Usage
Creating an AST
The main function exported from the crate, ast::parse_document
, accepts a &str
and on success returns a Node
with the same lifetime as the input.
Traversal
From there, you can traverse the tree by creating a struct that implements the traversal::Vistor
trait and providing it to the Node::traverse
method.
HTML Conversion
If the html
feature is enabled, the crate provides the html::HTMLTransformer
struct that implements the Visitor
trait to create a well-formatted HTML output.
Unsupported
- Document streaming. Because
pest
lacks support for streaming, this crate also can't read a document from a stream.
Current Limitations
While the end goal for the parser is to support the entire CommonMark spec, it currently doesn't support:
- HTML blocks
- Setext headings
- ATX headings with closing hashes
- Entity references
- Using a tilde (~) to fence a codeblock
- Fenced codeblocks without a closing fence run until the end of the document rather than to the end of the container block
- Some of the edge cases for block quotes aren't handled per the spec. Specifically examples 247 through 252
All of these are a WIP and will be added to the parser.
Dependencies
~2–2.8MB
~57K SLoC