| # 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) |