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;