sub fold_addresses ($) {
return $_[0] if length($_[0]) <= COLS;
# try to fold on commas after non-word chars before $lim chars,
- # Try to get the "," preceeded by ">" or ")", but avoid folding
+ # Try to get the "," preceded by ">" or ")", but avoid folding
# on the comma where somebody uses "Lastname, Firstname".
# We also try to keep the last and penultimate addresses in
# the list on the same line if possible, hence the extra \z
msg_iter($_[0], \&add_text_body, $_[1], 1);
}
-sub flush_quote {
- my ($s, $l, $quot) = @_;
-
- my $rv = $l->to_html($$quot);
-
- # we use a <span> here to allow users to specify their own
- # color for quoted text
- $$quot = undef;
- $$s .= qq(<span\nclass="q">) . $rv . '</span>'
-}
-
sub attach_link ($$$$;$) {
my ($ctx, $ct, $p, $fn, $err) = @_;
my ($part, $depth, @idx) = @$p;
# spotting MUA problems:
$ct =~ s/;.*// unless $err;
$ct = ascii_html($ct);
- my $desc = $part->header('Content-Description');
- $desc = $fn unless defined $desc;
- $desc = '' unless defined $desc;
my $sfn;
if (defined $fn && $fn =~ /\A$PublicInbox::Hval::FN\z/o) {
$sfn = $fn;
my $rv = $ctx->{obuf};
$$rv .= qq($nl<a\nhref="$ctx->{mhref}$idx-$sfn">);
if ($err) {
- $$rv .= "[-- Warning: decoded text below may be mangled --]\n";
+ $$rv .= <<EOF;
+[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
+EOF
}
$$rv .= "[-- Attachment #$idx: ";
my $ts = "Type: $ct, Size: $size bytes";
+ my $desc = $part->header('Content-Description') // $fn // '';
$desc = ascii_html($desc);
$$rv .= ($desc eq '') ? "$ts --]" : "$desc --]\n[-- $ts --]";
$$rv .= "</a>\n";
# link generation in diffs with the extra '%0D'
$s =~ s/\r\n/\n/sg;
+ # will be escaped to `•' in HTML
+ obfuscate_addrs($ibx, $s, "\x{2022}") if $ibx->{obfuscate};
+
# always support diff-highlighting, but we can't linkify hunk
# headers for solver unless some coderepo are configured:
my $diff;
$s .= "\n" unless $s =~ /\n\z/s;
# split off quoted and unquoted blocks:
- my @sections = split(/((?:^>[^\n]*\n)+)/sm, $s);
- $s = '';
+ my @sections = PublicInbox::MsgIter::split_quotes($s);
+ undef $s; # free memory
my $rv = $ctx->{obuf};
if (defined($fn) || $depth > 0 || $err) {
# badly-encoded message with $err? tell the world about it!
my $l = $ctx->{-linkify} //= PublicInbox::Linkify->new;
foreach my $cur (@sections) {
if ($cur =~ /\A>/) {
- flush_quote($rv, $l, \$cur);
+ # we use a <span> here to allow users to specify
+ # their own color for quoted text
+ $$rv .= qq(<span\nclass="q">);
+ $$rv .= $l->to_html($cur);
+ $$rv .= '</span>';
} elsif ($diff) {
- flush_diff($rv, $ctx, \$cur);
+ flush_diff($ctx, \$cur);
} else {
# regular lines, OK
$$rv .= $l->to_html($cur);
- $cur = undef;
}
+ undef $cur; # free memory
}
-
- obfuscate_addrs($ibx, $$rv) if $ibx->{obfuscate};
}
sub _msg_page_prepare_obuf {
sub dedupe_subject {
my ($prev_subj, $subj, $val) = @_;
- my $omit = ''; # '"' denotes identical text omitted
+ my $omit; # '"' denotes identical text omitted
my (@prev_pop, @curr_pop);
while (@$prev_subj && @$subj && $subj->[-1] eq $prev_subj->[-1]) {
push(@prev_pop, pop(@$prev_subj));
push(@curr_pop, pop(@$subj));
- $omit ||= $val;
+ $omit //= $val;
}
pop @$subj if @$subj && $subj->[-1] =~ /^re:\s*/i;
if (scalar(@curr_pop) == 1) {
- $omit = '';
+ $omit = undef;
push @$prev_subj, @prev_pop;
push @$subj, @curr_pop;
}
- $omit;
+ $omit // '';
}
sub skel_dump { # walk_thread callback