Version 0 of email pretty printer

Updated 2001-03-07 21:42:20

A print filter for e-mail that relies on a2ps and uses no temp files

 #!/bin/sh
 # \
 exec tclsh $0 ${1+"$@"}

 # Fun little mail message formatting tool.
 # Relies on a2ps.

 set data [ read stdin ]

 set output <html>
 set sig 0
 set header 1
 set recipients 0

 set hpat {<b>\1</b><i>\2</i><br>}
 set spat {<b>\1</b><i><b>\2</b></i><br>}

 # the name of the print queue to use
 set printer hpmlknco1

 # if you want a graphic in the upper right corner
 # of page 1.
 set graphic /home/pehrens/public_html/mutt_letter.gif

 if { [ file readable $graphic ] } {
    lappend output "<img align=right src=$graphic>"
 }

 foreach line [ split $data "\n" ] {
    set done 0

    if { $header } {
       # handle header lines.
       if { [ regsub -nocase {^(Date:|Sent:|From:)(.+)$} $line $hpat line ] } {
          set recipients 0
          set done 1
       }
       # might be a long list of recipients...
       if { [ regsub -nocase {^(To:|Cc:)(.+)$}   $line $hpat line ] } {
          set recipients 1
          set done 1
       }
       # will be the last line of contained message headers
       if { [ regsub -nocase {^(Subject:)(.+)$}  $line $spat line ] } {
          set recipients 0
          set done 1
       }
       # will generally be the last line of the header
       if { [ regsub -nocase {^(X-mailer:)(.+)$} $line $hpat line ] } {
          set recipients 0
          set done 1
       }   

       # if we had a long recipients list in the "To:" or
       # "Cc:" field
       if { ! $done && $recipients && ! [ regexp : $line ] } {
          set line <i>$line</i><br>
          set done 1
       } else {
          set recipients 0
       }

       # horizontal rule and blank line after header
       if { ! $done && $header } {
          set header 0
          lappend output <hr><p><pre>
       }
    }  

    # we have reached a quoted line
    if { [ regexp {^(>.+)$} $line ] } {
       set done 1
    }

    # we have reached a line consisting solely of dashes.
    # this should signal the start of the signature
    if { [ regexp -- {^(-+)$} $line ] } {
       set line <p><p><pre><b>
       set sig 1
       set done 1
    }

    # we are in the body of the sig...
    if { $sig && ! [ string equal <p><p><pre><b> $line ] } {
       set done 1
    }

    if { ! $done } { set line <b>$line</b> }

    # collect htmlized lines
    lappend output $line
 }

 set output [ join $output "\n" ]

 set out [ open "|a2ps --printer=$printer --pretty-print=html" a+ ]

 puts $out $output

 catch { close $out }