العمل مع Markdown في Kotlin: نظرة عامة على المكتبات والأدوات
\n\nMarkdown هي لغة ترميز شائعة لتنسيق النص، تُستخدم على نطاق واسع في التوثيق وملفات README والمدونات وأنظمة إدارة المحتوى. في نظام Kotlin البيئي، توجد عدة مكتبات ناضجة تتيح تحليل (Parsing) Markdown وتحويله إلى HTML، بالإضافة إلى إنشاء إضافات مخصصة. في هذه المقالة، سنستعرض ثلاثة مناهج رئيسية: استخدام commonmark-java و flexmark-java والمكتبة الأصلية kmarkdown.
1. مكتبة commonmark-java
\n\ncommonmark-java هي التطبيق الرسمي لمواصفات CommonMark بلغة Java، وتعمل بشكل ممتاز مع Kotlin. تقدم واجهة برمجة تطبيقات (API) بسيطة وأداءً عاليًا والتزامًا صارمًا بالمعيار.
\n\nالتثبيت
\nأضف التبعية في ملف build.gradle.kts:
implementation("org.commonmark:commonmark:0.21.0")\n\nمثال على الاستخدام
\nimport org.commonmark.parser.Parser\nimport org.commonmark.renderer.html.HtmlRenderer\n\nfun main() {\n val parser = Parser.builder().build()\n val document = parser.parse("**مرحباً**، هذا *Markdown* في Kotlin!")\n val renderer = HtmlRenderer.builder().build()\n val html = renderer.render(document)\n println(html)\n // الإخراج: <p><strong>مرحباً</strong>، هذا <em>Markdown</em> في Kotlin!</p>\n}\n\nتدعم المكتبة جميع العناصر الأساسية: العناوين، القوائم، الروابط، الصور، الكود، وكتل الكود. لتوسيع الوظائف، يمكن إضافة وحدات إضافية مثل commonmark-ext-gfm-tables لجداول GitHub Flavored Markdown.
2. مكتبة flexmark-java
\n\nflexmark-java هي بديل أكثر قوة ومرونة. تدعم CommonMark و GitHub Flavored Markdown (GFM)، بالإضافة إلى العديد من الإضافات: الحواشي السفلية، المراسي، الرموز التعبيرية، الصيغ الرياضية، والتراكيب المخصصة.
\n\nالتثبيت
\nimplementation("com.vladsch.flexmark:flexmark-all:0.64.8")\n\nمثال مع الإضافات
\nimport com.vladsch.flexmark.html.HtmlRenderer\nimport com.vladsch.flexmark.parser.Parser\nimport com.vladsch.flexmark.ext.tables.TablesExtension\nimport com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension\n\nfun main() {\n val extensions = listOf(TablesExtension.create(), StrikethroughExtension.create())\n val parser = Parser.builder().extensions(extensions).build()\n val document = parser.parse("| عنوان | وصف |\\n|-----------|----------|\\n| كوتلن | لغة |\\n\\n~~نص مشطوب~~")\n val renderer = HtmlRenderer.builder().extensions(extensions).build()\n println(renderer.render(document))\n}\n\nتتيح Flexmark أيضًا تخصيص عملية التقديم (Rendering): إضافة فئات CSS، تغيير ترتيب السمات، وإنشاء زوار (Visitors) مخصصين لشجرة AST. وهذا يجعلها الخيار الأمثل للمشاريع المعقدة التي تتطلب ضبطًا دقيقًا للمخرجات.
\n\n3. المكتبة الأصلية kmarkdown
\n\nkmarkdown هي تطبيق محلل Markdown نقي بلغة Kotlin، مكتوب باستخدام coroutines والأدوات المدمجة في اللغة. إنها خفيفة الوزن ولا تتطلب تبعيات إضافية بخلاف مكتبة Kotlin القياسية.
\n\nالتثبيت
\nimplementation("net.nightwhistler:kmarkdown:1.0.2")\n\nمثال
\nimport net.nightwhistler.kmarkdown.KMarkdown\n\nfun main() {\n val markdown = KMarkdown()\n val html = markdown.parseToHtml("# عنوان\\n\\nنص عادي **غامق**")\n println(html)\n // الإخراج: <h1>عنوان</h1><p>نص عادي <strong>غامق</strong></p>\n}\n\nKmarkdown مناسبة للسيناريوهات البسيطة التي لا تتطلب دعم الإمكانيات الموسعة لـ GFM. ميزتها هي نقاء الكود وغياب