"""Documentos con fecha para la página de inicio («Documentos recientes»), 21-oct-2026. Cada página .md con `date:` en su encabezado (AAAA-MM-DD) entra en `datos/documentos.json` del sitio construido, del más nuevo al más viejo. Lo lee docs/inicio/inicio.js. Las páginas que en el menú están bajo «Historia» (lo superado) no entran. No toca ningún archivo de docs/: el JSON solo existe en site/. """ import datetime import json import logging import os import re log = logging.getLogger("mkdocs.hooks.documentos") _DOCS = [] _FECHA = re.compile(r"^\d{4}-\d{2}-\d{2}$") # fecha al final del título: «… (21-oct-2026)», «… · 21-oct-2026», «… — 16 oct» _COLA = re.compile(r"\s*[(·—–-]\s*\d{1,2}[-\s](?:ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)[a-z]*\.?(?:[-\s]\d{4})?\s*\)?\s*$", re.I) # o un paréntesis final con fecha: «… (19-oct-2026, tarde)», «… (24-oct → 22-nov-2026)» _PAREN = re.compile(r"\s*\([^()]*\d{1,2}[-\s](?:ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)[^()]*\)\s*$", re.I) def on_pre_build(config, **kwargs): _DOCS.clear() def _fecha(valor): if isinstance(valor, (datetime.date, datetime.datetime)): return valor.isoformat()[:10] texto = str(valor or "")[:10] return texto if _FECHA.match(texto) else None def on_page_markdown(markdown, page, config, files, **kwargs): fecha = _fecha(page.meta.get("date")) if not fecha: return markdown if any(getattr(a, "title", "") == "Historia" for a in (page.ancestors or [])): return markdown titulo = str(page.meta.get("title") or page.title or "").strip() titulo = _COLA.sub("", _PAREN.sub("", titulo)).strip() or titulo _DOCS.append({"titulo": titulo, "fecha": fecha, "url": "/" + page.url}) return markdown def on_post_build(config, **kwargs): docs = sorted(_DOCS, key=lambda d: (d["fecha"], d["titulo"]), reverse=True) destino = os.path.join(config["site_dir"], "datos", "documentos.json") os.makedirs(os.path.dirname(destino), exist_ok=True) with open(destino, "w", encoding="utf-8") as f: json.dump({"total": len(docs), "documentos": docs[:60]}, f, ensure_ascii=False, indent=1) log.info("documentos.json: %d documentos con fecha", len(docs))