村井と申します。
この件は2年ほど前に問題として指摘されたものです。
ActivePerl
に起因するもので、シフトJISコードで
2バイト目が16進数の5Cとなる文字(「表」「能」「構」
「十」「申」「予」など)が最後に付く名前のフォルダ以下
のファイルがインデックス作成の対象外になってしまうものです。
Namazu 2.0.13 for Win32 ( β版)
が発表されたのを機に
ActivePerl 5.6.1 build 638
との組み合わせでインデックス作成
を行ってみましたが、オリジナルのままではやはりインデックスは
作成されませんでした。
\namazu\bin\ の中にある mknmz.bat の中の
find_target
(@)
というサブルーチンの中に以下の変更を加えることで、この現象を 回避できます。 (5行をコメント化し、その後に下記のように追加) これにより例えば \正誤表\ \性能\ \機構\ といったフォルダ 以下のファイルもインデックス化できます。 なお、以前投稿したものは、変数のスコープの扱いが正しくありません
でした。 やっていることは同じですが、内部にサブルーチンをつくるのを やめました。
#
# Wanted routine for File::Find's find(). # # my $wanted_closure = sub { #コメント化 # my $fname = "$File::Find::dir/$_"; #コメント化 # add_target($fname, \@flist, \%counts); #コメント化 # }; #コメント化 #
find($wanted_closure, @subtargets) if (@subtargets > 0); #コメント化
#追加ここから########################################
for my $XS (@subtargets){ my @xd_names=(); my $xd_count=0; my @x_names=(); if ($XS =~ /\/\z/ ){ $xd_names[$xd_count] = $XS; } else{ $xd_names[$xd_count] = $XS . '/'; } while ($xd_count >=0) { my $xd1=$xd_names[$xd_count]; if (opendir (XDIR,$xd1)){ @x_names=readdir XDIR; closedir XDIR; for my $XN (@x_names){ next if $XN =~ /^\.{1,2}\z/; my $xd2 = $xd1 . $XN; if (-f $xd2){ add_target($xd2, \@flist, \%counts); next; } my $xd3 = $xd2 . '/'; if (-d $xd3){ $xd_names[$xd_count++]= $xd3; next; } print "Unknown type $xd2\n"; next; } } else{ print "Can't opendir $xd1\n"; } $xd_count--; } } #追加ここまで##################################### } else { print STDERR _("unsupported target: ") . $target; } } # uniq @flist my %mark = (); @flist = grep {$mark{$_}++; $mark{$_} == 1} @flist; ///////////////////////////////////////////////////
村井 俊文 E-mail:murai.t-fs@xxxxxxxxx |