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&nbsp;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:&nbsp;(.*?)</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 : '';