العمل مع Markdown في Java: المكتبات والأدوات وأمثلة الكود
Markdown هي لغة ترميز خفيفة الوزن تُستخدم على نطاق واسع لتنسيق النص في التوثيق وملفات README والرسائل في المنتديات والمدونات. في Java، توجد عدة مكتبات قوية تتيح تحليل Markdown وتحويله إلى HTML أو PDF أو تنسيقات أخرى، بالإضافة إلى إنشاء محررات تفاعلية. في هذه المقالة، سنستعرض بالتفصيل الأدوات الرئيسية وإمكانياتها ونقدم أمثلة عملية على الكود.
لماذا نحتاج إلى تحليل Markdown في Java؟
لا تزال Java واحدة من أكثر اللغات شيوعًا لتطوير الخوادم. يتيح دمج Markdown في تطبيقات Java ما يلي:
- توليد محتوى HTML تلقائيًا من ملفات Markdown (على سبيل المثال، للتوثيق).
- إنشاء محررات WYSIWYG تدعم Markdown.
- استيراد وتصدير البيانات بتنسيق Markdown.
- تنفيذ عرض آمن للمحتوى الذي ينشئه المستخدم (تنظيف HTML).
المكتبات الرئيسية للعمل مع Markdown في Java
1. commonmark-java
التنفيذ الرسمي لمواصفات CommonMark في Java. تتميز هذه المكتبة بأداء عالٍ، والالتزام الصارم بالمعيار، وحجم صغير. إنها مثالية للمشاريع التي تتطلب تحليلًا موثوقًا وقابلًا للتنبؤ.
التثبيت (Maven):
<dependency> <groupId>org.commonmark</groupId> <artifactId>commonmark</artifactId> <version>0.21.0</version></dependency>مثال على الاستخدام:
import org.commonmark.node.*;import org.commonmark.parser.Parser;import org.commonmark.renderer.html.HtmlRenderer;
public class CommonMarkExample { public static void main(String[] args) { Parser parser = Parser.builder().build(); HtmlRenderer renderer = HtmlRenderer.builder().build();
String markdown = "# عنوان
هذا نص **عريض** و *مائل*."; Node document = parser.parse(markdown); String html = renderer.render(document);
System.out.println(html); // الإخراج: <h1>عنوان</h1> // <p>هذا <strong>نص عريض</strong> و <em>مائل</em>.</p> }}2. Flexmark-java
Flexmark هي مكتبة قابلة للتوسع تدعم CommonMark و GFM (GitHub Flavored Markdown) والعديد من الامتدادات الإضافية (الجداول، الحواشي السفلية، الروابط التلقائية، الرموز التعبيرية وغيرها). إنها مثالية للمشاريع المعقدة ذات المتطلبات غير القياسية.
التثبيت (Gradle):
implementation 'com.vladsch.flexmark:flexmark-all:0.64.8'مثال مع امتداد الجداول:
import com.vladsch.flexmark.html.HtmlRenderer;import com.vladsch.flexmark.parser.Parser;import com.vladsch.flexmark.ext.tables.TablesExtension;import com.vladsch.flexmark.util.data.MutableDataSet;
import java.util.Arrays;
public class FlexmarkExample { public static void main(String[] args) { MutableDataSet options = new MutableDataSet(); options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));
Parser parser = Parser.builder(options).build(); HtmlRenderer renderer = HtmlRenderer.builder(options).build();
String markdown = "| العمود 1 | العمود 2 ||----------|----------|| الخلية 1 | الخلية 2 |"; String html = renderer.render(parser.parse(markdown));
System.out.println(html); // الإخراج: <table>...</table> }}3. Pegdown
واحدة من أقدم المكتبات لـ Java. تستخدم Pegdown محلل PEG وتدعم العديد من الامتدادات، لكنها في السنوات الأخيرة أصبحت أقل أداءً مقارنة بـ commonmark-java و flex