Trabalhando com Markdown em Kotlin: visão geral de bibliotecas e ferramentas
\n\nMarkdown é uma linguagem de marcação popular para formatação de texto, amplamente utilizada em documentação, arquivos README, blogs e sistemas de gerenciamento de conteúdo. No ecossistema Kotlin, existem várias bibliotecas maduras que permitem fazer parsing de Markdown, convertê-lo para HTML e criar extensões personalizadas. Neste artigo, abordaremos três abordagens principais: o uso de commonmark-java, flexmark-java e da biblioteca nativa kmarkdown.
1. Biblioteca commonmark-java
\n\ncommonmark-java é a implementação oficial em Java da especificação CommonMark, que funciona perfeitamente em Kotlin. Ela oferece uma API simples, alto desempenho e conformidade rigorosa com o padrão.
\n\nInstalação
\nAdicione a dependência no build.gradle.kts:
implementation("org.commonmark:commonmark:0.21.0")\n\nExemplo de uso
\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("**Olá**, isso é *Markdown* em Kotlin!")\n val renderer = HtmlRenderer.builder().build()\n val html = renderer.render(document)\n println(html)\n // Saída: <p><strong>Olá</strong>, isso é <em>Markdown</em> em Kotlin!</p>\n}\n\nA biblioteca suporta todos os elementos básicos: cabeçalhos, listas, links, imagens, código e blocos de código. Para estender a funcionalidade, é possível adicionar módulos extras, como commonmark-ext-gfm-tables para tabelas do GitHub Flavored Markdown.
2. Biblioteca flexmark-java
\n\nflexmark-java é uma alternativa mais poderosa e flexível. Ela suporta CommonMark, GitHub Flavored Markdown (GFM), além de várias extensões: notas de rodapé, âncoras, emojis, fórmulas matemáticas e sintaxes personalizadas.
\n\nInstalação
\nimplementation("com.vladsch.flexmark:flexmark-all:0.64.8")\n\nExemplo com extensões
\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("| Título | Descrição |\\n|--------|-----------|\\n| Kotlin | Linguagem |\\n\\n~~Texto riscado~~")\n val renderer = HtmlRenderer.builder().extensions(extensions).build()\n println(renderer.render(document))\n}\n\nO Flexmark também permite personalizar a renderização: adicionar classes CSS, alterar a ordem dos atributos, criar visitantes personalizados para a árvore AST. Isso o torna a escolha ideal para projetos complexos que exigem ajustes finos na saída.
\n\n3. Biblioteca nativa kmarkdown
\n\nkmarkdown é uma implementação puramente em Kotlin de um parser Markdown, escrita usando corrotinas e recursos nativos da linguagem. Ela é leve e não requer dependências adicionais além da biblioteca padrão do Kotlin.
\n\nInstalação
\nimplementation("net.nightwhistler:kmarkdown:1.0.2")\n\nExemplo
\nimport net.nightwhistler.kmarkdown.KMarkdown\n\nfun main() {\n val markdown = KMarkdown()\n val html = markdown.parseToHtml("# Título\\n\\n**Texto** normal")\n println(html)\n // Saída: <h1>Título</h1><p><strong>Texto</strong> normal</p>\n}\n\nO Kmarkdown é adequado para cenários simples, quando não é necessário suporte a recursos avançados do GFM. Sua vantagem é a pureza do código e a ausência de dependências externas.
Também na biblioteca
Framework CLI para C# (.NET): System.CommandLine e Spectre.Console
Programação Reativa em C++: Bibliotecas e Prática
Spring Boot para Java: guia completo com exemplos
Frameworks CLI para Go (Golang): uma visão geral completa das ferramentas para criar aplicações de console