js-slate-markdown-serializer
Markdown parser done right. Fast and easy to extend.
Live demo
- Follows the CommonMark spec + adds syntax extensions & sugar (URL autolinking, typographer).
- Configurable syntax! You can add new rules and even replace existing ones.
- High speed.
- Safe by default.
- Community-written plugins and other packages on npm.
Table of content
Install
node.js & bower:
npm install js-slate-markdown-serializer --save
bower install js-slate-markdown-serializer --save
browser (CDN):
Usage examples
See also:
Simple
var MarkdownSerializer = require('js-slate-markdown-serializer'),
md = new MarkdownSerializer();
var result = md.render('# markdown-it rulezz!');
var md = require('js-slate-markdown-serializer')();
var result = md.render('# markdown-it rulezz!');
var md = window.markdownit();
var result = md.render('# markdown-it rulezz!');
Single line rendering, without paragraph wrap:
var md = require('js-slate-markdown-serializer')();
var result = md.renderInline('__markdown-it__ rulezz!');
Init with presets and options
(*) presets define combinations of active rules and options. Can be
"commonmark"
, "zero"
or "default"
(if skipped). See
API docs for more details.
var md = require('js-slate-markdown-serializer')('commonmark');
var md = require('js-slate-markdown-serializer')();
var md = require('js-slate-markdown-serializer')({
html: true,
linkify: true,
typographer: true
});
var md = require('js-slate-markdown-serializer')({
html: false,
xhtmlOut: false,
breaks: false,
langPrefix: 'language-',
linkify: false,
typographer: false,
quotes: '“”‘’',
highlight: function () { return ''; }
});
Plugins load
var md = require('js-slate-markdown-serializer')()
.use(plugin1)
.use(plugin2, opts, ...)
.use(plugin3);
Syntax highlighting
Apply syntax highlighting to fenced code blocks with the highlight
option:
var hljs = require('highlight.js');
var md = require('js-slate-markdown-serializer')({
highlight: function (str, lang) {
if (lang && hljs.getLanguage(lang)) {
try {
return hljs.highlight(lang, str).value;
} catch (__) {}
}
return '';
}
});
Or with full wrapper override (if you need assign class to <pre>
):
var hljs = require('highlight.js');
var md = require('js-slate-markdown-serializer')({
highlight: function (str, lang) {
if (lang && hljs.getLanguage(lang)) {
try {
return '<pre class="hljs"><code>' +
hljs.highlight(lang, str, true).value +
'</code></pre>';
} catch (__) {}
}
return '<pre class="hljs"><code>' + md.utils.escapeHtml(str) + '</code></pre>';
}
});
Linkify
linkify: true
uses linkify-it. To
configure linkify-it, access the linkify instance through md.linkify
:
md.linkify.tlds('.py', false);
API
API documentation
If you are going to write plugins - take a look at
Development info.
Syntax extensions
Embedded (enabled by default):
Via plugins:
Manage rules
By default all rules are enabled, but can be restricted by options. On plugin
load all its rules are enabled automatically.
var md = require('js-slate-markdown-serializer')()
.disable([ 'link', 'image' ])
.enable([ 'link' ])
.enable('image');
md = require('js-slate-markdown-serializer')({
html: true,
linkify: true,
typographer: true,
});
Benchmark
Here is the result of readme parse at MB Pro Retina 2013 (2.4 GHz):
make benchmark-deps
benchmark/benchmark.js readme
Selected samples: (1 of 28)
> README
Sample: README.md (7774 bytes)
> commonmark-reference x 1,222 ops/sec ±0.96% (97 runs sampled)
> current x 743 ops/sec ±0.84% (97 runs sampled)
> current-commonmark x 1,568 ops/sec ±0.84% (98 runs sampled)
> marked x 1,587 ops/sec ±4.31% (93 runs sampled)
Note. CommonMark version runs with simplified link normalizers
for more "honest" compare. Difference is ~ 1.5x.
As you can see, markdown-it
doesn't pay with speed for it's flexibility.
Slowdown of "full" version caused by additional features not available in
other implementations.
Authors
markdown-it is the result of the decision of the authors who contributed to
99% of the Remarkable code to move to a project with the same authorship but
new leadership (Vitaly and Alex). It's not a fork.
References / Thanks
Big thanks to John MacFarlane for his work on the
CommonMark spec and reference implementations. His work saved us a lot of time
during this project's development.
Related Links:
Ports
License
MIT