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;