العمل مع Markdown في Node.js: مكتبات للتحليل والتحويل
\n\nMarkdown هي لغة ترميز خفيفة، تُستخدم على نطاق واسع لتنسيق النص في التوثيق وملفات README والمدونات وأنظمة إدارة المحتوى. في بيئة Node.js، توجد عدة مكتبات قوية تسمح بتحليل Markdown وتحويله إلى HTML، بالإضافة إلى إجراء العملية العكسية. في هذه المقالة، سنستعرض ثلاثة من أشهر الأدوات: marked و showdown و remarkable، وميزاتها وواجهات برمجة التطبيقات (API) وأمثلة على الاستخدام.
\n\n1. مكتبة marked
\n\nmarked هو محلل Markdown سريع وخفيف الوزن، يدعم جميع عناصر الصياغة الأساسية (العناوين، القوائم، الروابط، الصور، الكود، الجداول، إلخ). يتميز بأداء عالٍ وسهولة في التهيئة.
\n\nالتثبيت
\nnpm install marked\n\nالاستخدام الأساسي
\nلتحويل سلسلة Markdown إلى HTML، يكفي استدعاء الدالة marked():
const marked = require('marked');\n\nconst markdownText = `\n# مرحباً بالعالم!\n\nهذا **نص عريض** و *مائل*.\n\n- عنصر قائمة 1\n- عنصر قائمة 2\n\n[رابط إلى PythonLib](https://pythonlib.ru)\n`;\n\nconst html = marked(markdownText);\nconsole.log(html);\n\n\nنتيجة التنفيذ:
\n<h1>مرحباً بالعالم!</h1>\n<p>هذا <strong>نص عريض</strong> و <em>مائل</em>.</p>\n<ul>\n<li>عنصر قائمة 1</li>\n<li>عنصر قائمة 2</li>\n</ul>\n<p><a href="https://pythonlib.ru">رابط إلى PythonLib</a></p>\n\nتهيئة الخيارات
\nيدعم marked العديد من الخيارات لتخصيص المخرجات:
\nconst marked = require('marked');\n\nmarked.setOptions({\n breaks: true, // تحويل فواصل الأسطر إلى <br>\n gfm: true, // تفعيل GitHub Flavored Markdown (الجداول، الشطب، إلخ)\n headerIds: false, // عدم إضافة معرفات للعناوين\n mangle: false, // عدم ترميز عناوين البريد الإلكتروني\n sanitize: false // عدم إزالة وسوم HTML (خطير، استخدم بحذر)\n});\n\nconst html = marked('السطر 1\\nالسطر 2');\nconsole.log(html); // سيُظهر مع <br> بين الأسطر\n\n\nالاستخدام المتزامن وغير المتزامن
\nبشكل افتراضي، تعمل marked() بشكل متزامن، ولكنها تدعم أيضًا الوضع غير المتزامن عبر الوعود (Promises):
const marked = require('marked');\n\nasync function convertMarkdown(text) {\n const html = await marked.parse(text);\n return html;\n}\n\nconvertMarkdown('# عنوان').then(console.log);\n\n\n2. مكتبة showdown
\n\nshowdown هو محلل Markdown شائع آخر، يمكنه العمل في المتصفح وفي Node.js. يوفر واجهة برمجة تطبيقات قابلة للتوسع ويدعم العديد من الإضافات.
\n\nالتثبيت
\nnpm install showdown\n\nالاستخدام الأساسي
\nأنشئ مثيلاً للمحول واستدعِ الطريقة makeHtml():
const showdown = require('showdown');\nconst converter = new showdown.Converter();\n\nconst markdownText = '## عنوان فرعي\\n\\nنص عادي مع **تأكيد**.';\nconst html = converter.makeHtml(markdownText);\nconsole.log(html);\n\n\nالنتيجة:
\n<h2>عنوان فرعي</h2>\n<p>نص عادي مع <strong>تأكيد</strong>.</p>\n\nالإضافات والتخصيص
\nيسمح showdown بإضافة إضافات مخصصة، على سبيل المثال، لدعم الرموز التعبيرية أو صيغ LaTeX:
\nconst showdown = require('showdown');\n\n// إنشاء إضافة لاستبدال :smile: برمز تعبيري\nconst emojiExtension = function() {\n return [{\n type: 'lang',\n regex: /:smile:/g,\n replace: '😊'\n }];\n};\n\n