Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

word7 対応(Re:Office系フィルタでwvSummaryを利用してみては?)



寺西です。

Tadamasa Teranishi wrote:
> 
> Yukio USUDA wrote:
> >
> > --charsetはOS付属のiconvに依存しているので心配だというような話を
> > namazu-devel-ja 03236 でされていましたが大丈夫ですか。
> 
> 状況は変わっていません。sjis をサポートしていない iconv を使って
> wvWare を作成していた場合、文字化けします。
> # 開発版だし、word7 だけならいいかなと考えてのことです。

方針を変えました。sjis 出力としたのは

 > 1 つは TITLE で、漢字コードが異なるというか、文字化けですね。
 > どこかでコードを壊しています。
 > 2 つめは、<div name="XXXX"> の部分。ファイルに埋め込まれた情報
 > を使うようで、ShiftJIS で出力されます。(例 <div name="標準">)
 > 3 つめは、本文です。これは --charset 等で漢字コードの指定が
 > 可能です。標準は UTF-8 です。

これの 2 のためでした。しかし、1 の TITLE を削除するのであれば、
2 もついでに削除してしまえば良いわけで、sjis 出力にこだわる必要
はありませんでした。
バラバラな漢字コードの混じったものを漢字コード変換ツール(フィルタ)に
通すのは、誤動作の元なので処理中の漢字コードは統一したかった
わけですが、削除して統一するという手もあったわけです。

問題は、2 をうまく削除できるかということですが、sjis の 2バイト目
が、",', <, > ということはないので、たぶん大丈夫でしょう。

修正箇所も減り、シンプルになりました。

UTF-8 出力でも OS 付属 iconv では問題が生じるかもしれませんが、
新たな問題を増やすことはなく現状維持なので、stable-2-0 に反映
しやすいでしょう。

$ cvs diff msword.pl
Index: msword.pl
===================================================================
RCS file: /storage/cvsroot/namazu/filter/msword.pl,v
retrieving revision 1.38
diff -r1.38 msword.pl
99a100
>     my $docversion = "unknown";
114c115
<     # Check version of word document (greater than word8 or else).
---
>     # Check version of word document (greater than word7,8 or else).
116d116
<       my $docversion = "unknown";
123,124c123,124
<           # Only word8 format is supported for Japanese.
<           $supported = 1 if ($docversion =~ /^word8$/);
---
>           # Only word7,8 format is supported for Japanese.
>           $supported = 1 if ($docversion =~ /^word[78]$/);
141a142,146
>             if (util::islang("ja")) {
>                 return _("Unsupported format: ") .  $docversion
>                     if ($docversion =~ /^word7$/);
>             }
>
158c163,176
<       my @cmd = ($utfconvpath, "-Iu8", "-Oej", $tmpfile2);
---
>         if ($docversion =~ /^word7$/) {
>             # Title shoud be removed.
>             $$cont =~ s!<TITLE.*?>.*?</TITLE>!!is;
>
>             # div name shoud be removed.
>             $$cont =~ s!(<div(?:\s[A-Z]+\w*(?:=(?:".*?"|'.*?'|[^\s>]*))?)*)\s+name=(?:".*?"|'.*?'|[^\s>]*)(\s[A-Z]+\w*(?:=(?:".*?"|'.*?'|[^\s>]*))?\s*>)!$1$2!igs;
>
>             {
>               my $fh = util::efopen("> $tmpfile2");
>               print $fh $$cont;
>                 $fh->close();
>             }
>         }
>         my @cmd = ($utfconvpath, "-Iu8", "-Oej", $tmpfile2);
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E