GemlogTXT - Sistema completo para gemlogs y blogs

¿QUÉ ES ESTO?

Un conjunto de scripts bash que convierten un archivo de texto simple en múltiples formatos:

- Gemini (.gmi) - Para servidores Gemini

- HTML5 moderno - Con modo claro/oscuro automático

- HTML3 retro - Estilo clásico compatible con navegadores antiguos

- Feed Atom - Para sindicación de contenido

LA IDEA

Escribir tu contenido debería ser tan fácil como escribir en un cuaderno. Sin bases de datos, sin interfaces web, solo texto plano que se convierte automáticamente en múltiples formatos.

CÓMO USARLO

Gemini (Gemlog) v2.4

./gemlogtxt.sh mi_gemlog.txt

gemlog estará en la carpeta 'gemlog/'

HTML5 Moderno

./gemlogtxt2html.sh mi_gemlog.txt

blog HTML5 estará en la carpeta 'html/'

HTML3 Retro

./gemlogtxt2html3.sh mi_gemlog.txt

blog HTML3 estará en la carpeta 'html3/'

Generar Feed Atom

./createatom.sh html/ https://misitio.com

atom.xml para el blog HTML en 'html/'

FORMATO DEL ARCHIVO (Común para todos)

' Comentarios con comilla simple
2024-01-15
nombre_entrada
Título de la entrada
#gemini #tutorial #linux
Contenido de la entrada
puede tener múltiples líneas
y formato gemtext completo
=> enlaces.gmi Enlaces útiles
* Listas con asterisco
> Citas con mayor que
 ``` alt text
Bloques de código
con triple backtick
 ```

CARACTERÍSTICA EXCLUSIVA GEMINI: ENLACES EXTERNOS

Solo en gemlogtxt.sh (formato Gemini), puedes crear enlaces externos/minisites usando corchetes:

