Travailler avec Markdown en Kotlin : bibliothèques et analyseurs

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec Markdown en Kotlin : aperçu des bibliothèques et outils

\n\n

Markdown 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.

\n\n

1. Bibliothèque commonmark-java

\n\n

commonmark-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\n

Installation

\n

Ajoutez la dépendance dans build.gradle.kts :

\n
implementation("org.commonmark:commonmark:0.21.0")
\n\n

Exemple d'utilisation

\n
import 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\n

La 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.

\n\n

2. Bibliothèque flexmark-java

\n\n

flexmark-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\n

Installation

\n
implementation("com.vladsch.flexmark:flexmark-all:0.64.8")
\n\n

Exemple avec extensions

\n
import 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\n

Flexmark 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\n

3. Bibliothèque native kmarkdown

\n\n

kmarkdown 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\n

Installation

\n
implementation("net.nightwhistler:kmarkdown:1.0.2")
\n\n

Exemple

\n
import 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\n

Kmarkdown 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

Recommendations