Ruby/UTF-2000

Ruby/UTF-2000とはなにか

Ruby/UTF-2000は、XEmacs UTF-2000実装におけるUTF-2000モジュール、
CHISEモジュールのRubyへの移植を試みたモジュールである。

■UTF-2000とはなにか

UTF-2000モデルとは、文字を符号ではなく属性によって扱う方法を意味する。

Ruby/UTF-2000ではさらにそれを拡張し、文字をオブジェクトとして扱っている。

■download

■使い方

■全体的な使い方

require 'utf2000'
include UTF2000

char = Character.new("字") #UTF8で与えること
puts char

■class Characterの使い方

char = Character.new("字") #UTF8で与えること
p char.ucs #とすると、その文字のucsの値が表示される
p char.total_strokes #などの属性もある
p char.chinese_gb2312 #などなど
char.alist.each {|a, v| #こんな感じで全属性を表示できる
  print a, ': ', v, "\n"
}

■XStringの使い方

xstr = XString.new("文字列") #こんな感じで初期化します。UTF-8で与える。
xstr = "文字列".to_x #こんな拡張方法も用意してあります。こっちのほうがいいでしょ。
str = xstr.to_s #もちろんこうやると元に戻る。
しかし戻った文字列が元の文字列とidenticalである保障はいまのところない。可能なのか?
puts xstr #とすると、to_sが内部的に呼ばれて、普通のUTF-8の「文字列」が出力される。
p xstr #inspectが内部的に呼ばれて、それは各Characterについての情報が表示される。
p xstr.inspect_all #とすると、持っている情報を全て表示する。

■説明

まじめなメソッドの説明を書く。(未完)

class XString

class Character
	get_char_attribute
	get
	[]

■悩みどころ

いろいろ悩みどころがあるのですが、適当に書いてみます。

iso-2022へのencodeはどう実現すればよいのか?
Characterはどうencodeするかの属性を持っていて、 XStringはその実際のencodeの処理を行うという分離でいいかな。
iso-2022-jpの処理はどうすればいいのか?
iso-2022-jpは行末ではASCIIに戻すという行単位の扱いが必要になるが、 XStringの中からはその判断はできない。 class IOを拡張するのがいいのか?
存在しないattributeを参照したときは?
現在はnilを返しているが、例外をraiseするほうがいいのか?

■Ruby/M17N

Ruby/M17Nはすでにできているらしく、それとの整合性をどうとればいいか。

Ruby/M17Nブランチが本体に反映されるのは、ruby-1.8以降が予定されている。

ソースコード中のm17n.c, m17n.hが該当個所。 UTF-2000は内部的にはUTF-8として扱えるので、それを拡張すればいいのか? UTF-8の処理への追加という形で実装できる?

■link

■history

Kouichirou Eto, 2003 at eto.com