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/;
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>";
}
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};
\%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;
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);
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
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;
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";
}
}
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};
}
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>" .
$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>};
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);
$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";
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;
use constant T_ANCHOR => '#u';
use constant INDENT => ' ';
-*ascii_html = *PublicInbox::Hval::ascii_html;
-
my $enc_utf8 = find_encoding('UTF-8');
# public functions:
$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';
$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>";
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);
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 {
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"/>! .
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;