Trabalhando com Markdown em Rust: visão geral das principais bibliotecas
\n\nA linguagem Rust fornece ferramentas poderosas e seguras para processamento de dados textuais, incluindo parsing e renderização de Markdown. Graças à tipagem forte, ausência de coletor de lixo e alta performance, as bibliotecas para trabalhar com Markdown em Rust são ideais para criar sites estáticos, documentação, blogs, sistemas de chat e qualquer aplicação que exija conversão de Markdown para HTML ou outros formatos. Neste artigo, veremos as três ferramentas mais populares: pulldown-cmark, comrak e o oficial markdown crate.
1. pulldown-cmark — parser orientado a eventos
\n\npulldown-cmark é a biblioteca mais popular e performática para parsing de Markdown em Rust. Ela é construída em um modelo orientado a eventos (pull parser), permitindo processar documentos de forma contínua, sem construir uma AST completa em memória. Isso a torna ideal para arquivos grandes e aplicações com recursos limitados.
\n\nA biblioteca segue a especificação CommonMark e suporta todos os elementos principais: cabeçalhos, listas, código, tabelas, links, imagens e escape.
\n\n// Exemplo de parsing de Markdown para HTML com pulldown-cmark\nuse pulldown_cmark::{Parser, Options, html};\n\nlet markdown_input = "# Olá, mundo!\\n\\nIsso é **texto em negrito** e *itálico*.";\nlet mut options = Options::empty();\noptions.insert(Options::ENABLE_TABLES);\noptions.insert(Options::ENABLE_FOOTNOTES);\n\nlet parser = Parser::new_ext(&markdown_input, options);\nlet mut html_output = String::new();\nhtml::push_html(&mut html_output, parser);\n\nprintln!("{}", html_output);\n// Saída: <h1>Olá, mundo!</h1>\n// <p>Isso é <strong>texto em negrito</strong> e <em>itálico</em>.</p>\n\nCaracterísticas do pulldown-cmark:
- \n
- Consumo mínimo de memória — parsing sem AST. \n
- Suporte a extensões: tabelas, notas de rodapé, tachado, links automáticos de URL. \n
- Suporte completo ao CommonMark 0.31.2. \n
- Possibilidade de processamento personalizado de eventos (por exemplo, para realce de sintaxe). \n
2. comrak — parser extensível com suporte a GFM
\n\nComrak é um fork da popular biblioteca JavaScript cmark-gfm, portado para Rust. Ele oferece compatibilidade total com o GitHub Flavored Markdown (GFM), incluindo extensões como listas de tarefas, tabelas, tachado, links automáticos e escape de HTML.
O Comrak fornece uma API flexível com a possibilidade de configurar o parser através da estrutura ComrakOptions. Você pode ativar ou desativar extensões individuais, definir a largura da tabulação, permitir ou proibir certas tags HTML.
// Exemplo de uso do comrak para converter Markdown em HTML\nuse comrak::{markdown_to_html, ComrakOptions};\n\nlet markdown = "## Lista de tarefas\\n\\n- [x] Fazer lição de casa\\n- [ ] Comprar mantimentos\\n\\n```rust\\nfn main() {\\n println!(\\"Hello\\");\\n}\\n```";\n\nlet options = ComrakOptions::default();\nlet html = markdown_to_html(markdown, &options);\n\nprintln!("{}", html);\n// Saída inclui: cabeçalho, caixas de seleção, bloco de código com realce\n\nVantagens do comrak:
- \n
- Suporte completo a GFM (GitHub Flavored Markdown). \n
- Segurança configurável: escape de tags HTML perigosas. \n
- Suporte a blocos de código aninhados, fórmulas matemáticas (através de extensões). \n
- Alta velocidade de operação, comparável ao
pulldown-cmark. \n
3. markdown crate — parser simples e leve
\n\nO oficial markdown crate (crate markdown) é uma biblioteca minimalista que implementa a especificação básica do Markdown. Ela não suporta extensões e tabelas, mas é perfeita para tarefas simples onde é necessária apenas a conversão
Também na biblioteca
Geração Swagger/OpenAPI para JavaScript (Node.js) — ferramentas e bibliotecas
Geração de PDF em C++: visão geral de bibliotecas e ferramentas
Gson para Java: guia completo com exemplos