Ken Hirsch:
Perhaps any paragraph (of more than one line) should be treated as
fixed if all its lines end without blanks.
Earl Hood:
The filter code needs to be modified so that within each chunk, the
chunk is split into separate paragraph units before determining if the
data is flowed or not.
It seems as we are agreed on this, and I wrote some code accordingly. A
modified mhtxtplain.pl file and the CVS diff are attached to this message.
Hope you agree it's an improvement.
/ Gunnar
mhtxtplain.pl
CVS diff Format=Flowed modifications (compared to v2.24)
===================================================================
323c323,324
< $chunk =~ s/(^|[^ ])(\r?\n|\Z)/$1<br>$2/mg;
---
#chunk =~ s/(^|[^ ])(\r?\n|\Z)/$1<br>$2/mg;
$chunk = &flowed($chunk);
465a467,507
}
##---------------------------------------------------------------------------##
sub flowed {
my $chunk = shift;
$chunk =~ s/\r?\n/\n/g;
$chunk =~ s/\s+$//;
# Special treatment of two or three blank lines (more
# than three blank lines are reduced to three)
$chunk =~ s/\n{4,}/\n\n<br>\n<br>\n\n/g;
$chunk =~ s/\n{3}/\n\n<br>\n\n/g;
# Split into paragraphs
my @paras = split (/\n\n/, $chunk);
for my $para (@paras) {
# Decide if the paragraph is fixed or flowed
my $fixed = 1;
my @lines = split (/\n/, $para);
for (@lines) {
if (/ $/) {
$fixed = 0;
last;
}
}
unless ($para =~ /<br>/) {
if ($fixed) {
$para = "\n<pre>$para\n</pre>";
} else {
for (@lines) {
s/([^ ])$/$1<br>/;
}
$para = join ("\n", @lines);
}
}
}
$chunk = join ("\n", @paras) . "\n<br>";
$chunk;
mhtxtplain.zip
Description: Zip compressed data