العمل مع Markdown في Kotlin: المكتبات والمحللات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع Markdown في Kotlin: نظرة عامة على المكتبات والأدوات

\n\n

Markdown هي لغة ترميز شائعة لتنسيق النص، تُستخدم على نطاق واسع في التوثيق وملفات README والمدونات وأنظمة إدارة المحتوى. في نظام Kotlin البيئي، توجد عدة مكتبات ناضجة تتيح تحليل (Parsing) Markdown وتحويله إلى HTML، بالإضافة إلى إنشاء إضافات مخصصة. في هذه المقالة، سنستعرض ثلاثة مناهج رئيسية: استخدام commonmark-java و flexmark-java والمكتبة الأصلية kmarkdown.

\n\n

1. مكتبة commonmark-java

\n\n

commonmark-java هي التطبيق الرسمي لمواصفات CommonMark بلغة Java، وتعمل بشكل ممتاز مع Kotlin. تقدم واجهة برمجة تطبيقات (API) بسيطة وأداءً عاليًا والتزامًا صارمًا بالمعيار.

\n\n

التثبيت

\n

أضف التبعية في ملف build.gradle.kts:

\n
implementation("org.commonmark:commonmark:0.21.0")
\n\n

مثال على الاستخدام

\n
import 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.

\n\n

2. مكتبة flexmark-java

\n\n

flexmark-java هي بديل أكثر قوة ومرونة. تدعم CommonMark و GitHub Flavored Markdown (GFM)، بالإضافة إلى العديد من الإضافات: الحواشي السفلية، المراسي، الرموز التعبيرية، الصيغ الرياضية، والتراكيب المخصصة.

\n\n

التثبيت

\n
implementation("com.vladsch.flexmark:flexmark-all:0.64.8")
\n\n

مثال مع الإضافات

\n
import 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\n

3. المكتبة الأصلية kmarkdown

\n\n

kmarkdown هي تطبيق محلل Markdown نقي بلغة Kotlin، مكتوب باستخدام coroutines والأدوات المدمجة في اللغة. إنها خفيفة الوزن ولا تتطلب تبعيات إضافية بخلاف مكتبة Kotlin القياسية.

\n\n

التثبيت

\n
implementation("net.nightwhistler:kmarkdown:1.0.2")
\n\n

مثال

\n
import 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\n

Kmarkdown مناسبة للسيناريوهات البسيطة التي لا تتطلب دعم الإمكانيات الموسعة لـ GFM. ميزتها هي نقاء الكود وغياب

توصيات