
4 changed files with 276 additions and 6224 deletions
@ -0,0 +1,254 @@ |
|||||
|
# markdown-it |
||||
|
|
||||
|
[](https://travis-ci.org/markdown-it/markdown-it) |
||||
|
[](https://www.npmjs.org/package/markdown-it) |
||||
|
[](https://coveralls.io/r/markdown-it/markdown-it?branch=master) |
||||
|
[](https://gitter.im/markdown-it/markdown-it) |
||||
|
|
||||
|
> Markdown parser done right. Fast and easy to extend. |
||||
|
|
||||
|
__[Live demo](https://markdown-it.github.io)__ |
||||
|
|
||||
|
__v4.+ changed internals! Plugins need update. See [migration details](https://github.com/markdown-it/markdown-it/blob/master/docs/4.0_migration.md)__ |
||||
|
|
||||
|
- Supports the CommonMark spec + syntax extensions + sugar (URL autolinking, typographer). |
||||
|
- Configurable syntax! You can add new rules and even replace existing ones. |
||||
|
- High speed! |
||||
|
- Community-written __[plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin)__ and [other packages](https://www.npmjs.org/browse/keyword/markdown-it) on npm. |
||||
|
|
||||
|
__Table of content__ |
||||
|
|
||||
|
- [Install](#install) |
||||
|
- [Usage examples](#usage-examples) |
||||
|
- [API](#api) |
||||
|
- [Syntax extensions](#syntax-extensions) |
||||
|
- [Benchmark](#benchmark) |
||||
|
- [Authors](#authors) |
||||
|
- [References / Thanks](#references--thanks) |
||||
|
- [License](#license) |
||||
|
|
||||
|
## Install |
||||
|
|
||||
|
**node.js** & **bower**: |
||||
|
|
||||
|
```bash |
||||
|
npm install markdown-it --save |
||||
|
bower install markdown-it --save |
||||
|
``` |
||||
|
|
||||
|
**browser (CDN):** |
||||
|
|
||||
|
- [jsDeliver CDN](http://www.jsdelivr.com/#!markdown-it "jsDelivr CDN") |
||||
|
- [cdnjs.com CDN](https://cdnjs.com/libraries/markdown-it "cdnjs.com") |
||||
|
|
||||
|
|
||||
|
## Usage examples |
||||
|
|
||||
|
See also: |
||||
|
|
||||
|
- __[API documentation](https://markdown-it.github.io/markdown-it/)__ - for more |
||||
|
info and examples. |
||||
|
- [Development info](https://github.com/markdown-it/markdown-it/tree/master/docs) - |
||||
|
for plugins writers. |
||||
|
|
||||
|
|
||||
|
### Simple |
||||
|
|
||||
|
```js |
||||
|
// node.js, "classic" way: |
||||
|
var MarkdownIt = require('markdown-it'), |
||||
|
md = new MarkdownIt(); |
||||
|
var result = md.render('# markdown-it rulezz!'); |
||||
|
|
||||
|
// node.js, the same, but with sugar: |
||||
|
var md = require('markdown-it')(); |
||||
|
var result = md.render('# markdown-it rulezz!'); |
||||
|
|
||||
|
// browser without AMD, added to "window" on script load |
||||
|
// Note, there are no dash. |
||||
|
var md = window.markdownit(); |
||||
|
var result = md.render('# markdown-it rulezz!'); |
||||
|
``` |
||||
|
|
||||
|
Single line rendering, without paragraph wrap: |
||||
|
|
||||
|
```js |
||||
|
var md = require('markdown-it')(); |
||||
|
var result = md.renderInline('__markdown-it__ rulezz!'); |
||||
|
``` |
||||
|
|
||||
|
|
||||
|
### Init with presets and options |
||||
|
|
||||
|
(*) preset define combination of active rules and options. Can be |
||||
|
`"commonmark"`, `"zero"` or `"default"` (if skipped). See |
||||
|
[API docs](https://markdown-it.github.io/markdown-it/#MarkdownIt.new) for more details. |
||||
|
|
||||
|
```js |
||||
|
// commonmark mode |
||||
|
var md = require('markdown-it')('commonmark'); |
||||
|
|
||||
|
// default mode |
||||
|
var md = require('markdown-it')(); |
||||
|
|
||||
|
// enable everything |
||||
|
var md = require('markdown-it')({ |
||||
|
html: true, |
||||
|
linkify: true, |
||||
|
typographer: true |
||||
|
}); |
||||
|
|
||||
|
// full options list (defaults) |
||||
|
var md = require('markdown-it')({ |
||||
|
html: false, // Enable HTML tags in source |
||||
|
xhtmlOut: false, // Use '/' to close single tags (<br />). |
||||
|
// This is only for full CommonMark compatibility. |
||||
|
breaks: false, // Convert '\n' in paragraphs into <br> |
||||
|
langPrefix: 'language-', // CSS language prefix for fenced blocks. Can be |
||||
|
// useful for external highlighters. |
||||
|
linkify: false, // Autoconvert URL-like text to links |
||||
|
|
||||
|
// Enable some language-neutral replacement + quotes beautification |
||||
|
typographer: false, |
||||
|
|
||||
|
// Double + single quotes replacement pairs, when typographer enabled, |
||||
|
// and smartquotes on. Set doubles to '«»' for Russian, '„“' for German. |
||||
|
quotes: '“”‘’', |
||||
|
|
||||
|
// Highlighter function. Should return escaped HTML, |
||||
|
// or '' if the source string is not changed and should be escaped externaly. |
||||
|
highlight: function (/*str, lang*/) { return ''; } |
||||
|
}); |
||||
|
``` |
||||
|
|
||||
|
### Plugins load |
||||
|
|
||||
|
```js |
||||
|
var md = require('markdown-it')() |
||||
|
.use(plugin1) |
||||
|
.use(plugin2, opts, ...) |
||||
|
.use(plugin3); |
||||
|
``` |
||||
|
|
||||
|
|
||||
|
### Syntax highlighting |
||||
|
|
||||
|
Apply syntax highlighting to fenced code blocks with the `highlight` option: |
||||
|
|
||||
|
```js |
||||
|
var hljs = require('highlight.js') // https://highlightjs.org/ |
||||
|
|
||||
|
// Actual default values |
||||
|
var md = require('markdown-it')({ |
||||
|
highlight: function (str, lang) { |
||||
|
if (lang && hljs.getLanguage(lang)) { |
||||
|
try { |
||||
|
return hljs.highlight(lang, str).value; |
||||
|
} catch (__) {} |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
return hljs.highlightAuto(str).value; |
||||
|
} catch (__) {} |
||||
|
|
||||
|
return ''; // use external default escaping |
||||
|
} |
||||
|
}); |
||||
|
``` |
||||
|
|
||||
|
|
||||
|
## API |
||||
|
|
||||
|
__[API documentation](https://markdown-it.github.io/markdown-it/)__ |
||||
|
|
||||
|
If you are going to write plugins - take a look at |
||||
|
[Development info](https://github.com/markdown-it/markdown-it/tree/master/docs). |
||||
|
|
||||
|
|
||||
|
## Syntax extensions |
||||
|
|
||||
|
Embedded (enabled by default): |
||||
|
|
||||
|
- [Tables](https://help.github.com/articles/github-flavored-markdown/#tables) (GFM) |
||||
|
- [Strikethrough](https://help.github.com/articles/github-flavored-markdown/#strikethrough) (GFM) |
||||
|
|
||||
|
Via plugins: |
||||
|
|
||||
|
- [subscript](https://github.com/markdown-it/markdown-it-sub) |
||||
|
- [superscript](https://github.com/markdown-it/markdown-it-sup) |
||||
|
- [footnote](https://github.com/markdown-it/markdown-it-footnote) |
||||
|
- [definition list](https://github.com/markdown-it/markdown-it-deflist) |
||||
|
- [abbreviation](https://github.com/markdown-it/markdown-it-abbr) |
||||
|
- [emoji](https://github.com/markdown-it/markdown-it-emoji) |
||||
|
- [custom container](https://github.com/markdown-it/markdown-it-container) |
||||
|
- [insert](https://github.com/markdown-it/markdown-it-ins) |
||||
|
- [mark](https://github.com/markdown-it/markdown-it-mark) |
||||
|
- ... and [others](https://www.npmjs.org/browse/keyword/markdown-it-plugin) |
||||
|
|
||||
|
|
||||
|
### Manage rules |
||||
|
|
||||
|
By default all rules are enabled, but can be restricted by options. On plugin |
||||
|
load all it's rules are enabled automatically. |
||||
|
|
||||
|
```js |
||||
|
// Activate/deactivate rules, with curring |
||||
|
var md = require('markdown-it')() |
||||
|
.disable([ 'link', 'image' ]) |
||||
|
.enable([ 'link' ]) |
||||
|
.enable('image'); |
||||
|
|
||||
|
// Enable everything |
||||
|
md = require('markdown-it')('full', { |
||||
|
html: true, |
||||
|
linkify: true, |
||||
|
typographer: true, |
||||
|
}); |
||||
|
``` |
||||
|
|
||||
|
|
||||
|
## Benchmark |
||||
|
|
||||
|
Here is result of CommonMark spec parse at Core i5 2.4 GHz (i5-4258U): |
||||
|
|
||||
|
```bash |
||||
|
$ benchmark/benchmark.js spec |
||||
|
Selected samples: (1 of 27) |
||||
|
> spec |
||||
|
|
||||
|
Sample: spec.txt (110610 bytes) |
||||
|
> commonmark-reference x 68.63 ops/sec ±6.53% (72 runs sampled) |
||||
|
> current x 79.62 ops/sec ±3.22% (80 runs sampled) |
||||
|
> current-commonmark x 103 ops/sec ±1.10% (76 runs sampled) |
||||
|
> marked-0.3.2 x 23.14 ops/sec ±1.66% (42 runs sampled) |
||||
|
``` |
||||
|
|
||||
|
As you can see, `markdown-it` doesn't pay with speed for it's flexibility. |
||||
|
Because it's written in monomorphyc style and uses JIT inline caches effectively. |
||||
|
|
||||
|
|
||||
|
## Authors |
||||
|
|
||||
|
- Alex Kocharin [github/rlidwka](https://github.com/rlidwka) |
||||
|
- Vitaly Puzrin [github/puzrin](https://github.com/puzrin) |
||||
|
|
||||
|
_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](https://github.com/jgm) 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:** |
||||
|
|
||||
|
- https://github.com/jgm/CommonMark - reference CommonMark implementations in C & JS, |
||||
|
also contains latest spec & online demo. |
||||
|
- http://talk.commonmark.org - CommonMark forum, good place to collaborate |
||||
|
developers' efforts. |
||||
|
|
||||
|
## License |
||||
|
|
||||
|
[MIT](https://github.com/markdown-it/markdown-it/blob/master/LICENSE) |
File diff suppressed because it is too large
Loading…
Reference in new issue