Travailler avec Markdown en Kotlin : aperçu des bibliothèques et outils
\n\nMarkdown est un langage de balisage populaire pour le formatage de texte, largement utilisé dans la documentation, les fichiers README, les blogs et les systèmes de gestion de contenu. Dans l'écosystème Kotlin, il existe plusieurs bibliothèques matures permettant d'analyser le Markdown, de le convertir en HTML et de créer des extensions personnalisées. Dans cet article, nous examinerons trois approches principales : l'utilisation de commonmark-java, flexmark-java et de la bibliothèque native kmarkdown.
1. Bibliothèque commonmark-java
\n\ncommonmark-java est l'implémentation Java officielle de la spécification CommonMark, qui fonctionne parfaitement en Kotlin. Elle offre une API simple, des performances élevées et une stricte conformité à la norme.
\n\nInstallation
\nAjoutez la dépendance dans build.gradle.kts :
implementation("org.commonmark:commonmark:0.21.0")\n\nExemple d'utilisation
\nimport org.commonmark.parser.Parser\nimport org.commonmark.renderer.html.HtmlRenderer\n\nfun main() {\n val parser = Parser.builder().build()\n val document = parser.parse("**Bonjour**, ceci est *Markdown* en Kotlin !")\n val renderer = HtmlRenderer.builder().build()\n val html = renderer.render(document)\n println(html)\n // Sortie : <p><strong>Bonjour</strong>, ceci est <em>Markdown</em> en Kotlin !</p>\n}\n\nLa bibliothèque prend en charge tous les éléments de base : titres, listes, liens, images, code et blocs de code. Pour étendre les fonctionnalités, vous pouvez ajouter des modules supplémentaires, par exemple commonmark-ext-gfm-tables pour les tableaux GitHub Flavored Markdown.
2. Bibliothèque flexmark-java
\n\nflexmark-java est une alternative plus puissante et flexible. Elle prend en charge CommonMark, GitHub Flavored Markdown (GFM), ainsi que de nombreuses extensions : notes de bas de page, ancres, emojis, formules mathématiques et syntaxes personnalisées.
\n\nInstallation
\nimplementation("com.vladsch.flexmark:flexmark-all:0.64.8")\n\nExemple avec extensions
\nimport com.vladsch.flexmark.html.HtmlRenderer\nimport com.vladsch.flexmark.parser.Parser\nimport com.vladsch.flexmark.ext.tables.TablesExtension\nimport com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension\n\nfun main() {\n val extensions = listOf(TablesExtension.create(), StrikethroughExtension.create())\n val parser = Parser.builder().extensions(extensions).build()\n val document = parser.parse("| Titre | Description |\\n|-------------|-------------|\\n| Kotlin | Langage |\\n\\n~~Texte barré~~")\n val renderer = HtmlRenderer.builder().extensions(extensions).build()\n println(renderer.render(document))\n}\n\nFlexmark permet également de personnaliser le rendu : ajouter des classes CSS, modifier l'ordre des attributs, créer des visiteurs personnalisés pour l'arbre AST. Cela en fait un choix idéal pour les projets complexes nécessitant un réglage fin de la sortie.
\n\n3. Bibliothèque native kmarkdown
\n\nkmarkdown est une implémentation purement Kotlin d'un analyseur Markdown, écrite à l'aide de coroutines et des fonctionnalités intégrées du langage. Elle est légère et ne nécessite aucune dépendance supplémentaire en dehors de la bibliothèque standard Kotlin.
\n\nInstallation
\nimplementation("net.nightwhistler:kmarkdown:1.0.2")\n\nExemple
\nimport net.nightwhistler.kmarkdown.KMarkdown\n\nfun main() {\n val markdown = KMarkdown()\n val html = markdown.parseToHtml("# Titre\\n\\nTexte **normal**")\n println(html)\n // Sortie : <h1>Titre</h1><p>Texte <strong>normal</strong></p>\n}\n\nKmarkdown convient aux scénarios simples où la prise en charge des fonctionnalités avancées de GFM n'est pas nécessaire. Son avantage réside dans la propreté du code et l'absence
Aussi dans la bibliothèque
Files d'attente de tâches pour Rust : aperçu et exemples d'utilisation
Frameworks CLI pour Kotlin : Clikt, kotlinx-cli, picocli — aperçu et comparaison