]> Sergey Matveev's repositories - public-inbox.git/commitdiff
reduce "PublicInbox::Hval->new_oneline" use
authorEric Wong <e@80x24.org>
Sat, 12 Mar 2016 06:42:04 +0000 (06:42 +0000)
committerEric Wong <e@80x24.org>
Sat, 12 Mar 2016 06:49:52 +0000 (06:49 +0000)
It's probably a bad idea to strip extraneous whitespace
from some headers as an extra space may convey useful
information.

Newlines don't seem to be preserved by Email::MIME or
Email::Simple anyways, so there's no danger in breaking
formatting.

lib/PublicInbox/Feed.pm
lib/PublicInbox/Hval.pm
lib/PublicInbox/SearchView.pm
lib/PublicInbox/View.pm

index 47408535571c521d545c4d80ac94ae9dfb72e803..e4831f6a66a68d85691579eda43f6a6046e8fec5 100644 (file)
@@ -8,7 +8,7 @@ use warnings;
 use Email::Address;
 use Email::MIME;
 use Date::Parse qw(strptime);
-use PublicInbox::Hval;
+use PublicInbox::Hval qw/ascii_html/;
 use PublicInbox::Git;
 use PublicInbox::View;
 use PublicInbox::MID qw/mid_clean mid2path/;
