Namazu-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ms-word ドキュメントのヘッダ、フッタは検索対象になるのか ( ソースがついて長文です。)
- From: Amuro Ray <gundam@xxxxxxxxxxxxxxxx>
- Date: Thu, 31 Jan 2002 23:47:38 +0900
- X-ml-name: namazu-users-ja
- X-mail-count: 02420
- References: <3C56E6BE.D50F26BE@asahi-net.or.jp>
Amuro Rayです。
Tadamasa Teranishi <yw3t-trns@xxxxxxxxxxxxxxx> wrote:
>
> filter/word.pl だったかの中で、wvWare を呼び出している部分の
> 処理がどうなっているかですね。
>
> そういえば、html ではなく、text 出力して処理しているのかも
> しれません。
>
ご指摘のwvWareのtext出力ですが、manと--helpをみるとオプ
ション付けではなく、wvTextというスクリプトで行うようです。
結果ですが、wvTextでHTMLを作成したら問題なく、ヘッダ、フ
ッタが含まれていました。
フィルタの方ですが、Perlをまったく知らないので、本屋で立
ち読みなんぞして見たりしたのですが、
system("$wordconvpath $tmpfile | $utfconvpath -Iu8 -Oej
> $tmpfile2");
この行でwvHtml + lvを行っているようです。
正しければ、wordの変換はHTMLになっているようです。
(msword.plって他のperlを読み込んだり、どこから呼ばれてい
るサブルーチンかまったく???)
解決の鍵になるかわかりませんが、今の環境のWordフィルタの
スクリプトファイルを添付しますので、引き続きご助言をお願
いします。
「msword.pl」
package msword;
use strict;
use File::Copy;
require 'util.pl';
require 'gfilter.pl';
require 'html.pl';
my $wordconvpath = undef;
my $utfconvpath = undef;
my $wvversionpath = undef;
sub mediatype() {
return ('application/msword');
}
sub status() {
$wordconvpath = util::checkcmd('wvWare');
if (defined $wordconvpath) {
my $libpath = `wv-libconfig |sed -e 's/^-L//' -e 's/ .*\$//'`;
chomp $libpath;
if (defined $libpath) {
$wordconvpath .= " --config $libpath/wv/wvHtml.xml";
} else {
$wordconvpath = undef;
}
} else {
$wordconvpath = util::checkcmd('wvHtml');
}
if (defined $wordconvpath) {
if (!util::islang("ja")) {
return 'yes';
} else {
$utfconvpath = util::checkcmd('lv');
$wvversionpath = util::checkcmd('wvVersion');
if ((defined $utfconvpath) && (defined $wvversionpath)) {
return 'yes';
} else {
return 'no';
}
}
} else {
$wordconvpath = util::checkcmd('doccat');
return 'yes' if defined $wordconvpath;
return 'no';
}
}
sub recursive() {
return 0;
}
sub pre_codeconv() {
return 0;
}
sub post_codeconv () {
return 0;
}
sub add_magic ($) {
return;
}
sub filter ($$$$$) {
my ($orig_cfile, $cont, $weighted_str, $headings, $fields)
= @_;
my $err = undef;
if (util::checkcmd('wvHtml')) {
$err = filter_wv($orig_cfile, $cont, $weighted_str, $headings, $fields);
} else {
$err = filter_doccat($orig_cfile, $cont, $weighted_str, $headings, $fields);
}
return $err;
}
sub filter_wv ($$$$$) {
my ($orig_cfile, $cont, $weighted_str, $headings, $fields)
= @_;
my $cfile = defined $orig_cfile ? $$orig_cfile : '';
my $tmpfile = util::tmpnam('NMZ.word');
my $tmpfile2 = util::tmpnam('NMZ.word2');
if (util::islang("ja")) {
}
util::vprint("Processing ms-word file ... (using '$wordconvpath')\n");
{
my $fh = util::efopen("> $tmpfile");
print $fh $$cont;
}
if (!util::islang("ja")) {
system("$wordconvpath $tmpfile > $tmpfile2");
} else {
my $version = "unknown";
my $supported = undef;
my $fh_cmd = util::efopen("$wvversionpath $tmpfile |");
while (<$fh_cmd>) {
if (/^Version: (word\d+),/i) {
$version = $1;
#
# Only word8 format is supported for Japanese.
#
if ($version =~ /^word8$/) {
$supported = 1;
}
}
}
return _("Unsupported format: ") . $version unless $supported;
system("$wordconvpath $tmpfile | $utfconvpath -Iu8 -Oej > $tmpfile2");
}
{
my $fh = util::efopen("< $tmpfile2");
$$cont = util::readfile($fh);
# Exclude wvHtml's footer becaues it has no good index terms.
$$cont =~ s/<!--Section Ends-->.*$//s;
}
unlink($tmpfile);
unlink($tmpfile2);
html::html_filter($cont, $weighted_str, $fields, $headings);
gfilter::line_adjust_filter($cont);
gfilter::line_adjust_filter($weighted_str);
gfilter::white_space_adjust_filter($cont);
$fields->{'title'} = gfilter::filename_to_title($cfile, $weighted_str)
unless $fields->{'title'};
gfilter::show_filter_debug_info($cont, $weighted_str,
$fields, $headings);
return undef;
}
sub filter_doccat ($$$$$) {
my ($orig_cfile, $cont, $weighted_str, $headings, $fields)
= @_;
my $cfile = defined $orig_cfile ? $$orig_cfile : '';
my $tmpfile = util::tmpnam('NMZ.word');
my $tmpfile2 = util::tmpnam('NMZ.word2');
copy("$cfile", "$tmpfile2");
system("$wordconvpath -o e $tmpfile2 > $tmpfile");
{
my $fh = util::efopen("< $tmpfile");
$$cont = util::readfile($fh);
}
unlink($tmpfile);
unlink($tmpfile2);
gfilter::line_adjust_filter($cont);
gfilter::line_adjust_filter($weighted_str);
gfilter::white_space_adjust_filter($cont);
$fields->{'title'} = gfilter::filename_to_title($cfile, $weighted_str)
unless $fields->{'title'};
gfilter::show_filter_debug_info($cont, $weighted_str,
$fields, $headings);
return undef;
}
1;
"★。、::。.::・'゜☆。.::・'゜★。、::。.::・'゜
Name : Amuro Ray
E-Mail : gundam@xxxxxxxxxxxxxxxx
"★。、::。.::・'゜☆。.::・'゜★。、::。.::・'゜