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