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