ตัวแยกวิเคราะห์ Markdown ทำถูกต้อง รวดเร็วและง่ายต่อการขยาย
การสาธิตสด
ปฏิบัติตาม ข้อกำหนด CommonMark + เพิ่มส่วนขยายไวยากรณ์และน้ำตาล (ลิงก์อัตโนมัติของ URL, ตัวพิมพ์)
ไวยากรณ์ที่กำหนดค่าได้! คุณสามารถเพิ่มกฎใหม่และแทนที่กฎที่มีอยู่ได้
ความเร็วสูง.
ปลอดภัยโดยค่าเริ่มต้น
ปลั๊กอิน ที่เขียนโดยชุมชนและแพ็คเกจอื่นๆ เวลา npm
สารบัญ
ติดตั้ง
ตัวอย่างการใช้งาน
เรียบง่าย
เริ่มต้นด้วยการตั้งค่าล่วงหน้าและตัวเลือก
โหลดปลั๊กอิน
การเน้นไวยากรณ์
ลิงค์ฟาย
เอพีไอ
ส่วนขยายไวยากรณ์
จัดการกฎ
เกณฑ์มาตรฐาน
markdown-it สำหรับองค์กร
ผู้เขียน
อ้างอิง/ขอบคุณ.
node.js :
npm ติดตั้ง markdown-it
เบราว์เซอร์ (CDN):
js ส่ง CDN
cdnjs.com CDN
ดูเพิ่มเติมที่:
เอกสารประกอบ API - สำหรับข้อมูลเพิ่มเติมและตัวอย่าง
ข้อมูลการพัฒนา - สำหรับผู้เขียนปลั๊กอิน
// node.js// สามารถใช้ `require('markdown-it')` สำหรับ CJSimport markdownit จาก 'markdown-it'const md = markdownit()const result = md.render('# markdown-it Rulezz!') ;// เบราว์เซอร์ที่มี UMD build เพิ่มใน "window" เมื่อโหลดสคริปต์// หมายเหตุ ไม่มีเส้นประใน "markdownit".const md = window.markdownit();const result = md.render('# markdown-it Rulezz!');
การแสดงผลบรรทัดเดียวโดยไม่ต้องตัดย่อหน้า:
นำเข้า markdownit จาก 'markdown-it'const md = markdownit()const result = md.renderInline('__markdown-it__ Rulezz!');
(*) ค่าที่ตั้งล่วงหน้ากำหนดการรวมกันของกฎและตัวเลือกที่ใช้งานอยู่ อาจเป็น "commonmark"
, "zero"
หรือ "default"
(หากข้าม) ดูเอกสาร API สำหรับรายละเอียดเพิ่มเติม
นำเข้า markdownit จาก 'markdown-it'// commonmark modeconst md = markdownit('commonmark')// default modeconst md = markdownit()// เปิดใช้งาน everythingconst md = markdownit({ html: จริง, เชื่อมโยง: จริง, ผู้พิมพ์: 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 ช่างพิมพ์: เท็จ // คู่การแทนที่เครื่องหมายคำพูดคู่ + เดี่ยว เมื่อเปิดใช้งานตัวพิมพ์ // และเปิด smartquotes อาจเป็นได้ทั้งสตริงหรืออาร์เรย์ - // ตัวอย่างเช่น คุณสามารถใช้ '«»„“' สำหรับภาษารัสเซีย, '„“‚'' สำหรับภาษาเยอรมัน, // และ ['«xA0', 'xA0»', '‹xA0', 'xA0›'] สำหรับภาษาฝรั่งเศส (รวมถึง nbsp) คำพูดอ้างอิง: '""''', // ฟังก์ชั่นเน้นข้อความ ควรส่งคืน HTML ที่หลบหนี // หรือ '' หากไม่มีการเปลี่ยนแปลงสตริงต้นฉบับและควรยกเว้นจากภายนอก // หากผลลัพธ์ขึ้นต้นด้วย <pre... wrapper ภายในจะถูกข้ามไป เน้น: function (/*str, lang*/) { return ''; -
นำเข้า markdownit จาก 'markdown-it'const md = markdownit .use(ปลั๊กอิน1) .use(plugin2, เลือก, ...) .use(ปลั๊กอิน3);
ใช้การเน้นไวยากรณ์กับบล็อกโค้ดที่ไม่ชอบด้วยตัวเลือก highlight
:
นำเข้า markdownit จาก 'markdown-it'import hljs จาก 'highlight.js' // https://highlightjs.org// ค่าเริ่มต้นตามจริง const md = markdownit({ เน้น: ฟังก์ชั่น (str, lang) {if (lang && hljs.getLanguage(lang)) { ลอง {return hljs.highlight(str, { ภาษา: lang }).value; } จับ (__) {}} กลับ ''; // ใช้การ Escape เริ่มต้นภายนอก -
หรือด้วยการแทนที่ wrapper แบบเต็ม (หากคุณต้องการกำหนดคลาสให้กับ <pre>
หรือ <code>
):
นำเข้า markdownit จาก 'markdown-it'import hljs จาก 'highlight.js' // https://highlightjs.org// ค่าเริ่มต้นตามจริง const md = markdownit({ เน้น: ฟังก์ชั่น (str, lang) {if (lang && hljs.getLanguage(lang)) { ลอง {return '<pre><code class="hljs">' + hljs.highlight(str, { ภาษา: lang, ไม่สนใจIllegals : จริง }).value + '</code></pre>'; } catch (__) {}}return '<pre><code class="hljs">' + md.utils.escapeHtml(str) + '</code></pre>'; -
linkify: true
linkify-it หากต้องการกำหนดค่า linkify-it ให้เข้าถึงอินสแตนซ์ linkify ผ่าน md.linkify
:
md.linkify.set({ fuzzyEmail: false }); // ปิดใช้งานการแปลงอีเมลเป็นลิงก์
เอกสาร API
หากคุณกำลังจะเขียนปลั๊กอิน โปรดดูที่ข้อมูลการพัฒนา
ฝังตัว (เปิดใช้งานตามค่าเริ่มต้น):
ตาราง (GFM)
ขีดทับ (GFM)
ผ่านปลั๊กอิน:
ตัวห้อย
ตัวยก
เชิงอรรถ
รายการคำจำกัดความ
ตัวย่อ
อีโมจิ
คอนเทนเนอร์ที่กำหนดเอง
แทรก
เครื่องหมาย
... และอื่น ๆ
ตามค่าเริ่มต้น กฎทั้งหมดจะถูกเปิดใช้งาน แต่สามารถจำกัดได้ด้วยตัวเลือก เมื่อโหลดปลั๊กอิน กฎทั้งหมดจะถูกเปิดใช้งานโดยอัตโนมัติ
นำเข้า markdownit จาก 'markdown-it'// เปิดใช้งาน/ปิดใช้งานกฎ โดยมี Curryingconst md = markdownit() .disable(['link', 'image']) .enable(['ลิงก์']) .enable('image');// เปิดใช้งาน everythingconst md = markdownit({ html: จริง, เชื่อมโยง: จริง, ผู้พิมพ์: จริง,});
คุณสามารถค้นหากฎทั้งหมดได้ในแหล่งที่มา:
parser_core.mjs
parser_block.mjs
parser_inline.mjs
นี่คือผลลัพธ์ของการแยกวิเคราะห์ readme ที่ MB Pro Retina 2013 (2.4 GHz):
npm รัน benchmark-deps benchmark/benchmark.mjs อ่านแล้ว ตัวอย่างที่เลือก: (1 จาก 28) > README ตัวอย่าง: README.md (7774 ไบต์) > การอ้างอิง Commonmark x 1,222 ops/วินาที ±0.96% (สุ่มตัวอย่าง 97 รัน) > ปัจจุบัน x 743 ops/วินาที ±0.84% (สุ่มตัวอย่าง 97 รัน) > current-commonmark x 1,568 ops/วินาที ±0.84% (สุ่มตัวอย่าง 98 รัน) > ทำเครื่องหมาย x 1,587 ops/วินาที ±4.31% (สุ่มตัวอย่าง 93 รัน)
บันทึก. เวอร์ชัน CommonMark ทำงานพร้อมกับลิงก์นอร์มัลไลเซอร์ที่เรียบง่ายเพื่อการเปรียบเทียบที่ "ซื่อสัตย์" มากขึ้น ความแตกต่างคือ γ1.5×
อย่างที่คุณเห็น markdown-it
ไม่ได้จ่ายด้วยความเร็วเพื่อความยืดหยุ่น การชะลอตัวของเวอร์ชัน "เต็ม" เกิดจากคุณลักษณะเพิ่มเติมที่ไม่สามารถใช้งานได้ในการใช้งานอื่นๆ
มีให้เป็นส่วนหนึ่งของการสมัครสมาชิก Tidelift
ผู้ดูแล markdown-it
และแพ็คเกจอื่นๆ หลายพันรายการกำลังทำงานร่วมกับ Tidelift เพื่อให้การสนับสนุนเชิงพาณิชย์และการบำรุงรักษาสำหรับการพึ่งพาโอเพ่นซอร์สที่คุณใช้ในการสร้างแอปพลิเคชันของคุณ ประหยัดเวลา ลดความเสี่ยง และปรับปรุงประสิทธิภาพของโค้ด ในขณะเดียวกันก็จ่ายค่าตอบแทนให้กับผู้ดูแลตามที่คุณใช้ เรียนรู้เพิ่มเติม
อเล็กซ์ โคชรินทร์ github/rlidwka
Vitaly Puzrin github/puzrin
markdown - เป็นผลมาจากการตัดสินใจของผู้เขียนที่สนับสนุน 99% ของโค้ด Remarkable เพื่อย้ายไปยังโปรเจ็กต์ที่มีการประพันธ์คนเดียวกัน แต่มีความเป็นผู้นำใหม่ (Vitaly และ Alex) มันไม่ใช่ส้อม
ขอขอบคุณ John MacFarlane มากสำหรับงานของเขาเกี่ยวกับข้อมูลจำเพาะ CommonMark และการใช้งานอ้างอิง งานของเขาช่วยเราประหยัดเวลาได้มากในระหว่างการพัฒนาโครงการนี้
ลิงค์ที่เกี่ยวข้อง:
https://github.com/jgm/CommonMark - การอ้างอิงการใช้งาน CommonMark ใน C & JS ยังมีข้อมูลจำเพาะล่าสุดและการสาธิตออนไลน์
http://talk.commonmark.org - ฟอรัม CommonMark เป็นสถานที่ที่ดีในการทำงานร่วมกันของนักพัฒนา
พอร์ต
การเคลื่อนไหว markdown-it - Ruby/RubyMotion
markdown-it-py- Python