Namazu-win32-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 一太郎11用 filter について
- From: ken_kojima@xxxxxxxxxxxxxxxxxx
- Date: Tue, 12 Mar 2002 11:11:44 +0900
- X-ml-name: namazu-win32-users-ja
- X-mail-count: 01304
小嶋@青森です。
ご示唆いただいた、BEGINブロック、ENDブロックを利用した版の
一太郎11用フィルタを再投稿します。長文ご容赦願います。
環境によっては大きなエラーを出す可能性は未だ否定できませんので、
ご注意願います。
なお、このフィルタは、Namazu2.0.10 ActivePerl Build631でテストしています。
----------------------<jt.pl>-------------------------------
#
# -*- Perl -*-
# $Id: jt.pl,v 1.3.3 2002/03/11 18:10:35 D.K.C $
#
# Rubyのスクリプトは必要なくなりました。
# 一太郎ver4,5,6も対象に追加。
# タイトル、ファイル名の文字化け対策追加。
# ダイアログ表示による停止を回避。
# 何度も一太郎を起動・終了することを回避。
#
package jt;
use strict;
use File::Copy;
use NKF;
use Win32::OLE;
use Win32::OLE::Enum;
use Win32::OLE::Const;
require 'util.pl';
require 'gfilter.pl';
# 一太郎を何度も起動・終了させないために
#
BEGIN {
my $jxw = Win32::OLE->new('JXW.Application');
$jxw->{WindowState} = 2;
$jxw->Application->TaroLibrary->NewDocument;
$jxw->{Visible} = 0;
}
END {
my $jxw = Win32::OLE->new('JXW.Application');
$jxw->Quit;
}
# ここまで
sub mediatype() {
return ('application/ichitaro4', 'application/ichitaro5', 'application/ichitaro6',
'application/x-js-taro'
);
}
# olemsword.pl より引用 ただし一太郎12については、後で確認のこと
sub status() {
open (SAVEERR,">&STDERR");
open (STDERR,">nul");
my $const;
$const = Win32::OLE::Const->Load("TARO 12.0 Type Library");
$const = Win32::OLE::Const->Load("TARO 11.0 Type Library")
unless $const;
open (STDERR,">&SAVEERR");
return 'yes' if (defined $const);
return 'no';
}
# ここまで
sub recursive() {
return 0;
}
sub pre_codeconv() {
return 0;
}
sub post_codeconv () {
return 0;
}
sub add_magic ($) {
my ($magic) = @_;
$magic->addFileExts('(?i)\\.jsw', 'application/ichitaro4');
$magic->addFileExts('(?i)\\.jaw', 'application/ichitaro5');
$magic->addFileExts('(?i)\\.jbw', 'application/ichitaro6');
# Ichitaro 8, 9, 10, 11
$magic->addFileExts('\\.jt[dt]$', 'application/x-js-taro');
return;
}
sub failtoload {
my $jxw = Win32::OLE->new('JXW.Application');
$jxw->Application->TaroLibrary->QuitDocumentWindow;
die "Cannot Open file\n";
}
sub filter ($$$$$) {
my ($orig_cfile, $cont, $weighted_str, $headings, $fields)
= @_;
my ($tline,$aline,$dline,$sentence);
my ($line,@DocProperty,$i,$key,$val,$title,$author,$date);
my ($DocInfo,$jdoc,$unit,$jxw,$japply,$taroobj);
my $cfile = defined $orig_cfile ? $$orig_cfile : '';
$$cont = "";
my $jfile = $cfile;
$jfile =~ s/\//\\/g;
#ここから、ole使用の部分
$jxw = Win32::OLE->new('JXW.Application') or die "Oops, cannot start Ichitaro.";
$japply = $jxw->Application;
$taroobj = $japply->TaroLibrary;
$jxw->Documents->Open($jfile) ; #参照専用ファイルは参照モード読み込み
$DocInfo = Win32::OLE::Enum->new($taroobj->GetDocumentInformation) or &failtoload;
for ($i=1;$i<=17;$i++){
$unit = Win32::OLE::Enum->new($DocInfo->Next);
($key,$val) = $unit->All();
$DocProperty[$i][1] = $key;
$DocProperty[$i][2] = $val;
}
$tline = $DocProperty[6][2];
$tline = $DocProperty[1][2] unless $tline;
$aline = $DocProperty[8][2];
$aline = $DocProperty[3][2] unless $aline;
$dline = $DocProperty[9][2];
my $maxsheetnum = $taroobj->GetSheetCount;
my $sheetcount=0;
while($sheetcount < $maxsheetnum){
$jdoc = $japply->TaroLibrary;
$jdoc->ChangeCurrentSheet(eval(++$sheetcount));
my $CurrentSheetItem = Win32::OLE::Enum->new($jdoc->GetCurrentSheetItem);
my @SheetItem = $CurrentSheetItem->All();
my $sheettype = $SheetItem[0];
my $sheetname = $SheetItem[1];
if ($sheettype == 10 ){
} else {
$jdoc->JumpStart;
until($jdoc->OutOfDocument){
$jdoc->SelectRangeStart(30);
my $para =Win32::OLE::Enum->new($jdoc->GetString);
my @ary = $para->All();
foreach $line (@ary){
$sentence .= $line;
}
}
}
}
$taroobj->QuitDocumentWindow;
# ここまで,OLE関係部分
$fields->{'title'} = nkf('-eSZ',$tline)
if (defined $tline);
$fields->{'author'} = nkf('-eSZ',$aline)
if (defined $aline);
$$cont .= nkf('-eSZ',$sentence);
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;