update doc.
[chise/ruby.git] / src / chise / defkanji.rb
1 #!/usr/bin/env ruby
2 # define local kanji features, by eto 2003-0305
3 # $Id: defkanji.rb,v 1.1 2003-11-10 08:11:46 eto Exp $
4 # Copyright (C) 2002-2003 Kouichirou Eto, All rights reserved.
5 # This is free software with ABSOLUTELY NO WARRANTY.
6 # You can redistribute it and/or modify it under the terms of the GNU GPL2.
7
8 require 'singleton'
9
10 module CHISE
11   class IDS_Definition #======================================================================
12     include Singleton
13
14     #●ids-element: stop-character。これ以上分割しない、基本要素文字。
15     #その文字自身を値として持つ。それ以外の値を持つ場合は、それを代りの値として使うことを意味する。
16     #つまり、101字の基本漢字は最小構成要素なので、それ以上分解しませんよ、ということ。
17     IDS_ELEMENT = "六百回交向歩考出書多少高可"
18     BASIC_KANJI = "人子女母父王口耳手足力目首毛心犬牛鳥貝角羽虫馬魚羊肉皮米竹木麦豆山川雨風水土石金田穴日月火音糸刀舟門戸衣矢弓車皿一二三四五六七八九十百千万寸尺上中下本玉立回食行止交向歩考入示走生出来書言大小白青多少高長"
19
20     AWASE_KANJI = "鳴名加品古知問間聞取兄見切分粉貧林森校東明住位好岩砂里男畑習休短空坂島倉美孝赤看光初努協解新歌語話張強忘悲答晴現正字安守灰秋秒困国医包同合舌居右左受友反道返迷花菜集机主太氷州点店庫仕帳幼防引配早直班筆重番北化比死夏後進酒福私家世内谷半原前寺思電雲気布旅衆泣"
21
22     #●ids-meaning: 意味的に考えるところのIDS。形としてはつながらないが、意味としてはこう分割できるというものを表す。
23     IDS_MEANING = "
24 見     ⿱目儿
25 東     ⿻木日
26 里     ⿱田土
27 赤     ⿱大火
28 舌     ⿱千口
29 太     ⿻大丶
30 #州    ⿻砂川
31 #重    ⿱?土
32 世     ⿺十⿰十十
33 内     ⿵冂入
34 谷     ⿱⿱八&CDP-8B5D;口
35 半     ⿱八牛
36 孝     ⿱老子
37 島     ⿹鳥山
38 美     ⿱羊大
39 看     ⿸手目
40 倉     ⿸食口
41 強     ⿰弓⿱厶虫
42 乑        ⿲人人人
43 果     ⿱田木
44 比     ⿰匕匕
45 鼓     ⿰壴支
46 #承
47 鼻     ⿳自田廾
48 風     ⿵几⿱丿虫
49 #夜
50 &CDP-8C47;      ⿰亡月
51 黙     ⿺黒犬
52 ".split("\n")
53
54     #●ids-represent: これを持つもつ字は、それ以外の字を意味するということを意味する。
55     #例えば人偏は、人を意味する。これは再帰的に摘要する。
56     IDS_REPRESENT = "
57 亻        人
58 &CDP-8B5D;      人
59 衤        衣
60 𠂆       厂
61 𠂇       厂
62 ⺡        水
63 氵        水
64 &CDP-8CCC;      羊
65 𦍌       羊
66 &CDP-8B52;      老
67 &CDP-8CBB;      鳥
68 &CDP-8BEA;      刀
69 刂        刀
70 朩     木
71 ⺩        王
72 土        土
73 𠤎       匕
74 &CDP-8BC4;      泉
75 ⻗        雨
76 &CDP-8BE8;      申
77 糹        糸
78 ⻊        足
79 &J90-5469;      夂
80 &CDP-8BD5;      西
81 &CDP-8BA9;      牛
82 ⺮        竹
83 黑        黒
84 &CDP-8971;      冫
85 ".split("\n")
86
87     #●ids-link: 横列びの関係があるもの
88     IDS_LINK = "
89 艮        &CDP-8B7C;
90 &CDP-8B48;      四
91 寸        才
92 㐅        米
93 #この部品はいろいろあるのだけど…。
94 ".split("\n")
95
96     def check
97       #show_ids(IDS_ELEMENT) #ar = BASIC_KANJI+IDS_ELEMENT
98       #show_ids(IDS_MEANING.join())
99       #show_ids(KanjiList.instance.joyo)
100       #show_ids(KanjiList.instance.awase(0))
101       #show_ids(open("0208-shell.txt").read)
102       #p "&U+2ff2;".de_er
103       #p "休".decompose.to_er
104       eval_print_loop
105     end
106     def show_ids(str)
107       str.de_er.to_a.sort.uniq.each {|ch|
108         char = ch.char
109         ids = char.decompose_all
110         print "#{char}  #{ids.map_ucs}\n" #できるだけucsに正規化するべし。
111       }
112     end
113     def eval_print_loop
114       while true
115         line = STDIN.gets
116         line.chomp!
117         exit if line.nil? || line =~ /end/
118         print "#{line.decompose}        #{line.decompose.to_er}\n"
119         print "#{line.decompose_all}    #{line.decompose_all.to_er}\n"
120       end
121     end
122
123     def define_all
124       define_ids_element
125       define_ids_meaning
126       define_ids_represent
127       define_ids_link
128     end
129     def define_ids_element
130       IDS_ELEMENT.each_char {|ch|
131         char = ch.char
132         char.ids_element = ch
133       }
134     end
135     def define_ids_meaning
136       IDS_MEANING.each {|line|
137         next if line.nil? || line == "" || line =~ /^#/
138         ch, ids = line.split
139         char = ch.de_er.char
140         char.ids_meaning = ids.de_er
141         print "#{ch}    #{ids}\n"
142       }
143     end
144     def define_ids_represent
145       IDS_REPRESENT.each {|line|
146         next if line.nil? || line == "" || line =~ /^#/
147         ch, rep = line.split
148         char = ch.de_er.char
149         char.ids_represent = rep.de_er
150         print "#{char.map_ucs}  #{rep}\n"
151       }
152     end
153     def define_ids_link
154       IDS_LINK.each {|line|
155         next if line.nil? || line == "" || line =~ /^#/
156         ch, rep = line.split
157         char = ch.de_er.char
158         char.ids_link = rep.de_er
159         print "#{char.map_ucs}  #{rep}\n"
160       }
161     end
162
163   end
164 end
165
166 if $0 == __FILE__
167   $LOAD_PATH << '../../src'
168   require 'chise'
169   include CHISE
170   ide = CHISE::IDS_Definition.instance
171 #  ide.go
172   ide.define_all
173 end
174
175
176 #----------------------------------------------------------------------end.