namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

mknmz.pl



しがないさらりーまんです。

ヨタ話ばかりしてるのも何なので、たまには Namazu のコードの話を。

Namazu v1.2.0-beta-9 の mknmz.pl ですが、いくつか改善案があります。
まず179行目あたりですが、

## HTML の拡張子 .htm, .html, .shtml, .phtml, .html.en, .html.ja, .asp など
$HTML_SUFFIX = 'html?|[ps]html|html[a-z]{2}n|asp';

とあるのですが、"html[a-z]{2}" では、.html.en とか .html.ja にマッチ
しないのでは…それから229行目あたりからですが、

$TAGW{'STRONG'} =  2;
$TAGW{'EM'}     =  2;
$TAGW{'KBD'}    =  2;
$TAGW{'SAMP'}   =  2;
$TAGW{'VAR'}    =  2;
$TAGW{'CODE'}   =  2;
$TAGW{'CITE'}   =  2;

このあたりを加えるなら、ABBR とか ACRONYM とか DFN とかも加えてもいいの
では。同様に、245行目あたりの

$NON_SEPARATION_TAGS = 'A|TT|CODE|SAMP|KBD|VAR|B|STRONG|I|EM|CITE|FONT|U';

にも、これらを加えておいた方がいいでしょう。

また、834行目あたりからの

sub img_alt_get (\$) {
    my ($contents) = @_;

    $$contents =~ s/<IMG[^>]*\s+ALT=[\"\']?([^\"\']*)[\"\']?[^>]*>/ $1 /gi;
}

という subroutine ですが、RFC 1866 にも

3.2.4. Attributes

   In a start-tag, white space and attributes are allowed between the
   element name and the closing delimiter. An attribute specification
   typically consists of an attribute name, an equal sign, and a value,
   though some attribute specifications may be just a name token. White
   space is allowed around the equal sign.

とある通り、"=" の前後に空白文字があっても大丈夫なようにしておいた方が
よいでしょう。ついでに、IMG 要素の alt 属性をチェックするなら、TABLE
要素の summary 属性とか、title 属性もチェックできた方が嬉しいです。
title 属性がチェックできれば、例えば

  <ACRONYM lang="en"
     title="Synchronized Multimedia Integration Language">SMIL</ACRONYM>

のようなマークアップがあった場合、従来では "Synchronized Multimedia" で
検索しても引っかかりませんが、これが検索できるようになります。

それと1410行目あたりの

        print stderr $USAGE;

ですけど、ふつー STDERR って書きませんか? 一応動くことは動きますけど、
perl -wc でチェックすると

Unquoted string "stderr" may clash with future reserved word at mknmz line XXX.

とか言われるのでちょっとアレです。

…というわけで、一応パッチを付けておきます。使えるところがあれば使って
ください。

-- 
石川 雅康

--- mknmz.pl.orig	Tue Jun 16 00:16:52 1998
+++ mknmz.pl	Tue Jun 16 22:22:33 1998
@@ -176,7 +176,7 @@
 $DENY_FILE = '%OPT_DENY_FILE%';
 
 ## HTML の拡張子 .htm, .html, .shtml, .phtml, .html.en, .html.ja, .asp など
-$HTML_SUFFIX = 'html?|[ps]html|html[a-z]{2}|asp';
+$HTML_SUFFIX = 'html?|[ps]html|html?\.[a-z]{2}|asp';
 
 ## MHonArc のメッセージ・ファイル
 $MHONARC_MESSAGE_FILE = 'msg\d{5}\.html';
@@ -233,6 +233,9 @@
 $TAGW{'VAR'}    =  2;
 $TAGW{'CODE'}   =  2;
 $TAGW{'CITE'}   =  2;
+$TAGW{'ABBR'}   =  2;
+$TAGW{'ACRONYM'} =  2;
+$TAGW{'DFN'}    =  2;
 
 ## Mail/News で残すヘッダの重み
 $REMAIN_HEADER_W = 8;
@@ -242,7 +245,8 @@
 ## 例えば、これは<STRONG>重要</STRONG>です。などという文脈ではタグは削除すべき
 ## だが、 This is foo.<BR>That is bar. という文脈ではタグは空白に変換すべき
 ##
-$NON_SEPARATION_TAGS = 'A|TT|CODE|SAMP|KBD|VAR|B|STRONG|I|EM|CITE|FONT|U';
+$NON_SEPARATION_TAGS = 'A|TT|CODE|SAMP|KBD|VAR|B|STRONG|I|EM|CITE|FONT|U|'.
+                       'STRIKE|BIG|SMALL|DFN|ABBR|ACRONYM|Q|SUB|SUP|SPAN|BDO';
 
 
 ## タグによる重みづけする際にこの数字以上の長さの文字列の場合は重
@@ -785,6 +789,8 @@
     &get_html_title($title, $contents, $weighted_str);
     &get_meta_info($contents, $weighted_str);
     &img_alt_get($contents);
+    &table_summary_get($contents);
+    &title_attr_get($contents);
     &normalize_html_tag($contents);
     &erase_above_body($contents);
     &weight_tag($contents, $weighted_str, $headings);
@@ -834,7 +840,21 @@
 sub img_alt_get (\$) {
     my ($contents) = @_;
 
-    $$contents =~ s/<IMG[^>]*\s+ALT=[\"\']?([^\"\']*)[\"\']?[^>]*>/ $1 /gi;
+    $$contents =~ s/<IMG[^>]*\s+ALT\s*=\s*[\"\']?([^\"\']*)[\"\']?[^>]*>/ $1 /gi;
+}
+
+# <TABLE ... SUMMARY="foo"> の foo の取り出し
+sub table_summary_get (\$) {
+    my ($contents) = @_;
+
+    $$contents =~ s/<TABLE[^>]*\s+SUMMARY\s*=\s*[\"\']?([^\"\']*)[\"\']?[^>]*>/ $1 /gi;
+}
+
+# <XXX ... TITLE="foo"> の foo の取り出し
+sub title_attr_get (\$) {
+    my ($contents) = @_;
+
+    $$contents =~ s/<[A-Z]+[^>]*\s+TITLE\s*=\s*[\"\']?([^\"\']*)[\"\']?[^>]*>/ $1 /gi;
 }
 
 # <A HREF...> などを <A> に統一 (エレメントをすべて削除)
@@ -1407,7 +1427,7 @@
 
 sub usage () {
     if ($CCS eq "euc") {
-	print stderr $USAGE;
+	print STDERR $USAGE;
     } elsif ($CCS eq "sjis") {
 	open(NKF, "|$NKF -s");
 	print NKF $USAGE;