Travailler avec Markdown en Java : présentation des bibliothèques et exemples d'utilisation
\n\nMarkdown est un langage de balisage léger, largement utilisé pour formater du texte dans la documentation, les fichiers README, les blogs et les systèmes de gestion de contenu. En Java, il existe plusieurs bibliothèques matures permettant d'analyser Markdown, de le convertir en HTML et d'effectuer des opérations inverses. Dans cet article, nous examinerons en détail les trois bibliothèques les plus populaires : CommonMark, Flexmark et Pegdown, et nous fournirons des exemples pratiques de leur utilisation.
\n\n1. CommonMark (org.commonmark:commonmark)
\n\nCommonMark est un standard strict de Markdown qui élimine les ambiguïtés de la spécification originale. La bibliothèque commonmark-java est l'implémentation de référence de ce standard. Elle est légère, rapide et prend en charge les extensions (tableaux, barré, liens automatiques).
Ajout de la dépendance (Maven) :
\n<dependency>\n <groupId>org.commonmark</groupId>\n <artifactId>commonmark</artifactId>\n <version>0.21.0</version>\n</dependency>\n\nExemple d'analyse de Markdown en 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 = "# Titre\\n\\nCeci est du texte **gras** et *italique*.\\n\\n- Élément 1\\n- Élément 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\nRésultat de l'exécution :
\n<h1>Titre</h1>\n<p>Ceci est du texte <strong>gras</strong> et <em>italique</em>.</p>\n<ul>\n<li>Élément 1</li>\n<li>Élément 2</li>\n</ul>\n\nPour ajouter des extensions (par exemple, les tableaux), utilisez :
\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 est une bibliothèque haute performance pour travailler avec Markdown, qui prend en charge de nombreuses extensions : tableaux GFM, notes de bas de page, attributs, typographie, coloration syntaxique du code et bien plus encore. Elle est entièrement personnalisable et adaptée aux projets complexes.
\n\nAjout de la dépendance (Maven) :
\n<dependency>\n <groupId>com.vladsch.flexmark</groupId>\n <artifactId>flexmark-all</artifactId>\n <version>0.64.8</version>\n</dependency>\n\nExemple de conversion de Markdown en HTML avec des tableaux :
\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 = "| Colonne 1 | Colonne 2 |\\n|-----------|-----------|\\n| Cellule 1 | Cellule 2 |";\n\n String html = renderer.render(parser.parse(markdown));\n System.out.println(html);\n }\n}\n\nFlexmark permet également d'extraire des métadonnées (YAML front matter), de convertir en LaTeX et de travailler avec l'arbre AST.
\n\n<