Markdown 解析器做得很好。快速且易于扩展。
现场演示
遵循CommonMark 规范+ 添加语法扩展和糖(URL 自动链接、排版)。
可配置的语法!您可以添加新规则,甚至替换现有规则。
高速。
默认安全。
npm 上社区编写的插件和其他包。
目录
安装
使用示例
简单的
使用预设和选项进行初始化
插件加载
语法高亮
联化
应用程序编程接口
语法扩展
管理规则
基准
企业版 Markdown-it
作者
参考资料/致谢
节点.js :
npm 安装 markdown-it
浏览器(CDN):
jsDeliver CDN
CDNJS.com CDN
参见:
API 文档- 了解更多信息和示例。
开发信息 - 供插件编写者使用。
// node.js// 可以对 CJS 使用 `require('markdown-it')` import markdownit from 'markdown-it' const md = markdownit()const result = md.render('# markdown-it Rulezz!') ;// 使用 UMD 构建的浏览器,在脚本加载时添加到“window” // 注意,“markdownit”中没有破折号。const md = window.markdownit();const result = md.render('# markdown-itrulezz!');
单行渲染,无段落换行:
import markdownit from 'markdown-it'const md = markdownit()const result = md.renderInline('__markdown-it__rulezz!');
(*) 预设定义活动规则和选项的组合。可以是"commonmark"
、 "zero"
或"default"
(如果跳过)。有关更多详细信息,请参阅 API 文档。
import markdownit from 'markdown-it'// commonmark 模式 const md = markdownit('commonmark')// 默认模式 const md = markdownit()// 启用所有内容 const md = markdownit({ html:正确, 链接:真实, typographer: true})// 完整选项列表(默认)const md = markdownit({ // 在源代码中启用 HTML 标签 html:错误, // 使用“/”关闭单个标签 (<br />)。 // 这仅是为了完全兼容 CommonMark。 xhtml输出:假, // 将段落中的 'n' 转换为 <br> 中断:假, // 围栏块的 CSS 语言前缀。可以是 // 对于外部荧光笔很有用。 langPrefix: '语言-', // 自动将类似 URL 的文本转换为链接 链接:假, // 启用一些与语言无关的替换+引号美化 // 有关替换的完整列表,请参阅 https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs 印刷工:假的, // 双+单引号替换对,当typographer启用时, // 并启用智能引号。可以是字符串或数组。 // // 例如,您可以使用 '«»„“' 表示俄语,'„“‚'' 表示德语, // 和 ['«xA0', 'xA0»', '´xA0', 'xA0›'] 用于法语(包括 nbsp)。 引号: '””''', // 荧光笔功能。应该返回转义的 HTML, // 或 '' 如果源字符串未更改且应在外部转义。 // 如果结果以 <pre... 开头,则跳过内部包装器。 突出显示: function (/*str, lang*/) { return ''; }});
从 'markdown-it' 导入 markdownit const md = markdownit .use(插件1) .use(plugin2, opts, ...) .use(插件3);
使用highlight
选项将语法高亮应用于受隔离的代码块:
import markdownit from 'markdown-it'import hljs from 'highlight.js' // https://highlightjs.org// 实际默认值 const md = markdownit({ 突出显示: function (str, lang) {if (lang && hljs.getLanguage(lang)) { try {return hljs.highlight(str, { language: lang }).value; } catch (__) {}}返回''; // 使用外部默认转义 }});
或者使用完整的包装器覆盖(如果您需要将类分配给<pre>
或<code>
):
import markdownit from 'markdown-it'import hljs from 'highlight.js' // https://highlightjs.org// 实际默认值 const md = markdownit({ 突出显示: function (str, lang) {if (lang && hljs.getLanguage(lang)) { try {return '<pre><code class="hljs">' + hljs.highlight(str, { language: lang,ignoreIllegals : true }).value + '</code></pre>'; } catch (__) {}}return '<pre><code class="hljs">' + md.utils.escapeHtml(str) + '</code></pre>'; }});
linkify: true
使用 linkify-it。要配置 linkify-it,请通过md.linkify
访问 linkify 实例:
md.linkify.set({ fuzzyEmail: false }); // 禁用将电子邮件转换为链接
API文档
如果您要编写插件,请查看开发信息。
嵌入式(默认启用):
表格 (GFM)
删除线 (GFM)
通过插件:
下标
上标
脚注
定义列表
缩写
表情符号
定制容器
插入
标记
...以及其他
默认情况下,所有规则均已启用,但可以通过选项进行限制。插件加载时,其所有规则都会自动启用。
import markdownit from 'markdown-it' // 激活/停用规则,使用 curryingconst md = markdownit() .disable(['链接', '图像']) .enable(['链接']) .enable('image');// 启用所有内容 const md = markdownit({ html:正确, 链接:真实, 印刷师:正确,});
您可以在来源中找到所有规则:
parser_core.mjs
parser_block.mjs
parser_inline.mjs
以下是 MB Pro Retina 2013 (2.4 GHz) 的自述文件解析结果:
npm 运行基准测试 deps 基准/benchmark.mjs 自述文件 选定的示例:(28 中的 1)> 自述文件 示例:README.md(7774 字节)> commonmark-reference x 1,222 ops/sec ±0.96%(采样 97 次运行)> 当前 x 743 ops/sec ±0.84%(采样 97 次运行)> current-commonmark x 1,568 ops/sec ±0.84%(采样 98 次运行)> 标记 x 1,587 操作/秒 ±4.31% (采样了 93 次运行)
笔记。 CommonMark 版本使用简化的链接规范器运行,以进行更“诚实”的比较。差异为 ≈1.5×。
正如您所看到的, markdown-it
并没有因其灵活性而付出速度的代价。由于其他实现中不可用的附加功能而导致“完整”版本的速度变慢。
作为 Tidelift 订阅的一部分提供。
markdown-it
和数千个其他软件包的维护者正在与 Tidelift 合作,为您用于构建应用程序的开源依赖项提供商业支持和维护。节省时间、降低风险并改善代码运行状况,同时向您使用的确切依赖项的维护者付费。了解更多。
亚历克斯·科恰林 github/rlidwka
维塔利·普兹林 github/puzrin
markdown-它是贡献了 99% Remarkable代码的作者决定转移到具有相同作者身份但新领导层的项目(Vitaly 和 Alex)的结果。这不是叉子。
非常感谢 John MacFarlane 在 CommonMark 规范和参考实现方面所做的工作。在这个项目的开发过程中,他的工作为我们节省了大量时间。
相关链接:
https://github.com/jgm/CommonMark - C 和 JS 中的参考 CommonMark 实现,还包含最新规范和在线演示。
http://talk.commonmark.org - CommonMark 论坛,开发人员协作的好地方。
港口
运动 Markdown-it - Ruby/RubyMotion
markdown-it-py-Python