Ruby/UTF-2000は、XEmacs UTF-2000実装におけるUTF-2000モジュール、
CHISEモジュールのRubyへの移植を試みたモジュールである。
UTF-2000モデルとは、文字を符号ではなく属性によって扱う方法を意味する。
Ruby/UTF-2000ではそれを拡張し、文字をオブジェクトとして扱っている。
展開して、make installする。
通常、/usr/local/lib/ruby/site_ruby/以下にinstallされる。
src/utf2000.rb内
DB_DIR = '/usr/local/lib/xemacs-21.4.10/i686-pc-linux/char-db'
必要に応じて変更する。
IDS_DB_DIR = '/home/eto/work/chise/ids/''
IDSのテキストファイルが置かれているディレクトリーを指す。
下記のパッケージが必要。
一般にRubyのパッケージは RAAを使って探すことができる。
Unicodeのエディターとして、私は Meadow + Mule-UCSを使っている。
他、Windows付属のメモ帳を使うことができる。
また、IEに落して見る方法もある。
require 'utf2000'
include UTF2000
str = "字" #Stringを拡張している。UTF8で与えること。
p str.ucs #とすると、その文字のucsの値が表示される
p str.total_strokes #画数が表示される
p str.chinese_gb2312 #などなど
str.char.alist.each {|a, v| #こんな感じで全属性を表示できる
print a, ': ', v, "\n"
}
p str.inspect_x #Characterについての情報が表示される。
p str.inspect_all #持っている属性情報を全て表示する。
str = "文字列" #もちろん一文字でなく文字列も扱える。UTF-8で与える。
p str.inspect_x #各文字の情報が表示される。
p str.inspect_all #各文字の属性情報を全て表示する。
Ruby/UTF-2000は、IDSを操作する機能を強化している。
適切にIDS_DB_DIRを設定した後に、 tools/idsdbdumpall.rbを実行する。(かなり時間がかかる)
文字属性として新たにids, ids-decomposeが作られる。 これはそれぞれ、IDSの文字列、それを再帰的に分解しきったものである。
Stringに対しては、decompose, decompose_allという二つのメソッドがある。
p "字".decompose p "字".decompose_all p "榊".decompose p "榊".decompose_all p "終了".decompose p "終了".decompose_all p "鬱".decompose p "鬱".decompose_all
IDSのテキストファイルにはまだいろいろと間違っているところがあり、 分解できない文字もあります。
逆変換、compose機能はまだできていません。
下記のような文章を入力、表示できるようになることを例として考える。
が、まだ入力できません。未完成です。
詳しくはtools/READMEを見てください。
まじめなメソッドの説明を書く。(未完)
class String char 先頭の文字をCharacterに変換したものを返す →method_missingで、存在しないmethodを指定すると、自動的に先頭の文字を Characterに変換してそれへのmethodとして呼ぶ。 class Character get ある文字をgetする。(flyweightパターン) [] ある属性をgetする。get_char_attributeも使える。 またmethod_missingも使える。 []= ある属性をputする。put_char_attributeも使える。 またmethod_missingによる入力も使える。 存在しない属性を参照したときは、nilが返る。
いろいろ悩みどころがあるのですが、適当に書いてみます。
Ruby/M17Nはすでにできているらしく、それとの整合性をどうとればいいか。
Ruby/M17Nブランチが本体に反映されるのは、ruby-1.8以降が予定されている。
ソースコード中のm17n.c, m17n.hが該当個所。 UTF-2000は内部的にはUTF-8として扱えるので、それを拡張すればいいのか? UTF-8の処理への追加という形で実装できる?