From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id C75431FD5F for ; Sat, 25 Jan 2020 04:45:13 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 16/22] linkify: move to_html over from ViewDiff Date: Sat, 25 Jan 2020 04:45:04 +0000 Message-Id: <20200125044510.13769-17-e@yhbt.net> In-Reply-To: <20200125044510.13769-1-e@yhbt.net> References: <20200125044510.13769-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: We use the same idiom in many places for doing two-step linkification and HTML escaping. Get rid of an outdated comment in flush_quote while we're at it. --- lib/PublicInbox/Linkify.pm | 2 ++ lib/PublicInbox/View.pm | 8 ++------ lib/PublicInbox/ViewDiff.pm | 31 +++++++++++++------------------ lib/PublicInbox/ViewVCS.pm | 6 ++---- lib/PublicInbox/WwwListing.pm | 3 +-- 5 files changed, 20 insertions(+), 30 deletions(-) diff --git a/lib/PublicInbox/Linkify.pm b/lib/PublicInbox/Linkify.pm index 77b94f56..199457af 100644 --- a/lib/PublicInbox/Linkify.pm +++ b/lib/PublicInbox/Linkify.pm @@ -120,4 +120,6 @@ sub linkify_mids { !ge; } +sub to_html { linkify_2($_[0], ascii_html(linkify_1(@_))) } + 1; diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 54a49de6..f613afb5 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -496,13 +496,10 @@ sub multipart_text_as_html { sub flush_quote { my ($s, $l, $quot) = @_; - # show everything in the full version with anchor from - # short version (see above) - my $rv = $l->linkify_1($$quot); + my $rv = $l->to_html($$quot); # we use a here to allow users to specify their own # color for quoted text - $rv = $l->linkify_2(ascii_html($rv)); $$quot = undef; $$s .= qq() . $rv . '' } @@ -608,8 +605,7 @@ sub add_text_body { # callback for msg_iter flush_diff($rv, $ctx, $l); } else { # regular lines, OK - $l->linkify_1($cur); - $$rv .= $l->linkify_2(ascii_html($cur)); + $$rv .= $l->to_html($cur); $cur = undef; } } diff --git a/lib/PublicInbox/ViewDiff.pm b/lib/PublicInbox/ViewDiff.pm index 10d71004..be0c0452 100644 --- a/lib/PublicInbox/ViewDiff.pm +++ b/lib/PublicInbox/ViewDiff.pm @@ -44,11 +44,6 @@ my $PATH_B = '"?b/.+|/dev/null'; # cf. git diff.c :: get_compact_summary my $DIFFSTAT_COMMENT = qr/\((?:new|gone|(?:(?:new|mode) [\+\-][lx]))\)/; -sub to_html ($$) { - $_[0]->linkify_1($_[1]); - $_[0]->linkify_2(ascii_html($_[1])); -} - # link to line numbers in blobs sub diff_hunk ($$$$) { my ($dctx, $spfx, $ca, $cb) = @_; @@ -107,7 +102,7 @@ sub anchor0 ($$$$$) { my $spaces = ($orig =~ s/( +)\z//) ? $1 : ''; $$dst .= " " . ascii_html($orig) . '' . $spaces . - to_html($linkify, $rest); + $linkify->to_html($rest); return 1; } undef; @@ -116,7 +111,7 @@ sub anchor0 ($$$$$) { sub anchor1 ($$$$$) { my ($dst, $ctx, $linkify, $pb, $s) = @_; my $attr = to_attr($ctx->{-apfx}.$pb) or return; - my $line = to_html($linkify, $s); + my $line = $linkify->to_html($s); my $ok = delete $ctx->{-anchors}->{$attr}; @@ -158,7 +153,7 @@ sub flush_diff ($$$) { } elsif ($state2class[$state]) { to_state($dst, $state, DSTATE_CTX); } - $$dst .= to_html($linkify, $s); + $$dst .= $linkify->to_html($s); } elsif ($s =~ /^-- $/) { # email signature begins $state == DSTATE_INIT or to_state($dst, $state, DSTATE_INIT); @@ -178,53 +173,53 @@ sub flush_diff ($$$) { uri_escape_utf8($pa, UNSAFE); } anchor1($dst, $ctx, $linkify, $pb, $s) and next; - $$dst .= to_html($linkify, $s); + $$dst .= $linkify->to_html($s); } elsif ($s =~ s/^(index $OID_NULL\.\.)($OID_BLOB)\b//o) { $$dst .= $1 . oid($dctx, $spfx, $2); $dctx = { Q => '' }; - $$dst .= to_html($linkify, $s) ; + $$dst .= $linkify->to_html($s) ; } elsif ($s =~ s/^index ($OID_BLOB)(\.\.$OID_NULL)\b//o) { $$dst .= 'index ' . oid($dctx, $spfx, $1) . $2; $dctx = { Q => '' }; - $$dst .= to_html($linkify, $s); + $$dst .= $linkify->to_html($s); } elsif ($s =~ /^index ($OID_BLOB)\.\.($OID_BLOB)/o) { $dctx->{oid_a} = $1; $dctx->{oid_b} = $2; - $$dst .= to_html($linkify, $s); + $$dst .= $linkify->to_html($s); } elsif ($s =~ s/^@@ (\S+) (\S+) @@//) { $$dst .= '' if $state2class[$state]; $$dst .= qq(); $$dst .= diff_hunk($dctx, $spfx, $1, $2); $$dst .= ''; $state = DSTATE_CTX; - $$dst .= to_html($linkify, $s); + $$dst .= $linkify->to_html($s); } elsif ($s =~ m!^--- (?:$PATH_A)!o || $s =~ m!^\+{3} (?:$PATH_B)!o) { # color only (no oid link) if missing dctx->{oid_*} $state <= DSTATE_STAT and to_state($dst, $state, DSTATE_HEAD); - $$dst .= to_html($linkify, $s); + $$dst .= $linkify->to_html($s); } elsif ($s =~ /^\+/) { if ($state != DSTATE_ADD && $state > DSTATE_STAT) { to_state($dst, $state, DSTATE_ADD); } - $$dst .= to_html($linkify, $s); + $$dst .= $linkify->to_html($s); } elsif ($s =~ /^-/) { if ($state != DSTATE_DEL && $state > DSTATE_STAT) { to_state($dst, $state, DSTATE_DEL); } - $$dst .= to_html($linkify, $s); + $$dst .= $linkify->to_html($s); # ignore the following lines in headers: } elsif ($s =~ /^(?:dis)similarity index/ || $s =~ /^(?:old|new) mode/ || $s =~ /^(?:deleted|new) file mode/ || $s =~ /^(?:copy|rename) (?:from|to) / || $s =~ /^(?:dis)?similarity index /) { - $$dst .= to_html($linkify, $s); + $$dst .= $linkify->to_html($s); } else { $state <= DSTATE_STAT or to_state($dst, $state, DSTATE_INIT); - $$dst .= to_html($linkify, $s); + $$dst .= $linkify->to_html($s); } } @$diff = (); diff --git a/lib/PublicInbox/ViewVCS.pm b/lib/PublicInbox/ViewVCS.pm index fdca70cb..77b3ca28 100644 --- a/lib/PublicInbox/ViewVCS.pm +++ b/lib/PublicInbox/ViewVCS.pm @@ -90,8 +90,7 @@ sub show_other_result ($$) { } my $l = PublicInbox::Linkify->new; utf8::decode($$bref); - $l->linkify_1($$bref); - $$bref = '
'. $l->linkify_2(ascii_html($$bref));
+	$$bref = '
'. $l->to_html($$bref);
 	$$bref .= '

' . $$logref; html_page($ctx, 200, $bref); } @@ -125,9 +124,8 @@ sub solve_result { my $ref = ref($res); my $l = PublicInbox::Linkify->new; - $l->linkify_1($log); $log = '
debug log:

' .
-		$l->linkify_2(ascii_html($log)) . '
'; + $l->to_html($log) . '
'; $res or return html_page($ctx, 404, \$log); $ref eq 'ARRAY' or return html_page($ctx, 500, \$log); diff --git a/lib/PublicInbox/WwwListing.pm b/lib/PublicInbox/WwwListing.pm index 8d610037..37ffffc1 100644 --- a/lib/PublicInbox/WwwListing.pm +++ b/lib/PublicInbox/WwwListing.pm @@ -111,8 +111,7 @@ sub html ($$) { my $tmp = join("\n", map { ibx_entry(@$_, $env) } @$list); my $l = PublicInbox::Linkify->new; - $l->linkify_1($tmp); - $out = '
'.$l->linkify_2(ascii_html($tmp)).'

'; + $out = '
'.$l->to_html($tmp).'

'; } $out = "$title" . $out; $out .= '
'. PublicInbox::WwwStream::code_footer($env) .