Namazu-devel-ja(旧)


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

Re: UTF-8 index



臼田です

mknmz,namazuの内部とindexのutf-8化の作業が終わりました。
手元のPerl5.8, Text::Kakasi2.0という環境では
make checkは全部通ります。

cvs tag utf8index-sprout
cvs tag -b utf8index-branch
としてブランチ作成前にタグをつけておいてから、
ブランチを作成しコミットしました。

メンテナンスの労力を考えるとeuc-jp,utf-8の2種類のインデックスを
サポートするのは難しいと感じており、方針を決めかねて作業が止まっ
ています。
インデックスはutf-8のみにしてしまってよいでしょうか?

ご意見をいただきたいです。

これまでの修正点はおおよそ以下のとおりです。

mknmzについて
   * Indexをutf-8で作成するためにmknmz内部コードをeuc-jpからutf-8に変更

  * euc-jpを前提とした文字列処理に対応するutf-8対応処理を追加
   (euc-jp用処理は削除予定)
     下記のサブルーチンを追加
      codeconv.plに
      utf8han2zen, utf8_han2zen_kana, from_to_by_nkf_m, from_to_by_nkf,
      decode_mime_header, de_mime_header_by_encode, encode_from_to,
      decode_filename, to_inner_encoding, load_encode, utf8_zen2han_ascii
      mknmzに
      is_kanji_contained 

     下記のサブルーチンを書き換え
      codeconv::chomp_eucjp を codeconv::chomp_multibytechar に
      codeconv::normalize_eucjp を codeconv::normalize_jp に

  * Perl5.8EncodeモジュールもしくはPerl5.6以前ではNKF2を必須とした
   $var::USE_NKF_MODULEを廃止、$conf::NKFのみで設定することにした。

   * Perl5.8とText::Kakasi2.0の組み合わせに対応
     下記のサブルーチンを追加
      wakati::init_text_kakasi
     下記のサブルーチンを書き換え
      wakati::wakatize_japanese, wakati::wakatize_japanese_sub

  * 全パッケージに影響するグローバル変数$var::INNER_CHARSETを追加
   (インデックスのutf-8化移行が済めば不要)

  * 各種文字コードをそれぞれ指定できるようにmknmz内グローバル変数を追加
   $TERM_CHARSET:画面表示の文字コード
     $FILESYS_WIN32:Win32ファイルシステム特有事情(ドライブレター、
   ディレクトリ区切り文字)
   $TARGET_FILESYS_CHARSET:インデックス作成環境のファイルシステムの文字
   コード(HEX,CAP含む)
     $INDEXFIELD_FILESYS_CHARSET:インデックス時にEUC-jpにしてからuri
   エンコードしている現状との互換性のため。
   (mknmz内では変換せずにインデックスを別サーバーに移す際に
    NMZ.field.uriを書き換えるようにして、別途ツールを作ったほうが
    よいと思う)

  * Win32処理を修正
   ファイルシステムのsjis文字コード処理とドライブレター処理を分離
     mknmzに下記のサブルーチンを追加
     win32_yen_to_slash, win32_add_driveletter
     上記サブルーチンを呼び出すようにmknmz内の各サブルーチンを修正
     load_rcfile, init, namazu_core, generate_uri, parse_option, 
     load_target_list, absolute_path, find_target

   * CAP,HEX,utf-8等のファイル名を可読性のあるものとして扱えるように
     codeconv::decode_filenameを追加
     NMZ.field.duriを残すようにした。

   * タイトル情報が無かった際にfileld.titleに入るuri情報を可読性の
   あるものにするように変更、filterとmknmzで二重に呼び出ししていた
     部分を整理
     mknmz::complete_field_info, gfilter::filename_to_title

namazuについて
 * utf-8インデックス対応(euc-jp処理部分をUTF-8処理に置き換え)
    nmz/codeconv.c, nmz/re.c, nmz/wakati.c, nmz/util.h
    下記のサブルーチンを追加
    utf8_zen2han, iskatakana_utf8, ishiragana_utf8, 

templateについて
  * NMZ.template.normal.ja, NMZ.template.short.jaをutf-8に変更


現在までの修正ファイル
configure.in
filter/deb.pl
filter/dvi.pl
filter/excel.pl
filter/mailnews.pl
filter/man.pl
filter/mhonarc.pl
filter/mp3.pl
filter/msword.pl
filter/ooo.pl
filter/pdf.pl
filter/postscript.pl
filter/powerpoint.pl
filter/rpm.pl
filter/rtf.pl
filter/taro.pl
filter/taro56.pl
filter/taro7_10.pl
filter/tex.pl
nmz/codeconv.c
nmz/re.c
nmz/util.h
nmz/wakati.c
pl/codeconv.pl
pl/conf.pl.in
pl/gfilter.pl
pl/indexer.pl
pl/var.pl.in
pl/wakati.pl
scripts/mknmz.in
template/NMZ.result.normal.ja
template/NMZ.result.short.ja


今後の予定
1.インデックスの文字コードをutf-8のみでいくのであれば
 ・あちこちに残っているeuc-jp用の処理を削除していく。
 ・template内の他のファイルもutf-8にしていく

2.euc-jpのインデックスも生成、検索できるようにするのであれば
 ・インデックスの文字コードがなにであるかを示す情報をインデックス内に
  残し、namazuで参照するようにする。
 ・namazu内でeuc-jp,とutf-8の処理を切り替えできるようにする。
  euc-jp処理部分を書き直す。
 ・template内のファイルをmknmzがコピーする際に文字コード変換しつつ行う
  ようにする。

と考えています。これらはブランチ内でやっていこうと思っています。

臼田幸生