Namazu-win32-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 一太郎 11 用 filter を作ってみたのですが
- From: ken_kojima@xxxxxxxxxxxxxxxxxx
- Date: Wed, 3 Oct 2001 19:00:49 +0900
- X-ml-name: namazu-win32-users-ja
- X-mail-count: 01053
小嶋です。
以前投稿した、一太郎11を使った一太郎文書用OLEフィルタですが、
さすがに、Perlのスクリプトからも、Rubyのスクリプトからも一太郎
を呼ぶのはばかばかしいと気づいたので、手直しをしました。
#Perlから一太郎を呼んでいるのは、全部をPerlで書こうと悪あがきを
#している副作用で、この部分の情報は、既にRubyのスクリプトで
#一太郎に読みとらせる形で実装済みです(前の投稿を見ていただければ
#判ると思いますが)
で、手直し後は、一太郎を呼び出す回数が半分になりますので、若干の
高速化が実現できました。それでも重いですが。
なお、現在、Namazuをインストールしているサーバにないフォントを
つかった文書に出くわすと、ダイアログを出して指示待ち状態になって
しまうという難点が判っていますが、対処方法が思いつきません。
どなたかヒントをいただければとも思いますが(でも、一太郎の仕様で
どうしようもないのかも知れません)。
----------------------------------------------------------------
jt.pl
#
# -*- Perl -*-
# $Id: jt.pl,v 1.1 2001/09/27 17:21:15 D.K.C $
# Euc convert with NKF
#
package jt;
use strict;
use File::Copy;
use NKF;
require 'util.pl';
require 'gfilter.pl';
my $taroconvpath = undef;
sub mediatype() {
return qw(
application/x-js-taro
);
}
sub status() {
$taroconvpath = util::checkcmd('jt_v1_1');
return 'yes' if defined $taroconvpath;
return 'no';
}
sub recursive() {
return 0;
}
sub pre_codeconv() {
return 0;
}
sub post_codeconv () {
return 0;
}
sub add_magic ($) {
my ($magic) = @_;
# Ichitaro 8, 9, 10, 11
$magic->addFileExts('\\.jt[dt]$', 'application/x-js-taro');
return;
}
sub filter ($$$$$) {
my ($orig_cfile, $cont, $weighted_str, $headings, $fields)
= @_;
my $cfile = defined $orig_cfile ? $$orig_cfile : '';
my $tmpfile = util::tmpnam('NMZ.taro');
my $tmpfile2 = util::tmpnam('NMZ.sjis');
system("$taroconvpath -f $cfile > $tmpfile2");
open (INPATH,"< $tmpfile2") || die "Can't open file :$!\n";
open (OUTPATH,"> $tmpfile") || die "Can't open file :$!\n";
my $tline = <INPATH>;
my $aline = <INPATH>;
my $dline = <INPATH>;
$fields->{'title'} = codeconv::shiftjis_to_eucjp($tline)
if (defined $tline);
$fields->{'author'} = codeconv::shiftjis_to_eucjp($aline)
if (defined $aline);
while (my $sentence = <INPATH> ){
print OUTPATH nkf('-eSZ',$sentence);
}
close(INPATH);
close(OUTPATH);
{
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;
--------------------------------------------------------------------------
jt_v1_1.bat
@ruby c:\usr\scripts\ruby\jt_v1_1.rb %1 %2 %3 %4
--------------------------------------------------------------------------
jt_v1_1.rb
require "win32ole"
require "getopts"
$KCODE="SJIS"
def usage
print "usage: ruby jt3.rb [-f] <Ichitaro Document files..>\n"
end
unless getopts("f")
usage
exit(1)
end
begin
jxw = WIN32OLE.connect("JXW.Application")
rescue
jxw = WIN32OLE.new("JXW.Application")
jxw.WindowState = 2
end
if ARGV.size < 1
usage
exit(1)
end
ary=[]
sheetitem=[]
docinfo=[]
info=[]
for jtd in ARGV
begin
jdoc = jxw.Application.TaroLibrary
jdoc.OpenDocument(File.expand_path(jtd))
if $OPT_f == true
i = 1
for info in jdoc.GetDocumentInformation()
val = ""
for a in info
val = a
end
docinfo[i] = val
i += 1
end
jtdtitle = docinfo[6]
jtdtitle = docinfo[1] if jtdtitle == ""
jtdauthor = docinfo[8]
jtdauthor = docinfo[3] if jtdauthor == ""
jtddate = docinfo[9]
print jtdtitle + "\n"
print jtdauthor + "\n"
print jtddate + "\n"
end
maxsheetnum=jdoc.GetSheetCount
sheetcount=1
until sheetcount > maxsheetnum
jdoc.ChangeCurrentSheet(sheetcount)
i = 0
for item in jdoc.GetCurrentSheetItem
sheetitem[i] = item
i += 1
end
sheettype = sheetitem[0]
sheetname = sheetitem[1]
if sheettype == 10 then
if $OPT_f == false
print "sheet:"+ sheetname + "は一太郎文書ではありません。\n"
end
else
if $OPT_f == false
print "sheet:" + sheetname + "\n"
end
jdoc.JumpStart
until jdoc.OutOfDocument
jdoc.SelectRangeStart(3)
ary=jdoc.GetString
i=0
for a in ary
print a
end
print "\n"
jdoc.NextParagraph(1)
end
end
sheetcount += 1
end
jdoc.QuitDocumentWindow
jxw.Quit
end
end
-----------------------------------------------------------
ここ1週間ほど試用していますが、割合と安定しているようです。
以上、長文?失礼いたしました。
ken_kojima@aomori_prefecture