download: irc2html-f.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import re
from itertools import cycle
# La expresión regular que defino sirve para logs en dónde
# las líneas con mensajes de los usuarios tiene por ej la forma:
# '<pablo_!~pablo@r190-64-130-143.com.net.uy> [17:00] comprendido marga :)\n'
rex = '\<(?P<nombre>.+)!.*\>(?P<dicho>.+)$'
pat = re.compile(rex)
# La variable 'line_format' define como se verán las líneas del log.
# La primera colorea el nombre del usuario. Si usás esta forma te
# recomiendo también uses la primer lista de colores (son colores
# más fuertes).
# La segunda, por el contrario, pinta con diferentes colores
# todo el fondo del texto correspondiente a cada usuario.
#line_format = "<span style='color:#%s'>%s:</span>%s<br/>"
line_format = "<div style='background-color:#%s'><b>%s:</b> %s</div>"
# Generador de colores:
#
# Para ayudar a distingir lo que dice un usuario de lo que dice otro,
# se utilizan distintos colores para cada uno.
#
# La idea original del generador de colores era que vaya saltando por
# la paleta de colores según un patrón matemático.
# La actual implementación es más simple y etática.
#color_list = ['ff0000', 'fff200', '00ff00', '00fff2', '0000ff', 'aa18ff', \
# 'ff00fb', 'fbb636', 'b1466b', '3d3166', 'bfbf2e', '377972']
# Lighter colors:
color_list = ['fff1df', 'feffdf', 'e3ffce', 'ffe4df', 'fcdfff', 'e7dfff', \
'e7f1ff', 'e7fff9', 'f3ffe7', 'e9e9e9', 'ffedb9', 'f0e9d5']
# El diccionario 'nombres' es utilizado para asegurarnos que se use
# siempre el mismo color para un usuario determinado.
nombres = {}
def main():
if len(sys.argv) < 2:
print "Uso: ./irc2html charla.log > charla.html"
sys.exit(0)
#name_colors = color_gen(color_list)
name_colors = cycle(color_list)
f = open(sys.argv[1])
for line in f.readlines():
m = pat.match(line)
if m:
nombre = m.group('nombre')
dicho = m.group('dicho')
if nombre in nombres:
color = nombres[nombre]
else:
color = name_colors.next()
nombres[nombre] = color
print line_format % (color, nombre, dicho)
else:
# Omito del log la información del tipo 'El usuario X se ha unido al canal Y'
#print "<b>%s</b><br/>" % (line)
pass
if __name__ == "__main__":
main()