nmzcat と %FIELD_ALIASES と変数の初期化2008年05月02日 13時05分49秒

nmzcat は %FIELD_ALIASES (つまり、フィールドの別名)を考慮していないようです。このため、

$ nmzcat msg00000.html

では、author が取り出せていません。

$Document->get_field_info('author');

で、直接 $self->{'_field_info'}{author}; を参照しています。 多くのメディアタイプでは author に著者が入りますが、filter/mhonarc.pl ではfrom に著者が入るためです。

これはこういう仕様だと考えて、nmzcat に "from:" の表示項目も追加するという方法もありますが、$self->{'_field_info'} が %FIELD_ALIASES を考慮した方が良いのではないかと思います。

%FIELD_ALIASES を考慮しようとすると、mknmz の complete_field_info と clean_field_index に相当する処理を行った上でget_field_info でエイアスの参照を行う必要があるでしょう。


ところで、development-2-1 の filter/html.pl の htmlparser_filter では、$fields->{'title'}, $fields->{'author'} を undef で初期化しています。

このため、init_doc で行った '_field_info' の初期化を壊すので、

$ nmzcat msg00000.html

では、$self->{'_field_info'}{author} が未定義となり、

Use of uninitialized value in concatenation (.) or string at /usr/local/bin/nmzcat line 82.

が発生します。 undef で初期化している部分をコメントアウトすれば、このエラーは消えますが、htmlparser_filter 内の処理で $fields->{'title'}, $fields->{'author'} は undef で初期化していることが前提のようなので、別の問題がでそうです。

というところまで調べて力尽きました。

各フィルタの細々とした修正2008年05月02日 20時50分46秒

フィルタの細々とした修正を行いました。

filter/doccat.pl : (HEAD)

重複するエントリがあったので、これを削除しました。

filter/*.pl: (HEAD)

normalize_document -> normalize_jp_document に変更が 必要なところを変更しました。

filter/*.pl: (development-2-1)

normalize_document -> normalize_eucjp_document に変更が必要なところを変更しました。

filter/*.pl: (HEAD, development-2-1, stable-2-0)

行末の空白を削除しました。

filter/{msword, excel, powerpoint, rtf}.pl: (HEAD, development-2-1, stable-2-0)

  • サブルーチンのリファレンスを使った内部フィルタの切り替えに変更
  • 不要になった File::Basename の削除
  • getSummaryInfo で summary の処理にバグがあったのを修正(stable-2-0 のみ)