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