Trabajo con Markdown en C++: revisión de bibliotecas y ejemplos de uso
Markdown es un lenguaje de marcado ligero, ampliamente utilizado para formatear texto en documentación, archivos README, blogs y sistemas de gestión de contenido. En el ecosistema de C++ existen varias bibliotecas maduras que permiten analizar Markdown y convertirlo a HTML u otros formatos. En este artículo revisaremos tres herramientas populares: md4c, cmark y cpp-markdown, y proporcionaremos ejemplos prácticos de su uso.
1. Biblioteca md4c
md4c es un analizador Markdown ligero, escrito en C puro (con encabezados compatibles con C++). Soporta la especificación CommonMark y las extensiones de GitHub Flavored Markdown (GFM), incluyendo tablas, tachado y enlaces automáticos. La biblioteca se caracteriza por su alto rendimiento y mínimo consumo de memoria.
Características principales:
- Cumplimiento del estándar CommonMark 0.30.
- Soporte de extensiones GFM (tablas, listas de tareas, tachado).
- API para análisis paso a paso (tipo SAX) y generación de HTML.
- Sin dependencias externas.
Ejemplo de uso de md4c para convertir Markdown a HTML:
#include <md4c-html.h>#include <iostream>#include <string>
// Callback para escribir la salida HTMLstatic void append_html(const MD_CHAR* text, MD_SIZE size, void* userdata) { std::string* output = static_cast<std::string*>(userdata); output->append(text, size);}
int main() { std::string markdown = "# Hello, **World**!
This is a *test*."; std::string html; MD_HTML_FLAGS flags = MD_HTML_FLAG_SKIP_UTF8_BOM; int result = md_html(markdown.c_str(), markdown.length(), append_html, &html, flags, 0); if (result == 0) { std::cout << html << std::endl; } else { std::cerr << "Parsing failed" << std::endl; } return 0;}2. Biblioteca cmark
cmark (anteriormente cmark-gfm) es la implementación de referencia del analizador CommonMark de la comunidad. También está escrita en C y proporciona un envoltorio para C++. La biblioteca cuenta con soporte activo y se utiliza en proyectos como GitHub, GitLab y Pandoc.
Características clave:
- Soporte completo de CommonMark (incluyendo la última versión de la especificación).
- Soporte integrado de GitHub Flavored Markdown (tablas, fórmulas, menciones).
- Generación de HTML, LaTeX, man, XML y otros formatos.
- API para control programático del AST (Árbol de Sintaxis Abstracta).
Ejemplo de uso de cmark para analizar y generar HTML:
#include <cmark-gfm.h>#include <iostream>
int main() { const char* markdown = "## Lista de tareas
- [x] Comprar leche- [ ] Llamar a un amigo"; // Análisis con soporte GFM cmark_node* doc = cmark_parse_document(markdown, strlen(markdown), CMARK_OPT_DEFAULT); // Conversión a HTML char* html = cmark_render_html(doc, CMARK_OPT_DEFAULT, NULL); std::cout << html << std::endl; // Liberación de memoria free(html); cmark_node_free(doc); return 0;}3. Biblioteca cpp-markdown
cpp-markdown es una biblioteca C++ escrita desde cero utilizando STL y las capacidades modernas de C++11/14. Está orientada a la simplicidad de integración y facilidad de uso en proyectos C++. A diferencia de md4c y cmark, no requiere dependencias externas de C.
Características:
- Implementación en C++ puro (plantillas, RAII, excepciones).
- Soporte de sintaxis básica de Markdown (encabezados, listas, enlaces, imágenes).
- Arquitectura extensible (se pueden agregar reglas de análisis propias).
- Pro
También en la biblioteca
Trabajo con YAML en Swift: biblioteca Yams para iOS/macOS
Geolocalización y mapas en PHP: bibliotecas, API y ejemplos de código
Monitoreo de aplicaciones PHP: herramientas y bibliotecas para el seguimiento del rendimiento
Trabajo con imágenes en PHP: guía completa de GD e Imagick