Namazu-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
pptHtml による PowerPoint 対応 (Re: xlHtml on Solaris2.5.1)
寺西です。
knok@xxxxxxxxxxxxx wrote:
>
> <39C742A7.945E424B@xxxxxxxxx>の記事において
> teranisi@xxxxxxxxxさんは書きました。
>
> >> xlHtml と同等の処理ルーチンを追加すれば、PowerPoint も検索できる
> >> ようになるのではないでしょうか。
>
> そうですね。2.0.5 が release できたらそちらにとりかかってみます。
これってもうできたんでしたっけ?
既に作られておれば無視していただいて結構ですが、
powerpoint.pl に excel.pl の内容を取り込んだだけのもの
をとりあえず作りましたので、何方かチェックしていただけますか?
当方の環境では動いているようです。
namazu 2.0.5, lv v.4.49.4, xlHtml 0.2.7.2(実際に使うのは
pptHtml)で確認しました。
PowerPoint 97 以上が対象です。
なお、namazurc の ALLOW_FILE の Word, Excel の行の後にでも
"|.*\\.ppt" . # PowerPoint
を追加してください。
--
寺西
*** powerpoint.pl.orig Mon Dec 25 16:34:46 2000
--- powerpoint.pl Mon Dec 25 16:34:42 2000
***************
*** 28,35 ****
--- 28,37 ----
use File::Copy;
require 'util.pl';
require 'gfilter.pl';
+ require 'html.pl';
my $pptconvpath = undef;
+ my $utfconvpath = undef;
sub mediatype() {
return ('application/powerpoint');
***************
*** 36,44 ****
}
sub status() {
! $pptconvpath = util::checkcmd('doccat');
! return 'yes' if defined $pptconvpath;
! return 'no';
}
sub recursive() {
--- 38,61 ----
}
sub status() {
! $pptconvpath = util::checkcmd('pptHtml');
! # return 'no' unless defined $pptconvpath
! if (defined $pptconvpath) {
! if (!util::islang("ja")) {
! return 'yes';
! } else {
! $utfconvpath = util::checkcmd('lv');
! if (defined $utfconvpath) {
! return 'yes';
! } else {
! return 'no';
! }
! }
! } else {
! $pptconvpath = util::checkcmd('doccat');
! return 'yes' if defined $pptconvpath;
! return 'no';
! }
}
sub recursive() {
***************
*** 61,66 ****
--- 78,163 ----
}
sub filter ($$$$$) {
+ my ($orig_cfile, $cont, $weighted_str, $headings, $fields)
+ = @_;
+ my $err = undef;
+
+ if (util::checkcmd('pptHtml')) {
+ $err = filter_ppt($orig_cfile, $cont, $weighted_str, $headings, $fields);
+ } else {
+ $err = filter_doccat($orig_cfile, $cont, $weighted_str, $headings, $fields);
+ }
+ return $err;
+ }
+
+ sub filter_ppt ($$$$$) {
+ my ($orig_cfile, $cont, $weighted_str, $headings, $fields)
+ = @_;
+ my $cfile = defined $orig_cfile ? $$orig_cfile : '';
+
+ my $tmpfile = util::tmpnam('NMZ.powerpoint');
+ my $tmpfile2 = util::tmpnam('NMZ.powerpoint2');
+
+
+ util::vprint("Processing ms-powerpoint file ... (using '$pptconvpath')\n");
+
+ {
+ my $fh = util::efopen("> $tmpfile");
+ print $fh $$cont;
+ }
+
+ #
+
+ # handle a Japanese PowerPoint ocument correctly.
+ system("$pptconvpath $tmpfile > $tmpfile2");
+
+ {
+ my $fh = util::efopen("< $tmpfile2");
+ $$cont = util::readfile($fh);
+ }
+
+ # Code conversion for Japanese document.
+ if (util::islang("ja")) {
+ my $encoding = "u8"; # UTF-8
+ # Pattern for pptHtml
+ if ($$cont =~ m!^<FONT SIZE=-1><I>Last Updated using Excel 5.0 or 95</I></FONT><br>$!m)
+ {
+ $encoding = "s"; # Shift_JIS
+ }
+ {
+ my $fh = util::efopen("> $tmpfile");
+ print $fh $$cont;
+ }
+ system("$utfconvpath -I$encoding -Oej $tmpfile > $tmpfile2");
+ {
+ my $fh = util::efopen("< $tmpfile2");
+ $$cont = util::readfile($fh);
+ }
+ }
+
+ # Extract the author and exclude pptHtml's footer at once.
+ $$cont =~ s!^<FONT SIZE=-1><I>Spreadsheet's Author: (.*?)</I></FONT><br>.*!!ms; # '
+ $fields->{'author'} = $1;
+
+ unlink($tmpfile);
+ unlink($tmpfile2);
+
+ # Title shoud be removed.
+ $$cont =~ s!<TITLE>.+</TITLE>!!;
+
+ 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);
+ 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 : '';