Trabalhando com Markdown em Kotlin: bibliotecas e parsers

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com Markdown em Kotlin: visão geral de bibliotecas e ferramentas

\n\n

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

\n\n

1. Biblioteca commonmark-java

\n\n

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

Instalação

\n

Adicione a dependência no build.gradle.kts:

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

Exemplo de uso

\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("**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\n

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

\n\n

2. Biblioteca flexmark-java

\n\n

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

Instalação

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

Exemplo com extensões

\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("| 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\n

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

3. Biblioteca nativa kmarkdown

\n\n

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

Instalação

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

Exemplo

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

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

Recommendations