libchise解説
Kouichirou Eto
2004 @ eto.com
2004年 6月 11日 (金) 14:32:59 JST
江渡です。
libchiseを使ってみようと思ったのですが、Cygwinではconfigureに失敗しました。
checking how to run the C++ preprocessor... /lib/cpp
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.
とのことですが、理由はまだよくわかっていません。
また、それとは別にlibchiseの使い方を解読してみましたので、その結果を
簡単に文章としてまとめてみました。間違いなどありましたら御指摘下さい。
----------------------------------------------------------------------
* the hitchhiker's guide to the CHISE Library
** DataSource関連
- CHISE_DS_open(type, location, subtype, modemask) openする。
type=>CHISE_DS_Berkeley_DB, subtype=>0, modemask=>0755
というのが定番で、実質的にはlocationを指定するだけ。
- CHISE_DS_close(ds)
closeする。
- chise_ds_foreach_char_feature_name(ds, callback(ds, name))
素性の一覧に対するiterator. directoryをなめて、それぞれのファイル名毎
にcallbackする。ファイル名が%を含む場合はそれをdecodeしている。
CCSの一覧に対するiteratorはいまのところ存在してない。いらない?
** 値
- CHISE_Char_ID
いわゆるchar_id。int。
- CHISE_Value
いわゆる素性の値。BDBが返す値(DBT)そのまま。
- chise_value_size(s)
- chise_value_data(s)
- chise_value_to_c_string(s)
などによって値を取り出す。dataとto_c_stringは同じものを指している。
** Feature_Table関連
featureとは素性のこと。
- chise_ds_get_feature(ds, name)
dsからFeature_Tableをgetする。
- chise_feature_setup_db(feature, writable)
実際にBDBをopenしている。書込み可能かどうかを指定する。
下記のset, loadなどは内部的にこれを呼んでいるため、明示的に呼ぶ必要はない。
- chise_feature_sync(feature)
bdbをcloseする。つまりHDDに書込みをする。
- chise_char_set_feature_value(cid, feature, value)
char_idに素性をputする。
- chise_char_load_feature_value(cid, feature, valdatum)
char_idの素性をgetする。
素性をgetするときは、このようにする。
ft = chise_ds_get_feature(ds, "ideographic-structure")
chise_char_load_feature_value(cid, ft, valdatum)
valdatumに値が返ってくる。値を取り出すにはchise_value_dataを使う。
- chise_ds_load_char_feature_value(ds, cid, name, valdatum)
これはそのshortcutで、上記と同等の操作をする。
- chise_char_gets_feature_value(cid, feature, dst, size)
load_feature_valueの発展形で、valdatumから値を取り出してc stringにする
ところまでやってくれる。dstにはc stringがはいる。
- chise_feature_foreach_char_with_value(feature, callback(cid, feature, valdatum))
あるFeatureTableが保持するchar_idの一覧に対するIterator.
** CCS Table関連
CCSは、Coded Character Setの略である。いわゆる文字集合。
- chise_ds_get_ccs(ds, name)
CCS Tableをgetする。
- chise_ccs_setup_db(ccs, writable)
BDBをopenする。下記set, decodeが内部的に呼ぶため、明示的に呼ぶ必要はない。
- chise_ccs_sync(ccs)
bdbをcloseする。つまりHDDに書込みをする。
- chise_ccs_decode(ccs, code_point)
code_pointに対応するchar_idをgetする。返り値がchar_id(int)。
ある文字集合からchar_idを取り出すにはこのようにする。
ccs = chise_ds_get_ccs(ds, "=daikanwa")
char_id = chise_ccs_decode(ccs, 364)
- chise_ds_decode_char(ds, "daikanwa", 364)
これはそのshortcut。
- chise_ccs_set_decoded_char(ccs, code_point, cid)
あるccsのcode_pointに、cidをsetする。
* libchise内部解説
- chise_ds_open_feature_table
get_feature_tableはcacheするだけで、実際にはここでFeature_Tableを生成する。
- chise_ds_open_ccs_table(ds, ccs)
同様に、ccsにおいてもこちらで実際にCCS_Tableを作っている。
** Attribute_Table
Feature_Table, CCS_TableにおけるBDB関係の処理を共通化するために、
内部的にはAttribute_Tableを使っている。
- CHISE_Attribute_Table_open(db_dir, category, key_type, name, real_subtype, accessmask, modemask)
ここで、実際にBDBをopenしている。
- CHISE_Attribute_Table_close(db)
BDBをcloseする。
- chise_attribute_table_get(db, key, valdatum)
BDBから値をgetする。
- chise_attribute_table_put(db, key, value)
BDBに値をputする。
** 値
- chise_format_char_id(cid, dest, len)
char_id(int)から、BDBにおける一文字を表す形式を生成する。
これはUTF-8でencodeし先頭に?がつく文字列で、この形式をUTF-8-MCSと呼ぶ。
正確には、コントロールcharacterや、いくつかの特殊characterは、
\でエスケープしなければならない。
- chise_char_id_parse_c_string (key_str, key_len)
上記のUTF-8-MCS形式の文字列をparseして、char_id(int)にする。
** name.c
DataSourceはそれぞれのTableをhashに保持している。
name.cにおいて、hash tableを実装している。
====
by Kouichirou Eto
More information about the CHISE-ja
mailing list