```
gemlog.txt - 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

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.

CÓMO USARLO
===========
Para Gemini (Gemlog):
1. Crea un archivo de entradas (ej: mi_gemlog.txt)
2. Ejecuta: ./gemlogtxt.sh mi_gemlog.txt
3. Tu gemlog estará en la carpeta 'blog/'

Para HTML5 Moderno:
1. Ejecuta: ./gemlogtxt2html.sh mi_gemlog.txt
2. Tu blog HTML5 estará en la carpeta 'html/'

Para HTML3 Retro:
1. Ejecuta: ./gemlogtxt2html3.sh mi_gemlog.txt
2. Tu blog HTML3 estará en la carpeta 'html3/'

Para Feed Atom:
1. Ejecuta: ./createatom.sh html/ https://misitio.com
2. Genera 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
```text
Bloques de código
con triple backtick
```

<END>

ESTRUCTURA
==========
- Fecha (AAAA-MM-DD) - ¡OBLIGATORIO Y DEBE SER VÁLIDA!
- 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)
- <END> (separador)

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 (NUEVO)

EXCLUSIVAS DE GEMINI:
✓ Enlaces externos/minisites con [URL] (NUEVO)
✓ 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

EXCLUSIVAS DE HTML5:
✓ Modo claro/oscuro automático (NUEVO)
✓ Diseño responsive moderno
✓ Texto justificado
✓ CSS con variables
✓ Compatible con navegadores modernos

EXCLUSIVAS DE HTML3:
✓ Compatibilidad retro (NUEVO)
✓ Estilo clásico de los 90s
✓ Colores anaranjados/ocre
✓ HTML 3.2 válido
✓ Compatible con navegadores antiguos

CARACTERÍSTICA EXCLUSIVA GEMINI: ENLACES EXTERNOS
=================================================
Puedes crear enlaces externos/minisites usando corchetes:

2024-01-20
[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.

<END>

Esto generará en el índice:
=> gemini://misitio.com Título del Enlace Externo - ⤷

SISTEMA DE BORRADORES (NUEVO)
==============================
Usa 'draft', 'DRAFT' o 'Draft' como fecha:

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

<END>

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 los índices
- Los enlaces externos SÍ procesan etiquetas para el índice (solo Gemini)

ARCHIVOS GENERADOS
==================
GEMINI:
blog/
├── index.gmi           (Índice principal por fecha)
├── tags.gmi            (Índice de etiquetas ordenadas)
├── entrada1.gmi        (Tus entradas individuales)
├── 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
====================
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

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

BORRADORES (NUEVO)
==================
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

ENLACES EXTERNOS (NUEVO - Solo Gemini)
======================================
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

ENTRADAS PROGRAMADAS
====================
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
- Se muestran ordenadas con días restantes (NUEVO)
- Perfecto para escribir contenido con anticipación

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
0 6 * * * /ruta/completa/gemlogtxt.sh /ruta/completa/mi_gemlog.txt

# 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

FLUJO DE TRABAJO RECOMENDADO
============================
1. Escribe nuevas entradas al final de tu archivo
2. Usa 'draft' para borradores en progreso
3. Usa [URL] para enlaces externos (solo Gemini)
4. Programa para fechas futuras si es necesario
5. El cron diario se encarga de publicarlas
6. ¡Genera múltiples formatos simultáneamente!

SYNTAX HIGHLIGHT PARA NANO
==========================
Incluye el archivo `nanorc-gemlog.txt` con reglas de colores para nano:

1. Copiar el contenido a `~/.nanorc`
2. O crear: `~/.nano/gemlog.nanorc` y añadir: `include "~/.nano/gemlog.nanorc"`
3. Los archivos .gemlog se verán con colores automáticamente

Colores:
- Comentarios: Verde
- Fechas: Amarillo
- Etiquetas: Magenta
- <END>: Rojo
- Nombres archivo: Cian
- [URL] enlaces externos: Amarillo brillante

EJEMPLOS DE FECHAS VÁLIDAS/INVÁLIDAS
=====================================
VÁLIDAS:
2024-01-15
2024-12-31
2025-02-28
draft (para borradores)
DRAFT (para borradores)

INVÁLIDAS:
2024-02-30    (febrero no tiene 30 días)
2024-13-01    (mes 13 no existe)
2024-1-1      (formato incorrecto)
hola-mundo    (no es una fecha)

EJEMPLO DE ARCHIVO COMPLETO
===========================
' Mi primer gemlog
2024-01-15
bienvenida
Bienvenido a mi gemlog
#presentacion #gemini
Hola, este es mi primer gemlog.
Espero que disfrutes el contenido.

=> gemini://ejemplo.com Visita este sitio
<END>

' Borrador en progreso
draft
tutorial-avanzado
Tutorial Avanzado de Bash
#bash #tutorial #avanzado
Este contenido está en desarrollo...
Necesito añadir más ejemplos.
<END>

' Enlace externo (solo Gemini)
2024-01-20
[gemini://misitio.com/proyecto]
Mi Proyecto Externo
#proyecto #externo #gemini
Este es un enlace a mi minisite externo.
<END>

' Entrada programada
2024-01-25
futuro
Esta entrada es del futuro
#programado #sorpresa
Esta entrada no aparecerá hasta el 25 de enero.
<END>

SALIDA DEL SCRIPT (EJEMPLO)
============================
=== PROCESAMIENTO COMPLETADO ===
Archivos creados en: blog/
Entradas en el índice: 15
Enlaces externos: 1
Entradas programadas: 1
Borradores: 1
Etiquetas procesadas: 8

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

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

=== ENTRADAS PROGRAMADAS ===
⏰ futuro.gmi - Visible el 2024-01-25 (Dentro de 5 días)

PERSONALIZACIÓN
===============
GEMINI (gemlogtxt.sh):
TITULO_INDICE="Blog de _-~Caleb~-_ 📝"
BIENVENIDA_INDICE="Este es el blog del sitio, espero disfrutes de él:"
TEXTO_FOOTER="Este Gemlog fue generado automáticamente con gemlog.txt"
SIMBOLO_ENLACE_EXTERNO="- ⤷"

HTML5 (gemlogtxt2html.sh):
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"

HTML3 (gemlogtxt2html3.sh):
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"

FEED ATOM (createatom.sh):
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"

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

CONSEJOS ÚTILES
===============
✓ 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
✓ 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
✓ HTML5 para usuarios modernos, HTML3 para compatibilidad retro

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

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/>
```
