العمل مع Markdown في Go (Golang): من التحليل إلى التخصيص
\n\nMarkdown هي واحدة من أشهر لغات الترميز للتوثيق والمدونات والمواد التعليمية. في نظام Go (Golang) البيئي، توجد عدة مكتبات قوية تتيح تحليل Markdown، وتحويله إلى HTML، وحتى إضافة إبراز بناء الجملة. في هذه المقالة، سنستعرض الأدوات الرئيسية: goldmark، blackfriday و chroma، وسنوضح كيفية دمجها في المشاريع الحقيقية.
\n\nلماذا نحتاج العمل مع Markdown في Go؟
\n\nGo هي لغة تُختار غالبًا لإنشاء خوادم الويب وواجهات API ومولدات المواقع الثابتة. Markdown مثالي لتخزين المحتوى لأنه:
\n- \n
- قابل للقراءة في شكله الخام (حتى بدون عرض)؛ \n
- سهل التحرير؛ \n
- يدعم تضمين الأكواد والجداول والصور. \n
تتيح مكتبات Go تحويل Markdown إلى كود HTML آمن في الوقت الفعلي، وهو أمر بالغ الأهمية للمنصات التعليمية (مثل pythonlib.ru).
\n\n1. goldmark — محلل حديث وقابل للتوسع
\n\ngoldmark هي المكتبة المرجعية للعمل مع Markdown في Go. تدعم CommonMark 0.30 و GFM (GitHub Flavored Markdown) ويمكن توسيعها بسهولة عبر الإضافات.
\n\nالتثبيت:
\ngo get github.com/yuin/goldmark\n\nمثال أساسي لتحويل Markdown إلى HTML:
\npackage main\n\nimport (\n "bytes"\n "fmt"\n "github.com/yuin/goldmark"\n)\n\nfunc main() {\n source := []byte("# مرحبًا، Go!\\n\\nهذا نص **عريض** و `كود`.")\n var buf bytes.Buffer\n if err := goldmark.Convert(source, &buf); err != nil {\n panic(err)\n }\n fmt.Println(buf.String())\n}\n\nالإخراج:
\n<h1>مرحبًا، Go!</h1>\n<p>هذا <strong>نص عريض</strong> و <code>كود</code>.</p>\n\nإضافات goldmark:
\n- \n
goldmark-meta— تحليل بيانات YAML الوصفية (عناوين المقالات)؛ \n goldmark-highlighting— إبراز الكود عبر Chroma؛ \n goldmark-pdf— التصدير إلى PDF (تجريبي). \n
مثال باستخدام إضافة الجداول (GFM):
\nimport (\n "github.com/yuin/goldmark"\n "github.com/yuin/goldmark/extension"\n)\n\nfunc main() {\n md := goldmark.New(\n goldmark.WithExtensions(extension.GFM),\n )\n // ... التحويل\n}\n\n2. blackfriday — محلل مجرب عبر الزمن
\n\nblackfriday هي واحدة من أولى مكتبات Markdown في Go. على الرغم من أن goldmark يُعتبر أكثر حداثة، إلا أن blackfriday لا يزال يُستخدم في العديد من المشاريع (مثل Hugo).
\n\nالتثبيت:
\ngo get github.com/russross/blackfriday/v2\n\nمثال على الاستخدام:
\npackage main\n\nimport (\n "fmt"\n "github.com/russross/blackfriday/v2"\n)\n\nfunc main() {\n input := []byte("## عنوان\\n\\nقائمة:\\n- عنصر 1\\n- عنصر 2")\n output := blackfriday.Run(input)\n fmt.Println(string(output))\n}\n\nميزات blackfriday:
\n- \n
- دعم الحواشي السفلية والتعريفات والخط المشطوب؛ \n
- علامات مدمجة لتخصيص عرض HTML؛ \n
- تبعيات أقل مقارنة بـ goldmark. \n
3. إبراز الكود باستخدام Chroma
\n\nللمواقع التعليمية، يعتبر إبراز بناء الجملة أمرًا بالغ الأهمية. Chroma هو محلل نحوي عالمي يتكامل مع goldmark و blackfriday.
\n\nالتثبيت:
\ngo get github.com/alecthomas/chroma/v2\n\nالتكامل مع goldmark عبر goldmark-highlighting:
import (\n "github.com/yuin/goldmark"\n highlighting "github.com/yuin