#!/usr/bin/perl

$DEBUG = 0;
@COLOR = qw/31 32 33 34 35 36 37/ ;
%ENTITY = ( 	'&quot;' => '"' ,
		'&amp;'  => '&' ,
		'&lt;'   => '<' ,
		'&gt;'   => '>' ,
		'&nbsp;' => ' ' ,
	) ;

if( $ARGV[0] =~ /^-(\d)/ ) {
	$MODE = $1 ;
	shift @ARGV ;
} elsif( $ARGV[0] eq '-h') {
	usage();
} else {
	$MODE = 2;
}

$filename = $ARGV[0] ;

$content = join( '' , <> ) ;

if( $MODE == 3 )
{
	print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' . "\n";
	print '<html>' . "\n";
	print '<head>' . "\n";
	print '<title>' . ($filename ? $filename : '' ) . '</title>' . "\n";
	print '<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />' . "\n";
	print '<head>' . "\n\n";
	print '<body>' . "\n";
	print '<table border="3" cellspacing="3" cellpadding="3">' . "\n";
	print '<tr bgcolor="#CCCCCC"><td>日期</td><td>時間</td><td>傳訊者</td><td>收訊者</td><td>訊息</td></tr>' . "\n";
}

while( $content =~ /(<Message.+?<\/Message>)/sg ) 
{
	$message = $1 ;
	print "[$message]\n" if $DEBUG ;
	( $date , $time , $sessionid , $from , $to , $msg ) =
		( $message  =~ /<Message Date="([\d\/]+)" Time="(.+?)" DateTime=.+?SessionID="(\d+)"><From><User FriendlyName="(.+?)"\/><\/From><To><User FriendlyName="(.+?)"\/><\/To><Text.*?>(.+?)<\/Text><\/Message>/s ) ;

	for $ent ( keys %ENTITY ) {
		$msg =~ s/$ent/$ENTITY{$ent}/g ;
	}

	print "date\t: $date\ntime\t: $time\nsessionid\t: $sessionid\nfrom\t: $from\nto\t: $to\nmsg\t: $msg\n" if $DEBUG ;

	if( $sessionid != $lastid ) {
		$color++;
		$color = 0 if ($color > $#COLOR);

		if( $bgcolor ) {
			$bgcolor = '';
		} else {
			$bgcolor= 'bgcolor="#99FFFF"';
		}
	}
	$lastid = $sessionid ;

	if( $MODE == 1 )
	{
		print "[1;" . $COLOR[$color] . "m";
		print "$date $time\n";
		print "【$from】 對 【$to】 說：\n";
		print "$msg[m\n";
		print "[1;30m" . "="x100 . "[m\n";
	}
	elsif( $MODE == 2 )
	{
		print "[1;" . $COLOR[$color] . "m";
		print "$date $time , 【$from】 說：\n\n";
		print "$msg[m\n";
		print "[1;30m" . "="x100 . "[m\n";
	}
	elsif( $MODE == 3 )
	{
		print "<tr $bgcolor>";
		print "<td>$date</td>";
		print "<td>$time</td>";
		print "<td>$from</td>";
		print "<td>$to</td>";
		print "<td>$msg</td>";
		print "</tr>\n";
	}
}

if( $MODE == 3 )
{
	print '</body>' . "\n";
	print '</html>' . "\n";
}

sub usage
{
	print "Usage: $0 [-{123}] filename\n\n";
	print "\t-1 : normal format\n";
	print "\t-2 : simple format (default)\n";
	print "\t-3 : html format\n\n";
	print "\tTips:\n";
	print "\tcat filename | $0\n";
	print "\tmerge.pl file1 file2 | $0\n";
	print "\t\t$0 filename | less  -R\n";
	print "\t\t$0 filename > newfile\n";

	exit(-1);
}

