العمل مع Markdown في Java: نظرة عامة على المكتبات وأمثلة الاستخدام
\n\nMarkdown هي لغة ترميز خفيفة، تُستخدم على نطاق واسع لتنسيق النصوص في التوثيق، ملفات README، المدونات وأنظمة إدارة المحتوى. في Java، توجد عدة مكتبات ناضجة تسمح بتحليل Markdown، وتحويله إلى HTML، وإجراء العمليات العكسية. في هذه المقالة، سنستعرض بالتفصيل ثلاث مكتبات شائعة: CommonMark، Flexmark و Pegdown، وسنقدم أمثلة عملية على استخدامها.
\n\n1. CommonMark (org.commonmark:commonmark)
\n\nCommonMark هو معيار صارم لـ Markdown يزيل الغموض من المواصفات الأصلية. مكتبة commonmark-java هي التطبيق المرجعي لهذا المعيار. وهي خفيفة الوزن وسريعة وتدعم الإضافات (الجداول، الشطب، الروابط التلقائية).
الإضافة (Maven):
\n<dependency>\n <groupId>org.commonmark</groupId>\n <artifactId>commonmark</artifactId>\n <version>0.21.0</version>\n</dependency>\n\nمثال على تحليل Markdown إلى HTML:
\nimport 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لإضافة الإضافات (مثل الجداول)، استخدم:
\nimport org.commonmark.ext.gfm.tables.TablesExtension;\n\nParser parser = Parser.builder()\n .extensions(List.of(TablesExtension.create()))\n .build();\n\n2. Flexmark (com.vladsch.flexmark)
\n\nFlexmark هي مكتبة عالية الأداء للعمل مع 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 مع الجداول:
\nimport 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<