update.
authoreto <eto>
Thu, 8 Jul 2004 15:41:49 +0000 (15:41 +0000)
committereto <eto>
Thu, 8 Jul 2004 15:41:49 +0000 (15:41 +0000)
16 files changed:
README.en
README.ja
chise.rb [new file with mode: 0755]
chise/char.rb
chise/chisedb.rb
chise/config.rb
doc/index.html
doc/style.css
ext/.cvsignore
ext/config.h [new file with mode: 0755]
install.rb
sample/sample-lc2003.rb
sample/sample1.rb
tools/README
tools/make_ids_db.rb [deleted file]
tools/scp-chisedb [deleted file]

index 85dcf37..c3916d8 100755 (executable)
--- a/README.en
+++ b/README.en
@@ -1,38 +1,37 @@
-Ruby/CHISE README
-============
+* Ruby/CHISE README
 
-  Ruby/CHISE is a library for implementation Chaon model.
+Ruby/CHISE is a llibrary to use Chaon model.
 
+** Requirements
 
-Requirements
-------------
+- ruby 1.8
+- Berkeley DB
+- Ruby/BDB
 
-  * ruby 1.8
-  * Berkeley DB
+** Install
 
-Install
--------
+Move "chise" directory to somewhere.
+eg.
+ # mv chise /usr/local/lib/ruby/site_ruby/1.8
 
-  De-Compress archive and enter its top directory.
-  Then type:
+Cd to "ext" directory, do like this.
+ % ruby extconf.rb
+ % make
+ # make install
 
-    $ ruby install.rb config
-    $ ruby install.rb setup
-    # ruby install.rb install
+You can use Ruby/CHISE without extension.
+If you have extension, Ruby/CHISE works faster.
 
-  You can also install files into your favorite directory
-  by supplying install.rb some options. Try "ruby install.rb --help".
+** Usage
 
-Usage
------
+See "doc/index.html". (in Japanese)
+See "sample", "test" directories.
+Please check http://eto.com/2003/ruby/ for imformation.
 
-  Please see "doc/index.html". (in Japanese)
-  Please check http://eto.com/2003/ruby/ for imformation.
+** License
 
-License
--------
+This software is distributed under the GPL2.  See COPYING.
 
-  This software is distributed under the GPL2.  See COPYING.
+** Author
 
-
-Kouichirou Eto <2004@eto.com>
+Kouichirou Eto <2004 at eto.com>
index c9c420e..d88474e 100755 (executable)
--- a/README.ja
+++ b/README.ja
@@ -1,39 +1,36 @@
-Ruby/CHISE README
-============
+* Ruby/CHISE README
 
-  Ruby/CHISE¤ÏRuby¤Ë¤ª¤±¤ëChaon¼ÂÁõ¤Ç¤¹¡£
+Ruby/CHISE¤ÏRuby¤Ë¤ª¤±¤ëChaon¼ÂÁõ¤Ç¤¹¡£
 
+** É¬Í״Ķ­
 
-ɬÍ״Ķ­
---------
+- ruby 1.8
+- Berkeley DB
+- Ruby/BDB
 
-  * ruby 1.8
-  * Berkeley DB
+** ¥¤¥ó¥¹¥È¡¼¥ëÊýË¡
 
-¥¤¥ó¥¹¥È¡¼¥ëÊýË¡
-----------------
+chise°Ê²¼¤ò¡¢Å¬Åö¤Êdirectory¤Ë°ÜÆ°¤·¤Æ¤¯¤À¤µ¤¤¡£
+Îã:
+ # mv chise /usr/local/lib/ruby/site_ruby/1.8
 
-  ¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ç°Ê²¼¤Î¤è¤¦¤Ë¤¦¤Á¤³¤ó¤Ç¤¯¤À¤µ¤¤¡£
-  UNIX ·Ï OS ¤Ç¤Ï¤ª¤½¤é¤¯ root ¸¢¸Â¤¬É¬Íפˤʤê¤Þ¤¹¡£
+³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ï¡¢ext°Ê²¼¤Ëcd¤·¤Æ¡¢²¼µ­¤Î¤è¤¦¤ËÂǤÁ¹þ¤ó¤Ç¤¯¤À¤µ¤¤¡£
+ % ruby extconf.rb
+ % make
+ # make install
 
-    $ ruby install.rb config
-    $ ruby install.rb setup
-    # ruby install.rb install
+³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤¬Ìµ¤¯¤Æ¤âÆ°¤­¤Þ¤¹¡£¤¢¤ë¤È¹â®²½¤·¤Þ¤¹¡£
 
-  ¥¤¥ó¥¹¥È¡¼¥ëÀè¤òÊѹ¹¤·¤¿¤ê¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
-  ¤½¤Î¾ì¹ç¤Ï ruby install.rb --help ¤ò¼Â¹Ô¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
+** »È¤¤Êý
 
-´Êñ¤Ê»È¤¤Êý¤È¤«
-----------------
+doc/index.html¤ò¸«¤Æ¤ß¤Æ¤¯¤À¤µ¤¤
+¤Þ¤¿¡¢sample°Ê²¼¡¢test°Ê²¼¤¬»²¹Í¤Ë¤Ê¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
+ºÇ¿·ÈǤξðÊó¤Ï http://eto.com/2003/ruby/ ¤ò¤´¤é¤ó²¼¤µ¤¤¡£
 
-  doc/index.html¤ò¸«¤Æ¤ß¤Æ¤¯¤À¤µ¤¤
-  ºÇ¿·ÈǤξðÊó¤Ï http://eto.com/2003/ruby/ ¤ò¤´¤é¤ó²¼¤µ¤¤¡£
+** ¥é¥¤¥»¥ó¥¹
 
+GPL¤Ç¤¹¡£COPYING¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡£
 
-¥é¥¤¥»¥ó¥¹
-----------
+** ºî¼Ô
 
-  GPL¤Ç¤¹¡£COPYING¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡£
-
-
-Kouichirou Eto <2004@eto.com>
+Kouichirou Eto <2004 at eto.com>
diff --git a/chise.rb b/chise.rb
new file mode 100755 (executable)
index 0000000..8441ae6
--- /dev/null
+++ b/chise.rb
@@ -0,0 +1,4 @@
+# Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
+
+require "chise/character"
+require "chise/string"
index 8441ae6..072b998 100755 (executable)
@@ -1,4 +1,3 @@
 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
 
-require "chise/character"
-require "chise/string"
+require "chise"
index 78a6e81..2969383 100755 (executable)
@@ -117,7 +117,7 @@ module CHISE
     alias close sync
 
     def set_value(cid, value)
-      @feature.set_value(cid, value)
+      @feature.set_value(cid, value.to_s)
     end
 
     def get_value(cid)
index 578ab0e..c52395e 100755 (executable)
@@ -4,6 +4,14 @@ require "singleton"
 require "chise/version"
 
 module CHISE
+  # on Winodws
+  DB_DIR  = "c:/chise/chise-db" # /character/feature/=ucs
+  IDS_DIR = "c:/chise/ids" # /IDS-JIS-X0208-1990.txt
+
+  # on Unix
+  #DB_DIR  = "/usr/local/lib/xemacs-21.4.14/i686-pc-linux/chise-db"
+  #IDS_DIR = "/home/eto/work/chise/ids"
+
   def windows?()
     rp = RUBY_PLATFORM
     rp.index("cygwin") || rp.index("mswin32") || rp.index("mingw32")
@@ -20,13 +28,8 @@ module CHISE
       @base_dir = File.expand_path(File.dirname(__FILE__)+"/../..")
       @csf_dir = @base_dir+"/csf"
 
