العمل مع Markdown في Kotlin: مراجعة المكتبات والأدوات
Markdown هي لغة ترميز شائعة تُستخدم لتنسيق النصوص في التوثيق، المدونات، الدردشات والمنصات التعليمية. في نظام Kotlin البيئي، توجد عدة مكتبات قوية تتيح تحليل وإنشاء وتحويل Markdown. في هذه المقالة، سنستعرض الأدوات الرئيسية، إمكانياتها، ونقدم أمثلة عملية على الكود.
لماذا نحتاج إلى تحليل Markdown في Kotlin؟
عند تطوير المواقع التعليمية، محررات الكود، أنظمة إدارة المحتوى أو تطبيقات الملاحظات، غالبًا ما نحتاج إلى:
- تحويل نص Markdown إلى HTML لعرضه على صفحات الويب
- إنشاء محررات WYSIWYG تدعم Markdown
- تحليل بنية المستند (العناوين، القوائم، الروابط)
- توليد ترميز Markdown برمجيًا
المكتبات الرئيسية للعمل مع Markdown في Kotlin
1. Flexmark (موصى بها)
Flexmark هي مكتبة عالية الأداء لتحليل Markdown، مكتوبة بلغة Java ومتوافقة تمامًا مع Kotlin. تدعم CommonMark، GFM (GitHub Flavored Markdown) والعديد من الإضافات (الجداول، الحواشي، الرموز التعبيرية، الصيغ الرياضية).
الإضافة عبر Gradle:
implementation("com.vladsch.flexmark:flexmark:0.64.8")implementation("com.vladsch.flexmark:flexmark-html2md-converter:0.64.8")مثال على تحويل Markdown إلى HTML:
import com.vladsch.flexmark.html.HtmlRendererimport com.vladsch.flexmark.parser.Parserimport com.vladsch.flexmark.util.data.MutableDataSet
fun main() { val options = MutableDataSet() val parser = Parser.builder(options).build() val renderer = HtmlRenderer.builder(options).build()
val markdown = """ # مرحبًا، Kotlin! هذا **مثال** للعمل مع *Markdown*. - بند 1 - بند 2 """.trimIndent()
val document = parser.parse(markdown) val html = renderer.render(document) println(html) // الإخراج: <h1>مرحبًا، Kotlin!</h1> // <p>هذا <strong>مثال</strong> للعمل مع <em>Markdown</em>.</p> // <ul><li>بند 1</li><li>بند 2</li></ul>}2. CommonMark-Java
CommonMark-Java هي تطبيق مرجعي لمواصفات CommonMark. خفيفة، سريعة، وبسيطة. مناسبة إذا كنت لا تحتاج إلى إضافات GFM.
implementation("org.commonmark:commonmark:0.21.0")import org.commonmark.parser.Parserimport org.commonmark.renderer.html.HtmlRenderer
fun main() { val parser = Parser.builder().build() val renderer = HtmlRenderer.builder().build()
val markdown = "**نص عريض** و*مائل*" val document = parser.parse(markdown) val html = renderer.render(document) println(html) // <p><strong>نص عريض</strong> و<em>مائل</em></p>}3. KMarkdown (لـ Kotlin Multiplatform)
KMarkdown هي مكتبة Kotlin أصلية تدعم Kotlin Multiplatform (JVM, JS, Native). مثالية للمشاريع عبر المنصات.
// build.gradle.ktsimplementation("com.github.cretz.kmarkdown:kmarkdown:0.2.0")import com.cretz.kmarkdown.KMarkdown
fun main() { val md = KMarkdown() val html = md.toHtml("# عنواننص عادي مع `كود`") println(html) // <h1>عنوان</h1><p>نص عادي مع <code>كود</code></p>}الإمكانيات المتقدمة لـ Flexmark
يتيح Flexmark ضبطًا دقيقًا لعملية التحليل والعرض. دعنا نستعرض بعض السيناريوهات المفيدة.
إضافة الإضافات (الجداول، الشطب)
imp