@@ -38,8 +38,9 @@ sub generate_html_index {
 
 sub title_tag {
        my ($title) = @_;
+       $title =~ tr/\t\n / /s; # squeeze spaces
        # try to avoid the type attribute in title:
-       $title = PublicInbox::Hval->new_oneline($title)->as_html;
+       $title =~ ascii_html($title);
        my $type = index($title, '&') >= 0 ? "\ntype=\"html\"" : '';
        "<title$type>$title</title>";
 }
@@ -117,7 +118,6 @@ sub emit_html_index {
        my $feed_opts = get_feedopts($ctx);
 
        my $title = $feed_opts->{description} || '';
-       $title = PublicInbox::Hval->new_oneline($title)->as_html;
        my ($footer, $param, $last);
        my $state = { ctx => $ctx, seen => {}, anchor_idx => 0 };
        my $srch = $ctx->{srch};
@@ -295,11 +295,6 @@ sub get_feedopts {
        \%rv;
 }
 
-sub mime_header {
-       my ($mime, $name) = @_;
-       PublicInbox::Hval->new_oneline($mime->header($name))->raw;
-}
-
 sub feed_updated {
        my ($date, $ts) = @_;
        my @t = eval { strptime($date) } if defined $date;
@@ -328,14 +323,15 @@ sub add_to_feed {
        my $date = $header_obj->header('Date');
        my $updated = feed_updated($date);
 
-       my $title = mime_header($header_obj, 'Subject') or return 0;
+       my $title = $header_obj->header('Subject');
+       defined $title or return 0;
        $title = title_tag($title);
 
-       my $from = mime_header($header_obj, 'From') or return 0;
+       my $from = $header_obj->header('From') or return 0;
        my @from = Email::Address->parse($from) or return 0;
-       my $name = PublicInbox::Hval->new_oneline($from[0]->name)->as_html;
+       my $name = ascii_html($from[0]->name);
        my $email = $from[0]->address;
-       $email = PublicInbox::Hval->new_oneline($email)->as_html;
+       $email = ascii_html($email);
 
        if (delete $feed_opts->{emit_header}) {
                $fh->write(atom_header($feed_opts, $title) . $updated);
index a455884f1c4b2e2787d10c587a29198f6e1ddb7c..70bae7c67db9bfc59e36779016e1842a3292a7ff 100644 (file)
@@ -9,6 +9,8 @@ use warnings;
 use Encode qw(find_encoding);
 use URI::Escape qw(uri_escape_utf8);
 use PublicInbox::MID qw/mid_clean/;
+use base qw/Exporter/;
+our @EXPORT_OK = qw/ascii_html/;
 
 # for user-generated content (UGC) which may have excessively long lines
 # and screw up rendering on some browsers.  This is the only CSS style
index 36522a3458bffa9121fb4ab598ff9be2f91dbdb4..8283c1aa96f8df604f44b9116fb2ae50eac092d1 100644 (file)
@@ -6,7 +6,7 @@ package PublicInbox::SearchView;
 use strict;
 use warnings;
 use PublicInbox::SearchMsg;
-use PublicInbox::Hval;
+use PublicInbox::Hval qw/ascii_html/;
 use PublicInbox::View;
 use PublicInbox::MID qw(mid2path mid_clean mid_mime);
 use Email::MIME;
@@ -68,13 +68,12 @@ sub dump_mset {
                my $rank = sprintf("%${pad}d", $m->get_rank + 1);
                my $pct = $m->get_percent;
                my $smsg = PublicInbox::SearchMsg->load_doc($m->get_document);
-               my $s = PublicInbox::Hval->new_oneline($smsg->subject);
-               my $f = $smsg->from_name;
-               $f = PublicInbox::Hval->new_oneline($f)->as_html;
+               my $s = ascii_html($smsg->subject);
+               my $f = ascii_html($smsg->from_name);
                my $ts = PublicInbox::View::fmt_ts($smsg->ts);
                my $mid = PublicInbox::Hval->new_msgid($smsg->mid)->as_href;
                $$res .= qq{$rank. <b><a\nhref="$mid/">}.
-                       $s->as_html . "</a></b>\n";
+                       $s . "</a></b>\n";
                $$res .= "$pfx  - by $f @ $ts UTC [$pct%]\n\n";
        }
 }
@@ -84,7 +83,7 @@ sub err_txt {
        my $u = '//xapian.org/docs/queryparser.html';
        $u = PublicInbox::Hval::prurl($ctx->{cgi}->{env}, $u);
        $err =~ s/^\s*Exception:\s*//; # bad word to show users :P
-       $err = PublicInbox::Hval->new_oneline($err)->as_html;
+       $err = ascii_html($err);
        "\n\nBad query: <b>$err</b>\n" .
                qq{See <a\nhref="$u">$u</a> for Xapian query syntax};
 }
@@ -222,9 +221,7 @@ sub foot {
 
 sub html_start {
        my ($q, $ctx) = @_;
-       my $query = PublicInbox::Hval->new_oneline($q->{q});
-
-       my $qh = $query->as_html;
+       my $qh = ascii_html($q->{'q'});
        my $A = $q->qs_html(x => 'A', r => undef);
        my $res = '<html><head>' . PublicInbox::Hval::STYLE .
                "<title>$qh - search results</title>" .
@@ -235,8 +232,8 @@ sub html_start {
 
        $res .= qq{<input\ntype=hidden\nname=r />} if $q->{r};
        if (my $x = $q->{x}) {
-               my $xh = PublicInbox::Hval->new_oneline($x)->as_html;
-               $res .= qq{<input\ntype=hidden\nname=x\nvalue="$xh" />};
+               $x = ascii_html($x);
+               $res .= qq{<input\ntype=hidden\nname=x\nvalue="$x" />};
        }
 
        $res .= qq{<input\ntype=submit\nvalue=search /></form>};
@@ -247,7 +244,7 @@ sub adump {
        my $fh = $cb->([ 200, ['Content-Type' => 'application/atom+xml']]);
        my $git = $ctx->{git} ||= PublicInbox::Git->new($ctx->{git_dir});
        my $feed_opts = PublicInbox::Feed::get_feedopts($ctx);
-       my $x = PublicInbox::Hval->new_oneline($q->{q})->as_html;
+       my $x = ascii_html($q->{'q'});
        $x = qq{$x - search results};
        $feed_opts->{atomurl} = $feed_opts->{url} . '?'. $q->qs_html;
        $feed_opts->{url} .= '?'. $q->qs_html(x => undef);
@@ -289,7 +286,7 @@ sub qs_html {
                $self = $tmp;
        }
 
-       my $q = PublicInbox::Hval->new_oneline($self->{q})->as_href;
+       my $q = PublicInbox::Hval->new($self->{'q'})->as_href;
        $q =~ s/%20/+/g; # improve URL readability
        my $qs = "q=$q";
 
index 3522bf445a9ca95a454b7769a293105f77d34ecc..4058bee775507c70e0c1a73ca82235c4f9026f78 100644 (file)
@@ -11,7 +11,7 @@ use Date::Parse qw/str2time/;
 use Encode qw/find_encoding/;
 use Encode::MIME::Header;
 use Email::MIME::ContentType qw/parse_content_type/;
-use PublicInbox::Hval;
+use PublicInbox::Hval qw/ascii_html/;
 use PublicInbox::Linkify;
 use PublicInbox::MID qw/mid_clean id_compress mid2path mid_mime/;
 require POSIX;
@@ -22,8 +22,6 @@ use constant MAX_TRUNC_LEN => 72;
 use constant T_ANCHOR => '#u';
 use constant INDENT => '  ';
 
-*ascii_html = *PublicInbox::Hval::ascii_html;
-
 my $enc_utf8 = find_encoding('UTF-8');
 
 # public functions:
@@ -50,10 +48,9 @@ sub msg_reply {
        $s = '(no subject)' if (!defined $s) || ($s eq '');
        my $f = $hdr->header('From');
        $f = '' unless defined $f;
-       $s = PublicInbox::Hval->new_oneline($s);
        my $mid = $hdr->header_raw('Message-ID');
        $mid = PublicInbox::Hval->new_msgid($mid);
-       my $t = $s->as_html;
+       my $t = ascii_html($s);
        my $se_url =
         'https://kernel.org/pub/software/scm/git/docs/git-send-email.html';
 
@@ -121,18 +118,18 @@ sub index_entry {
        $seen->{$id} = "#$id"; # save the anchor for children, later
 
        my $mid = PublicInbox::Hval->new_msgid($mid_raw);
-       my $from = PublicInbox::Hval->new_oneline($hdr->header('From'))->raw;
+       my $from = $hdr->header('From');
        my @from = Email::Address->parse($from);
        $from = $from[0]->name;
 
-       $from = PublicInbox::Hval->new_oneline($from)->as_html;
-       $subj = PublicInbox::Hval->new_oneline($subj)->as_html;
        my $root_anchor = $state->{root_anchor} || '';
        my $path = $root_anchor ? '../../' : '';
        my $href = $mid->as_href;
        my $irt = in_reply_to($hdr);
        my $parent_anchor = $seen->{anchor_for($irt)} if defined $irt;
 
+       $from = ascii_html($from);
+       $subj = ascii_html($subj);
        if ($srch) {
                my $t = $ctx->{flat} ? 'T' : 't';
                $subj = "<a\nhref=\"${path}$href/$t/#u\">$subj</a>";
@@ -414,7 +411,7 @@ sub headers_to_html_header {
        foreach my $h (qw(From To Cc Subject Date)) {
                my $v = $hdr->header($h);
                defined($v) && ($v ne '') or next;
-               $v = PublicInbox::Hval->new_oneline($v);
+               $v = PublicInbox::Hval->new($v);
 
                if ($h eq 'From') {
                        my @from = Email::Address->parse($v->raw);
@@ -582,7 +579,7 @@ sub html_footer {
                my $p = $ctx->{parent_msg};
                my $next = $ctx->{next_msg};
                if ($p) {
-                       $p = PublicInbox::Hval->new_oneline($p);
+                       $p = PublicInbox::Hval->new_msgid($p);
                        $p = $p->as_href;
                        $irt = "<a\nhref=\"$upfx$p/\">parent</a> ";
                } else {
@@ -626,8 +623,7 @@ sub thread_html_head {
        my ($cb, $header, $state) = @_;
        $$cb = $$cb->([200, ['Content-Type'=> 'text/html; charset=UTF-8']]);
 
-       my $s = PublicInbox::Hval->new_oneline($header->header('Subject'));
-       $s = $s->as_html;
+       my $s = ascii_html($header->header('Subject'));
        $$cb->write("<html><head><title>$s</title>".
                qq{<link\nrel=alternate\ntitle="Atom feed"\n} .
                qq!href="../t.atom"\ntype="application/atom+xml"/>! .
@@ -781,9 +777,8 @@ sub _inline_header {
 
        my $cur = $state->{cur};
        my $mid = mid_clean($hdr->header_raw('Message-ID'));
-       my $f = $hdr->header('X-PI-From');
+       my $f = ascii_html($hdr->header('X-PI-From'));
        my $d = _msg_date($hdr);
-       $f = PublicInbox::Hval->new_oneline($f)->as_html;
        my $pfx = ' ' . $d . ' ' . indent_for($level);
        my $attr = $f;
        $state->{first_level} ||= $level;