العمل مع Markdown في Java: المكتبات، المحللات والأمثلة

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

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

ابدأ الدورة

العمل مع Markdown في Java: نظرة عامة على المكتبات وأمثلة الاستخدام

\n\n

Markdown هي لغة ترميز خفيفة، تُستخدم على نطاق واسع لتنسيق النصوص في التوثيق، ملفات README، المدونات وأنظمة إدارة المحتوى. في Java، توجد عدة مكتبات ناضجة تسمح بتحليل Markdown، وتحويله إلى HTML، وإجراء العمليات العكسية. في هذه المقالة، سنستعرض بالتفصيل ثلاث مكتبات شائعة: CommonMark، Flexmark و Pegdown، وسنقدم أمثلة عملية على استخدامها.

\n\n

1. CommonMark (org.commonmark:commonmark)

\n\n

CommonMark هو معيار صارم لـ Markdown يزيل الغموض من المواصفات الأصلية. مكتبة commonmark-java هي التطبيق المرجعي لهذا المعيار. وهي خفيفة الوزن وسريعة وتدعم الإضافات (الجداول، الشطب، الروابط التلقائية).

\n\n

الإضافة (Maven):

\n
<dependency>\n    <groupId>org.commonmark</groupId>\n    <artifactId>commonmark</artifactId>\n    <version>0.21.0</version>\n</dependency>
\n\n

مثال على تحليل Markdown إلى HTML:

\n
import org.commonmark.node.*;\nimport org.commonmark.parser.Parser;\nimport org.commonmark.renderer.html.HtmlRenderer;\n\npublic class CommonMarkExample {\n    public static void main(String[] args) {\n        String markdown = "# عنوان\\n\\nهذا نص **عريض** و *مائل*.\\n\\n- بند 1\\n- بند 2";\n\n        Parser parser = Parser.builder().build();\n        Node document = parser.parse(markdown);\n\n        HtmlRenderer renderer = HtmlRenderer.builder().build();\n        String html = renderer.render(document);\n\n        System.out.println(html);\n    }\n}
\n\n

نتيجة التنفيذ:

\n
<h1>عنوان</h1>\n<p>هذا نص <strong>عريض</strong> و <em>مائل</em>.</p>\n<ul>\n<li>بند 1</li>\n<li>بند 2</li>\n</ul>
\n\n

لإضافة الإضافات (مثل الجداول)، استخدم:

\n
import org.commonmark.ext.gfm.tables.TablesExtension;\n\nParser parser = Parser.builder()\n    .extensions(List.of(TablesExtension.create()))\n    .build();
\n\n

2. Flexmark (com.vladsch.flexmark)

\n\n

Flexmark هي مكتبة عالية الأداء للعمل مع Markdown، تدعم العديد من الإضافات: جداول GFM، الحواشي السفلية، السمات، الطباعة، إبراز بناء الجملة، وغيرها الكثير. وهي قابلة للتخصيص بالكامل ومناسبة للمشاريع المعقدة.

\n\n

الإضافة (Maven):

\n
<dependency>\n    <groupId>com.vladsch.flexmark</groupId>\n    <artifactId>flexmark-all</artifactId>\n    <version>0.64.8</version>\n</dependency>
\n\n

مثال على تحويل Markdown إلى HTML مع الجداول:

\n
import com.vladsch.flexmark.html.HtmlRenderer;\nimport com.vladsch.flexmark.parser.Parser;\nimport com.vladsch.flexmark.util.data.MutableDataSet;\nimport com.vladsch.flexmark.ext.tables.TablesExtension;\n\nimport java.util.Arrays;\n\npublic class FlexmarkExample {\n    public static void main(String[] args) {\n        MutableDataSet options = new MutableDataSet();\n        options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));\n\n        Parser parser = Parser.builder(options).build();\n        HtmlRenderer renderer = HtmlRenderer.builder(options).build();\n\n        String markdown = "| العمود 1 | العمود 2 |\\n|-----------|-----------|\\n| الخلية 1  | الخلية 2  |";\n\n        String html = renderer.render(parser.parse(markdown));\n        System.out.println(html);\n    }\n}
\n\n

تسمح Flexmark أيضًا باستخراج البيانات الوصفية (YAML front matter)، والتحويل إلى LaTeX، والعمل مع شجرة AST.

\n\n<

توصيات