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」中沒有破折號。 -it規則!
單行渲染,無段落換行:
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