AAAA-MM-DD
[gemini://misitio.com]
Título del Enlace Externo
#enlace #externo
Este es un enlace externo que aparecerá con símbolo especial
en el índice principal. Este texto es sólo informativo y no
se procesa.

NUEVAS CARACTERÍSTICAS (v2.4)

✨ Borradores (MEJORADO en v2.4)

Usa 'draft', 'DRAFT' o 'Draft' como fecha (case-insensitive):

draft
borrador
Entrada en progreso
#borrador
Este contenido no aparecerá en los índices.
Se genera el archivo pero no se publica.

📅 Entradas Programadas Mejoradas (MEJORADO en v2.4)

- Se muestran ordenadas por fecha (más cercana primero)

- Calcula y muestra días restantes automáticamente con fórmula precisa

- Incluye manejo especial para "Hoy", "Dentro de 1 día", "Dentro de X días"

- Ejemplo de salida:

=== ENTRADAS PROGRAMADAS ===

⏰ navidad.gmi - Visible el 2024-12-25 (Dentro de 15 días)

⏰ año_nuevo.gmi - Visible el 2024-12-31 (Hoy)

🗓️ Fechas formateadas en español (NUEVO en v2.4)

- Opción para mostrar fechas formateadas en español en entradas individuales

- Configurable con variable `MOSTRARFECHA="ON"` (ON/OFF)

- Formato: "domingo, 30 de noviembre de 2025"

- Ejemplo en salida:

Título de la entrada

domingo, 30 de noviembre de 2025

Contenido de la entrada...

📊 Separación por años en el índice (NUEVO en v2.4)

- El índice principal ahora agrupa entradas por año

- Usa encabezados ### para cada año

- Organización cronológica descendente (más reciente primero)

- Ejemplo en index.gmi:

2024

2024-12-25 - Título
2024-11-15 - Otro título

2023

2023-08-10 - Entrada antigua

🎨 HTML5 con Modo Claro/Oscuro

- Diseño responsive moderno

- Modo oscuro automático según preferencias del sistema

- CSS elegante con variables CSS

- Texto justificado para mejor legibilidad

🕹️ HTML3 Retro

- Compatible con navegadores antiguos

- Estilo clásico con colores anaranjados/ocre

- Usa HTML 3.2 Final DTD

- Tablas para layout (estilo retro auténtico)

📡 Feed Atom Automático

- Genera atom.xml automáticamente

- Soporta tanto HTML5 como HTML3

- Incluye resúmenes de contenido

- Configurable con base URL

ESTRUCTURA COMÚN

- Fecha (AAAA-MM-DD) o 'draft' para borradores

- Nombre del archivo (sin extensión) o [URL] para enlaces externos (solo Gemini)

- Título de la entrada

- Línea de etiquetas (opcional, empieza con #)

- Contenido (multilínea, soporta formato gemtext)

- <END> (separador de entradas)

CARACTERÍSTICAS DESTACADAS

Comunes a todos los formatos

✓ Preserva formato ASCII art y espacios en blanco

✓ Sistema de etiquetas automático y navegable

✓ Entradas programadas para fechas futuras

✓ Validación robusta de fechas

✓ Índice ordenado por fecha (más reciente primero)

✓ Soporte para borradores

Exclusivas de Gemini (v2.4)

✓ Enlaces externos/minisites con [URL]

✓ Tags ordenados por popularidad

✓ Generación automática de navegación

✓ Compatible con cualquier servidor Gemini

✓ Símbolo especial (- ⤷) para enlaces externos en el índice

✓ **NUEVO:** Separación por años en el índice

✓ **NUEVO:** Fechas formateadas en español opcionales

✓ **NUEVO:** Cálculo preciso de días restantes para entradas programadas

Específicas de HTML5

✓ Modo claro/oscuro automático

✓ Diseño responsive moderno

✓ Texto justificado

✓ CSS con variables

Específicas de HTML3

✓ Compatibilidad retro

✓ Estilo clásico de los 90s

✓ Colores anaranjados/ocre

✓ HTML 3.2 válido

SISTEMA DE ETIQUETAS AVANZADO

- Cada etiqueta genera páginas individuales en 'tags/'

- Las etiquetas se ordenan por uso (de más a menos popular)

- Navegación completa entre etiquetas y entradas

- Conteo automático de entradas por etiqueta

- Las etiquetas de entradas programadas se activan automáticamente al publicarse

- Los borradores no procesan etiquetas para índices

- Los enlaces externos SÍ procesan etiquetas para el índice

ARCHIVOS GENERADOS

Gemini v2.4

gemlog/
├── index.gmi           (Índice principal por fecha, agrupado por años)
├── tags.gmi            (Índice de etiquetas ordenadas por popularidad)
├── entrada1.gmi        (Tus entradas individuales, con fecha formateada opcional)
├── entrada2.gmi
└── tags/               (Directorio de etiquetas)
    ├── gemini.gmi      (Página de etiqueta #gemini)
    ├── linux.gmi       (Página de etiqueta #linux)
    └── ...

HTML5

html/
├── index.html          (Índice principal)
├── tags.html           (Índice de etiquetas)
├── styles.css          (CSS moderno con modo claro/oscuro)
├── entrada1.html       (Entradas individuales)
├── entrada2.html
└── tags/               (Directorio de etiquetas)
    ├── gemini.html     (Página de etiqueta #gemini)
    └── ...

HTML3

html3/
├── index.html          (Índice estilo retro)
├── tags.html           (Índice de etiquetas)
├── styles.css          (CSS retro anaranjado)
├── entrada1.html       (Entradas individuales)
├── entrada2.html
└── tags/               (Directorio de etiquetas)
    ├── gemini.html     (Página de etiqueta #gemini)
    └── ...

VALIDACIÓN DE FECHAS (MEJORADA en v2.4)

El script valida que:

✓ La fecha tenga formato AAAA-MM-DD

✓ La fecha exista en el calendario

✓ No se aceptan fechas como 2024-02-30 o 2024-13-01

✓ 'draft' (en cualquier capitalización) se acepta para borradores

✓ Las fechas futuras se procesan como entradas programadas

Si una fecha es inválida:

❌ La entrada NO se procesa

❌ Se muestra un error específico

❌ El script termina con código de error 1

❌ Se muestra contador de errores al final

BORRADORES (MEJORADO en v2.4)

Si usas 'draft' como fecha:

- Se crea el archivo inmediatamente

- NO aparece en ningún índice

- NO se procesan las etiquetas para los índices

- Se muestra en la sección "BORRADORES" del output

- Perfecto para trabajar en contenido sin publicarlo

- **NUEVO:** Case-insensitive (funciona con Draft, DRAFT, draft)

ENLACES EXTERNOS (Exclusivo Gemini v2.4)

Si usas [URL] como nombre de archivo:

- Se detecta automáticamente como enlace externo

- Aparece en el índice con símbolo especial (- ⤷)

- NO se genera archivo .gmi local

- SÍ se procesan las etiquetas para el índice

- Perfecto para enlazar minisites externos o recursos

- Se muestra en la sección "ENLACES EXTERNOS" del output

ENTRADAS PROGRAMADAS (MEJORADO en v2.4)

Si pones una fecha futura:

- Se crea el archivo inmediatamente

- No aparece en el índice hasta esa fecha

- Los tags NO se procesan hasta la fecha de publicación

- El día indicado, aparecerá automáticamente

- **NUEVO:** Se muestran ordenadas con días restantes calculados con precisión

- **NUEVO:** Mensajes especiales para "Hoy" y "Dentro de 1 día"

- Perfecto para escribir contenido con anticipación

FECHAS FORMATEADAS EN ESPAÑOL (NUEVO en v2.4)

Característica opcional activable con `MOSTRARFECHA="ON"`:

- Muestra fecha formateada en español entre el título y el contenido

- Formato: "domingo, 30 de noviembre de 2025"

- **NUEVO:** Compatible con nombres de meses y días en español

- **NUEVO:** Elimina ceros iniciales de los días (ej: 05 → 5)

- **NUEVO:** Validación de fecha antes de formatear

- Configurable: `MOSTRARFECHA="ON"` o `MOSTRARFECHA="OFF"`

SEPARACIÓN POR AÑOS EN EL ÍNDICE (NUEVO en v2.4)

Mejora en la organización del índice principal:

- Agrupa entradas por año usando encabezados ###

- Orden descendente (año más reciente primero)

- Dentro de cada año, orden cronológico inverso

- **NUEVO:** Facilita navegación en gemlogs con muchos años de contenido

- **NUEVO:** Mejora la legibilidad del índice

CONFIGURACIÓN PERSONALIZABLE (v2.4)

gemlogtxt.sh (Gemini v2.4)

# Textos del índice
TITULO_INDICE="Gemlog de _-~Caleb~-_ 📝"
BIENVENIDA_INDICE="Este es el gemlog del sitio, espero disfrutes de él:"

# Textos de los archivos de entrada
TEXTO_VOLVER_INDICE="Volver al índice"

# Footer personalizado
TEXTO_FOOTER="Este gemlog fue generado automáticamente con gemlog.txt"

# Símbolo para enlaces externos/minisites
SIMBOLO_ENLACE_EXTERNO="- ⤷"

# Mostrar fecha formateada en entradas individuales
# Valores: ON (mostrar fecha formateada) / OFF (no mostrar)
MOSTRARFECHA="ON"

# Directorios
ARCHIVO_ENTRADAS="blog.gemlog"
DIRECTORIO_SALIDA="gemlog"

gemlogtxt2html.sh (HTML5)

TITULO_INDICE="Blog de _-~Caleb~-_ 📝"
BIENVENIDA_INDICE="Este es el blog del sitio, espero disfrutes de él:"
TEXTO_FOOTER="Este blog fue generado automáticamente con gemlogtxt2html.sh"

gemlogtxt2html3.sh (HTML3)

TITULO_INDICE="Blog de _-~Caleb~-_ 📝"
BIENVENIDA_INDICE="Este es el blog del sitio, espero disfrutes de él:"
TEXTO_FOOTER="Este blog fue generado automáticamente con gemlogtxt2html3.sh"

createatom.sh (Atom Feed)

TITULO_FEED="Blog de _-~Caleb~-_ 📝"
AUTOR_NOMBRE="Caleb"
AUTOR_EMAIL="caleb@misitio.com"
DESCRIPCION_FEED="Blog personal con entradas sobre tecnología, pensamientos y más"

AUTOMATIZACIÓN CON CRON

Para regenerar automáticamente tu contenido diariamente:

1. Edita tu crontab: 'crontab -e'

2. Añade estas líneas (ajusta las rutas):

# Regenerar gemlog v2.4 cada día a las 6:00 AM
0 6 * * * /ruta/completa/gemlogtxt.sh

# Regenerar HTML5
0 6 * * * /ruta/completa/gemlogtxt2html.sh /ruta/completa/mi_gemlog.txt

# Regenerar HTML3
0 6 * * * /ruta/completa/gemlogtxt2html3.sh /ruta/completa/mi_gemlog.txt

# Regenerar Atom feed
0 7 * * * /ruta/completa/createatom.sh /ruta/completa/html/ https://misitio.com

Esto ejecutará los scripts cada día, haciendo que:

- Las entradas programadas para hoy aparezcan automáticamente

- Los índices se actualicen con nuevas entradas

- Los tags se regeneren incluyendo nuevas publicaciones

- El feed Atom se mantenga actualizado

- **NUEVO:** Las fechas formateadas se actualicen correctamente

FLUJO DE TRABAJO RECOMENDADO (v2.4)

1. Escribe nuevas entradas al final de tu archivo

2. Usa 'draft' para borradores en progreso (case-insensitive)

3. Usa [URL] para enlaces externos (solo Gemini)

4. Programa para fechas futuras si es necesario

5. El cron diario se encarga de publicarlas automáticamente

6. ¡Genera múltiples formatos simultáneamente!

7. **NUEVO:** Aprovecha las fechas formateadas en español para mejor presentación

8. **NUEVO:** Disfruta de la organización por años en el índice

EJEMPLOS DE USO COMPLETO (v2.4)

Ejemplo con todas las características nuevas

' Borrador en progreso (case-insensitive)
Draft
tutorial-avanzado
Tutorial Avanzado de Bash
#bash #tutorial #avanzado
Este contenido está en desarrollo...
Necesito añadir más ejemplos.



' Enlace externo a minisite
2024-01-20
[gemini://misitio.com/proyecto]
Mi Proyecto Externo
#proyecto #externo #gemini
Este es un enlace a mi minisite externo.



' Entrada programada con fecha futura
2024-12-25
navidad
Especial de Navidad 2024
#navidad #reflexiones #festivo
¡Feliz Navidad! Esta entrada se publicará automáticamente.

=> gemini://ejemplo.com/navidad Más sobre Navidad


' Entrada normal con fecha formateada
2024-11-30
reflexion-diaria
Reflexiones de un día cualquiera
#reflexiones #personal
Hoy fue un día interesante...

* Aprendí algo nuevo
* Conocí gente interesante
* Reflexioné sobre la vida

> La vida es lo que pasa mientras estás ocupado haciendo otros planes


Salida del script v2.4

=== PROCESAMIENTO COMPLETADO ===
Versión del script: 2.4
Configuración MOSTRARFECHA: ON
Archivos creados en: gemlog/
Entradas en el índice: 15
Enlaces externos: 1
Entradas programadas: 1
Borradores: 1
Etiquetas procesadas: 8
Errores de fecha: 0
Índice generado: gemlog/index.gmi
Índice de etiquetas: gemlog/tags.gmi
Archivos de etiquetas: gemlog/tags/

=== BORRADORES ===
📝 tutorial-avanzado.gmi

=== ENLACES EXTERNOS ===
🔗 gemini://misitio.com/proyecto

=== ENTRADAS PROGRAMADAS ===
⏰ navidad.gmi - Visible el 2024-12-25 (Dentro de 15 días)

Ejemplo de salida con MOSTRARFECHA="ON"

En el archivo `reflexion-diaria.gmi`:

# Reflexiones de un día cualquiera
sábado, 30 de noviembre de 2024

Hoy fue un día interesante...

* Aprendí algo nuevo
* Conocí gente interesante
* Reflexioné sobre la vida

> La vida es lo que pasa mientras estás ocupado haciendo otros planes

--- (resto del archivo)

Ejemplo de índice con separación por años

En `gemlog/index.gmi`:

# Gemlog de _-~Caleb~-_ 📝

Este es el gemlog del sitio, espero disfrutes de él:

=> tags.gmi Explorar por etiquetas

### 2024
=> reflexion-diaria.gmi 2024-11-30 - Reflexiones de un día cualquiera
=> proyecto.gmi 2024-01-20 - Mi Proyecto Externo - ⤷

### 2023
=> entrada-antigua.gmi 2023-08-15 - Una entrada del año pasado
=> otra-antigua.gmi 2023-05-10 - Otra entrada antigua

### 2022
=> primera.gmi 2022-12-01 - Mi primera entrada

CONSEJOS ÚTILES (v2.4)

✓ Usa nombres de archivo descriptivos y consistentes

✓ Las etiquetas con múltiples palabras usan guiones: #mi-etiqueta

✓ Programa entradas para mantener consistencia

✓ Usa borradores para trabajo en progreso (case-insensitive)

✓ Usa [URL] para enlazar minisites externos (solo Gemini)

✓ El cron diario es tu mejor amigo para automatizar

✓ Los ASCII art conservan su formato perfectamente en todos los formatos

✓ Genera los tres formatos para llegar a diferentes audiencias

✓ **NUEVO:** Activa `MOSTRARFECHA="ON"` para mejor presentación

✓ **NUEVO:** Aprovecha la separación por años para gemlogs con historia

✓ **NUEVO:** Revisa la sección "ENTRADAS PROGRAMADAS" para saber qué se publicará pronto

FILOSOFÍA

Menos es más. Escribe una vez, publica en múltiples formatos. Tu contenido importa, no la tecnología.

VENTAJAS CLAVE (v2.4)

Para Escritores

- Escribe en tu editor de texto favorito

- Formato simple y humano

- Sin distracciones, solo contenido

- Sistema de borradores integrado (case-insensitive)

- Enlaces externos sin generar archivos locales (Gemini)

- **NUEVO:** Fechas formateadas automáticamente

- **NUEVO:** Organización por años en el índice

Para Desarrolladores

- Scripts bash puros, sin dependencias

- Fácil de modificar y extender

- Código bien comentado

- Validación robusta

- **NUEVO:** Cálculo preciso de días entre fechas

- **NUEVO:** Manejo mejorado de errores

Para Administradores

- Generación automática diaria

- Múltiples formatos desde una fuente

- Estructura de archivos organizada

- Fácil de versionar y respaldar

- **NUEVO:** Informes detallados de procesamiento

- **NUEVO:** Configuración flexible

Para Lectores

- Contenido disponible en múltiples formatos

- Navegación intuitiva por etiquetas

- Diseños adaptados a cada plataforma

- Feed Atom para suscripciones

- Enlaces externos claramente identificados (Gemini)

- **NUEVO:** Índice organizado por años

- **NUEVO:** Fechas legibles en español

SOPORTE MULTIPLATAFORMA

Los scripts funcionan en:

- Linux (todas las distribuciones)

- macOS (con date GNU)

- BSD (con ajustes menores)

- WSL (Windows Subsystem for Linux)

- Haiku-OS

HISTORIAL DE VERSIONES

v2.4 (Actual)

- **NUEVO:** Separación por años en el índice principal

- **NUEVO:** Opción para mostrar fechas formateadas en español

- **NUEVO:** Cálculo preciso de días restantes para entradas programadas

- **MEJORADO:** Borradores ahora son case-insensitive

- **MEJORADO:** Mensajes especiales para "Hoy" y "1 día"

- **MEJORADO:** Validación mejorada de fechas

- **MEJORADO:** Informes más detallados de procesamiento

v2.3

- Sistema de enlaces externos/minisites

- Símbolo especial para identificar enlaces externos

- Mejor procesamiento de contenido preservando formato

v2.2

- Sistema de borradores

- Entradas programadas con días restantes

- Validación robusta de fechas

v2.1

- Soporte para múltiples formatos (HTML5, HTML3)

- Sistema de etiquetas mejorado

- Feed Atom automático

v2.0

- Versión inicial con soporte Gemini básico

- Sistema de tags simple

- Generación de índice automática

LICENCIA

This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or

distribute this software, either in source code form or as a compiled

binary, for any purpose, commercial or non-commercial, and by any

means.

In jurisdictions that recognize copyright laws, the author or authors

of this software dedicate any and all copyright interest in the

software to the public domain. We make this dedication for the benefit

of the public at large and to the detriment of our heirs and

successors. We intend this dedication to be an overt act of

relinquishment in perpetuity of all present and future rights to this

software under copyright law.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.

IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR

OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,

ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR

OTHER DEALINGS IN THE SOFTWARE.

For more information, please refer to <http://unlicense.org/>

Descargar GemlogTXT (scripts completos)