i
[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     def show_ids(str)
102       str.de_er.to_a.sort.uniq.each {|ch|
103         char = ch.char
104         ids = char.decompose_all
105         print "#{char}  #{ids.map_ucs}\n" #できるだけucsに正規化するべし。
106       }
107     end
108     def eval_print_loop
109       while true
110         line = STDIN.gets
111         line.chomp!
112         exit if line.nil? || line =~ /end/
113         print "#{line.decompose}        #{line.decompose.to_er}\n"
114         print "#{line.decompose_all}    #{line.decompose_all.to_er}\n"
115       end
116     end
117
118     def define_all
119       define_ids_element
120       define_ids_meaning
121       define_ids_represent
122       define_ids_link
123     end
124     def define_ids_element
125       IDS_ELEMENT.each_char {|ch|
126         char = ch.char
127         char.ids_element = ch
128       }
129     end
130     def define_ids_meaning
131       IDS_MEANING.each {|line|
132         next if line.nil? || line == "" || line =~ /^#/
133         ch, ids = line.split
134         char = ch.de_er.char
135         char.ids_meaning = ids.de_er
136         print "#{ch}    #{ids}\n"
137       }
138     end
139     def define_ids_represent
140       IDS_REPRESENT.each {|line|
141         next if line.nil? || line == "" || line =~ /^#/
142         ch, rep = line.split
143         char = ch.de_er.char
144         char.ids_represent = rep.de_er
145         print "#{char.map_ucs}  #{rep}\n"
146       }
147     end
148     def define_ids_link
149       IDS_LINK.each {|line|
150         next if line.nil? || line == "" || line =~ /^#/
151         ch, rep = line.split
152         char = ch.de_er.char
153         char.ids_link = rep.de_er
154         print "#{char.map_ucs}  #{rep}\n"
155       }
156     end
157
158   end
159 end
160
161 if $0 == __FILE__
162   $LOAD_PATH << "../../src"
163   require "chise"
164   include CHISE
165   ide = CHISE::IDS_Definition.instance
166 #  ide.go
167   ide.define_all
168 end