proposal about character inheritance and some features
守岡知彦 / MORIOKA Tomohiko
tomo @ kanji.zinbun.kyoto-u.ac.jp
2004年 2月 18日 (水) 15:45:21 JST
仕事ひとつ片付けて、ぼけー mode な今日この頃の守岡です(まずい)。
>>>>> In [chise-ja : No.00326]
>>>>> "守岡" = tomo @ m17n.org (守岡知彦 / MORIOKA Tomohiko) wrote:
守岡> そういう訳で、毎度おなじみ現実逃避なんですが、今回は懸案のひとつ
守岡> の文字定義の継承をやってみようということで、以下の提案をします。
守岡> (1) ->unified
守岡> 派生する文字を表す文字素性として ->unified を新設する。値の型は
守岡> char-ref の list とする。
守岡> 文字 P に対し、文字素性 ->unified の値として (C_0 C_1 ... C_i ...
守岡> C_n) を設定した時、C_i が未定義文字に対する char-spec であれば、
守岡> C_i の定義に従った文字が定義され、C_i の位置に置き換えられる。ま
守岡> た、C_i ないしはそれに対応する文字は P から派生する文字と見倣さ
守岡> れ、(P) を値とする文字素性 <-unified が設定される。
g新部さんのご意見に基づき ->subsumptive として XEmacs CHISE に実装しま
した。(*1)
;; 実は、今の所、Unicode の unification の表現にしか使ってないので、
;; ->unified の方が良かったかもという気もしないではないですが。
守岡> (2) <-unified
守岡> 派生元の文字を表す文字素性として <-unified を新設する。値の型は
守岡> char-ref の list とする。
守岡> <-unified を持つ文字 C がある文字素性 f(但し、f は CCS 素性でな
守岡> いこととする)を持たない時、<-unified の値で指定される派生元の文
守岡> 字が f を持っていれば、その値を C の値と見倣すこととする。また、
守岡> この性質は再帰的に成立することとする。
守岡> <-unified を持つ文字は define-char 形式での独立したエントリーを
守岡> 設けないこととし、親文字における ->unified の要素として表現する
守岡> こととする。
(1) と同様、g新部さんのご意見に基づき <-subsumptive として XEmacs
CHISE に実装しました。(*1)
守岡> (3) ->inherited, <-inherited
守岡> ->unified, <-unified と同じセマンティクスとする。
守岡> 但し、<-inherited を持つ文字に対して define-char 形式での独立し
守岡> たエントリーを設けることとする。
->denotational, <-denotational として XEmacs CHISE に実装しました。(*1)
守岡> (4) =CCS 素性
守岡> CCS 素性 =FOO を設定した時、必ず =>FOO も設定することにする。
守岡> 但し、define-char 形式では、=FOO が存在する時の =>FOO は省略する。
=>FOO を設定する代わり、(*1) で述べる関数 char-feature で =>FOO を取り
出せることにした。
なお、将来的には、この処理は文字素性の継承として一般化することを提案す
る。
守岡> (6) =ucs の扱い
守岡> UCS で統合されているにもかかわらず、文字定義を分離しているものに
守岡> 対し、現在、Unicode の例示字形にもっとも近い文字定義に対し =ucs
守岡> を与え、それ以外に =>ucs を与えているが、今後はこれらの文字定義
守岡> を ->unified 要素として持つ文字に対し =ucs を設定することとし、
守岡> 従来、=ucs を設定していたものには =ucs @ unicode (BMP) もしくは
守岡> =ucs @ iso (Ext-B) を設定することにする。
守岡> 同様に、他の要素に関しても ->unified や ->inherited を用いること
守岡> で、適切に包含関係を表現することとし、これにより、さまざまな抽象
守岡> 度の文字を表現・操作しやすくする。
CHISE 文字データベースにおいて、試験的に一部実施しました。
守岡> また、->FOO, <-FOO の要素に対応する文字が存在する時、文字データ
守岡> ベース中では char-spec を文字に正規化して格納するようにすること
守岡> も提案します。
->simplified, <-simplified に関して実施しました。
(*1) XEmacs CHISE の関数 get-char-attribute では
{->|<-}{subsumptive|denotational} による文字定義の継承および
(4) で述べたような文字素性の継承をサポートせず、新設した関数
char-feature でこれらのサポートを行いました。
なお、関数 char-feature の引数は
(文字 文字素性名
&optional 文字素性値の既定値 FEATURE-REL-MAX CHAR-REL-MAX)
で、関数 get-char-attribute と同様な最初の3引数に、省略可能な引
数 FEATURE-REL-MAX および CHAR-REL-MAX を追加したものになっていま
す。なお、これらの仕様は
FEATURE-REL-MAX は文字素性の継承を辿る最大数を意味し、0 の場合
は文字素性の継承を無視することを意味する。この引数が省略された
場合、無限に文字素性の継承を辿る。
CHAR-REL-MAX は文字定義の継承を辿る最大数を意味し、0 の場合は
文字定義の継承を無視することを意味する。しかし、現在の実装では
0以外の数値の場合は無限に文字定義の継承を辿る。また、この引数
が省略された場合も同様である。なお、先祖に自分自身を見付けた場
合、その時点で探索を中止し、文字素性値の既定値を返す。
となっています。
このように現状では継承の実現はとりあえず XEmacs CHISE で行いましたが、
libchise で実装しなおしたいと思っています。
この時、現状の XEmacs CHISE のように一般的な新設関数を追加する(a)のと、
既存の関数の界面を変更する(b)のとどっちが良いですか?なお、後者の場合、
APIが非互換となります。前者は API が上位互換になります。
また、一般的な新設関数を追加する場合、既存関数 (chise_ds_get_feature,
chise_char_load_feature_value, chise_char_gets_feature_value) の挙動は
継承付き(a-1)にするのと継承無し(a-2)にするのとどちらが良いでしょうか?
;; 現時点では (a-1) 案が良いかなと思っています。
ご意見お待ちしております。
--
===『幾千億の分子に分かれても ========================================
決して忘れない。
この宇宙が終るまで』 守岡 知彦 (MORIOKA Tomohiko)
====================== Email: <tomo @ kanji.zinbun.kyoto-u.ac.jp> ======
More information about the CHISE-ja
mailing list