<li>2003-0130 IDSの逆変換機能などを追加。
<li>2003-0213 <a href="http://eto.com/2003/ruby/ruby-chise-20030213.tar.bz2" class="s">ruby-chise-20030213.tar.bz2</a><br>
名称をRuby/UTF-2000からRuby/CHISEへと変更。
+<li>2003-0312 <a href="http://eto.com/2003/ruby/ruby-chise-20030312.tar.bz2" class="s">ruby-chise-20030312.tar.bz2</a><br>
+様々なライブラリを追加。
</ul>
<hr>
-<h3>■CVS</h3>
-<p><a href="http://cvs.m17n.org/cgi-bin/viewcvs/ruby/?cvsroot=chise">CVS access</a>
-<hr>
-<h3>■libchise version</h3>
-<p>libchiseを使用したversionを作成中です。現在はプレアルファ版です。<br>
-<a href="http://eto.com/2003/ruby/rbchise-20030309.tar.bz2" class="s">rbchise-20030309.tar.bz2</a><br>
+<h3>■<a href="http://cvs.m17n.org/cgi-bin/viewcvs/ruby/?cvsroot=chise">CVS access</a></h3>
+<p>
</div>
<div class=box>
<hr>
<h3 class="e">■Unicode</h3>
<p>現状では、Ruby/CHISEに渡す文字コードはUTF-8のUnicodeにしておくと便利である。
-<p>これは望ましいものではなく、将来的にはプログラム自体がSJIS、EUCなどで書かれていても
-問題なく処理できるようにする予定である。
-<p>WindowsでUnicodeを使えるエディターとして、私はMeadow + Mule-UCSを使っている。
-<p>他、Windows付属のメモ帳を使うことができる。
-<p>また、見るだけであればIEに落すと表示される。
-<p>フリーのUnicode対応エディターとして他にYuditがあるが、まだよく使い方はわからない。
+<p>将来的にはプログラム自体がSJIS、EUCなどで書かれていても
+問題なく処理できるようにしたい。
+<p>WindowsでUnicodeを使えるエディターとして、Meadow + Mule-UCSが使える。
+<p>フリーのUnicode対応エディターとして「<a href="http://members.tripod.co.jp/sakura_editor/">サクラエディタ</a>」が使える。
+<p>他、Windows付属のメモ帳、見るだけであればIEが使える。
+</div>
+
+<div class=box>
+<h2>■付属libraryの説明</h2>
+<p>現時点では個々の詳細には立ち入りません。
+
+<ul>
+
+<li>ext/*<br>
+libchiseを用いたextensionです。現在はプレアルファ版です。
+
+<li>network.rb, makegraph.rb, graphviz.rb, defkanji.rb, kanjilist.rb<br>
+漢字の部品間の接続関係を計算します。Graphvizによるグラフ化も行います。
+<pre>
+ruby makegraph.rb
+</pre>
+<p>Graphvizが必要です。min.svgが生成されます。
+
+<pre>
+ruby defkanji.rb
+</pre>
+<p>漢字の定義を行います。
+
+<li>stroke.rb, kage.rb, kageserver.rb, csf.rb<br>
+StrokeFontを用いるライブラリー群。
+上地宏一氏によるKAGE System(現時点ではまだ非公開), 坂直純氏によるCSFという二つのStrokeFontが使えます。
+別途フォントファイルが必要です。<br>
+<tt>csf.rb</tt>中の<tt>CSF_FONT_DIR = 'd:/work/chise/csf/'</tt>を適切に設定してください。
+<p>sglという独自のグラフィックライブラリーが必要ですが、これはまだ非公開です。
+
+<pre>
+ruby stroke.rb
+</pre>
+<p>漢字のCodeTableが表れ、その中の文字を表示できます。
+
+<ul>
+<li><a href="http://www.fonts.jp/">漢字フォント自動生成技術フォーラム</a>
+<li><a href="http://web.sfc.keio.ac.jp/~kamichi/kage/kage.html">KAGEモデル</a>
+<li><a href="http://www.vector.co.jp/soft/win95/writing/se256880.html">KST32ZX</a>, 篆文風(Zhuanwen-Like),漢字StrokeFont(KST)
+<li><a href="http://www.vector.co.jp/soft/data/writing/se119277.html">KST32A</a>, 極めてコンパクトなJIS第一水準漢字(非漢字)ストローク・テーブル
+</ul>
+
+</ul>
</div>
<div class=box>
p str.inspect_all #各文字の属性情報を全て表示する。
</pre>
-<hr>
-<h3>■様々な用例案</h3>
-<p>下記のような文章を入力、表示できるようになることを例として考える。
-<ul>
-<li>「電話は中国繁体字だと電話と書き、中国簡体字だと電話と書く」
-<li>「吉野屋の吉は、土吉の吉である。」
-<li>「高橋さんは高橋さんと表記されるのを嫌う。」
-<li>「日本語の骨を、中国簡体字だと骨と書く」
-</ul>
-<p>が、まだ入力できません。未完成です。
</div>
<div class=box>
U+2FF0〜U+2FFBで表わされるIDC(Ideographic Description Characters)によって合成方法を指定し、
これに続く二文字から三文字の文字を合成して表示する。
-<p>これは元々必要な漢字が文字コードに無い場合にその代替物として表記するために考えられた仕様だ。
-もし文字表示機能が字形合成に対応している場合は、その合成された字を表示する。
-もし字形合成の機能が無い場合は、IDC自体を目に見えるように表示し、
-ユーザーの想像力に任せることになる。
-
-<p>実際のところ、IDSを使った字形合成機能を持つ文字表示エンジンが存在するとは聞いたことがない。
-そのため現状ではこの仕様は絵に書いた餅になっている。
-
-<p>ここではその仕様を転用し、漢字の字形を指示するために使っている。
-
-<p>ちょっと想像してみればわかるが、IDSはまともな実装が存在していないことからもわかる通り、
-普通には使えない仕様である。実際に漢字の字形を合成して表示するといっても、
-縦とか横につらなるなどといった単純な情報だけでは不十分で、もっと多様な情報が必要である。
-部品間の大きさのバランスなど、ついheuristicな方法で対処できるのではないかと考えてしまいがちだが、
-実際に見ておかしくない字を作るためには現状ではまだ人手によってデザインする必要がある。
-ここではその仕様を転じて、字形の成立ちを説明するために使っているが、
-このような使い道なら使えるようだ。
-
<hr>
<h3 class="e">■IDSを使うための準備</h3>
これで、文字属性として新たにids, ids-decomposeが加わった。
それぞれ、IDSの文字列、それを再帰的に分解しきったものを意味する。
-<p>実用上は差し支えない範囲だが、IDSテキストファイルにはまだ入力されて
-いない字もある。<b>./tools/idscheckintegrity.rb</b>を実行する(かなり時
-間がかかる)と、IDSの木構造の整合性をチェックし、整合性がとれていない字
-を表示する。
-
<hr>
<h3 class="e">■字形分解</h3>
<p>Stringに、decompose, decompose_allという二つのメソッドがある。
<hr>
<h3 class="e">■字形合成</h3>
-<p>分解の逆に合成することもできる。ことにしようと思っているが、まだできていない。
-<!-- 逆変換、compose機能はまだできていない。-->
+<p>字形合成は、composeメソッドで行う。
+<pre>
+p "#x2ff0;木木".compose
+</pre>
+
+<p>findメソッドで、ある部品が漢字の一部として含まれている漢字群を探すことができる。
+<pre>
+p "日雲".find
+</pre>
+<p>ここでは、日と雲という部品が含まれている全漢字を出力する。
</div>
<div class=box>
<h2>■説明</h2>
<p>まじめなメソッドの説明を書く。(未完)
+<p>現時点では、test caseを見たほうが使い方はわかりやすいかもしれません。
<pre>
class String
char 先頭の文字をCharacterに変換したものを返す
<div class=box>
<h2>■悩みどころ</h2>
-
-<dl>
-<dt>iso-2022へのencodeはどう実現すればよいのか?
-<dd>Characterはどうencodeするかの属性を持っていて、
-XStringはその実際のencodeの処理を行うという分離でいいかな。
-
-<dt>iso-2022-jpの処理はどうすればいいのか?
-<dd>iso-2022-jpは行末ではASCIIに戻すという行単位の扱いが必要になるが、
-XStringの中からはその判断はできない。
-class IOを拡張するのがいいのか?
-</dl>
-
-<hr>
-<h3>■字形合成</h3>
-<dl>
-
-<dt>"+木木"(+はU+2FF0を意味する)という文字列が
-あるとして、しかしこれは実は"林"という一文字を表している。
-この二重性をどう取り扱うか?
-<dd>newされた時点で問答無用で"+木木"を"林"というCharacter一文字に変換
-してしまうと、その時点で区別ができなくなってしまう。つまり必要に応じて
-composeするべきである。しかしその必要に応じてというのはどのように判定
-すればいいのだろうか? 明示的に指定するしかないということか。
-
-<dd>Unicode対応のeditorはどうとりあつかっているのだろうか?
-Unicodeの規定によれば、このIDSによって指定された文字列は、合成された文字そのものを
-表すと規定されている。合成された文字を表示可能である場合は、IDS自体を表示してはいけない。
-逆に合成した文字を表示できない場合は、IDS自体を見えるように表示しないといけない。
-とすると、Unicode対応のeditorが適切な文字合成の機能を持っていた場合、
-それは合成された結果の文字を表示するのがいいのか? 合成される前の文字列を
-表示するのがいいのか? 結局ユーザーが明示して切り替えられるようにするのがいいのか?
-
-<dt>もしエラーが含まれていた場合は?
-<dd>"+木".to_x.compose_ids
-とした場合は、オペレータの対象が一文字しか無いので、処理できない。
-これは例外をraiseするか、元の文字列をそのまま返すか、悩みどころ。
-
-<dt>もし文字が存在しなかった場合は?
-<dd>"+林林"とかした場合は、"木"が横に四つ並んでる漢字は存在しない(と思う)ので、
-これも例外とするか、元の文字列をそのまま返すか悩みどころ。
-どの文字コード体系にも存在しないような文字を表示できる字形合成エンジンがあると
-仮定して、そのエンジンに手渡されるまでは、情報が失われないように処理
-するべきである。
-
-<dd>また、本来Chaonモデルはこのような「存在しない文字」をとりあつかえるように
-するためのモデルなので、こういった文字もシームレスに扱えるようにするべきである。
-しかしどのようにすればいいのかわからない。
-
-</dl>
-
-<hr>
+<p>
<h3 class="e">■Ruby/M17Nとの整合性</h3>
<p>Ruby/M17Nとの整合性をどうとればいいか。
<ul>