# models/pagina_html.py import os import re import hashlib from pathlib import Path class PaginaHTML: def __init__(self, ruta_archivo, titulo=None, contenido=None, imagenes=None): self.ruta_archivo = ruta_archivo self.nombre_archivo = Path(ruta_archivo).name self.titulo = titulo or self._extraer_titulo_de_ruta() self.contenido = contenido or "" self.hash = self._generar_hash() self.imagenes = imagenes or [] # Lista de imágenes asociadas a esta página def _extraer_titulo_de_ruta(self): """Extrae el título a partir del nombre del archivo.""" nombre = Path(self.ruta_archivo).stem # Limpia el nombre: reemplaza guiones y underscores por espacios nombre = re.sub(r"[_-]", " ", nombre) # Capitaliza cada palabra nombre = " ".join(word.capitalize() for word in nombre.split()) return nombre def _generar_hash(self): """Genera un hash único para la página.""" elementos_hash = [ self.nombre_archivo, self.titulo, ( self.contenido[:500] if self.contenido else "" ), # Usar solo los primeros 500 caracteres ] texto_hash = "|".join(elementos_hash) return hashlib.md5(texto_hash.encode()).hexdigest() def to_markdown(self): """Convierte la página a formato Markdown.""" # Hash como comentario al principio hash_line = f"\n\n" # Título como encabezado titulo_line = f"## {self.titulo}\n\n" # Nombre del archivo original como referencia origen_line = f"*Origen: {self.nombre_archivo}*\n\n" # Contenido md = f"{hash_line}{titulo_line}{origen_line}" # Limpiar cualquier artefacto de asteriscos extra antes de agregar el contenido contenido_limpio = re.sub(r"(\*{3,}|\-{3,}|_{3,})", "---", self.contenido) md += contenido_limpio + "\n\n" # Ya no se agregan imágenes al final - se asume que están en el contenido md += "---\n\n" return md def get_index_entry(self): """Genera una entrada para el índice.""" # Formatear el título para el enlace de Markdown slug = re.sub(r"[^\w\s-]", "", self.titulo.lower()) slug = re.sub(r"\s+", "-", slug) return f"- [{self.titulo}](#{slug})" def add_imagen(self, imagen): """Añade una referencia a una imagen asociada a esta página.""" if imagen not in self.imagenes: self.imagenes.append(imagen)