#!/bin/bash # Script que usa gawk y sed para aderezar un archivo de lista de correo. # El resultado es en formato HTML y ocupa aprox 1.3 veces el original # Colorea y separa las cabeceras, los enlaces, las citas, traduce las secuencias de escape # * Entrada: entrada estandar # * Salida: salida estandar # Ejemplo de uso: # ./maillist < lista-February-2003.txt > lista2003.html # Copyright SuD 2003. Redistribuir y usar libremente bajo licencia BSD. # TODO: enlaces , beta-test, terminar en =, no pasar linea, la gente usa caracteres muy raros =C2 Â, sospecho que solo va en ISO-8851-1 y 15 # TODO: ?iso-8859-1?B?W076Y2xlb10gUmU6IFtO=?iso-8859-1?B?+mNsZW9dIFJlOiBbTvpjbGVvXSBDb21waWxhY2nzn del 2.5 (espero no llegar tarde...) # TODO: usar frames, incorporar de serie a pipermail 0.05 (unmantained) # BUG: si una linea empieza por from piensa que es mail nuevo (lo he visto) sed "s/>/\>/g" | sed "s/
"
}
/* Corrige los caracteres mime y demas cosas raras */
function decod( CODIF ) {
  gsub("=5B","[",CODIF);
  gsub("=5D","]",CODIF);
  gsub("=2E",".",CODIF);
  gsub("=2C",",",CODIF);
  gsub("=20"," ",CODIF);
  gsub("=09","\t",CODIF);
  gsub("=3D","=",CODIF);
  gsub("=2D","-",CODIF);
  gsub("=3A",":",CODIF);
  gsub("=BF","\\¿",CODIF);
  gsub("=A1","\\¡",CODIF);
  gsub("=D3","\\Ó",CODIF);
  gsub("=F1","\\ñ",CODIF);
  gsub("=E1","\\á",CODIF);
  gsub("=E9","\\é",CODIF);
  gsub("=ED","\\í",CODIF);
  gsub("=F3","\\ó",CODIF);
  gsub("=FA","\\ú",CODIF);
  gsub("\\?=$","",CODIF);
  gsub("=$","",CODIF);
  gsub("\\?=","",CODIF);
  gsub("=\\?iso-[0-9]*-[0-9]*\\?Q\\?","",CODIF)
return CODIF
}

{ PILLADA=0 ; SUBJ-- }

#/* Detectar primera linea de una cabecera */
/^From / {
	if ( ESTADO == 0 ) {
		ESTADO=1
		CABEZA=""
	} else {  }
}

/^Subject: / {
	if ( ESTADO == 1 ) {
		PILLADA=1
		BLA=$0
		# Poner primera palabra de un color distinto
		sub("[^ ]* ","",BLA)
		CABEZA=CABEZA "\n
" $1 " " decod(BLA) "" SUBJ=1 } } # El subject se puede prolongar mas de una linea /^ *[^ ]/ { if ( ( ESTADO == 1 ) && ( SUBJ == 0 ) ) { BLA=$0 sub(" *","",BLA) PILLADA=1 SUBJ=1 CABEZA=CABEZA "" decod(BLA) "" } } /^Date: / { if ( ESTADO == 1 ) { PILLADA=1 BLA=$0 # Poner primera palabra de un color distinto sub("[^ ]* ","",BLA) CABEZA=CABEZA "\n
" $1 "
" BLA "" } } /^From: / { if ( ESTADO == 1 ) { PILLADA=1 BLA=$0 # Poner primera palabra de un color distinto sub("[^ ]* [^ ]* ","",BLA) CABEZA=CABEZA "\n
" $1 "
" $2 " " decod(BLA) "" } } # Lineas en blanco: Si estabamos en header => fin de header /^ *$/ { if ( ESTADO == 1 ) { # imprimir toda la cabecera ESTADO=0 print "

" print CABEZA print "

"
		PILLADA = 1
	}
}

# Default: lineas de las cabeceras y del cuerpo 
{
	# Si estamos en la cabecera
	if ( ESTADO == 1 ) {
		if ( PILLADA == 0 ) {
			CABEZA=CABEZA "\n
" $0 } } # entonces estamos en el body else { if ( PILLADA == 0 ) { # Si la linea acaba en = no salta de linea if ( match($0,"=$") != 0 ) { ORS="" } if ( match($0,"^>") == 0 ) { # Si hay una url se pone gsub("http://[^ ()]*","&") print decod($0) } # Si hay una cita se cambia el estilo else { print "" decod($0) "" } ORS="\n" } } } END { print "
" } '