Mercurial > kinput2.yaz
comparison lib/ruby/kinput2_prime.rb @ 16:598fcbe482b5
imported patch 19_kinput2-v3.1-ruby.patch
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 08 Mar 2010 20:38:17 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
15:89750191b165 | 16:598fcbe482b5 |
---|---|
1 # $LOAD_PATH.push ('/home/komatsu/src/prime/prime-xim/lib/ruby/') | |
2 | |
3 # PRIME_USER_DIR = ENV['HOME'] + '/.prime' | |
4 # PRIME_PATH = '/home/komatsu/src/prime' | |
5 # $LOAD_PATH.push (PRIME_PATH) | |
6 | |
7 require 'kinput2' | |
8 require 'prime/prime' | |
9 | |
10 class KanjiConv < KanjiConvCore | |
11 attr_reader :input, :selection, :dialog | |
12 | |
13 def initialize | |
14 super | |
15 # @useprime = false | |
16 @useprime = true | |
17 | |
18 if @useprime then | |
19 @prime = Prime.new | |
20 end | |
21 @input = JTextEdit.new | |
22 | |
23 @selection = Selection.new (self) | |
24 @dialog = Dialog.new (self) | |
25 @mode = ModeMaster.new (self) | |
26 | |
27 @fundMode = FundMode.new(self) | |
28 @inputMode = InputMode.new(self) | |
29 @convMode = ConvMode.new(self) | |
30 @mode.set(:fund, @fundMode) | |
31 @mode.set(:input, @inputMode) | |
32 @mode.set(:conv, @convMode) | |
33 @mode.change(:fund) | |
34 | |
35 debug_message("Initialize Done.") | |
36 end | |
37 | |
38 def reset | |
39 super | |
40 @mode.change(:fund) | |
41 @input.reset | |
42 reset_cand_list | |
43 end | |
44 | |
45 def convert (word) | |
46 if @useprime then | |
47 cand_list = @prime.lookup_hybrid(word).values | |
48 else | |
49 cand_list = [word, "Taiyaki", "Hiroyuki", "Komatsu", "$B4A;z(B"] | |
50 end | |
51 return cand_list[0,5] | |
52 end | |
53 | |
54 ## inputEvent (keynum, keysym = nil, state = nil) | |
55 ## ReturnValue 1:Pass 0:Trap | |
56 def inputEvent (keynum, keysym = nil, state = nil) | |
57 debug_message("KeyNum: #{keynum}, KeySym: #{keysym}, Status: #{state}") | |
58 | |
59 if keynum == 0 then | |
60 return 1 | |
61 end | |
62 key = [keynum] | |
63 | |
64 if @mode.current then | |
65 trap = @mode.current.call (keynum, keysym, state) | |
66 return ((trap == true) ? 0 : 1) | |
67 end | |
68 return 1; | |
69 end | |
70 | |
71 def selection_fix (index) | |
72 fix (index) | |
73 @mode.change(:fund) | |
74 end | |
75 | |
76 def fix (fixed_arg) | |
77 ### Must NOT chage @mode here, because exceptional case can exist. | |
78 super (fixed_arg) | |
79 @input.reset | |
80 reset_cand_list | |
81 end | |
82 | |
83 def insert (keysym, modifiers) | |
84 debug_message("insert '#{keysym.chr}'") | |
85 @input.insert(keysym.chr) | |
86 set_cand_list (convert(@input.text), 0) | |
87 end | |
88 end | |
89 | |
90 class PrimeModeCore < ModeCore | |
91 def initialize (parent) | |
92 super | |
93 end | |
94 | |
95 private | |
96 def insert (keysym, modifiers) | |
97 @parent.insert(keysym, modifiers) | |
98 @parent.mode.change(:input) | |
99 return true | |
100 end | |
101 | |
102 def fix (keysym, modifiers) | |
103 fix_internal(keysym, modifiers) | |
104 @parent.mode.change(:fund) | |
105 return true | |
106 end | |
107 | |
108 def fix_and_insert (keysym, modifiers) | |
109 fix_internal (keysym, modifiers) | |
110 insert (keysym, modifiers) | |
111 return true | |
112 end | |
113 | |
114 def cursor_right (keysym, modifiers) | |
115 @parent.input.cursor_right | |
116 return true | |
117 end | |
118 def cursor_left (keysym, modifiers) | |
119 @parent.input.cursor_left | |
120 return true | |
121 end | |
122 def cursor_beginning (keysym, modifiers) | |
123 @parent.input.cursor_beginning | |
124 return true | |
125 end | |
126 def cursor_end (keysym, modifiers) | |
127 @parent.input.cursor_end | |
128 return true | |
129 end | |
130 | |
131 def selection_right (keysym, modifiers) | |
132 @parent.selection.right | |
133 return true | |
134 end | |
135 def selection_left (keysym, modifiers) | |
136 @parent.selection.left | |
137 return true | |
138 end | |
139 def selection_beginning (keysym, modifiers) | |
140 @parent.selection.line_beginning | |
141 return true | |
142 end | |
143 def selection_end (keysym, modifiers) | |
144 @parent.selection.line_end | |
145 return true | |
146 end | |
147 def selection_up (keysym, modifiers) | |
148 @parent.selection.up | |
149 return true | |
150 end | |
151 def selection_down (keysym, modifiers) | |
152 @parent.selection.down | |
153 return true | |
154 end | |
155 end | |
156 | |
157 class FundMode < PrimeModeCore | |
158 def initialize (parent) | |
159 super | |
160 @label = '[ $B$"(B ]' | |
161 @trap = false | |
162 end | |
163 | |
164 def initialize_keys | |
165 (33..126).each {|char| | |
166 @keymap.add(char, :insert) | |
167 } | |
168 end | |
169 | |
170 def on (prev_mode = nil) | |
171 @parent.selection.close | |
172 @parent.dialog.close | |
173 end | |
174 end | |
175 | |
176 class InputMode < PrimeModeCore | |
177 def initialize (parent) | |
178 super | |
179 @label = "[$BF~NO(B]" | |
180 end | |
181 | |
182 def initialize_keys | |
183 (33..126).each {|char| | |
184 @keymap.add(char, :insert) | |
185 } | |
186 (?A..?Z).each {|char| | |
187 @keymap.add(char, :fix_and_insert) | |
188 } | |
189 @keymap.add(:enter, :fix) | |
190 @keymap.add([?m, :ctrl], :fix) | |
191 @keymap.add(:space, :convert) | |
192 @keymap.add(:backspace, :backspace) | |
193 @keymap.add([?h, :ctrl], :backspace) | |
194 @keymap.add(:delete, :delete) | |
195 @keymap.add([?d, :ctrl], :delete) | |
196 @keymap.add(:left, :cursor_left) | |
197 @keymap.add([?b, :ctrl], :cursor_left) | |
198 @keymap.add(:right, :cursor_right) | |
199 @keymap.add([?f, :ctrl], :cursor_right) | |
200 @keymap.add([?a, :ctrl], :cursor_beginning) | |
201 @keymap.add([?e, :ctrl], :cursor_end) | |
202 @keymap.add([?g, :ctrl], :cancel) | |
203 @keymap.add(:esc, :cancel) | |
204 end | |
205 | |
206 def on (prev_mode = nil) | |
207 @parent.selection.close | |
208 @parent.dialog.open | |
209 end | |
210 | |
211 def entries | |
212 return @parent.input.segments | |
213 end | |
214 | |
215 private | |
216 def fix_internal (keysym, modifiers) | |
217 @parent.fix(@parent.input.text) | |
218 end | |
219 | |
220 def backspace (keysym, modifiers) | |
221 @parent.input.backspace | |
222 if @parent.input.text.length == 0 then | |
223 @parent.mode.change(:fund) | |
224 end | |
225 return true | |
226 end | |
227 | |
228 def delete (keysym, modifiers) | |
229 @parent.input.delete | |
230 if @parent.input.text.length == 0 then | |
231 @parent.mode.change(:fund) | |
232 end | |
233 return true | |
234 end | |
235 | |
236 def cancel (keysym, modifiers) | |
237 @parent.input.reset | |
238 @parent.mode.change(:fund) | |
239 return true | |
240 end | |
241 | |
242 def convert (keysym, modifiers) | |
243 if @parent.set_cand_list (@parent.convert(@parent.input.text)) then | |
244 @parent.set_cand_index(0) | |
245 @parent.mode.change(:conv) | |
246 end | |
247 return true | |
248 end | |
249 end | |
250 | |
251 class ConvMode < PrimeModeCore | |
252 def initialize (parent) | |
253 super | |
254 @label = "[$BJQ49(B]" | |
255 end | |
256 | |
257 def initialize_keys | |
258 (33..126).each {|char| | |
259 @keymap.add(char, :fix_and_insert) | |
260 } | |
261 @keymap.add(:enter, :fix) | |
262 @keymap.add([?m, :ctrl], :fix) | |
263 @keymap.add(:space, :convert) | |
264 # @keymap.add(:backspace, :backspace) | |
265 # @keymap.add([?h, :ctrl], :backspace) | |
266 # @keymap.add(:delete, :delete) | |
267 # @keymap.add([?d, :ctrl], :delete) | |
268 @keymap.add(:left, :selection_left) | |
269 @keymap.add([?b, :ctrl], :selection_left) | |
270 @keymap.add(:right, :selection_right) | |
271 @keymap.add([?f, :ctrl], :selection_right) | |
272 @keymap.add(:down, :selection_down) | |
273 @keymap.add([?n, :ctrl], :selection_down) | |
274 @keymap.add(:up, :selection_up) | |
275 @keymap.add([?p, :ctrl], :selection_up) | |
276 @keymap.add([?a, :ctrl], :selection_beginning) | |
277 @keymap.add([?e, :ctrl], :selection_end) | |
278 @keymap.add([?g, :ctrl], :cancel) | |
279 @keymap.add(:esc, :cancel) | |
280 end | |
281 | |
282 def on (prev_mode = nil) | |
283 @parent.selection.open | |
284 @parent.dialog.close | |
285 end | |
286 | |
287 def entries | |
288 return ['', @parent.cand_list[@parent.cand_index]] | |
289 end | |
290 | |
291 private | |
292 def fix_internal (keysym, modifiers) | |
293 @parent.fix(@parent.cand_list[@parent.cand_index]) | |
294 end | |
295 | |
296 def cancel (keysym, modifiers) | |
297 @parent.mode.change(:input) | |
298 return true | |
299 end | |
300 | |
301 def convert (keysym, modifiers) | |
302 return selection_right(keysym, modifiers) | |
303 end | |
304 end | |
305 | |
306 $kanjiConv = KanjiConv.new | |
307 #p local_variables |