Namazu-win32-users-ja(旧)


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

Re: フォルダ名の最後が「表」の場合のインデックス作成



 村井と申します。
 
 この件は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