Check out Text::Wrap:
http://www.perldoc.com/perl5.6.1/lib/Text/Wrap.html

Matt

--- Prahlad Vaidyanathan <[EMAIL PROTECTED]> wrote:
> Hi,
> 
> Happy New Year everyone !
> 
> I've attached a (slightly) updated version of the script I sent sometime
> back. I've added a wordwrap subroutine, which works alright for now, but
> I'm quite sure there are better ways of doing this.
> 
> Do send in feedback, as I would like to know how 'real programmers'
> would go about doing this :-)
> 
> <code>
> #!/usr/bin/perl -w
> # File: display_filter.pl
> # Last Update: Sun, 30 Dec 2001 12:00:39 +0530
> # Modified By: Prahlad Vaidyanathan <[EMAIL PROTECTED]>
> 
> # Usage :
> #   set $display_filter in muttrc to this script, and make script executable
> 
> # THANKS
> #   * thomas hurst's quotefix.rb
> 
> # TODO
> #   * use g. johnson's mail-to-filter.pl to compress large to/cc headers
> #   * better algorithm for blank-line consolidation, and line wrapping
> 
> use strict ;
> 
> my $flag = 0 ; # Flag for blank-line removal
> my $line ;
> 
> # Change the following to suit your needs
> my $quote_re = "^(%\ |-->|[\ \t]*[A-Za-z]+>|[\ \t]*[\|>:!])\ ?" ;
> my $nonquote_re = "^(grub>|[:;=][-+]?[\)DPdb])" ;
> my $bad_sig_re = "^(-{2,3}|_{30,})\$" ; # match hotmail/yahoo ads and ML footers
> my $line_length = 72 ; # Anything longer is wrapped
> # Flags to play with :-)
> my $strip_empty_quotes      = 0 ; # ">>> \n" => "\n"
> my $strip_trailing_spaces   = 1 ; # ">>> blah   \n" => ">>> blah\n"
> 
> # Headers (use muttrc to play with these)
> while ( ( $line = <> ) !~ /^$/ ) { print $line ; }
> print "\n" ;
> 
> # Strip ! ;-)
> while ($line = <>) {
>     # Emacs users ... bah !
>     $line =~ s/>>>>> // ;
>     # Strip if $quote_re matches, and $nonquote_re doesn't
>     my $quote_depth = 0;
>     while ( $line =~ m/$quote_re/o && $line !~ m/$nonquote_re/o ) {
>         $quote_depth++; # Increment $quote_depth
>         $line = $' ; # $line is set to everything _after_ the matched regex
>     }
>     # Strip trailing white-spaces
>     $line =~ s/[\s]+$/\n/ if ($strip_trailing_spaces) ;
>     # Fix bad sig-dashes
>     $line =~ s/$bad_sig_re/-- /o;
>     # Remove dos line-breaks
>     $line =~ s/
// ;
>     # Makes block of blank lines into one
>     if ( $line =~ m/^[\s]*$/ ) {
>         $flag += 1 ;
>         if ( $flag eq 1 ) {
>             # Re-quotes if $strip_empty_quotes is not set
>             if ( ! $strip_empty_quotes && $quote_depth ) {
>                 $line = ('>' x $quote_depth) . "\n" ;
>             }
>             # Displays only the 1st blank line
>             print $line ;
>             next ;
>         }
>         elsif ( $flag gt 1 ) {
>             # 2nd line onwards are ignored
>             next ;
>         }
>     }
>     $flag = 0 ;
>     # Word wrapping, re-quoting, and displaying the line 
>     # Don't wrap the pgp/mailcap output lines
>     if ( length($line) >= $line_length && $line !~ /\[\-\-/ ) {
>         # Preserves leading spaces
>         my ($leading_spaces) = ( $line =~ m/^([\s]*)\w/ ) ;
>         foreach $line ( wordwrap($line) ) {
>             $line = $leading_spaces . $line if ($leading_spaces) ;
>             $line = ('>' x $quote_depth ) . ' ' . $line if ($quote_depth) ;
>             print "$line\n" ;
>         }
>     } 
>     else {
>         $line = ('>' x $quote_depth) . ' ' . $line if ($quote_depth) ;
>         print $line ;
>     }
> }
> 
> # Input: single line longer than $line_length
> # Output: Array of lines shorter than $line_length
> sub wordwrap {
>     my @words = split(' ', shift ) ;
>     $line = $words[0] ; # o/w concatenation in loop barfs
>     my @return ;
>     # $word_flag = 1 if $line contains 2 or more words, else it is 0
> #     my $word_flag = 0 ;
>     for ( my $i = 1; $i <= ($#words+1) ; $i++) {
>         if ( $words[$i] ) { # In case $words[$i] is a space, ignore
>             if ( length($line) < $line_length) {
>                 $line .= ' ' . $words[$i] ;
> #                 $word_flag = 1 ; # as $line contains 2 or more wds
>             }
>             else {
>                 push(@return,$line) ;
>                 $line = $words[$i] ;
> #                 $word_flag = 0 ; # as $line contains only 1 wd
>             }
>         }
>     }
>     # push iff $line has 2 or more wds
>     push(@return,$line) if (($line =~ m/\s/) || length($line) < $line_length) ;
> #     wantarray()? @return : $return[0] ;
>     return(@return) ;
> }
> </code>
> 
> pv.
> 
> -- 
> Prahlad Vaidyanathan <[EMAIL PROTECTED]>
> 
> Why is it that we rejoice at a birth and grieve at a funeral?  It is because we
> are not the person involved.
>               -- Mark Twain, "Pudd'nhead Wilson's Calendar"
> 

> ATTACHMENT part 2 application/pgp-signature 



__________________________________________________
Do You Yahoo!?
Send your FREE holiday greetings online!
http://greetings.yahoo.com

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to