Primeros pasos
El camino más corto desde "acabo de instalar markast" hasta "estoy enviando contenido a mi cliente". Todo aquí usa los valores por defecto; los capítulos siguientes cubren la configuración.
Instalación
pip install markast
Extras opcionales:
pip install markast[test]— añadepytestpara correr la suite de tests.pip install linkify-it-py— necesario si quieres detección automática de URLs (featureautolinks). Sin él, esa única feature se desactiva silenciosamente — el resto sigue funcionando.
Parsea Markdown
from markast import parse
doc = parse("# Hola\n\nUn párrafo con **negrita** y un [enlace](https://example.com).")
print(doc.to_json(indent=2))
Salida (abreviada):
{
"type": "document",
"version": "1.0",
"warnings": [],
"children": [
{ "type": "heading", "level": 1, "children": [
{ "type": "text", "value": "Hola" }
] },
{ "type": "paragraph", "children": [
{ "type": "text", "value": "Un párrafo con " },
{ "type": "bold", "children": [
{ "type": "text", "value": "negrita" }
] },
{ "type": "text", "value": " y un " },
{ "type": "link", "href": "https://example.com", "title": null,
"children": [ { "type": "text", "value": "enlace" } ] },
{ "type": "text", "value": "." }
] }
]
}
Esa es toda la API para el caso más simple.
Render
parse() devuelve un Document. Las cuatro operaciones que usarás más:
doc.to_json(indent=2) # str — el árbol estructurado, para transporte
doc.to_markdown() # str — Markdown canónico, para UIs de edición
doc.to_html() # str — HTML, para render server-side
doc.to_dict() # dict — el árbol crudo subyacente
Inspeccionar warnings
El parser nunca lanza excepciones por contenido inválido. Si algo no es válido para renderizar en el cliente (imagen dentro de heading, widget desconocido, …), emite un diagnóstico:
doc = parse("# ")
for w in doc.warnings:
print(w["code"], w["message"])
# W001 Image inside h1 heading — alt text used as content.
Usa un widget registrado
markast trae varios widgets pre-registrados. Los más comunes son los admonitions:
from markast import parse
md = """
:::tip title="Consejo"
Puedes anidar **markdown** aquí.
:::
"""
doc = parse(md)
print(doc.to_html())
# <aside class="admonition admonition-tip"><header>Consejo</header>
# <div class="admonition-body"><p>Puedes anidar <strong>markdown</strong> aquí.</p></div>
# </aside>
Otros builtins: note, info, warning, caution, danger, card, video, code-group, code-collapse, tabs, steps, badge. Sigue en el capítulo Widgets para el catálogo completo y cómo escribir los tuyos.
A dónde ir después
- Referencia del AST — cada tipo de nodo y sus campos.
- Widgets — builtins y widgets propios.
- Integración con clientes — patrones para cualquier stack de front-end.