"""Repara el encabezado YAML (front matter) de las páginas que llegan con dos puntos sin comillas. Ejemplo real (19-oct): `author: Helgen Technologies (auditoría: Claude; revisión: Leo)`. YAML no acepta ese valor, MkDocs ignora todo el encabezado y lo pinta como texto al principio de la página. Aquí, solo si el encabezado no se puede leer, se ponen entre comillas los valores que tienen «: » y se vuelve a intentar. El archivo en disco no se toca (muchas de estas páginas llegan por scripts/sync-docs.sh); lo correcto es arreglar el original en el repo Drogheda. """ import logging import re import yaml log = logging.getLogger("mkdocs.hooks.frontmatter") _FM = re.compile(r"\A(---[ \t]*\n)(.*?\n)(---[ \t]*\n)", re.S) _LINEA = re.compile(r"^([A-Za-z0-9_\-]+):[ \t]+(.+?)[ \t]*$") def _lee(texto): try: datos = yaml.safe_load(texto) return isinstance(datos, dict) except yaml.YAMLError: return False def on_page_read_source(page, config, **kwargs): try: with open(page.file.abs_src_path, encoding="utf-8-sig") as f: fuente = f.read() except OSError: return None m = _FM.match(fuente) if not m or _lee(m.group(2)): return None lineas = [] for linea in m.group(2).split("\n"): r = _LINEA.match(linea) if r and ": " in r.group(2) and r.group(2)[0] not in "\"'[{|>": valor = r.group(2).replace("\\", "\\\\").replace('"', '\\"') linea = f'{r.group(1)}: "{valor}"' lineas.append(linea) nuevo = "\n".join(lineas) if not _lee(nuevo): return None log.info("Encabezado YAML reparado (dos puntos sin comillas): %s", page.file.src_uri) return m.group(1) + nuevo + m.group(3) + fuente[m.end():]