العمل مع Markdown في Rust: مراجعة المكتبات الرئيسية
\n\nتوفر لغة Rust وسائل قوية وآمنة لمعالجة البيانات النصية، بما في ذلك تحليل وعرض Markdown. بفضل الكتابة الصارمة، وغياب جامع القمامة، والأداء العالي، فإن مكتبات العمل مع Markdown في Rust مناسبة تمامًا لإنشاء المواقع الثابتة، والوثائق، والمدونات، وأنظمة الدردشة، وأي تطبيقات تتطلب تحويل Markdown إلى HTML أو تنسيقات أخرى. في هذه المقالة، سنستعرض ثلاث أدوات شائعة: pulldown-cmark، comrak، و markdown crate الرسمي.
1. pulldown-cmark — محلل يعتمد على الأحداث
\n\npulldown-cmark هي المكتبة الأكثر شيوعًا والأعلى أداءً لتحليل Markdown في Rust. وهي مبنية على نموذج الأحداث (pull parser)، مما يسمح بمعالجة المستندات بشكل تدفقي دون بناء شجرة بناء كاملة (AST) في الذاكرة. وهذا يجعلها مثالية للملفات الكبيرة والتطبيقات ذات الموارد المحدودة.
\n\nتتوافق المكتبة مع مواصفات CommonMark وتدعم جميع العناصر الأساسية: العناوين، القوائم، الكود، الجداول، الروابط، الصور، والهروب.
\n\n// مثال على تحليل Markdown إلى HTML باستخدام pulldown-cmark\nuse pulldown_cmark::{Parser, Options, html};\n\nlet markdown_input = "# مرحبًا بالعالم!\\n\\nهذا **نص عريض** و *مائل*.";\nlet mut options = Options::empty();\noptions.insert(Options::ENABLE_TABLES);\noptions.insert(Options::ENABLE_FOOTNOTES);\n\nlet parser = Parser::new_ext(&markdown_input, options);\nlet mut html_output = String::new();\nhtml::push_html(&mut html_output, parser);\n\nprintln!("{}", html_output);\n// الإخراج: <h1>مرحبًا بالعالم!</h1>\n// <p>هذا <strong>نص عريض</strong> و <em>مائل</em>.</p>\n\nميزات pulldown-cmark:
- \n
- استهلاك ضئيل للذاكرة — تحليل بدون AST. \n
- دعم الإضافات: الجداول، الحواشي السفلية، الشطب، الربط التلقائي لعناوين URL. \n
- دعم كامل لـ CommonMark 0.31.2. \n
- إمكانية المعالجة المخصصة للأحداث (مثل تمييز بناء الجملة). \n
2. comrak — محلل قابل للتوسع مع دعم GFM
\n\nComrak هو فرع من مكتبة JavaScript الشهيرة cmark-gfm، تم نقله إلى Rust. يوفر توافقًا كاملاً مع GitHub Flavored Markdown (GFM)، بما في ذلك إضافات مثل قوائم المهام، الجداول، الشطب، الروابط التلقائية، وهروب HTML.
يوفر Comrak واجهة برمجة تطبيقات مرنة مع إمكانية تكوين المحلل من خلال هيكل ComrakOptions. يمكنك تمكين أو تعطيل الإضافات الفردية، وتعيين عرض الجدولة، والسماح أو منع علامات HTML معينة.
// مثال على استخدام comrak لتحويل Markdown إلى HTML\nuse comrak::{markdown_to_html, ComrakOptions};\n\nlet markdown = "## قائمة المهام\\n\\n- [x] إنجاز الواجب المنزلي\\n- [ ] شراء البقالة\\n\\n```rust\\nfn main() {\\n println!(\\"Hello\\");\\n}\\n```";\n\nlet options = ComrakOptions::default();\nlet html = markdown_to_html(markdown, &options);\n\nprintln!("{}", html);\n// الإخراج يشمل: عنوان، مربعات اختيار، كتلة كود مع تمييز\n\nمزايا comrak:
- \n
- دعم كامل لـ GFM (GitHub Flavored Markdown). \n
- أمان قابل للتخصيص: هروب علامات HTML الخطيرة. \n
- دعم كتل الكود المتداخلة، والصيغ الرياضية (من خلال الإضافات). \n
- سرعة عالية في الأداء، مماثلة لـ
pulldown-cmark. \n
3. markdown crate — محلل بسيط وخفيف
\n\nإن markdown crate الرسمي (crate markdown) هو مكتبة بسيطة الحد الأدنى، تنفذ مواصفات Markdown الأساسية. لا يدعم الإضافات والجداول، ولكنه مناسب تمامًا للمهام البسيطة التي تتطلب فقط التحويل