-      if CHISE.windows?()
-       @db_dir  = @base_dir+"/chise-db" # /character/feature/=ucs
-       @ids_dir = @base_dir+"/ids" # /IDS-JIS-X0208-1990.txt
-      else
-       @db_dir  = "/usr/local/lib/xemacs-21.4.14/i686-pc-linux/chise-db"
-       @ids_dir = "/home/eto/work/chise/ids"
-      end
+      @db_dir  = DB_DIR
+      @ids_dir = IDS_DIR
 
       instance_variables.each {|name|
        self.class.class_eval { attr_reader name.delete("@") }
index 72ac3bd..9f71b71 100755 (executable)
@@ -1,3 +1,4 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <title>Ruby/CHISE</title>
 </head>
 
 <body>
-<div class="center">
 
-<h1><span class="e">Ruby/CHISE</span></h1>
+<div class="container">
+<div class="main">
 
-<div class=linkbox>
-<a href="#download">download</a>,
-<a href="#install">install</a>,
-<a href="#howto">howto</a>,
-<a href="#links">links</a>
+<div class="adminmenu">
+<a href="http://eto.com/2003/ruby/">Ruby/CHISE</a>
 </div>
 
-<div class="w40em">
+<h1>Ruby/CHISE</h1>
 
-<div class=box>
-<h2>■<span class="e">Ruby/CHISE</span>とはなにか</h2>
-<p>Ruby/CHISEは、XEmacs CHISEにおけるChaon実装を<br>
-Rubyへ移植することを試みたモジュールである。<br>
-
-<h3>■Chaonモデルとはなにか</h3>
-
-<p>Chaonモデルとは、文字を符号ではなく属性によって扱う方法を意味する。
-<p>Ruby/CHISEではそれを拡張し、文字をオブジェクトとして扱っている。
+<div class="day">
+<h2><a href="#about" name="about">■</a>Ruby/CHISEとは</h2>
+<div class="body">
+<div class="section">
+<p>Ruby/CHISEは,XEmacs CHISEにおけるChaon実装をRubyへ移植することを試みたモジュールです.
 
+<h3>Chaonモデルとは</h3>
+<p>Chaonモデルとは,文字を符号ではなく素性によって扱う方法を意味します.
+<p>Ruby/CHISEではそれを拡張し,文字をオブジェクトとして扱っています.
+</div>
+</div>
 </div>
 
-<div class=box>
-<a name="download"></a>
-<h2 class="e">■download & history</h2>
+<div class="day">
+<h2><a href="#download" name="download">■</a>download</h2>
+<div class="body">
+<div class="section">
+<h3>最新版</h3>
 <ul>
-<li>2003-0110  テスト公開
-<li>2003-0112  XString追加
-<li>2003-0115  IDSの読み込み機能β版
-<li>2003-0116  IDSの読み込み機能1.0
-<li>2003-0117  XStringを廃止し、Stringに一本化。IDSの読み込み機能を強化。
-<li>2003-0120  IDS_Treeの読み込み機能を追加。木構造の整合性checkを追加。
-<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>
-様々なライブラリを追加。
-<li>2003-1004  <a href="http://eto.com/2003/ruby/ruby-chise-20031004.tar.bz2" class="s">ruby-chise-20031004.tar.bz2</a><br>
-新しい素性名に対応した。Copyright noticeをいれた。
-<li>2003-10-31 <a href="http://lc.linux.or.jp/lc2003/">LC2003</a>にて発表。
-<li>2003-1110  <a href="http://eto.com/2003/ruby/ruby-chise-20031110.tar.bz2" class="s">ruby-chise-20031110.tar.bz2</a><br>
-ディレクトリ構造をchise/*.rbとなるように変更。installerをつけた。
+<li><a href="http://eto.com/2003/ruby/ruby-chise-0.2.tar.gz">ruby-chise-0.2.tar.gz</a>
 </ul>
-<hr>
 
-<h3>■文字データベース</h3>
-<p>現状での文字DBを公開する。0.21が出る直前のCVS版を元にしている。
+<h3>文字データベース</h3>
+<p>Ruby/CHISEを使うには,別途文字データベースを用意する必要があります.
+文字データベースはXEmacs CHISEと一緒に配付されてますが,
+必要な環境(GNU/Linux)を用意できない人もいるため,
+文字データベースのみを取り出したファイルを用意しました.
 <ul>
-<li>2003-11-04 <a href="http://eto.com/2003/ruby/char-db.tar.gz" class="s">char-db.tar.gz</a> Windows用<br>
-LinuxでXEmacs CHISEをinstallし、付属のmkdbtarball.rbを使った作成した.tar.gzにしたもの。
-<li>2003-11-04 <a href="http://eto.com/2003/ruby/char-db-linux.tar.bz2" class="s">char-db-linux.tar.bz2</a> Linux用<br>
-/usr/local/lib/xemacs-21.4.12/i686-pc-linux/char-db以下をtar.bz2にしたもの。
+<li>2003-11-04 : <a href="http://eto.com/2003/ruby/char-db.tar.gz" class="s">char-db.tar.gz</a> Windows用<br>
+LinuxでXEmacs CHISEをinstallし,付属のmkdbtarball.rbを使った作成した.tar.gzにしたもの.
+<li>2003-11-04 : <a href="http://eto.com/2003/ruby/char-db-linux.tar.bz2" class="s">char-db-linux.tar.bz2</a> Linux用<br>
+/usr/local/lib/xemacs-21.4.12/i686-pc-linux/char-db以下をtar.bz2にしたもの.
 </ul>
 
-<hr>
-<h3>■<a href="http://cvs.m17n.org/cgi-bin/viewcvs/ruby/?cvsroot=chise">CVS access</a></h3>
-<hr>
-<h3>■ライセンス</h3>
-<p>GPLです。COPYINGをごらんください。</p>
-<p>
-</div>
-
-<div class=box>
-<a name="install"></a>
-<h2 class="e">■install</h2>
-<pre>
-% ruby install.rb config
-% ruby install.rb setup
-# ruby install.rb install
-</pre>
-<p>通常、<b>/usr/local/lib/ruby/site_ruby/</b>以下にinstallされる。
-
-<hr>
-<h3 class="e">■config</h3>
-<p><b>src/chise.rb</b>内
-<p><b>DB_DIR = '/usr/local/lib/xemacs-21.4.10/i686-pc-linux/char-db'</b><br>
-必要に応じて変更する。
-<p><b>IDS_DB_DIR = '/home/eto/work/chise/ids/''</b><br>
-IDSのテキストファイルが置かれているディレクトリーを指す。(下記の字形分解・合成についてを参照)
-
-<hr>
-<h3 class="e">■依存関係</h3>
-<p>下記のパッケージが必要。
+<h3>CVS access</h3>
+<p>CVSによる入手もできます.
 <ul>
-<li><a href="http://www.sleepycat.com/" class="b">db3-3.2.9</a>
-<li><a href="http://www.ruby-lang.org/~eban/ruby/binaries/mingw/ext/" class="b">bdb-0.3.6</a> (bdb-0.3.8などそれ以上でも可)
-<li><a href="http://www.yoshidam.net/Ruby_ja.html#uconv" class="b">uconv-0.4.11</a>
-<li><a href="http://www.ruby-lang.org/ja/" class="b">ruby 1.6.7</a> これはRuby本体。
-</ul>  
+<li><a href="http://cvs.m17n.org/cgi-bin/viewcvs/ruby/?cvsroot=chise">CVS access</a>
+</ul>
 
-<p>一般にRubyのパッケージは
-<a href="http://www.ruby-lang.org/raa/"><b>RAA</b></a>を使って探すことができる。
+<h3>ライセンス</h3>
+<p>GPLです.COPYINGをごらんください.</p>
 
-<hr>
-<h3 class="e">■Unicode</h3>
-<p>現状では、Ruby/CHISEに渡す文字コードはUTF-8のUnicodeにしておくと便利である。
-<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>
 </div>
 
-<div class=box>
-<h2>■付属libraryの説明</h2>
-<p>現時点では個々の詳細には立ち入りません。
-
-<ul>
-
-<li>ext/*<br>
-libchiseを用いたextensionです。現在はプレアルファ版です。
+<div class="day">
+<h2><a href="#install" name="install">■</a>install</h2>
+<div class="body">
+<div class="section">
 
-<li>network.rb, makegraph.rb, graphviz.rb, defkanji.rb, kanjilist.rb<br>
-漢字の部品間の接続関係を計算します。Graphvizによるグラフ化も行います。
+<p>chise以下を,適当なdirectoryに移動します.<br>
+例:
 <pre>
-ruby makegraph.rb
+# mv chise /usr/local/lib/ruby/site_ruby/1.8
 </pre>
-<p>Graphvizが必要です。min.svgが生成されます。
+<p>通常,<em>/usr/local/lib/ruby/site_ruby/</em>以下にinstallされます.
 
+<p>拡張ライブラリは,ext以下にcdし,下記のように打ち込みます.
 <pre>
-ruby defkanji.rb
+% ruby extconf.rb
+% make
+# make install
 </pre>
-<p>漢字の定義を行います。
+<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が表れ、その中の文字を表示できます。
+<h3>config</h3>
+<p><em>chise/config.rb</em>内および,<em>ext/config.h</em>内にて
+<p><em>DB_DIR = '/usr/local/lib/xemacs-21.4.10/i686-pc-linux/char-db'</em><br>
+などを必要に応じて変更してください.
+<p><em>IDS_DB_DIR = '/home/eto/work/chise/ids/''</em><br>
+IDSのテキストファイルが置かれているディレクトリーを指すます.(下記の字形分解・合成についてを参照.)
 
+<h3>依存関係</h3>
+<p>下記のパッケージが必要です.
 <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>
+<li><a href="http://www.sleepycat.com/">db3-3.2.9</a>以上
+<li><a href="http://www.ruby-lang.org/~eban/ruby/binaries/mingw/ext/">bdb-0.5.0</a>以上
+<li><a href="http://www.ruby-lang.org/ja/">ruby 1.8.1</a>以上
+</ul>  
+<p>一般にRubyのパッケージは
+<a href="http://www.ruby-lang.org/raa/"><em>RAA</em></a>を使って探すことができます.
+
+<h3>Unicode</h3>
+<p>現状では,Ruby/CHISEに渡す文字コードはUTF-8のUnicodeにしておくと便利です.
+<p>将来的にはプログラム自体がSJIS,EUCなどで書かれていても
+問題なく処理できるようにしたいと思っています.
+<p>WindowsでUnicodeを使えるエディターとして,Meadow + Mule-UCSが使えます.
+<p>フリーのUnicode対応エディターとして「<a href="http://members.tripod.co.jp/sakura_editor/">サクラエディタ</a>」が使えます.
+<p>また,Windows付属のメモ帳も使えます.
+<p>見るだけであればIEが使えます.
+</div>
+</div>
 </div>
 
-<div class=box>
-<a name="howto"></a>
-<h2>■使い方</h2>
-<p>
+<div class="day">
+<h2><a href="#howto" name="howto">■</a>使い方</h2>
+<div class="body">
+<div class="section">
 
-<h3>■全体的な使い方</h3>
+<h3>基本的な使い方</h3>
 <pre>
-require 'chise'
-include CHISE
-
-str = "字" #Stringを拡張している。UTF8で与えること。
-p str.ucs #とすると、その文字のucsの値が表示される
-p str.total_strokes #画数が表示される
-p str.gb2312 #などなど
-str.char.alist.each {|a, v| #こんな感じで全属性を表示できる
-  print a, ': ', v, "\n"
+require "chise"
+
+str = "字"            # Stringを拡張している.UTF8で与える.
+p str.ucs              # その文字のucsの値が表示される.
+p str.total_strokes    # 画数が表示される.
+p str.gb2312           # などなど.
+str.each_feature {|f, v|       # 全素性を表示する.
+  print f, ": ", v, "\n"
 }
-p str.inspect_x #Characterについての情報が表示される。
-p str.inspect_all #持っている属性情報を全て表示する。
-
-str = "文字列" #もちろん一文字でなく文字列も扱える。UTF-8で与える。
-p str.inspect_x #各文字の情報が表示される。
-p str.inspect_all #各文字の属性情報を全て表示する。
 </pre>
 
 </div>
+</div>
+</div>
 
-<div class=box>
-<h2>■字形分解・合成</h2>
-<p>Ruby/CHISEは、もともと字形分解・合成を扱うために作られたため、その機能が強化されている。
+<div class="day">
+<h2><a href="#ids" name="ids">■</a>字形分解・合成</h2>
+<div class="body">
+<div class="section">
+<p>Ruby/CHISEは,もともと字形分解・合成を扱うために作られたため,その機能が強化されています.
 
-<p>字形分解・合成は、現在はUnicodeにおけるIDS(Ideographic Description Structure)という仕様に準拠している。
-U+2FF0〜U+2FFBで表わされるIDC(Ideographic Description Characters)によって合成方法を指定し、
-これに続く二文字から三文字の文字を合成して表示する。
+<p>字形分解・合成は,現在はUnicodeにおけるIDS(Ideographic Description Structure)という仕様に準拠しています.
+U+2FF0〜U+2FFBで表わされるIDC(Ideographic Description Characters)によって合成方法を指定し,これに続く二文字から三文字の文字を合成して表示します.
 
-<hr>
-<h3 class="e">■IDSを使うための準備</h3>
+<h3>IDSを使うための準備</h3>
 
-<p>下記のようにして、IDSのテキストファイル群を持ってくる。
+<p>下記のようにして,IDSのテキストファイル群を持ってきます.
 <pre><small>% cd ~/work/chise (このディレクトリーは適宜変更する)
 % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root login
 password: (何も入れずにただもう一度return)
@@ -200,21 +153,18 @@ password: (何も入れずにただもう一度return)
 % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/chise co -d ids ids
 </small></pre>
 
-<p>このようにすると、IDSのテキストファイル群を持ってくることができる。
-
-<p>その後、<b>src/chise.rb</b>内<br>
-<b>IDS_DB_DIR = '/home/eto/work/chise/ids/''</b><br>
-ここに、上記のIDSテキストファイル群を持ってきたディレクトリーを入れる。
-必要であれば、再度<b>make install</b>する。
-このようにして適切に<b>IDS_DB_DIR</b>を設定し、
-<b>./tools/idsdbdumpall.rb</b>を実行する。(かなり時間がかかる)
-これで、文字属性として新たにids, ids-decomposeが加わった。
-それぞれ、IDSの文字列、それを再帰的に分解しきったものを意味する。
-
-<hr>
-<h3 class="e">■字形分解</h3>
-<p>Stringに、decompose, decompose_allという二つのメソッドがある。
-decomposeは一段階だけ分解する。decompose_allはそれを再帰的に行う。
+<p>このようにすると,IDSのテキストファイル群を持ってくることができます.
+
+<p>その後,<em>chise/config.rb</em>内の,<br>
+<em>IDS_DB_DIR = '/home/eto/work/chise/ids/''</em><br>
+ここに,上記のIDSテキストファイル群を持ってきたディレクトリーを入れます.
+このようにして適切に<em>IDS_DB_DIR</em>を設定し,
+<em>./tools/idsdbdumpall.rb</em>を実行します.(かなり時間がかかります.)
+これで,文字素性として新たにidsなどが加わります.
+
+<h3>字形分解</h3>
+<p>Stringに,decompose, decompose_allという二つのメソッドがあります.
+decomposeは一段階だけ分解します.decompose_allはそれを再帰的に行います.
 <pre>
 p "字".decompose
 p "字".decompose_all
@@ -226,91 +176,144 @@ p "鬱".decompose
 p "鬱".decompose_all
 </pre>
 
-<p>最初の説明から、字形分解されて出てきた結果の文字列には、
-IDSキャラクターが含まれているため、場合によってはうまく表示されない。
-メモ帳だと表示できるだろう。
+<p>最初の説明から,字形分解されて出てきた結果の文字列には,
+IDSキャラクターが含まれているため,うまく表示されない場合もあります.
+メモ帳だと表示できます.
 
-<hr>
-<h3 class="e">■字形合成</h3>
-<p>字形合成は、composeメソッドで行う。
+<h3>字形合成</h3>
+<p>字形合成は,composeメソッドで行います.
 <pre>
 p "&#x2ff0;木木".compose
 </pre>
 
-<p>findメソッドで、ある部品が漢字の一部として含まれている漢字群を探すことができる。
+<p>findメソッドで,ある部品が漢字の一部として含まれている漢字群を探すことができます.
 <pre>
 p "日雲".find
 </pre>
-<p>ここでは、日と雲という部品が含まれている全漢字を出力する。
+<p>ここでは,日と雲という部品が含まれている全漢字を出力します.
 
 </div>
+</div>
+</div>
 
-<div class=box>
-<h2>■説明</h2>
-<p>まじめなメソッドの説明を書く。(未完)
-<p>現時点では、test caseを見たほうが使い方はわかりやすいかもしれません。
+<div class="day">
+<h2><a href="#usage" name="usage">■</a>説明</h2>
+<div class="body">
+<div class="section">
+<p>現時点では,test caseを見たほうが使い方はわかりやすいです.
 <pre>
 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が返る。
+       []      ある素性をgetします.
+       []=     ある素性をputします.
+存在しない素性を参照したときは,nilが返えってきます.
+</pre>
+
+<h3>tools</h3>
+<p>詳しくは<em>tools/README</em>を参照してください.
+<ul>
+<li><em>define-kanji-meaning.rb</em> : 漢字の意味による分解を行うための情報を素性として定義します.
+<li><em>dump-database.rb</em> : 文字データベースをテキストとしてダンプします.
+<li><em>make-chisedb-tarball.rb</em> : XEmacs CHISEの文字データベースを,一つのtarballにまとめます.Windowsでは使えないファイル名を適宜変更します.UNIX上で使います.Windowsでtar.gzを展開するには,<a href="http://member.nifty.ne.jp/beambitious/">eo</a>がおすすめです.
+<li><em>make-ids-database.rb</em> : IDSのテキストファイル群を読みこみ,素性として使えるようにします.
+<li><em>move-obsolete-files.rb</em> : すでにobsoleteになった素性のBDBファイルをobsolete directoryに移動させます.
+<li><em>rename-files.rb</em> : 古い構造の文字データベースのディレクトリ構造を,新しいディレクトリ構造に直します.
+<li><em>trim_bom.rb</em> : Unicodeファイルを作ったときの先頭についてくるBOM(byte order mark)を削除します.
+</ul>
+</div>
+</div>
+</div>
+
+<div class="day">
+<h2><a href="#description" name="description">■</a>付属libraryの説明</h2>
+<div class="body">
+<div class="section">
+<p>現時点では個々の詳細には立ち入りません.
+
+<ul>
+
+<li>ext/*<br>
+C言語版の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が表れ,その中の文字を表示できます.
 
-<hr>
-<h3>■tools</h3>
-<p>詳しくは<b>tools/README</b>を参照。
 <ul>
-<li><b>dbdumpall.rb</b>, char-dbのBDBファイル群の中身をテキストとして展開する。
-<li><b>idsdumpall.rb</b>, IDSのテキストファイル群を読みこみ、BDB化する。再帰的に展開したids-decomposeも作る。
-<li><b>idscheckintegrity.rb</b>, IDSの木構造の整合性をチェックする。
-<li><b>mkdbtarball.rb</b>, UNIXで作ったBDBファイル群をWindowsに持っていくときに使う。
-Windowsでtar.gzを展開するには、<a href="http://member.nifty.ne.jp/beambitious/">eo</a>がおすすめ。
-<li>trim_bom.rb, Unicodeファイルを作ったときの先頭についてくるBOM(byte order mark)を削除する。
+<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>
 </div>
 
-<div class=box>
-<h2>■悩みどころ</h2>
+<div class="day">
+<h2><a href="#discussion" name="discussion">■</a>discussion</h2>
+<div class="body">
+<div class="section">
 <p>
-<h3 class="e">■Ruby/M17Nとの整合性</h3>
-<p>Ruby/M17Nとの整合性をどうとればいいか。
+<h3>Ruby/M17Nとの整合性</h3>
+<p>Ruby/M17Nとの整合性をどうとればいいか.
 <ul>
 <li><a href="http://www.inac.co.jp/~maki/ruby/ruby-i18n.html">M17N/I18N for Ruby</a>
 <li><a href="http://www.inac.co.jp/~maki/ruby/matz-000516.html">Matz によるI18Nに関するコメント(2000/05/16) </a>
-<li><a href="http://ns1.php.gr.jp/pipermail/php-dev/2002-April/000274.html">高橋征義氏による、Ruby M17Nの解説</a>
+<li><a href="http://ns1.php.gr.jp/pipermail/php-dev/2002-April/000274.html">高橋征義氏による,Ruby M17Nの解説</a>
 <li><a href="http://cvs.ruby-lang.org/~knu/cgi-bin/cvsweb.cgi/ruby/?only_with_tag=ruby_m17n">Ruby/M17N</a>
 </ul>
 
-<p>Ruby/M17Nブランチが本体に反映されるのは、ruby-1.8以降が予定されている。
+<p>Ruby/M17Nブランチが本体に反映されるのは,ruby-1.8以降が予定されている.
 
-<p>ソースコード中のm17n.c, m17n.hが該当個所。
-内部的にはUTF-8として扱えるので、それを拡張すればいいか?
+<p>ソースコード中のm17n.c, m17n.hが該当個所.
+内部的にはUTF-8として扱えるので,それを拡張すればいいか?
 UTF-8の処理への追加という形で実装できる?
 
 </div>
+</div>
+</div>
+
+<div class="day">
+<h2><a href="#links" name="links">■</a>links</h2>
+<div class="body">
+<div class="section">
 
-<div class=box>
-<a name="links"></a>
-<h2 class="e">■links</h2>
 <p>
-<h3 class="e">■CHISE project</h3>
+<h3>CHISE project</h3>
 <ul>
 <li><a href="http://cvs.m17n.org/chise/">CHISE project</a>
 (<a href="http://www.kanji.zinbun.kyoto-u.ac.jp/projects/chise/">kyoto-u</a>,
 <a href="http://mousai.as.wakwak.ne.jp/projects/chise/">mousai</a>)
+<li><a href="http://eto.com/2003/ruby/">Ruby/CHISE</a>
 <li><a href="http://cvs.m17n.org/chise/ruby/index.html.ja.iso-2022-jp">Ruby/CHISE page at CHISE project</a>
 <li><a href="http://cvs.m17n.org/cgi-bin/viewcvs/perl/?cvsroot=chise">師茂樹氏 Perl/CHISE → CHISE.pm</a>
 </ul>
 
-<h3 class="e">■Ruby</h3>
+<h3>Ruby</h3>
 <ul>
 <li><a href="http://www.ruby-lang.org/ja/">Ruby</a>
 <li><a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/11450">akr氏によるRuby/CHISE仕様案</a>
@@ -318,10 +321,57 @@ UTF-8の処理への追加という形で実装できる?
 <li><a href="http://www.ruby-lang.org/~eban/ruby/binaries/mingw/ext/">eban氏によるコンパイル済みの拡張ライブラリー</a>
 </ul>
 </div>
+</div>
+</div>
+
+<div class="day">
+<h2><a href="#history" name="history">■</a>history</h2>
+<div class="body">
+<div class="section">
+<ul>
+<li>2003-0110  : テスト公開
+<li>2003-0112  : XString追加
+<li>2003-0115  : IDSの読み込み機能β版
+<li>2003-0116  : IDSの読み込み機能1.0
+<li>2003-0117  : XStringを廃止し,Stringに一本化.IDSの読み込み機能を強化.
+<li>2003-0120  : IDS_Treeの読み込み機能を追加.木構造の整合性checkを追加.
+<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>
+様々なライブラリを追加.
+<li>2003-1004  : <a href="http://eto.com/2003/ruby/ruby-chise-20031004.tar.bz2" class="s">ruby-chise-20031004.tar.bz2</a><br>
+新しい素性名に対応した.Copyright noticeをいれた.
+<li>2003-10-31 : <a href="http://lc.linux.or.jp/lc2003/">LC2003</a>にて発表.
+<li>2003-1110  : <a href="http://eto.com/2003/ruby/ruby-chise-20031110.tar.bz2" class="s">ruby-chise-20031110.tar.bz2</a><br>
+ディレクトリ構造をchise/*.rbとなるように変更.installerをつけた.
+</ul>
+</div>
+</div>
+</div>
+
+<div class="sidebar">
+<h2>menu</h2>
+<ul>
+<li><a href="#about">about</a>
+<li><a href="#download">download</a>
+<li><a href="#install">install</a>
+<li><a href="#howto">howto</a>
+<li><a href="#ids">ids</a>
+<li><a href="#usage">usage</a>
+<li><a href="#description">description</a>
+<li><a href="#discussion">discussion</a>
+<li><a href="#links">links</a>
+<li><a href="#history">history</a>
+</ul>
+</div>
 
+<div class="footer">
+<address>author: <a href="http://eto.com/">Kouichirou Eto</a></address>
 </div>
 
-<address><a href="http://eto.com/"><span class="white">Kouichirou Eto</span></a>, 2003 at eto.com</address>
+</div>
+</div>
 
 </body>
 </html>
index 56926bd..c9a8761 100755 (executable)
-/* by eto 2003-0112 */
+/* Copyright (C) 2003-2004 Hironori Oooka, Kouichirou Eto, All rights reserved.
+   This is free software with ABSOLUTELY NO WARRANTY.
+   You can redistribute it and/or modify it under the terms of the GNU GPL2. */
 
-body   {
- margin: 0em;
- padding: 0em;
- font-family: Helvetica,sans-self;
-/* scrollbar-3d-light-color: #ff0000;*/
- scrollbar-arrow-color: #ff6600;
- scrollbar-base-color: #ffffff;
-/* scrollbar-dark-shadow-color: #ff0000;*/
- scrollbar-face-color: #ffffff;
- scrollbar-highlight-color: #ffffff;
- scrollbar-shadow-color: #ff6600;
-}
-.center        { text-align: center;}
-/*.e   { font-family: Verdana,Helvetica,sans-self;}*/
-.e     { font-family: Helvetica,sans-self;}
-.w40em { width: 40em; }
-.w60em { width: 60em; }
-
-.box   {
- margin: 0em 0em 1em 0em;
- padding: 0em;
- text-align: left;
- border: 0.1em solid #ff6600;
+/* ========== general */
+* {
+ padding: 0;
+ margin: 0;
+}
+body {
+ background-color: #fff;
+ color: #000;
+ font-family: Arial,Verdana,Helvetica,'MS UI Gothic',sans-serif;
+ line-height: 1.33;
+}
+h1, h2, h3, h4, h5, h6, pre {
+ font-size: medium;
+}
+h3, h4, h5, h6 {
+ margin: 1em 0em;
+ padding: 0em 0em 0em 1em;
+ border-bottom: 2px dotted #6cc;
+ color: #099;
+}
+h4 {
+ border-bottom: 2px dotted #9cc;
+}
+h5 {
+ border-bottom: 2px dotted #ccc;
+}
+h6 {
+ border-bottom: 2px dotted #ccc;
+ font-weight: normal;
 }
 
-h1     {
- background-color: #ff6600;
- color: #ffffff;
-/* margin: 0em 0em 0.5em 0em;*/
- margin: 0em;
-/* padding: 0.0em 0.1em 0.1em 0.0em;*/
+ul, ol {
+ margin: 1em;
  padding: 0em;
 }
-h2     {
- color: #ffffff;
- background-color: #ff6600;
- margin: 0em;
- padding: 0em;
- font-size: medium;
+ul ul, ol ol, ul ol, ol ul {
+ margin: 0em 1em;
 }
-h3     {
- color: #ff6600;
- margin: 0em 0.5em 0em 0.5em;
+dl {
+ margin: 1em 0em;
  padding: 0em;
- font-size: small;
-/* font-weight: normal;*/
 }
-h4     {
- color: #ff6600;
- margin: 0em 0.5em 0em 0.5em;
+dt {
+ margin: 0.5em 0em 0.2em 0em;
  padding: 0em;
- font-size: small;
- font-weight: normal;
+ font-weight: bold;
+ border-bottom: 1px solid #ccc;
 }
-p      {
- margin: 0.5em;
+dd {
+ margin: 0em 0em 0em 1.5em;
  padding: 0em;
 }
-pre    {
- background-color: #fff8f0;
- margin: 0.1em 0.5em 0.5em 0.5em;
+
+pre {
+ margin: 1em 0em;
  padding: 0.5em;
- border: 0.01em solid #ff6600;
- font-size: small;
+ background-color: #eff;
+ border: 1px solid #999;
+}
+blockquote {
+ margin: 1em 0em;
+ padding: 0.5em;
+ background-color: #dee;
+ border: 1px dotted #696;
+}
+.section blockquote p {
+ margin: 0em;
+ padding: 0em;
 }
 
-a              { color:#ff6600; }
-a:link         { color:#ff7700; }
-a:visited      { color:#ff8800; }
-a:active       { color:#ff0000; }
-a:hover        { color:#ff0000; text-decoration:none; }
-
-ul     {
-/* margin: 0em 0em 0em 2.0em;
- padding: 1em 0em 1em 0.0em;*/
- margin: 0.5em 0em 0.5em 2.0em;
- list-style-type: square;
+table {
+ margin: 1em 0em;
+ padding: 0em;
+ border: 2px solid #999;
+ border-collapse: collapse;
 }
-li     {
+th, tr, td {
+ padding: 0.1em 0.3em 0.1em 0.3em;
+ border: 1px solid #999;
 }
 
-dl     {
- margin: 0.5em 0em 0.5em 0.5em;
+hr {
+ border: 2px solid #9cc;
 }
-dt     {
-/* margin: 0.5em 0em 0.5em 0.5em;*/
- color: #dd3300;
+
+em, strong {
+ font-style: normal;
+ font-weight: bold;
+}
+strong {
+ color: #900;
 }
-dd     {
- margin: 0.1em 0em 0.5em 1.5em;
+
+a:link         { color: #0cc; }
+a:visited      { color: #066; }
+a:active, a:hover { color: #fff; background-color: #0cc; text-decoration: none; }
+
+/* ========== container */
+.container {
 }
-hr     {
- color: #ff6600;
+
+/* ========== main */
+.main {
+ margin: 0em 0em 0em 180px;
+/* padding: 0em 20px 50px 20px;*/
+ padding: 0em 1em 2em;
+}
+.main h1 {
+ margin: 0em 0em 1ex 0em;
+ padding: 1ex 1em 0.5ex 1em;
+ border: 2px solid #9cc;
+ border-left: 10px;
+ color: #099;
+}
+
+/* ==================== main adminmenu */
+.adminmenu {
+ color: #099;
+ margin: 0em;
+ padding: 0.2em 0em 0em 0em;
+ font-size: 90%;
+ text-align: right;
+}
+.adminmenu a:link      { color: #f66; }
+.adminmenu a:visited   { color: #c33; }
+.adminmenu a:active, .adminmenu a:hover { color: #fff; background-color: #c00; }
+.adminmenu ul {
  margin: 0em;
  padding: 0em;
 }
-address        {
- background-color: #ff6600;
- color: #ffffff;
- padding: 0.1em;
-/* font-family: Verdana,Helvetica,sans-self;*/
- font-family: Helvetica,sans-self;
- font-style: normal;
+
+/* ==================== main day */
+.day {
+ margin: 0.5em 0em 0.5em 0em;
+ padding: 0em;
+ border: 2px solid #9cc;
+}
+.day h2 {
+ margin: 0em;
+ padding: 0.5em 2em 0em 2em;
+ border-bottom: 2px dotted #9cc;
+ color: #099;
 }
-.white { color: #ffffff; }
 
-strong {
- color: #ff6600;
-/* font-family: Verdana,Helvetica,sans-self;*/
- font-family: Helvetica,sans-self;
+/* ============================== main day body */
+.body {
+ margin: 1em 1em 1em 2em;
+ padding: 0em;
 }
-.s     {
- color: #ff6600;
-/* font-family: Verdana,Helvetica,sans-self;*/
- font-family: Helvetica,sans-self;
- font-weight: bold;
+.section {
+ margin: 1em 0em;
+ padding: 0em;
+}
+.section p {
+ margin: 1em 0em;
+ padding: 0em;
 }
 
-b      {
-/* font-family: Verdana,Helvetica,sans-self;*/
- font-family: Helvetica,sans-self;
- font-weight: normal;
- color: #ff6600;
+/* ============================== main day comment */
+.comment {
+ margin: 0em;
+ padding: 0.5em 2em;
+ color: #099;
+ font-size: small;
+ background-color: #eff;
 }
-.b     {
-/* font-family: Verdana,Helvetica,sans-self;*/
- font-family: Helvetica,sans-self;
- font-weight: normal;
- color: #ff6600;
+#body_leave .day {
+ margin: 1em 0em 1em 0em;
+ border: 0px;
+ background-color: #fff;
 }
 
-.linkbox       {
- background-color: #ff6600;
- color: #ffffff;
- margin: 0em 0em 1em 0em;
- padding: 0em;
- text-align: center;
-/* font-family: Verdana,Helvetica,sans-self;*/
- font-family: Helvetica,sans-self;
+/* ========== sidebar */
+.sidebar {
+ position: absolute;
+ left: 0em;
+ top: 0em;
+ width: 180px;
+ font-size: small;
 }
 
-.linkbox a             { color:#ffffff; }
-.linkbox a:link                { color:#ffffff; }
-.linkbox a:visited     { color:#ffffff; }
-.linkbox a:active      { color:#ff0000; }
-.linkbox a:hover       {
- background-color: #ffffff;
- color:#ff6600; text-decoration:none;
+.sidebar h2 {
+ background-color: #099;
+ color: #fff;
+ margin: 1em 0em;
+ padding: 0.1em 1em;
+}
+.sidebar h2, .sidebar h3, .sidebar h4, .sidebar h5, .sidebar h6 {
+ font-size: small;
+}
+.sidebar ul {
+ margin: 0.5em 0em 0.5em 1.5em;
 }
 
-/* ---------------------------------------------------------------------- end. */
+/* end */
index 3b92fa4..1b68303 100755 (executable)
@@ -1,5 +1,4 @@
 Makefile
-config.h
 chise.h
 chise.c
 chise-name.h
diff --git a/ext/config.h b/ext/config.h
new file mode 100755 (executable)
index 0000000..bc3886b
--- /dev/null
@@ -0,0 +1,5 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+#define CHISE_DB_DIR    "/cygdrive/c/chise/chise-db"
+#define CHISE_SI_DB_DIR "/cygdrive/c/chise/chise-db"
+#endif
index e624774..e69de29 100755 (executable)
-#
-# This file is automatically generated. DO NOT MODIFY!
-#
-# install.rb
-#
-#   Copyright (c) 2000-2003 Minero Aoki <aamine@loveruby.net>
-#
-#   This program is free software.
-#   You can distribute/modify this program under the terms of
-#   the GNU Lesser General Public License version 2.
-#
-
-### begin compat.rb
-
-module Enumerable
-  methods = instance_methods()
-
-  unless methods.include?('map')
-    alias map collect
-  end
-
-  unless methods.include?('select')
-    alias select find_all
-  end
-
-  unless methods.include?('reject')
-    def reject
-      result = []
-      each do |i|
-        result.push i unless yield(i)
-      end
-      result
-    end
-  end
-
-  unless methods.include?('inject')
-    def inject( result )
-      each do |i|
-        result = yield(result, i)
-      end
-      result
-    end
-  end
-
-  unless methods.include?('any?')
-    def any?
-      each do |i|
-        return true if yield(i)
-      end
-      false
-    end
-  end
-end
-
-def File.read_all( fname )
-  File.open(fname, 'rb') {|f| return f.read }
-end
-
-def File.write( fname, str )
-  File.open(fname, 'wb') {|f| f.write str }
-end
-
-### end compat.rb
-### begin config.rb
-
-if i = ARGV.index(/\A--rbconfig=/)
-  file = $'
-  ARGV.delete_at(i)
-  require file
-else
-  require 'rbconfig'
-end
-
-
-class ConfigTable
-
-  c = ::Config::CONFIG
-
-  rubypath = c['bindir'] + '/' + c['ruby_install_name']
-
-  major = c['MAJOR'].to_i
-  minor = c['MINOR'].to_i
-  teeny = c['TEENY'].to_i
-  version = "#{major}.#{minor}"
-
-  # ruby ver. >= 1.4.4?
-  newpath_p = ((major >= 2) or
-               ((major == 1) and
-                ((minor >= 5) or
-                 ((minor == 4) and (teeny >= 4)))))
-  
-  re = Regexp.new('\A' + Regexp.quote(c['prefix']))
-  subprefix = lambda {|path|
-      re === path and path.sub(re, '$prefix')
-  }
-
-  if c['rubylibdir']
-    # V < 1.6.3
-    stdruby    = subprefix.call(c['rubylibdir'])
-    siteruby   = subprefix.call(c['sitedir'])
-    versite    = subprefix.call(c['sitelibdir'])
-    sodir      = subprefix.call(c['sitearchdir'])
-  elsif newpath_p
-    # 1.4.4 <= V <= 1.6.3
-    stdruby    = "$prefix/lib/ruby/#{version}"
-    siteruby   = subprefix.call(c['sitedir'])
-    versite    = siteruby + '/' + version
-    sodir      = "$site-ruby/#{c['arch']}"
-  else
-    # V < 1.4.4
-    stdruby    = "$prefix/lib/ruby/#{version}"
-    siteruby   = "$prefix/lib/ruby/#{version}/site_ruby"
-    versite    = siteruby
-    sodir      = "$site-ruby/#{c['arch']}"
-  end
-
-  DESCRIPTER = [
-    [ 'prefix',    [ c['prefix'],
-                     'path',
-                     'path prefix of target environment' ] ],
-    [ 'std-ruby',  [ stdruby,
-                     'path',
-                     'the directory for standard ruby libraries' ] ],
-    [ 'site-ruby-common', [ siteruby,
-                     'path',
-                     'the directory for version-independent non-standard ruby libraries' ] ],
-    [ 'site-ruby', [ versite,
-                     'path',
-                     'the directory for non-standard ruby libraries' ] ],
-    [ 'bin-dir',   [ '$prefix/bin',
-                     'path',
-                     'the directory for commands' ] ],
-    [ 'rb-dir',    [ '$site-ruby',
-                     'path',
-                     'the directory for ruby scripts' ] ],
-    [ 'so-dir',    [ sodir,
-                     'path',
-                     'the directory for ruby extentions' ] ],
-    [ 'data-dir',  [ '$prefix/share',
-                     'path',
-                     'the directory for shared data' ] ],
-    [ 'ruby-path', [ rubypath,
-                     'path',
-                     'path to set to #! line' ] ],
-    [ 'ruby-prog', [ rubypath,
-                     'name',
-                     'the ruby program using for installation' ] ],
-    [ 'make-prog', [ 'make',
-                     'name',
-                     'the make program to compile ruby extentions' ] ],
-    [ 'without-ext', [ 'no',
-                       'yes/no',
-                       'does not compile/install ruby extentions' ] ]
-  ]
-
-  SAVE_FILE = 'config.save'
-
-  def ConfigTable.each_name( &block )
-    keys().each(&block)
-  end
-
-  def ConfigTable.keys
-    DESCRIPTER.map {|k,*dummy| k }
-  end
-
-  def ConfigTable.each_definition( &block )
-    DESCRIPTER.each(&block)
-  end
-
-  def ConfigTable.get_entry( name )
-    name, ent = DESCRIPTER.assoc(name)
-    ent
-  end
-
-  def ConfigTable.get_entry!( name )
-    get_entry(name) or raise ArgumentError, "no such config: #{name}"
-  end
-
-  def ConfigTable.add_entry( name, vals )
-    ConfigTable::DESCRIPTER.push [name,vals]
-  end
-
-  def ConfigTable.remove_entry( name )
-    get_entry name or raise ArgumentError, "no such config: #{name}"
-    DESCRIPTER.delete_if {|n,arr| n == name }
-  end
-
-  def ConfigTable.config_key?( name )
-    get_entry(name) ? true : false
-  end
-
-  def ConfigTable.bool_config?( name )
-    ent = get_entry(name) or return false
-    ent[1] == 'yes/no'
-  end
-
-  def ConfigTable.value_config?( name )
-    ent = get_entry(name) or return false
-    ent[1] != 'yes/no'
-  end
-
-  def ConfigTable.path_config?( name )
-    ent = get_entry(name) or return false
-    ent[1] == 'path'
-  end
-
-
-  class << self
-    alias newobj new
-
-    def new
-      c = newobj()
-      c.__send__ :init
-      c
-    end
-
-    def load
-      c = newobj()
-      raise InstallError, "#{File.basename $0} config first"\
-                                      unless FileTest.file?(SAVE_FILE)
-      File.foreach(SAVE_FILE) do |line|
-        k, v = line.split(/=/, 2)
-        c.instance_eval {
-            @table[k] = v.strip
-        }
-      end
-      c
-    end
-  end
-
-  def initialize
-    @table = {}
-  end
-
-  def init
-    DESCRIPTER.each do |k, (default, vname, desc, default2)|
-      @table[k] = default
-    end
-  end
-  private :init
-
-  def save
-    File.open(SAVE_FILE, 'w') {|f|
-        @table.each do |k, v|
-          f.printf "%s=%s\n", k, v if v
-        end
-    }
-  end
-
-  def []=( k, v )
-    ConfigTable.config_key? k or raise InstallError, "unknown config option #{k}"
-    if ConfigTable.path_config? k
-      @table[k] = (v[0,1] != '$') ? File.expand_path(v) : v
-    else
-      @table[k] = v
-    end
-  end
-    
-  def []( key )
-    @table[key] or return nil
-    @table[key].gsub(%r<\$([^/]+)>) { self[$1] }
-  end
-
-  def set_raw( key, val )
-    @table[key] = val
-  end
-
-  def get_raw( key )
-    @table[key]
-  end
-
-end
-
-
-module MetaConfigAPI
-
-  def eval_file_ifexist( fname )
-    instance_eval File.read_all(fname), fname, 1 if FileTest.file?(fname)
-  end
-
-  def config_names
-    ConfigTable.keys
-  end
-
-  def config?( name )
-    ConfigTable.config_key? name
-  end
-
-  def bool_config?( name )
-    ConfigTable.bool_config? name
-  end
-
-  def value_config?( name )
-    ConfigTable.value_config? name
-  end
-
-  def path_config?( name )
-    ConfigTable.path_config? name
-  end
-
-  def add_config( name, argname, default, desc )
-    ConfigTable.add_entry name,[default,argname,desc]
-  end
-
-  def add_path_config( name, default, desc )
-    add_config name, 'path', default, desc
-  end
-
-  def add_bool_config( name, default, desc )
-    add_config name, 'yes/no', default ? 'yes' : 'no', desc
-  end
-
-  def set_config_default( name, default )
-    if bool_config? name
-      ConfigTable.get_entry!(name)[0] = default ? 'yes' : 'no'
-    else
-      ConfigTable.get_entry!(name)[0] = default
-    end
-  end
-
-  def remove_config( name )
-    ent = ConfigTable.get_entry(name)
-    ConfigTable.remove_entry name
-    ent
-  end
-
-end
-
-### end config.rb
-### begin fileop.rb
-
-module FileOperations
-
-  def mkdir_p( dname, prefix = nil )
-    dname = prefix + dname if prefix
-    $stderr.puts "mkdir -p #{dname}" if verbose?
-    return if no_harm?
-
-    # does not check '/'... it's too abnormal case
-    dirs = dname.split(%r<(?=/)>)
-    if /\A[a-z]:\z/i === dirs[0]
-      disk = dirs.shift
-      dirs[0] = disk + dirs[0]
-    end
-    dirs.each_index do |idx|
-      path = dirs[0..idx].join('')
-      Dir.mkdir path unless dir? path
-    end
-  end
-
-  def rm_f( fname )
-    $stderr.puts "rm -f #{fname}" if verbose?
-    return if no_harm?
-
-    if File.exist? fname or File.symlink? fname
-      File.chmod 0777, fname
-      File.unlink fname
-    end
-  end
-
-  def rm_rf( dn )
-    $stderr.puts "rm -rf #{dn}" if verbose?
-    return if no_harm?
-
-    Dir.chdir dn
-    Dir.foreach('.') do |fn|
-      next if fn == '.'
-      next if fn == '..'
-      if dir? fn
-        verbose_off {
-            rm_rf fn
-        }
-      else
-        verbose_off {
-            rm_f fn
-        }
-      end
-    end
-    Dir.chdir '..'
-    Dir.rmdir dn
-  end
-
-  def mv( src, dest )
-    rm_f dest
-    begin
-      File.link src, dest
-    rescue
-      File.write dest, File.read_all(src)
-      File.chmod File.stat(src).mode, dest
-    end
-    rm_f src
-  end
-
-  def install( from, dest, mode, prefix = nil )
-    $stderr.puts "install #{from} #{dest}" if verbose?
-    return if no_harm?
-
-    realdest = prefix + dest if prefix
-    if dir? realdest
-      realdest += '/' + File.basename(from)
-    end
-    str = File.read_all(from)
-    if diff? str, realdest
-      verbose_off {
-          rm_f realdest if File.exist? realdest
-      }
-      File.write realdest, str
-      File.chmod mode, realdest
-
-      File.open(objdir + '/InstalledFiles', 'a') {|f| f.puts realdest }
-    end
-  end
-
-  def diff?( orig, targ )
-    return true unless File.exist? targ
-    orig != File.read_all(targ)
-  end
-
-  def command( str )
-    $stderr.puts str if verbose?
-    system str or raise RuntimeError, "'system #{str}' failed"
-  end
-
-  def ruby( str )
-    command config('ruby-prog') + ' ' + str
-  end
-
-  def dir?( dname )
-    # for corrupted windows stat()
-    File.directory?((dname[-1,1] == '/') ? dname : dname + '/')
-  end
-
-  def all_files_in( dname )
-    Dir.open(dname) {|d|
-        return d.select {|n| FileTest.file? "#{dname}/#{n}" }
-    }
-  end
-
-  REJECT_DIRS = %w(
-    CVS SCCS RCS CVS.adm
-  )
-
-  def all_dirs_in( dname )
-    Dir.open(dname) {|d|
-        return d.select {|n| dir? "#{dname}/#{n}" } - %w(. ..) - REJECT_DIRS
-    }
-  end
-
-end
-
-### end fileop.rb
-### begin base.rb
-
-class InstallError < StandardError; end
-
-
-class Installer
-
-  Version   = '3.1.4'
-  Copyright = 'Copyright (c) 2000-2003 Minero Aoki'
-
-
-  @toplevel = nil
-
-  def self.declare_toplevel_installer( inst )
-    raise ArgumentError, 'two toplevel installers declared' if @toplevel
-    @toplevel = inst
-  end
-
-  def self.toplevel_installer
-    @toplevel
-  end
-
-
-  FILETYPES = %w( bin lib ext data )
-
-  include FileOperations
-
-  def initialize( config, opt, srcroot, objroot )
-    @config = config
-    @options = opt
-    @srcdir = File.expand_path(srcroot)
-    @objdir = File.expand_path(objroot)
-    @currdir = '.'
-  end
-
-  def inspect
-    "#<#{self.class} #{__id__}>"
-  end
-
-  #
-  # configs/options
-  #
-
-  def get_config( key )
-    @config[key]
-  end
-
-  alias config get_config
-
-  def set_config( key, val )
-    @config[key] = val
-  end
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def verbose_off
-    save, @options['verbose'] = @options['verbose'], false
-    yield
-    @options['verbose'] = save
-  end
-
-  #
-  # srcdir/objdir
-  #
-
-  attr_reader :srcdir
-  alias srcdir_root srcdir
-  alias package_root srcdir
-
-  def curr_srcdir
-    "#{@srcdir}/#{@currdir}"
-  end
-
-  attr_reader :objdir
-  alias objdir_root objdir
-
-  def curr_objdir
-    "#{@objdir}/#{@currdir}"
-  end
-
-  def srcfile( path )
-    curr_srcdir + '/' + path
-  end
-
-  def srcexist?( path )
-    File.exist? srcfile(path)
-  end
-
-  def srcdirectory?( path )
-    dir? srcfile(path)
-  end
-  
-  def srcfile?( path )
-    FileTest.file? srcfile(path)
-  end
-
-  def srcentries( path = '.' )
-    Dir.open(curr_srcdir + '/' + path) {|d|
-        return d.to_a - %w(. ..) - hookfilenames
-    }
-  end
-
-  def srcfiles( path = '.' )
-    srcentries(path).select {|fname|
-        FileTest.file? File.join(curr_srcdir, path, fname)
-    }
-  end
-
-  def srcdirectories( path = '.' )
-    srcentries(path).select {|fname|
-        dir? File.join(curr_srcdir, path, fname)
-    }
-  end
-
-  def dive_into( rel )
-    return unless dir?("#{@srcdir}/#{rel}")
-
-    dir = File.basename(rel)
-    Dir.mkdir dir unless dir?(dir)
-    prevdir = Dir.pwd
-    Dir.chdir dir
-    $stderr.puts '---> ' + rel if verbose?
-    @currdir = rel
-    yield
-    Dir.chdir prevdir
-    $stderr.puts '<--- ' + rel if verbose?
-    @currdir = File.dirname(rel)
-  end
-
-  #
-  # TASK config
-  #
-
-  def exec_config
-    exec_task_traverse 'config'
-  end
-
-  def config_dir_bin( rel )
-  end
-
-  def config_dir_lib( rel )
-  end
-
-  def config_dir_ext( rel )
-    extconf if extdir? curr_srcdir
-  end
-
-  def extconf
-    opt = @options['config-opt'].join(' ')
-    command "#{config('ruby-prog')} #{curr_srcdir}/extconf.rb #{opt}"
-  end
-
-  def config_dir_data( rel )
-  end
-
-  #
-  # TASK setup
-  #
-
-  def exec_setup
-    exec_task_traverse 'setup'
-  end
-
-  def setup_dir_bin( relpath )
-    all_files_in(curr_srcdir()).each do |fname|
-      add_rubypath "#{curr_srcdir}/#{fname}"
-    end
-  end
-
-  SHEBANG_RE = /\A\#!\s*\S*ruby\S*/
-
-  def add_rubypath( path )
-    $stderr.puts %Q<set #! line to "\#!#{config('ruby-path')}" for #{path} ...> if verbose?
-    return if no_harm?
-
-    tmpfile = File.basename(path) + '.tmp'
-    begin
-      File.open(path) {|r|
-      File.open(tmpfile, 'w') {|w|
-          first = r.gets
-          return unless SHEBANG_RE === first   # reject '/usr/bin/env ruby'
-
-          w.print first.sub(SHEBANG_RE, '#!' + config('ruby-path'))
-          w.write r.read
-      } }
-      mv tmpfile, File.basename(path)
-    ensure
-      rm_f tmpfile if File.exist? tmpfile
-    end
-  end
-
-  def setup_dir_lib( relpath )
-  end
-
-  def setup_dir_ext( relpath )
-    make if extdir?(curr_srcdir)
-  end
-
-  def setup_dir_data( relpath )
-  end
-
-  #
-  # TASK install
-  #
-
-  def exec_install
-    exec_task_traverse 'install'
-  end
-
-  def install_dir_bin( rel )
-    install_files target_filenames(), config('bin-dir') + '/' + rel, 0755
-  end
-
-  def install_dir_lib( rel )
-    install_files target_filenames(), config('rb-dir') + '/' + rel, 0644
-  end
-
-  def install_dir_ext( rel )
-    install_dir_ext_main File.dirname(rel) if extdir?(curr_srcdir)
-  end
-
-  def install_dir_ext_main( rel )
-    install_files allext('.'), config('so-dir') + '/' + rel, 0555
-  end
-
-  def install_dir_data( rel )
-    install_files target_filenames(), config('data-dir') + '/' + rel, 0644
-  end
-
-  def install_files( list, dest, mode )
-    mkdir_p dest, @options['install-prefix']
-    list.each do |fname|
-      install fname, dest, mode, @options['install-prefix']
-    end
-  end
-
-  def target_filenames
-    if FileTest.file? "#{curr_srcdir()}/MANIFEST"
-      mapdir(target_filenames_MANIFEST())
-    else
-      mapdir(target_filenames_AUTO())
-    end
-  end
-
-  def mapdir( filelist )
-    filelist.map {|fname|
-        if File.exist? fname   # current objdir == '.'
-          fname
-        else
-          File.join(curr_srcdir(), fname)
-        end
-    }
-  end
-
-  def target_filenames_MANIFEST
-    File.read_all("#{curr_srcdir()}/MANIFEST").split
-  end
-  
-  # picked up many entries from cvs-1.11.1/src/ignore.c
-  REJECT_PATTERNS = %w( 
-      core RCSLOG tags TAGS .make.state
-      .nse_depinfo #* .#* cvslog.* ,* .del-* *.a *.olb *.o *.obj
-      *.so *.Z *~ *.old *.elc *.ln *.bak *.BAK *.orig *.rej *.exe _$* *$
-
-      *.org *.in .*
-  ).map {|pattern|
-      Regexp.compile('\A' + pattern.gsub(/[\.\$]/) {|s| '\\' + s }.gsub(/\*/, '.*') + '\z')
-  }
-
-  def target_filenames_AUTO
-    (existfiles() - hookfiles()).reject {|fname|
-        REJECT_PATTERNS.any? {|re| re === fname }
-    }
-  end
-
-  def existfiles
-    all_files_in(curr_srcdir()) | all_files_in(curr_objdir())
-  end
-
-  def hookfiles
-    %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
-        %w( config setup install clean ).map {|t| sprintf(fmt, t) }
-    }.flatten
-  end
-
-  def allext( dir )
-    _allext(dir) or raise InstallError,
-        "no extention exists: Have you done 'ruby #{$0} setup' ?"
-  end
-
-  DLEXT = /\.#{ ::Config::CONFIG['DLEXT'] }\z/
-
-  def _allext( dir )
-    Dir.open(dir) {|d|
-        return d.select {|fname| DLEXT === fname }
-    }
-  end
-
-  #
-  # TASK clean
-  #
-
-  def exec_clean
-    exec_task_traverse 'clean'
-    rm_f 'config.save'
-    rm_f 'InstalledFiles'
-  end
-
-  def clean_dir_bin( rel )
-  end
-
-  def clean_dir_lib( rel )
-  end
-
-  def clean_dir_ext( rel )
-    make 'clean' if FileTest.file?('Makefile')
-  end
-
-  def clean_dir_data( rel )
-  end
-
-  #
-  # TASK distclean
-  #
-
-  def exec_distclean
-    exec_task_traverse 'distclean'
-    rm_f 'config.save'
-    rm_f 'InstalledFiles'
-  end
-
-  def distclean_dir_bin( rel )
-  end
-
-  def distclean_dir_lib( rel )
-  end
-
-  def distclean_dir_ext( rel )
-    make 'distclean' if FileTest.file?('Makefile')
-  end
-
-  #
-  # lib
-  #
-  
-  def make( task = '' )
-    command config('make-prog') + ' ' + task
-  end
-
-  def exec_task_traverse( task )
-    run_hook 'pre-' + task
-    FILETYPES.each do |type|
-      if config('without-ext') == 'yes' and type == 'ext'
-        $stderr.puts 'skipping ext/* by user option' if verbose?
-        next
-      end
-      traverse task, type, task + '_dir_' + type
-    end
-    run_hook 'post-' + task
-  end
-
-  def traverse( task, rel, mid )
-    dive_into(rel) {
-        run_hook 'pre-' + task
-        __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
-        all_dirs_in(curr_srcdir()).each do |d|
-          traverse task, rel + '/' + d, mid
-        end
-        run_hook 'post-' + task
-    }
-  end
-
-  def run_hook( name )
-    try_run_hook curr_srcdir + '/' + name           or
-    try_run_hook curr_srcdir + '/' + name + '.rb'
-  end
-
-  def try_run_hook( fname )
-    return false unless FileTest.file?(fname)
-
-    env = self.dup
-    begin
-      env.instance_eval File.read_all(fname), fname, 1
-    rescue
-      raise InstallError, "hook #{fname} failed:\n" + $!.message
-    end
-    true
-  end
-
-  def extdir?( dir )
-    File.exist? dir + '/MANIFEST'
-  end
-
-end
-
-### end base.rb
-### begin toplevel.rb
-
-class ToplevelInstaller < Installer
-
-  def self.invoke
-    new(File.dirname($0)).invoke
-  end
-
-
-  TASKS = [
-    [ 'config',   'saves your configurations' ],
-    [ 'show',     'shows current configuration' ],
-    [ 'setup',    'compiles extention or else' ],
-    [ 'install',  'installs files' ],
-    [ 'clean',    "does `make clean' for each extention" ],
-    [ 'distclean',"does `make distclean' for each extention" ]
-  ]
-
-
-  def initialize( root )
-    super nil, {'verbose' => true}, root, '.'
-    Installer.declare_toplevel_installer self
-  end
-
-
-  def invoke
-    run_metaconfigs
-
-    case task = parsearg_global()
-    when 'config'
-      @config = ConfigTable.new
-    else
-      @config = ConfigTable.load
-    end
-    parsearg_TASK task
-
-    exectask task
-  end
-
-  include MetaConfigAPI
-
-  def run_metaconfigs
-    eval_file_ifexist "#{srcdir_root()}/metaconfig"
-  end
-
-
-  def exectask( task )
-    if task == 'show'
-      exec_show
-    else
-      try task
-    end
-  end
-
-  def try( task )
-    $stderr.printf "#{File.basename $0}: entering %s phase...\n", task if verbose?
-    begin
-      __send__ 'exec_' + task
-    rescue
-      $stderr.printf "%s failed\n", task
-      raise
-    end
-    $stderr.printf "#{File.basename $0}: %s done.\n", task if verbose?
-  end
-
-  #
-  # processing arguments
-  #
-
-  def parsearg_global
-    task_re = /\A(?:#{TASKS.map {|i| i[0] }.join '|'})\z/
-
-    while arg = ARGV.shift
-      case arg
-      when /\A\w+\z/
-        task_re === arg or raise InstallError, "wrong task: #{arg}"
-        return arg
-
-      when '-q', '--quiet'
-        @options['verbose'] = false
-
-      when       '--verbose'
-        @options['verbose'] = true
-
-      when '-h', '--help'
-        print_usage $stdout
-        exit 0
-
-      when '-v', '--version'
-        puts "#{File.basename $0} version #{Version}"
-        exit 0
-      
-      when '--copyright'
-        puts Copyright
-        exit 0
-
-      else
-        raise InstallError, "unknown global option '#{arg}'"
-      end
-    end
-
-    raise InstallError, "No task or global option given.
-Typical installation procedure is:
-    $ ruby #{File.basename $0} config
-    $ ruby #{File.basename $0} setup
-    # ruby #{File.basename $0} install  (may require root privilege)
-"
-  end
-
-
-  def parsearg_TASK( task )
-    mid = "parsearg_#{task}"
-    if respond_to? mid, true
-      __send__ mid
-    else
-      ARGV.empty? or
-          raise InstallError, "#{task}:  unknown options: #{ARGV.join ' '}"
-    end
-  end
-
-  def parsearg_config
-    re = /\A--(#{ConfigTable.keys.join '|'})(?:=(.*))?\z/
-    @options['config-opt'] = []
-
-    while i = ARGV.shift
-      if /\A--?\z/ === i
-        @options['config-opt'] = ARGV.dup
-        break
-      end
-      m = re.match(i) or raise InstallError, "config: unknown option #{i}"
-      name, value = m.to_a[1,2]
-      if value
-        if ConfigTable.bool_config?(name)
-          /\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i === value or raise InstallError, "config: --#{name} allows only yes/no for argument"
-          value = (/\Ay(es)?|\At(rue)/i === value) ? 'yes' : 'no'
-        end
-      else
-        ConfigTable.bool_config?(name) or raise InstallError, "config: --#{name} requires argument"
-        value = 'yes'
-      end
-      @config[name] = value
-    end
-  end
-
-  def parsearg_install
-    @options['no-harm'] = false
-    @options['install-prefix'] = ''
-    while a = ARGV.shift
-      case a
-      when /\A--no-harm\z/
-        @options['no-harm'] = true
-      when /\A--prefix=(.*)\z/
-        path = $1
-        path = File.expand_path(path) unless path[0,1] == '/'
-        @options['install-prefix'] = path
-      else
-        raise InstallError, "install: unknown option #{a}"
-      end
-    end
-  end
-
-
-  def print_usage( out )
-    out.puts 'Typical Installation Procedure:'
-    out.puts "  $ ruby #{File.basename $0} config"
-    out.puts "  $ ruby #{File.basename $0} setup"
-    out.puts "  # ruby #{File.basename $0} install (may require root privilege)"
-    out.puts
-    out.puts 'Detailed Usage:'
-    out.puts "  ruby #{File.basename $0} <global option>"
-    out.puts "  ruby #{File.basename $0} [<global options>] <task> [<task options>]"
-
-    fmt = "  %-20s %s\n"
-    out.puts
-    out.puts 'Global options:'
-    out.printf fmt, '-q,--quiet',   'suppress message outputs'
-    out.printf fmt, '   --verbose', 'output messages verbosely'
-    out.printf fmt, '-h,--help',    'print this message'
-    out.printf fmt, '-v,--version', 'print version and quit'
-    out.printf fmt, '   --copyright',  'print copyright and quit'
-
-    out.puts
-    out.puts 'Tasks:'
-    TASKS.each do |name, desc|
-      out.printf "  %-10s  %s\n", name, desc
-    end
-
-    out.puts
-    out.puts 'Options for config:'
-    ConfigTable.each_definition do |name, (default, arg, desc, default2)|
-      out.printf "  %-20s %s [%s]\n",
-                 '--'+ name + (ConfigTable.bool_config?(name) ? '' : '='+arg),
-                 desc,
-                 default2 || default
-    end
-    out.printf "  %-20s %s [%s]\n",
-        '--rbconfig=path', 'your rbconfig.rb to load', "running ruby's"
-
-    out.puts
-    out.puts 'Options for install:'
-    out.printf "  %-20s %s [%s]\n",
-        '--no-harm', 'only display what to do if given', 'off'
-    out.printf "  %-20s %s [%s]\n",
-        '--prefix',  'install path prefix', '$prefix'
-
-    out.puts
-  end
-
-  #
-  # config
-  #
-
-  def exec_config
-    super
-    @config.save
-  end
-
-  #
-  # show
-  #
-
-  def exec_show
-    ConfigTable.each_name do |k|
-      v = @config.get_raw(k)
-      if not v or v.empty?
-        v = '(not specified)'
-      end
-      printf "%-10s %s\n", k, v
-    end
-  end
-
-end
-
-### end toplevel.rb
-
-if $0 == __FILE__
-  begin
-    ToplevelInstaller.invoke
-  rescue
-    raise if $DEBUG
-    $stderr.puts $!.message
-    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
-    exit 1
-  end
-end
index be7d06f..bac633a 100755 (executable)
@@ -1,31 +1,32 @@
 #!/usr/bin/env ruby
 
+$KCODE = "u"
 $LOAD_PATH.unshift("..")
-require "chise/char"
+require "chise"
 
 def test1
-p "字"                    # "字"
-p "字".ucs                # 23383
-p "字".total_strokes      # 6
-p "字".inspect_all        # 保有する素性情報を全て出力する
-p "字".daikanwa           # 6942(大漢和番号)
+p "字"                        # "字"
+p "字".ucs            # 23383
+p "字".total_strokes  # 6
+p "字".inspect_all    # 保有する素性情報を全て出力する
+p "字".daikanwa               # 6942(大漢和番号)
 end
 
 def test2
-p "字字".ucs # 例外
+p "字字".ucs         # 例外
 end
 
 def test3
-char = "字".char # Character classのインスタンスを生成
-char = Character.get("字") # 上記とまったく同じ
+char = "字".char      # Character classのインスタンスを生成
+char = CHISE::Character.get("?字")    # 上記とまったく同じ
 end
 
 def test4
 # 数値参照化する
-p "字". to_er      # "&#x5b57;"     
+p "字". to_er         # "&#x5b57;"     
 
 #数値参照を復号
-p "&#x5b57;".de_er # "字"
+p "&#x5b57;".de_er     # "字"
 
 # JIS X 0208-1990 による実体参照を復号
 p "&J90-3B7A;".de_er
@@ -44,7 +45,7 @@ def test5
   }
   p str2
   p str.char_length
-  p str.to_er
+  #p str.to_er
   p str2.de_er
 end
 
index 4383b1a..fbda9b9 100755 (executable)
@@ -1,18 +1,12 @@
 #!/usr/bin/env ruby
 
 $LOAD_PATH.unshift("..")
-require "chise/char"
+require "chise"
 
-str = "字" # Stringを拡張している。UTF8で与えること。
-p str.ucs # とすると、その文字のucsの値が表示される
-p str.total_strokes # 画数が表示される
-p str.gb2312 # などなど
-str.char.alist.each {|a, v| # こんな感じで全属性を表示できる
-  print a, ': ', v, "\n"
+str = "字"            # Stringを拡張している.UTF8で与える.
+p str.ucs              # その文字のucsの値が表示される.
+p str.total_strokes    # 画数が表示される.
+p str.gb2312           # などなど.
+str.each_feature {|f, v|       # 全素性を表示する.
+  print f, ": ", v, "\n"
 }
-p str.inspect_x # Characterについての情報が表示される。
-p str.inspect_all # 持っている属性情報を全て表示する。
-
-str = "文字列" # もちろん一文字でなく文字列も扱える。UTF-8で与える。
-p str.inspect_x # 各文字の情報が表示される。
-p str.inspect_all # 各文字の属性情報を全て表示する。
index 6397a64..2624541 100755 (executable)
@@ -1,5 +1,14 @@
 * tools for Chise Character DataBase management
 
+** define-kanji-meaning.rb
+
+add new features about the meaning of Kanji Character in IDS.
+
+** dump-database.rb
+
+This tool dumps all data of the database to text files.
+You can see the inside of the database.  It's convenient.
+
 ** make-chisedb-tarball.rb
 
  Usage: make-chisedb-tarball.rb <directory of XEmacs CHISE> <tmp dir>
@@ -17,31 +26,26 @@ characters.
 
  < > * ? \81¨ ( ) + !
 
-** rename-files.rb
+** make-ids-database.rb
 
-Currently, the directory tree of XEmacs CHISE and the requirement of
-libchise is not same.  This tool renames the old files trees to the
-new file trees.
+This tool read the all of IDS test files, parse them and store them to
+BDB files.  Then, you can use some ids features as normal features.
+It's very slow.  It takes time almost 1 hour.
 
 ** move-obsolete-files.rb
 
 There are some obsolete features.  This tool moves the obsolete files
 to a directory.
 
-** dump-database.rb
-
-This tool dumps all data of the database to text files.
-You can see the inside of the database.  It's convenient.
-
-** make_ids_db.rb
+** rename-files.rb
 
-This tool read the all of IDS test files, parse them and store them to
-BDB files.  Then, you can use some ids features as normal features.
-It's very slow.  It takes time almost 1 hour.
+Currently, the directory tree of XEmacs CHISE and the requirement of
+libchise is not same.  This tool renames the old files trees to the
+new file trees.
 
 ** trim_bom.rb
 
 This tool remove a BOM (Byte Order Mark) in the head of file.
 
 ====
-by Kouichirou Eto, http://eto.com/
+Kouichirou Eto, http://eto.com/
diff --git a/tools/make_ids_db.rb b/tools/make_ids_db.rb
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/tools/scp-chisedb b/tools/scp-chisedb
deleted file mode 100755 (executable)
index 923fe2e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/csh -f
-# Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
-
-scp aqua.eto.com:work/chise/ruby/tools/chise-db.tar.gz .