Namazu-devel-ja(旧)


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

Re: --node-split ?



岡埜です
>    (progn (info) (Info-goto-node "(emacs)Copying"))
いろいろな名前でジャンプして実験しました。
実現はかなり簡単でした。
split(/\x1f/,$cont)するだけです。
文章情報はほとんど捨ててます。
--info-splitつけるとどんなファイルもinfoファイルだと思い込むので
infoディレクトリをターゲットにしましょう。

$ mknmz3 -saZ --info-split -O . /cygdrive/c/usr/local/Meadow/1.13b1/info/ja
$ namazu skk .
検索結果

参考ヒット数:  [ skk: 129 ]

検索式にマッチする 129 個の文書が見つかりました。

1. NMZ.partial.49.tmp (スコア: 135)
著者: 不明
日付: Wed, 11 Oct 2000 18:42:30
File: skk.info, Node: 事項索引, Next: 変数索引, Prev: 謝辞とお願い, Up: Top 事項索引 ** * Menu: * SK
K95: SKK95. 4. * `skkinput': skkinpu
/cygdrive/c/usr/local/Meadow/1.13b1/info/ja/skk.info-3#事項索引 (26,325 bytes)


2. NMZ.partial.25.tmp (スコア: 119)
著者: 不明
日付: Wed, 11 Oct 2000 18:42:30
File: skk.info, Node: 辞書に関する設定, Prev: 辞書の形式, Up: 予備知識 辞書に関する設定 -- `skk-sear
ch-prog-list'の各要素に辞書検索プログラム名、辞書名、引数をセッ トにしたリストを埋め込むことによ
/cygdrive/c/usr/local/Meadow/1.13b1/info/ja/skk.info-1#辞書に関する設定 (8,669 bytes)


3. NMZ.partial.23.tmp (スコア: 92)
著者: 不明
日付: Wed, 11 Oct 2000 18:42:30
File: skk.info, Node: ユーザーオプションの設定方法, Next: 辞書の形式, Prev: ファイル構成, Up: 予備知
識 ユーザーオプションの設定方法 -- SKKのカスタマイズは、`~/.emacs'あるいは`~/.skk'に記述すること
/cygdrive/c/usr/local/Meadow/1.13b1/info/ja/skk.info-1#ユーザーオプションの設定方法 (2,624 bytes)



実装はhtmlsplitといっしょです

mknmz:
  if ($var::Opt{'infosplit'}){
    my @parts = infosplit::split($cfile, "NMZ.partial");
    if (@parts > 1){
      my $id = 0;
      for my $part (@parts){
        my $fname = util::tmpnam("NMZ.partial.$id");
        my $fragment  = defined $part ? "$part" : undef;
        my $uri   = generate_uri($cfile, $fragment);
        my $result = namazu_core($fname, 
               $docid_count + $processed_num, 
               $docid_base, $file_count, 
               $field_indices, $fh_errorsfile, 
               $total_files_num, 
               $uri, $id, $#parts);
        if ($result > 0){
          $processed_num++;
          my $rname = defined $part ? "$cfile\t$part" : "$cfile";
          put_registry($rname);
        }
        unlink $fname;
        $id++;
      }
      return ($file_size, $processed_num);
    }
  }

mknmz:
sub postload_modules () {
    require "htmlsplit.pl" || die "unable to require \"htmlsplit.pl\"\n";
    require "pdfsplit.pl" || die "unable to require \"pdfsplit.pl\"\n";
    require "pdfsplit.pl" || die "unable to require \"infosplit.pl\"\n";
}

mknmz:
          '9|info-split'        => \$var::Opt{'infosplit'},
sub postload_modules () {
    require "htmlsplit.pl" || die "unable to require \"htmlsplit.pl\"\n";
    require "pdfsplit.pl" || die "unable to require \"pdfsplit.pl\"\n";
    require "pdfsplit.pl" || die "unable to require \"pdfsplit.pl\"\n";
}

pl/var.pl:
$Opt{'htmlsplit'} = 0;
$Opt{'pdfsplit'} = 0;
$Opt{'infosplit'} = 0;

pl/infosplit.pl:
package infosplit;
require "util.pl";
use strict;
sub split ($$){
  my ($fname, $base) = @_;
  my $mtime = (stat($fname))[9];
  my %info = (
    'title'    => "",
    'author'   => "",
    'anchored' => "",
    'name'     => "",
    'base'     => $base,
    'names'    => [],
  );

  my $id = 0;
  my $fh = util::efopen($fname);
  my $cont   = join '', <$fh>;
  my @list = split(/\x1f/,$cont);
  for(@list){
    write_partial_file($_, $id + 1, $id, $mtime, \%info);
    $id++
  }
  return @{$info{'names'}};
}

sub write_partial_file($$$$$$) {
  my ($cont, $name, $id, $mtime, $info_ref) = @_;
#File: elisp, Node: Copying, Next: Introduction, Prev: Top, Up: Top
  $cont =~ /File: [^,\n\r]+?, Node: ([^,\n\r]+)?/;
	$name = $1;
  my $base          = $info_ref->{'base'};
  my $fname = util::tmpnam("$base.$id");
  my $fh = util::efopen(">$fname");
  print $fh $cont;
  push @{$info_ref->{'names'}}, $name;
  $info_ref->{'name'} = $name;
  close($fh);
  utime($mtime, $mtime, $fname);
  return "";
}
1;