markdown-ast
v0.3.0
Published
Markdown AST parser
Downloads
8,749
Readme
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
\n
chars 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\n
or\r\n\r\n
or\s\s\n
or\s\s\r\n
codeBlock
: triple backticks or 4-spaces/tab indentedcodeSpan
: inline backticksimage
:![alt](url)
or![alt][key]
or just![altAsKey]
italic
:_text_
or*text*
link
:[text](url)
or[text][key]
or just[textAsKey]
linkDef
:[key]: url
list
: markdown w/[-+*]|\d+[\.\)]
prefixquote
: markdown w/>
prefixstrike
:~~text~~
text
title
: 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.