about summary refs log tree commit homepage
path: root/lib/PublicInbox/SearchMsg.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/SearchMsg.pm')
-rw-r--r--lib/PublicInbox/SearchMsg.pm14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/PublicInbox/SearchMsg.pm b/lib/PublicInbox/SearchMsg.pm
index ceb6edad..5f3c8af8 100644
--- a/lib/PublicInbox/SearchMsg.pm
+++ b/lib/PublicInbox/SearchMsg.pm
@@ -8,6 +8,8 @@
 package PublicInbox::SearchMsg;
 use strict;
 use warnings;
+use base qw(Exporter);
+our @EXPORT_OK = qw(subject_normalized);
 use PublicInbox::MID qw/mid_clean mid_mime/;
 use PublicInbox::Address;
 use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp);
@@ -185,4 +187,16 @@ sub mid ($;$) {
 
 sub _extract_mid { mid_clean(mid_mime($_[0]->{mime})) }
 
+our $REPLY_RE = qr/^re:\s+/i;
+
+sub subject_normalized ($) {
+        my ($subj) = @_;
+        $subj =~ s/\A\s+//s; # no leading space
+        $subj =~ s/\s+\z//s; # no trailing space
+        $subj =~ s/\s+/ /gs; # no redundant spaces
+        $subj =~ s/\.+\z//; # no trailing '.'
+        $subj =~ s/$REPLY_RE//igo; # remove reply prefix
+        $subj;
+}
+
 1;