[Namazu-devel-ja 1743] Re: filter/ooo.pl を Archive::Zip に対応するパッチ

Tadamasa Teranishi yw3t-trns @ asahi-net.or.jp
2008年 5月 30日 (金) 03:24:42 JST


寺西です。

フィルタにおける zip ファイル処理をまとめて、pl/ に追い出すように
プログラムを書き換えてみました。
それに伴いフィルタ(代表して filtet/msofficexml.pl)を書き換えたサン
プルを添付します。(development-2-1用)

zip ファイル処理は必要なツール、モジュールがインストールされている
場合にのみ使用可能な機能なので、拡張機能という位置付けで考えていま
す。

 pl/ext.pl ...... 拡張機能メイン
 pl/extzip.pl ... zip 拡張機能

pl/extzip.pl は、filter/ooo.pl, filter/koffice.pl, filter/xpl.pl 等
から利用することができます。
残念ながら、filter/zip.pl はこれらに比べて処理が複雑になるうえ、
他のフィルタと共通部分が少ないので、利用対象からは外しています。


[利用方法]

require 'ext.pl';
require 'extzip.pl';

sub status() {
    if (ext::issupport('EXT_ZIP') eq 'yes') {
        return 'yes';
    }

    return 'no';
}

フィルタの status() で EXT_ZIP 拡張機能が利用可能かどうかをチェック
します。
チェックは最初に呼び出した時のみ行われるため、複数のフィルタから
呼び出されても1回のみチェックが行われます。
チェック時に、利用可能なツール、モジュールより判断し、以後呼び出さ
れる zip 処理サブルーチンをセットします。

zip ファイル内の特定のファイルの中身を取り出すには次のように呼び
だします。(この例ではファイルがテキスト形式の場合)

    my $err = $extzip::zip_read->($contref, $metafile, \$xml);
    return $err if (defined $err);
    codeconv::normalize_nl(\$xml);

また、zip ファイル内のファイルをパタンーンマッチングで取り出すには、
次のように呼び出します。

    my $err = $extzip::zip_membersMatching->($zipref, $pattern, 
        $embeddingsref);


このモジュールにより、各フィルタの処理が共通化でき、フィルタ間の
差を吸収できます。また、共通化部分を pl/ に追い出すことでフィルタが
簡素化できます。

なお、フィルタの UTF-8 処理についても同様に拡張機能として、今後
フィルタから追い出すことを考えています。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: ext.tar.gz
型:         application/x-gzip
サイズ:     3909 バイト
説明:       無し
URL:        http://www.namazu.org/pipermail/namazu-devel-ja/attachments/20080530/1f0122a6/attachment.bin 


Namazu-devel-ja メーリングリストの案内