markdown-ast
markdown-ast copied to clipboard
Tiny markdown parser
markdown-ast
Fork of snarkdown that returns an array of AST nodes, instead of an HTML string.
TypeScript support included!
import md from 'markdown-ast'
const ast = md(code)
The goal is to support Github-style markdown. Please file an issue if you run into any inconsistencies.
Notable behavior
- Node locations are not tracked.
- No HTML parsing. Embedded HTML is plain text.
- Single
\nchars are removed from the start/end of plain text.
Node types
Every node has a type property equal to one of these:
bold:__text__or**text**border: 3+ character sequence of[*-_]w/ optional spaces betweenbreak:\n\nor\r\n\r\nor\s\s\nor\s\s\r\ncodeBlock: triple backticks or 4-spaces/tab indentedcodeSpan: inline backticksimage:or![alt][key]or just![altAsKey]italic:_text_or*text*link:[text](url)or[text][key]or just[textAsKey]linkDef:[key]: urllist: markdown w/[-+*]|\d+[\.\)]prefixquote: markdown w/>prefixstrike:~~text~~texttitle: markdown w/#{1,6}prefix or underlined w/ 3+=|-symbols
Available properties are defined here.
Block nodes
"Block nodes" have a block property containing any nested nodes. Blocks are
auto-closed when their parent block is closed (unless the nested block is
already closed, of course).
Some nodes (which may not be blocks) auto-close all open blocks. These
include border, break, list, quote, and title nodes.
"Inline blocks" can be used anywhere in the document. These include bold,
codeSpan, image, italic, link, and strike nodes.
"Recursive blocks" use their own parsing context to process any nested nodes.
These include list, quote, and title nodes.