やるきなし

2020/10/02 17:29 / GNU Mailman で送付されてきたメールに対する MHonArc+Namazu システム構築

MHonArc+Namazu での Namazu の UTF-8 対応の続き.MLシステムが刷新されて fml から GNU Mailman に変更になったため対応.

fml はメールのヘッダに X-Mail-Count というフィールドがあって,ここに何件目の投稿かの番号が振られていたのだが,GNU Mailman に変更されてこのフィールドを参照できなくなった.GNU Mailman 側で対応してもらう手もあるが(https://shugo.net/jit/20100213.html等),これは期待できないので,幸い Subject の形式が [ML-Name:Count] Mail Subject だったので,ここから抽出する.mhamain.pl への追加パッチ以下.抽出に失敗したときのことはやるきがないので知らない.あと perl っぽい書き方もよく分かっていないので ruby っぽい書き方になってる.

--- a/perl/mhamain.pl
+++ b/perl/mhamain.pl
@@ -932,7 +932,13 @@ sub read_mail_header {
     ##------------------##
     if (defined($SEQNUMFIELD)) {
         $seq = $fields->{$SEQNUMFIELD}[0];
-        $seq =~ s/(\d+)/$1/;
+        if ($seq =~ /^(\d+)$/) {
+            $seq=$1;
+        } elsif ($seq =~ /^\[\S+?:(\d+)\].*$/) {
+            $seq=$1;
+        } else {
+           $seq='';
+       }
         print STDOUT "($seq)";
     }
     ##------------------##

ついでに...MHonArc は URL をリンクに変換してくれるのだが,URL 末尾に全角スペースがあると,それも URL の一部だと解釈される.ということで URL 末尾に %E3%80%80 がついたベージに飛ばされる.ぴえんだ.これを修正するパッチは以下.こちらもやるきなし.変に表示が詰まるのを避けるため,末尾に全角スペースがあった場合は</a>の後にスペースを入れることにしている.

--- a/perl/mhtxtplain.pl
+++ b/perl/mhtxtplain.pl
@@ -574,8 +574,15 @@ sub filter {
        ($HUrlExp)
    }{
        if (!defined($nolink) && !defined($link)) {
+                my $a = $1;
+                my $b = '';
+                $a =~ s/ +$/ /;
+                if ($a =~ /^(.*) +$/) {
+                    $a = $1;
+                    $b = ' ';
+                }
        join('', '<a ', $target, ' rel="nofollow" href="',
-            $1, '">', $1, '</a>');
+            $a, '">', $a, '</a>', $b);
        } else {
        my $url_match = $1;
        my $scheme;

追記 (2021/7/21)

上のパッチだと文末の全角スペースのみしか考慮していない.全角スペースのあとに文字がある場合にも対応するには以下.

--- a/perl/mhtxtplain.pl
+++ b/perl/mhtxtplain.pl
@@ -576,10 +576,10 @@ sub filter {
        if (!defined($nolink) && !defined($link)) {
                 my $a = $1;
                 my $b = '';
-                $a =~ s/ +$/ /;
-                if ($a =~ /^(.*) +$/) {
+                $a =~ s/ +/ /;
+                if ($a =~ /^([^ ]*)(.*)$/) {
                     $a = $1;
-                    $b = ' ';
+                    $b = $2;
                 }
        join('', '<a ', $target, ' rel="nofollow" href="',
             $a, '">', $a, '</a>', $b);

もとの /usr/share/mhonarc/mhtxtplain.pl からの patch は以下.

--- a/perl/mhtxtplain.pl
+++ b/perl/mhtxtplain.pl
@@ -574,8 +574,15 @@
        ($HUrlExp)
    }{
        if (!defined($nolink) && !defined($link)) {
+                my $a = $1;
+                my $b = '';
+                $a =~ s/ +/ /;
+                if ($a =~ /^([^ ]*)(.*)$/) {
+                    $a = $1;
+                    $b = $2;
+                }
        join('', '<a ', $target, ' rel="nofollow" href="',
-            $1, '">', $1, '</a>');
+            $a, '">', $a, '</a>', $b);
        } else {
        my $url_match = $1;
        my $scheme;

Related articles