العمل مع Markdown في C# (.NET): نظرة عامة على المكتبات والأدوات
\n\nMarkdown هي لغة ترميز خفيفة الوزن تُستخدم على نطاق واسع لتنسيق النص في التوثيق، وملفات README، والمدونات، والدردشات. في نظام C# (.NET)، توجد عدة مكتبات قوية تتيح تحليل ومعالجة وتحويل Markdown إلى HTML وصيغ أخرى. في هذه المقالة، سنستعرض الأدوات الأكثر شيوعًا، وإمكانياتها، وأمثلة على استخدامها.
\n\nلماذا تحتاج إلى معالجة Markdown في C#؟
\n\nتطبيقات الويب الحديثة، وأنظمة إدارة المحتوى (CMS)، ومحررات الأكواد تستخدم بشكل متزايد Markdown كصيغة إدخال أساسية. في C# (.NET)، قد يكون هذا مفيدًا من أجل:
\n- \n
- توليد محتوى ثابت (توثيق، مدونات) \n
- تنفيذ محررات WYSIWYG مع دعم Markdown \n
- استيراد/تصدير البيانات من أنظمة خارجية (GitHub، Reddit، Stack Overflow) \n
- تحويل Markdown إلى PDF، DOCX أو LaTeX عبر HTML وسيط \n
المكتبات الرئيسية لـ C# (.NET)
\n\n1. Markdig
\nMarkdig هي المكتبة الأكثر شيوعًا والأعلى أداءً للعمل مع Markdown في .NET. تدعم CommonMark، وGFM (GitHub Flavored Markdown)، والعديد من الإضافات: الجداول، وقوائم المهام، والاستبدال التلقائي للروابط، والصيغ الرياضية (عبر MathJax)، وغيرها الكثير.
\n\nالتثبيت:
\n// عبر NuGet Package Manager\nInstall-Package Markdig\n\n// أو عبر .NET CLI\ndotnet add package Markdig\n\nمثال على الاستخدام:
\nusing Markdig;\n\nstring markdown = @"\n# عنوان المستوى الأول\n\n**نص عريض** و *مائل*.\n\n- عنصر قائمة 1\n- عنصر قائمة 2\n\n> اقتباس\n\n```csharp\nConsole.WriteLine(""Hello, World!"");\n```";\n\n// التحويل إلى HTML مع إضافات GFM\nstring html = Markdown.ToHtml(markdown);\n\nConsole.WriteLine(html);\n\n\nالإمكانيات المتقدمة:
\n// إعداد خط أنابيب مع إضافات إضافية\nvar pipeline = new MarkdownPipelineBuilder()\n .UseAdvancedExtensions() // يشمل جميع الإضافات الشائعة\n .UseMathematics() // دعم صيغ LaTeX\n .UseEmojiAndSmiley() // الرموز التعبيرية :smile:\n .Build();\n\nstring htmlWithExtensions = Markdown.ToHtml(markdown, pipeline);\n\n\n2. CommonMark.NET
\nCommonMark.NET هو تطبيق صارم لمواصفات CommonMark (معيار Markdown). المكتبة خفيفة الوزن، بدون تبعيات، ومثالية للمشاريع التي تتطلب التوافق مع التطبيق المرجعي.
\n\nالتثبيت:
\nInstall-Package CommonMark.NET\n\nمثال على الاستخدام:
\nusing CommonMark;\n\nstring markdown = "مرحبًا، **العالم**!";\nstring html = CommonMarkConverter.Convert(markdown);\n\n// النتيجة: <p>مرحبًا، <strong>العالم</strong>!</p>\n\n\n3. MarkdownSharp
\nMarkdownSharp هو منفذ لمعالج Markdown الأصلي إلى C# من Jeff Atwood (المؤسس المشارك لـ Stack Overflow). المكتبة قديمة، ولكنها لا تزال تُستخدم في المشاريع القديمة. تدعم فقط الصيغة الأساسية بدون إضافات.
\n\nInstall-Package MarkdownSharp\n\nusing MarkdownSharp;\n\nvar markdown = new Markdown();\nstring html = markdown.Transform("**Hello**");\n\n\nأدوات إضافية
\n\n4. HtmlSanitizer (للإخراج الآمن)
\nعند تحويل Markdown إلى HTML ثم عرضه على صفحة ويب، من المهم تنظيف النتيجة من العلامات التي قد تشكل خطرًا (هجمات XSS). استخدم مكتبة HtmlSanitizer:
\n\nInstall-Package HtmlSanitizer\n\nusing Ganss.XSS;\n\nvar sanitizer = new HtmlSanitizer();\nstring rawHtml = Markdown.ToHtml("<script>alert('xss')</script>");\nstring safeHtml = sanit