#!/usr/bin/env python3 #-*- coding:utf-8 -*- """ Este programa es un „hack“, y el código no es bonito, pero funciona. En algún momento pasaré a jinja2 o a hacerme un CRM. 2017, 2018, 2019, 2020, 2022 Disponible en https://www.danielclemente.com/scripts/estruweb.py Ver en „estruweb“, esto va de formalizar mi web. Son todo pruebas y no sé si me será útil para algo. De momento lo uso para generar /mapa/. """ import os import re from collections import OrderedDict from datetime import datetime from pathlib import Path import csv import copy import json # Los datos van así: # # En temas: # curiosidades==personal, # mi_web==webdcl==página==estaweb, # lengualógica==idiomas==lógica, # programas==software, ← aquí meto lo de ética (respeto en tecnología) por ahora. Podría crea nueva, „filosofía“ # www==web==html TEMAS = ['lengualógica', 'personal', 'servidores', 'mi_web', 'aparatos', 'programas', 'www', ] # importancias: 1,2,3 (3==mucho) IDIOMAS = ['es', 'ca', 'eo', 'en', 'de', 'id', 'it', ] # ver assert: assert len(IDIOMAS) == 7, "Atención, si añado idiomas he de cambiar abajo el #col de ordenación secundaria" # Lista de secciones de mi web; es una estructura fija mantenida a mano # Sobre los atributos: # - ver los básicos (nombre, importancia, caducidad, …) en el HTML. # - además grabo título_corto_en_menú y título_extra_menú (van juntos). El 1º es versión breve (con máximo de letras) # y el 2º le añade un poquito más de detalle al 1º. Se usa en el menú de secciones (menu-v2.js). Estos dos son para # hacer el tema atractivo, mientras que el campo 'título' es un título más claro, objetivo y de longitud media # # Esto antes era una función. En vez de eso, mejor tomar esta variable, hacer una copia, y manipular la copia. LISTA_DE_SECCIONES_YA_ESCRITAS = { '142857': { 'título': 'Sobre el número 142857', 'título_corto_en_menú': '142857', 'título_extra_menú': 'Es mi nick. ¿Quieres saber de dónde viene?', 'ruta': '142857/', 'tema': 'personal', 'importancia': 1, 'idiomas': ['es'], 'creación': 2002, 'caducidad': None, }, 'servidor': { 'título': 'Servidor para mi instituto, GNU/Linux, Apache, cortafuegos, …', 'título_corto_en_menú': 'Servidor instituto', 'título_extra_menú': 'Un trabajo sobre un ordenador con Debian', 'ruta': 'servidor/', 'importancia': 1, 'tema': 'servidores', 'idiomas': ['es', 'ca'], 'creación': 2003, 'caducidad': None, }, # no pongo lo de „recerca.html“ 'amarok': { 'título': 'Cómo monté mi servidor web', 'título_corto_en_menú': 'Mi servidor', 'título_extra_menú': 'Proceso de montaje del servidor de mi casa (para esta web)', 'ruta': 'amarok/', 'importancia': 3, # mmm… no es muy importante, pero creo que a la gente le gusta 'tema': 'servidores', 'idiomas': ['es'], 'creación': 2004, 'caducidad': None, }, 'amarok-resulta': { 'título': 'Qué tal funcionó mi servidor tras 2 años y medio', 'título_corto_en_menú': '… y qué tal funcionó', 'título_extra_menú': 'Resultados que conseguí y problemas que me dio mi servidor después de 30 meses', 'ruta': 'amarok/resulta.html', 'importancia': 2, 'tema': 'servidores', 'idiomas': ['es'], 'creación': 2006, 'caducidad': None, }, 'ataque': { 'título': 'Un ataque distribuido a mi web', 'título_corto_en_menú': 'Ataque DDS', 'título_extra_menú': 'Ataque distribuido de denegación de servicio que sufrió mi servidor web', 'ruta': 'ataque/', 'importancia': 1, 'tema': 'servidores', 'idiomas': ['es'], 'creación': 2006, 'caducidad': None, }, 'barrapunto': { 'título': 'El efecto Barrapunto en mi servidor', 'título_corto_en_menú': 'Efecto Barrapunto', 'título_extra_menú': 'Cómo saturé mi servidor a cambio de fama', 'ruta': 'barrapunto/', 'importancia': 1, 'tema': 'servidores', 'idiomas': ['es'], 'creación': 2004, 'caducidad': None, }, 'apuntes': { 'título': 'Apuntes de la universidad, escaneados', 'ruta': 'apuntes/', 'título_corto_en_menú': 'Apuntes', 'título_extra_menú': 'Las notas que tomo en clase (en la universidad)', 'importancia': 1, 'tema': 'personal', 'idiomas': ['es', 'ca'], 'creación': 2006, 'caducidad': None, }, 'loglen': { 'título': 'Lógica y lenguajes (trabajo de la universidad)', 'título_corto_en_menú': 'Lógica y lenguajes', 'título_extra_menú': 'Trabajo sobre sistemas lógicos e idiomas naturales y artificiales.', 'ruta': 'apuntes/ales/hl/', 'importancia': 2, 'tema': 'lengualógica', 'idiomas': ['es', 'ca'], 'creación': 2006, 'caducidad': None, }, 'asai_hh': { 'título': 'Herman Hollerith y la máquina tabuladora (trabajo de la universidad)', 'ruta': 'apuntes/asai/hh.html', 'importancia': 1, 'tema': 'aparatos', 'idiomas': ['es'], 'creación': 2006, 'caducidad': None, }, 'asai_tw': { 'título': 'Thomas Watson e IBM (trabajo de la universidad)', 'ruta': 'apuntes/asai/tw.html', 'importancia': 1, 'tema': 'aparatos', 'idiomas': ['es'], 'creación': 2006, 'caducidad': None, }, 'asai_catb': { 'título': 'La catedral y el bazar (trabajo de la universidad)', 'ruta': 'apuntes/asai/recensio/catb.html', 'importancia': 1, 'tema': 'programas', 'idiomas': ['ca'], 'creación': 2006, 'caducidad': None, }, 'asai_web': { 'título': 'Tejiendo la web (trabajo de la universidad)', 'ruta': 'apuntes/asai/recensio/red.html', 'importancia': 1, 'tema': 'www', 'idiomas': ['ca'], 'creación': 2006, 'caducidad': None, }, 'placa_pi': { 'título': 'Placa EZ-USB en Linux con SDCC', 'ruta': 'placa_pi/', 'importancia': 1, 'tema': 'aparatos', 'idiomas': ['es', 'en'], 'creación': 2005, 'caducidad': None, }, 'contacto': { 'título': 'Contáctame', 'título_corto_en_menú': 'Contáctame', 'título_extra_menú': 'Por si quieres escribirme…', 'ruta': 'contacto/', 'importancia': 2, 'tema': 'personal', 'idiomas': ['es'], 'creación': 2001, 'caducidad': None, }, 'cv': { 'título': 'Mi currículum vitae', 'título_corto_en_menú': 'Mi currículum', 'título_extra_menú': 'Poca cosa', 'ruta': 'cv/', 'importancia': 3, 'tema': 'personal', 'idiomas': ['es', 'en'], 'creación': 2001, 'caducidad': None, }, 'cambios': { 'título': 'Historial de cambios', 'título_corto_en_menú': 'Historial', 'título_extra_menú': 'Todos los cambios que le he ido haciendo a mi web', 'ruta': 'cambios/', 'importancia': 1, 'tema': 'mi_web', 'idiomas': ['es'], 'creación': 2001, 'caducidad': None, }, 'est': { 'título': 'Estadísticas', 'título_corto_en_menú': 'Estadísticas', 'título_extra_menú': 'Gráficas generadas por awstats diariamente', 'ruta': 'est/', 'importancia': 1, 'tema': 'mi_web', 'idiomas': ['es'], 'creación': 2002, 'caducidad': None, }, 'portada': { 'título': 'Portada', 'ruta': '/', # podría usar '' pero no quiero nulos 'importancia': 1, 'tema': 'mi_web', 'idiomas': ['es'], 'creación': 2001, 'caducidad': None, }, 'mapaweb': { 'título': 'Mapa de mi web', 'título_corto_en_menú': 'Mapa de la web', 'título_extra_menú': 'Datos avanzados de cada sección; interactivo', 'ruta': 'mapa/', 'importancia': 1, 'tema': 'mi_web', 'idiomas': ['es'], 'creación': 2016, 'caducidad': None, }, 'consumo': { 'título': 'Cuánto gasta un ordenador', 'título_corto_en_menú': '¿Cuánto gasta un ordenador?', 'título_extra_menú': 'Aquí intento exlicar cómo medir el consumo de un aparato eléctrico.', 'ruta': 'consumo/', 'importancia': 2, 'tema': 'aparatos', 'idiomas': ['es', 'eo'], 'creación': 2005, 'caducidad': None, }, 'ruido': { 'título': 'El ruido de mis monitores', 'título_corto_en_menú': 'El ruido de mis monitores', 'título_extra_menú': 'Un problema que tengo con todos mis aparatos de casa.', 'ruta': 'ruido/', 'importancia': 2, 'tema': 'aparatos', 'idiomas': ['es', 'en'], 'creación': 2005, 'caducidad': None, }, # no pongo lo de „formato ogm“ 'manualmedidor': { 'título': 'Manual de un medidor de corriente', 'ruta': 'consumo/manual/', 'importancia': 1, 'tema': 'aparatos', 'idiomas': ['ca', 'de', 'en', 'es', 'eo', 'it'], 'creación': 2008, 'caducidad': None, }, 'pc-tv': { 'título': 'Conectar PC a TV', 'título_corto_en_menú': 'Conectar el PC a la TV', 'título_extra_menú': 'Cómo usar una televisión como si fuera una pantalla del ordenador.', 'ruta': 'pc-tv/', 'importancia': 1, 'tema': 'aparatos', 'idiomas': ['es', 'eo'], 'creación': 2005, 'caducidad': None, }, 'disk': { 'título': 'Sistemas de discusión (mi tesis)', 'título_corto_en_menú': 'Sistemas de discusión', 'título_extra_menú': 'Mi proyecto final de carrera, sobre argumentación mediante el ordenador.', 'ruta': 'disk/', 'importancia': 1, 'tema': 'lengualógica', 'idiomas': ['es', 'ca', 'de', 'eo', 'en'], 'creación': 2007, 'caducidad': 2010, }, 'dislines': { 'título': 'dislines (distribuir variantes de líneas hacia varios ficheros)', 'título_corto_en_menú': 'dislines', 'título_extra_menú': 'Script en Perl para traducir documentos de texto', 'ruta': 'dislines/', 'importancia': 2, 'tema': 'programas', 'idiomas': ['es', 'ca', 'eo', 'en'], 'creación': 2005, 'caducidad': None, }, 'muse-orgD0': { 'título': 'Convertidor de sintaxis muse a org-mode (emacs)', 'ruta': 'emacs/muse-orgD0.el', 'importancia': 1, # por no decir 0 'tema': 'programas', 'idiomas': ['en'], 'creación': 2008, 'caducidad': 2010, }, 'confi-emacs': { 'título': 'Mi configuración de Emacs, y otros ficheros Lisp', 'título_corto_en_menú': 'Mi .emacs', 'título_extra_menú': 'Mi configuración de GNU Emacs, y otros programas en Lisp', 'ruta': 'emacs/confi.html', 'importancia': 1, 'tema': 'programas', 'idiomas': ['es'], 'creación': 2020, 'caducidad': None, }, 'erasmus': { 'título': 'Papeleo para irse de Erasmus (a Alemania)', 'título_corto_en_menú': 'Viaje de Erasmus', 'título_extra_menú': 'Gestiones que hay que hacer para viajar al extranjero', 'ruta': 'erasmus/', 'importancia': 2, 'tema': 'personal', # ¿o viajes? 'idiomas': ['es'], 'creación': 2006, 'caducidad': None, }, 'errores': { 'título': 'Colección de errores de Windows con pantallazos', 'título_corto_en_menú': 'Errores de Windows', 'título_extra_menú': 'Llevo tiempo capturando fallos de programas', 'ruta': 'errores/', 'importancia': 1, 'tema': 'programas', 'idiomas': ['es'], 'creación': 2001, 'caducidad': None, }, 'reglas4p': { 'título': '4 páginas de esperanto (gramática completa)', 'título_corto_en_menú': 'Esperanto en 4 pág.', 'título_extra_menú': 'Todas las reglas del idioma internacional esperanto', 'ruta': 'esperanto/4p/', 'importancia': 3, 'tema': 'lengualógica', 'idiomas': ['es', 'id'], 'creación': 2014, 'caducidad': None, }, 'eo-donis': { 'título': 'Cómo el esperanto ha aportado a mi vida', 'ruta': 'esperanto/donis.html', 'importancia': 3, 'tema': 'lengualógica', 'idiomas': ['en'], 'creación': 2017, 'caducidad': None, }, 'hacer': { 'título': 'Mi lista de cosas por hacer (anticuada, por reexportar)', 'título_corto_en_menú': 'Cosas por hacer', 'título_extra_menú': 'Ideas, críticas, y temas que quiero investigar', 'ruta': 'hacer/', 'importancia': 1, 'tema': 'personal', 'idiomas': ['es'], 'creación': 2006, 'caducidad': 2012, }, 'org-mode': { 'título': 'Cómo gestiono mis tareas y notas con org-mode (emacs)', 'ruta': 'hacer/org.html', 'importancia': 2, 'tema': 'personal', 'idiomas': ['es'], 'creación': 2006, 'caducidad': None, }, 'html-align': { 'título': 'Alineación en HTML y CSS', 'ruta': 'html/align/', 'importancia': 1, 'tema': 'www', 'idiomas': ['en'], 'creación': 2005, 'caducidad': 2007, }, 'html': { 'título': 'Cómo hacer buenas páginas web (HTML correcto)', 'título_corto_en_menú': 'HTML correcto', 'título_extra_menú': 'Cómo hacer buenas páginas web', 'ruta': 'html/', 'importancia': 2, 'tema': 'www', 'idiomas': ['es'], 'creación': 2004, 'caducidad': 2014, }, 'mediospx': { 'título': 'Medios píxeles en CSS', 'ruta': 'html/medios_px/', 'importancia': 1, 'tema': 'www', 'idiomas': ['es'], 'creación': 2008, 'caducidad': None, }, 'teclado': { 'título': 'Dibujo de teclados por HTML/CSS', 'ruta': 'teclado/dibuja.html', 'importancia': 1, 'tema': 'www', 'idiomas': ['es'], 'creación': 2005, 'caducidad': None, }, 'sl': { 'título': 'Software libre: tecnología que respeta a usuarios', 'título_corto_en_menú': 'Respeto a usuarios (SL)', 'título_extra_menú': 'Software libre: tecnología que respeta a usuarios. Qué es', 'ruta': 'libera/sl.html', 'importancia': 3, 'tema': 'programas', 'idiomas': ['es'], 'creación': 2016, 'caducidad': None, }, 'libro': { 'título': 'Libro de visitas', 'título_corto_en_menú': 'Libro de visitas', 'título_extra_menú': 'Puedes dejar comentarios públicos y ver lo que me dicen', 'ruta': 'libro/', 'importancia': 1, 'tema': 'mi_web', 'idiomas': ['es'], 'creación': 2001, 'caducidad': None, }, 'bungku': { 'título': 'Bahasa Bungku: diccionario y pequeña gramática', 'ruta': 'lingvoj/bungku.html', 'importancia': 2, 'tema': 'lengualógica', 'idiomas': ['id'], 'creación': 2015, 'caducidad': None, }, 'koroni': { 'título': 'Bahasa Koroni: muestra de diálogo', 'ruta': 'lingvoj/koroni.html', 'importancia': 1, 'tema': 'lengualógica', 'idiomas': ['id'], 'creación': 2015, 'caducidad': None, }, 'parches-l2h': { 'título': 'Parches viejos para latex2html', 'ruta': 'linux/l2h.html', 'importancia': 1, 'tema': 'programas', 'idiomas': ['en'], 'creación': 2005, 'caducidad': 2010, }, 'trucoslinux': { 'título': 'Trucos sueltos para Linux', 'ruta': 'linux/trucos.html', 'importancia': 1, 'tema': 'programas', 'idiomas': ['es'], 'creación': 2005, 'caducidad': None, }, 'trucoswindows': { 'título': 'Trucos sueltos para Windows (antiguo)', 'ruta': 'trucos/', 'importancia': 1, 'tema': 'programas', 'idiomas': ['es'], 'creación': 2001, 'caducidad': 2005, }, 'vb': { 'título': 'Visual Basic (antiguo)', 'ruta': 'vb/', 'importancia': 1, 'tema': 'programas', 'idiomas': ['es'], 'creación': 2001, 'caducidad': 2008, }, 'dhtml': { 'título': 'Transiciones DHTML (antiguo)', 'ruta': 'dhtml/', 'importancia': 1, 'tema': 'www', 'idiomas': ['es'], 'creación': 2001, 'caducidad': 2004, }, 'webch': { 'título': '„Web characters“ (programa para reemplazar letras en HTML)', 'título_corto_en_menú': 'Web Characters', 'título_extra_menú': 'Haz que en otros países vean los acentos de tus páginas', 'ruta': 'webch/', 'importancia': 1, 'tema': 'www', 'idiomas': ['es'], 'creación': 2003, 'caducidad': 2007, }, 'schart': { 'título': 'Generador de tabla de transposicionales en patrones malabares', 'ruta': 'linux/schart.html', 'importancia': 1, 'tema': 'programas', 'idiomas': ['en', 'es'], 'creación': 2005, 'caducidad': None, }, 'dn': { 'título': 'Deducción natural', 'título_corto_en_menú': 'Deducción natural', 'título_extra_menú': 'Tutorial de lógica. Sirve para pensar mejor.', # No sé qué ruta poner. dn.html es versión en español. # Pero me gusta a veces enlazar a la lista de idiomas # 'ruta': 'logica/dn.html', 'ruta': 'logica/', 'importancia': 2, 'tema': 'lengualógica', 'idiomas': ['en', 'es', 'ca', 'eo'], 'creación': 2004, 'caducidad': None, }, 'ingenio': { 'título': 'Juegos de ingenio', 'título_corto_en_menú': 'Juegos de lógica', 'título_extra_menú': 'Problemas de ingenio. Matemagia. Bueno, sólo puse 1', 'ruta': 'logica/juegos.html', 'importancia': 2, 'tema': 'lengualógica', 'idiomas': ['es'], 'creación': 2017, 'caducidad': None, }, 'vortoj-logikaj': { 'título': 'Terminología de lógica en esperanto', 'ruta': 'logica/vortoj.html', 'importancia': 1, 'tema': 'lengualógica', 'idiomas': ['eo'], 'creación': 2005, 'caducidad': None, }, 'vortoj-elektraj': { 'título': 'Terminología de electrotecnia en esperanto', 'ruta': 'consumo/vortoj.html', 'importancia': 1, 'tema': 'lengualógica', 'idiomas': ['eo'], 'creación': 2005, 'caducidad': None, }, 'vortoj-kataluna': { 'título': 'Unas cuantas notas de catalán', 'ruta': 'lingvoj/apuntscat.html', 'importancia': 1, 'tema': 'lengualógica', 'idiomas': ['ca'], 'creación': 2005, 'caducidad': None, }, 'eraroj-kataluna': { 'título': 'Evitar errores comunes en catalán hablado', 'ruta': 'lingvoj/errorscat.html', 'importancia': 2, 'tema': 'lengualógica', 'idiomas': ['ca'], 'creación': 2017, 'caducidad': None, }, 'popup-ie': { 'título': '¿Aún usas Internet Explorer?', 'título_corto_en_menú': 'Popup para IE', 'título_extra_menú': 'Mensaje que sale a quien entre usando Internet Explorer', 'ruta': 'navega/popup.html', 'importancia': 2, 'tema': 'www', 'idiomas': ['es'], 'creación': 2004, 'caducidad': 2010, }, 'genpopup-ie': { 'título': 'Generador de popup para artículo „¿Aún usas Internet Explorer?“', 'ruta': 'navega/ponlo.html', 'importancia': 1, 'tema': 'www', 'idiomas': ['es'], 'creación': 2004, 'caducidad': 2010, }, 'id-coinbase': { 'título': 'Coinbase, Authy, and sending your ID to strangers', 'ruta': 'seguridad/coinbase-id.html', 'importancia': 1, 'tema': 'www', 'idiomas': ['en'], 'creación': 2017, 'caducidad': None, }, 'estado-actual': { 'título': 'Mi estado actual / todobien.png', 'título_corto_en_menú': 'Mi estado actual', 'título_extra_menú': 'Mi respuesta a ¿qué tal?', 'ruta': '/index.html#estado-actual', 'importancia': 2, 'tema': 'personal', 'idiomas': ['es'], 'creación': 2020, 'caducidad': None, }, 'hiper': { 'título': 'Sistema de hipertexto y publicación en mi web', 'título_corto_en_menú': 'Hipertexto y publicación', 'título_extra_menú': 'Cómo organizo y exporto la información', 'ruta': 'hiper/', 'importancia': 3, 'tema': 'mi_web', 'idiomas': ['es'], 'creación': 2023, 'caducidad': None, }, } # Parecido a LISTA_DE_SECCIONES_YA_ESCRITAS, Pero aquí registro secciones „virtuales“ que no tienen contenido # sino que describen una pequeña lista de otras secciones ya en LISTA_DE_SECCIONES_YA_ESCRITAS, que eran # demasiado pequeñas para aparecer por sí solas. # Sin embargo, un grupo de secciones (Gruse) sí que tiene una URL # En el 'incluye secciones' anoto las secciones de LISTA_DE_SECCIONES_YA_ESCRITAS metidas dentro de cada Gruse; # se me ocurren formas de usar eso (ẽ para validar estructura, o añadir 3r nivel al menú) pero no lo implemento # pues no me hace falta; por eso comento ese dato. GRUPOS_DE_SECCIONES = { 'notas-html-y-css': { 'título_corto_en_menú': 'Notas de HTML y CSS', 'título_extra_menú': 'Detalles sobre cosas raras en HTML y CSS', 'ruta': '/index.html#notas_html', # ¿Los otros atributos me hacen falta? De momento no los pondré # 'título': '', # ← ¿dónde lo uso? # 'incluye secciones': ['mediospx', 'teclado', 'html-align'], }, 'apuntes-de-idiomas': { 'título_corto_en_menú': 'Apuntes de idiomas', 'título_extra_menú': 'Pequeñas gramáticas, tesauros y muestras de idiomas.', 'ruta': '/index.html#apuntes_idiomas', # 'incluye secciones': ['eo-donis', 'vortoj-kataluna', 'eraroj-kataluna', 'vortoj-logikaj', 'vortoj-elektraj', 'bungku', 'koroni'], }, 'parches-linux': { 'título_corto_en_menú': 'Parches', 'título_extra_menú': 'Cosas sobre Linux y mejoras a otros programas; no muy interesante.', 'ruta': '/linux/', # 'incluye secciones': ['trucoslinux', 'parches-l2h', 'muse-orgD0'], # no apunto txt2tags pues es poco }, 'scripts-de-mi-web': { 'título_corto_en_menú': 'Scripts de mi web', 'título_extra_menú': 'Programitas cortos que he creado por necesidades con mi web', 'ruta': '/scripts/', # 'incluye secciones': [], # Ninguna en concreto. Lo de dentro es muy granular }, 'secciones-antiguas': { 'título_corto_en_menú': 'Secciones antiguas', 'título_extra_menú': 'Secciones mal hechas y que no me gustan mucho, pero que me da pena quitar', 'ruta': '/index.html#ant', # 'incluye secciones': ['trucoswindows', 'vb', 'dhtml'], }, } # en esta fecha puse todas las secciones. „Revisado hasta“, „actual hasta fecha“, „actualizado por última vez“ COMPLETO_HASTA_FECHA = datetime(2023, 3, 20) # Estas variables son opcionales, las uso internamente. Creo que no es información para otros. Rectifícame si hace falta MOSTRAR_TAMBIÉN_LA_RUTA_EN_TABLA = False MOSTRAR_TAMBIÉN_GRADO_DE_DEFINICIÓN = False AÑADE_NO_PUBLICADAS = False MOSTRAR_ESTADOS = False # ver abajo: AÑADE_NO_PUBLICADAS = True # Por la inflación, ahora valen menos # Le pongo este número para que secciones sin texto (ej. estadísticas) no queden enanas (ej. tamaño 0 ó 1) UNA_IMAGEN_VALE_CUÁNTAS_PALABRAS = 100 # Esto es el modo de pruebas, y lo uso en local, sin publicarlo if 0: MOSTRAR_TAMBIÉN_LA_RUTA_EN_TABLA = True MOSTRAR_TAMBIÉN_GRADO_DE_DEFINICIÓN = True AÑADE_NO_PUBLICADAS = True MOSTRAR_ESTADOS = True def comprueba_estructura(secciones): """ Comprueba que he escrito a mano bien los datos. Para si no. """ for s, dat in secciones.items(): assert dat['título'] assert dat['ruta'] assert dat['importancia'] in [1, 2, 3] assert dat['tema'] assert dat['tema'] in TEMAS assert dat['idiomas'] assert all([i in IDIOMAS for i in dat['idiomas']]) # Quizás no todos aparecerán en el menú. Algunos que son muy detallados no aparecen. Por eso comento: # assert dat['título_corto_en_menú'] # assert dat['título_extra_menú'] # Pero sí que miro esto ya: # ẽ "¿Cuánto gasta un ordenador?" es de los más largos y tiene 29 letras if 'título_corto_en_menú' in dat: assert len(dat['título_corto_en_menú']) < 30 def añade_info_de_tamaño(secciones): "A cada artículo le añade el cuántas palabras son" for s, dat in secciones.items(): print(s, dat['ruta']) # detectar qué fichero abrir # este if es por formatos if s == 'loglen': # PS # atención, el formato PS da algunos problemas… # ¡muchos! Ver notas. „pstotext“ con un fichero vacío ya peta de formas raras # echo > algo.ps; pstotext -debug algo.ps # Error: /invalidaccess in --def-- # com = "zcat /home/dc/repoweb/apuntes/ales/hl/hl.es.ps.gz | pstotext | wc -w" # # esquive: # com = "echo 15171" # pero mejor lo reimplemento leyendo el HTML, da un contaje parecido (15k) # Atención, hay bastantes guarradillas ad-hoc aquí. Si esto te ofende, no lo mires com = """bash -c "source /home/dc/ut/root/etc%bash.utisdc; cat /home/dc/repoweb/apuntes/ales/hl/html/hl.es*.xhtml | tr '\\n' ' ' | perl -pe 's|.*?||g;' | filtro_quita_etiquetas_xml | sed 's/ \\.\\+ //g; s/ \\.\\+ //g; s/-->//g; s/
Puedes jugar con estas bolitas arrastrables. El tamaño corresponde con la longitud de cada sección. Están agrupadas por temas. Los colores pálidos representan secciones anticuadas. Las de borde negro son las que personalmente destaco. Para ir a una sección haz clic en el nodo y luego en el enlace en esquina ┌ (o busca el enlace en la tabla).
Aquí están los mismo datos en forma de tabla. Puedes ordenarla clicando cada cabecera. Explicaciones sobre columnas ▾.
Grafo pelotudo y tabla revisados manualmente por última vez el %(actual_hasta)s. Y todo generado el %(fecha_act)s. https://www.danielclemente.com/ (contacto).
Importancia | %(th_para_grado_de_definición)sSección | %(th_para_ruta)sTema | %(th_para_cada_idioma)snº palabras | Creación | Caducidad | %s | ' % i for i in IDIOMAS]), 'th_para_ruta': "Ruta | " if MOSTRAR_TAMBIÉN_LA_RUTA_EN_TABLA else "", 'th_para_grado_de_definición': "Grado de definición | " if MOSTRAR_TAMBIÉN_GRADO_DE_DEFINICIÓN else "", 'ESTILOS_SOBRE_ESTADOS': """ #mapaweb .inédito td {background: #ffaaaa;} #mapaweb .caducado td {text-decoration: line-through;} #mapaweb .importante td {font-weight: bold;} """ if MOSTRAR_ESTADOS else "", }) # Nota: aquí recorro la lista de *secciones*. Esto no incluye los „grupos de secciones“ (Gruse) # No los incluyo pues no tienen contenido, y sus pequeños componentes ya están incluidos en la # lista de secciones for s in sorted(secciones.keys(), key=lambda se: secciones[se]['importancia'], reverse=True): dat = secciones[s] estados = [] if not dat['creación']: estados.append("inédito") if dat['importancia'] >= 3: estados.append("importante") if dat['caducidad'] and dat['caducidad'] <= 2020: estados.append("caducado") print(dat, estados) # Código complejito # Implícitamente digo que lo ya publicado no tiene/necesita grado de definición # Implícitamente digo que lo no publicado requiere tener entrada „grado de definición“ (aunque sea None) # Explícitamente digo que si es None entonces usaré 0 estrellitas grado_de_definición_a_mostrar = 0 if "inédito" not in estados else (dat['grado_de_definición'] or 0) # print("%i: %s"%(dat['importancia'],s)) fi.write("""
---|---|---|---|---|---|
%(impo)s | %(td_para_grado_de_definición)s%(secc)s | %(td_para_ruta)s%(tema)s | %(td_para_cada_idioma_usado)s%(númpals)s | %(creación)s | %(caduc)s | %s | " % (i.upper() if i in dat['idiomas'] else "") for i in IDIOMAS ]), 'td_para_grado_de_definición': "%s | " % ('(*)' * grado_de_definición_a_mostrar) if MOSTRAR_TAMBIÉN_GRADO_DE_DEFINICIÓN else "", 'td_para_ruta': "%s | " % dat['ruta'] if MOSTRAR_TAMBIÉN_LA_RUTA_EN_TABLA else "", 'creación': dat['creación'] or "", 'caduc': dat['caducidad'] or "", 'númpals': dat.get('palabras', '---'), # por si está desact. 'estado': " ".join(estados), }) fi.write("""