العمل مع Markdown في Rust: نظرة عامة على الأدوات والمكتبات
تقدم Rust، المعروفة بأدائها وأمانها، العديد من المكتبات الناضجة للعمل مع Markdown. سواء كنت تنشئ مولد مواقع ثابتة، أو روبوت دردشة، أو نظام توثيق، أو محرر ملاحظات، فإن الاختيار الصحيح للأداة سيوفر ساعات من التطوير. في هذه المقالة، سنستعرض ثلاث مكتبات رئيسية: pulldown-cmark و markdown و comrak، بالإضافة إلى أمثلة عملية لاستخدامها.
1. pulldown-cmark — محلل يعتمد على الأحداث
pulldown-cmark هي المكتبة الأكثر شهرة وسرعة لتحليل Markdown في Rust. وهي تنفذ مواصفات CommonMark وتعمل وفق مبدأ "السحب": تحصل على تدفق من الأحداث (الوسوم، النصوص، الروابط) يمكن معالجتها مباشرة أو تحويلها إلى HTML.
الميزات الرئيسية:
- دعم كامل لـ CommonMark 0.30
- استهلاك ضئيل للذاكرة
- دعم الجداول، النص المشطوب، الروابط التلقائية
- إمكانية التخصيص من خلال معالجة الأحداث
- العمل بدون تخصيص ذاكرة (تحليل بدون نسخ)
مثال على التحليل والتحويل إلى HTML:
use pulldown_cmark::{Parser, html};
fn main() { let markdown_input = "# مرحباً بالعالم!
هذا نص **عريض** و *مائل*."; let parser = Parser::new(markdown_input); let mut html_output = String::new(); html::push_html(&mut html_output, parser); println!("{}", html_output);}النتيجة هي HTML صحيح مع وسوم <h1> و <strong> و <em>. المكتبة مثالية للأنظمة عالية التحميل حيث السرعة مهمة.
2. markdown (crate) — محول متعدد الاستخدامات
مكتبة markdown (الكرايت markdown) توفر كلاً من التحليل والتحويل إلى صيغ متعددة. على عكس pulldown-cmark، تقدم واجهة برمجة تطبيقات عالية المستوى وخيارات إخراج إضافية.
الميزات الرئيسية:
- دعم CommonMark و GitHub Flavored Markdown (GFM)
- التحويل إلى HTML، LaTeX، الطرفية
- هندسة قابلة للتوسع مع إضافات
- دعم مدمج لتنظيف HTML
- العمل مع بيانات YAML الوصفية
مثال مع التهيئة:
use markdown::to_html_with_options;use markdown::Options;
fn main() { let md = "## كود Rust```rustfn main() { println!(\\"Hello\\");}```"; let opts = Options { compile: markdown::CompileOptions { allow_dangerous_html: false, allow_dangerous_protocol: false, ..markdown::CompileOptions::default() }, ..markdown::Options::default() }; let html = to_html_with_options(md, &opts).unwrap(); println!("{}", html);}يوضح هذا المثال تحويلاً آمناً للكود مع تمييز الصياغة (إذا تم إضافة كرايت إضافي). يُوصى باستخدام markdown للمشاريع التي تحتاج إلى مرونة ودعم صيغ إخراج غير قياسية.
3. comrak — محلل موسع لـ GFM
comrak هو فرع من المحلل الشهير cmark مع إضافات GitHub إضافية. إنه الخيار الأفضل إذا كان مشروعك يتطلب توافقاً دقيقاً مع Markdown الخاص بـ GitHub، بما في ذلك الهروب، قوائم المهام، والرموز التعبيرية.
ميزات comrak:
- دعم كامل لـ GFM (الجداول، الشطب، الروابط التلقائية)
- إضافات: صياغة LaTeX، الصيغ الرياضية
- تنظيف HTML قابل للتخصيص
- دعم العارضين المخصصين
- التصدير إلى شجرة الصياغة المجردة (AST)