def _table_mode_process_key_event (self, key): '''Xingma Mode Process Key Event''' cond_letter_translate = lambda (c): \ self._convert_to_full_width (c) if self._full_width_letter [self._mode] else c cond_punct_translate = lambda (c): \ self._convert_to_full_width (c) if self._full_width_punct [self._mode] else c if key.mask & modifier.RELEASE_MASK: return True if self._editor.is_empty (): # we have not input anything if key.code <= 127 and ( unichr(key.code) not in self._valid_input_chars ) \ and (not key.mask & modifier.ALT_MASK + modifier.CONTROL_MASK): if key.code == keysyms.space: self.commit_string (cond_letter_translate (unichr (key.code))) return True if ascii.ispunct (key.code): self.commit_string (cond_punct_translate (unichr (key.code))) return True if ascii.isdigit (key.code): self.commit_string (cond_letter_translate (unichr (key.code))) return True elif key.code > 127 : return False if key.code == keysyms.Escape: self.reset () self._update_ui () return True elif key.code in (keysyms.Return, keysyms.KP_Enter): commit_string = self._editor.get_all_input_strings () self.commit_string (commit_string) return True elif key.code in (keysyms.Down, keysyms.KP_Down) : res = self._editor.arrow_down () self._update_ui () return res elif key.code in (keysyms.Up, keysyms.KP_Up): res = self._editor.arrow_up () self._update_ui () return res elif key.code in (keysyms.Left, keysyms.KP_Left) and key.mask & modifier.CONTROL_MASK: res = self._editor.control_arrow_left () self._update_ui () return res elif key.code in (keysyms.Right, keysyms.KP_Right) and key.mask & modifier.CONTROL_MASK: res = self._editor.control_arrow_right () self._update_ui () return res elif key.code in (keysyms.Left, keysyms.KP_Left): res = self._editor.arrow_left () self._update_ui () return res elif key.code in (keysyms.Right, keysyms.KP_Right): res = self._editor.arrow_right () self._update_ui () return res elif key.code == keysyms.BackSpace and key.mask & modifier.CONTROL_MASK: res = self._editor.control_backspace () self._update_ui () return res elif key.code == keysyms.BackSpace: res = self._editor.backspace () self._update_ui () return res elif key.code == keysyms.Delete and key.mask & modifier.CONTROL_MASK: res = self._editor.control_delete () self._update_ui () return res elif key.code == keysyms.Delete: res = self._editor.delete () self._update_ui () return res elif key.code >= keysyms._1 and key.code <= keysyms._9 and self._editor._candidates[0] and key.mask & modifier.CONTROL_MASK: res = self._editor.number (key.code - keysyms._1) self._update_ui () return res elif key.code >= keysyms._1 and key.code <= keysyms._9 and self._editor._candidates[0] and key.mask & modifier.ALT_MASK: res = self._editor.alt_number (key.code - keysyms._1) self._update_ui () return res elif key.code == keysyms.space: self._editor._first = 0 in_str = self._editor.get_all_input_strings() sp_res = self._editor.space () #return (KeyProcessResult,whethercommit,commitstring) if sp_res[0]: if self._editor.is_down_press: if sp_res[1]: self._editor.is_down_press = False self.commit_string (sp_res[1]+ " ") self.db.check_phrase (sp_res[1], in_str) else: self.commit_string (in_str+ " ") self.db.check_phrase (in_str, in_str) else: if sp_res[1].lower() == in_str.lower(): self.commit_string (sp_res[1]+ " ") self.db.check_phrase (sp_res[1], in_str) else: self.commit_string (in_str+ " ") self.db.check_phrase (in_str, in_str) else: if sp_res[1] == u' ': self.commit_string (cond_letter_translate (u" ")) self._refresh_properties () self._update_ui () return True # now we ignore all else hotkeys elif key.mask & modifier.CONTROL_MASK+modifier.ALT_MASK: return False elif key.mask & modifier.ALT_MASK: return False elif unichr(key.code) in self._valid_input_chars or \ (unichr(key.code) in u'abcdefghijklmnopqrstuvwxyz!@#$%' ): self._editor._first = 0 if self._auto_commit and ( len(self._editor._chars[0]) == self._ml \ or len (self._editor._chars[0]) in self.db.pkeylens ): # it is time to direct commit sp_res = self._editor.space () #return (whethercommit,commitstring) if sp_res[0]: self.commit_string (sp_res[1]) #self.add_string_len(sp_res[1]) self.db.check_phrase (sp_res[1],sp_res[2]) res = self._editor.add_input ( unichr(key.code) ) if not res: if ascii.ispunct (key.code): key_char = cond_punct_translate (unichr (key.code)) else: key_char = cond_letter_translate (unichr (key.code)) sp_res = self._editor.space () #return (KeyProcessResult,whethercommit,commitstring) if sp_res[0]: self.commit_string (sp_res[1] + key_char) #self.add_string_len(sp_res[1]) self.db.check_phrase (sp_res[1],sp_res[2]) return True else: self.commit_string ( key_char ) return True else: if self._auto_commit and self._editor.one_candidate () and \ (len(self._editor._chars[0]) == self._ml ): return True self._update_ui () return True elif key.code in self._page_down_keys \ and self._editor._candidates[0]: res = self._editor.page_down() self._update_lookup_table () return res elif key.code in self._page_up_keys \ and self._editor._candidates[0]: res = self._editor.page_up () self._update_lookup_table () return res elif key.code >= keysyms._1 and key.code <= keysyms._9 and self._editor._candidates[0]: input_keys = self._editor.get_all_input_strings () res = self._editor.number (key.code - keysyms._1) if res: commit_string = self._editor.get_preedit_strings () self.commit_string (commit_string+ " ") self._refresh_properties () self._update_ui () # modify freq info self.db.check_phrase (commit_string, input_keys) return True elif key.code <= 127: if not self._editor._candidates[0]: commit_string = self._editor.get_all_input_strings () else: self._editor.commit_to_preedit () commit_string = self._editor.get_preedit_strings () self._editor.clear () if ascii.ispunct (key.code): self.commit_string ( commit_string + cond_punct_translate (unichr (key.code))) else: self.commit_string ( commit_string + cond_letter_translate (unichr (key.code))) return True return False
def _table_mode_process_key_event(self, key): '''Xingma Mode Process Key Event''' cond_letter_translate = lambda (c): \ self._convert_to_full_width (c) if self._full_width_letter [self._mode] else c cond_punct_translate = lambda (c): \ self._convert_to_full_width (c) if self._full_width_punct [self._mode] else c if key.mask & modifier.RELEASE_MASK: return True if self._editor.is_empty(): # we have not input anything if key.code <= 127 and ( unichr(key.code) not in self._valid_input_chars ) \ and (not key.mask & modifier.ALT_MASK + modifier.CONTROL_MASK): if key.code == keysyms.space: self.commit_string(cond_letter_translate(unichr(key.code))) return True if ascii.ispunct(key.code): self.commit_string(cond_punct_translate(unichr(key.code))) return True if ascii.isdigit(key.code): self.commit_string(cond_letter_translate(unichr(key.code))) return True elif key.code > 127: return False if key.code == keysyms.Escape: self.reset() self._update_ui() return True elif key.code in (keysyms.Return, keysyms.KP_Enter): commit_string = self._editor.get_all_input_strings() self.commit_string(commit_string) return True elif key.code in (keysyms.Down, keysyms.KP_Down): res = self._editor.arrow_down() self._update_ui() return res elif key.code in (keysyms.Up, keysyms.KP_Up): res = self._editor.arrow_up() self._update_ui() return res elif key.code in (keysyms.Left, keysyms.KP_Left ) and key.mask & modifier.CONTROL_MASK: res = self._editor.control_arrow_left() self._update_ui() return res elif key.code in (keysyms.Right, keysyms.KP_Right ) and key.mask & modifier.CONTROL_MASK: res = self._editor.control_arrow_right() self._update_ui() return res elif key.code in (keysyms.Left, keysyms.KP_Left): res = self._editor.arrow_left() self._update_ui() return res elif key.code in (keysyms.Right, keysyms.KP_Right): res = self._editor.arrow_right() self._update_ui() return res elif key.code == keysyms.BackSpace and key.mask & modifier.CONTROL_MASK: res = self._editor.control_backspace() self._update_ui() return res elif key.code == keysyms.BackSpace: res = self._editor.backspace() self._update_ui() return res elif key.code == keysyms.Delete and key.mask & modifier.CONTROL_MASK: res = self._editor.control_delete() self._update_ui() return res elif key.code == keysyms.Delete: res = self._editor.delete() self._update_ui() return res elif key.code >= keysyms._1 and key.code <= keysyms._9 and self._editor._candidates[ 0] and key.mask & modifier.CONTROL_MASK: res = self._editor.number(key.code - keysyms._1) self._update_ui() return res elif key.code >= keysyms._1 and key.code <= keysyms._9 and self._editor._candidates[ 0] and key.mask & modifier.ALT_MASK: res = self._editor.alt_number(key.code - keysyms._1) self._update_ui() return res elif key.code == keysyms.space: self._editor._first = 0 in_str = self._editor.get_all_input_strings() sp_res = self._editor.space() #return (KeyProcessResult,whethercommit,commitstring) if sp_res[0]: if self._editor.is_down_press: if sp_res[1]: self._editor.is_down_press = False self.commit_string(sp_res[1] + " ") self.db.check_phrase(sp_res[1], in_str) else: self.commit_string(in_str + " ") self.db.check_phrase(in_str, in_str) else: if sp_res[1].lower() == in_str.lower(): self.commit_string(sp_res[1] + " ") self.db.check_phrase(sp_res[1], in_str) else: self.commit_string(in_str + " ") self.db.check_phrase(in_str, in_str) else: if sp_res[1] == u' ': self.commit_string(cond_letter_translate(u" ")) self._refresh_properties() self._update_ui() return True # now we ignore all else hotkeys elif key.mask & modifier.CONTROL_MASK + modifier.ALT_MASK: return False elif key.mask & modifier.ALT_MASK: return False elif unichr(key.code) in self._valid_input_chars or \ (unichr(key.code) in u'abcdefghijklmnopqrstuvwxyz!@#$%' ): self._editor._first = 0 if self._auto_commit and ( len(self._editor._chars[0]) == self._ml \ or len (self._editor._chars[0]) in self.db.pkeylens ): # it is time to direct commit sp_res = self._editor.space() #return (whethercommit,commitstring) if sp_res[0]: self.commit_string(sp_res[1]) #self.add_string_len(sp_res[1]) self.db.check_phrase(sp_res[1], sp_res[2]) res = self._editor.add_input(unichr(key.code)) if not res: if ascii.ispunct(key.code): key_char = cond_punct_translate(unichr(key.code)) else: key_char = cond_letter_translate(unichr(key.code)) sp_res = self._editor.space() #return (KeyProcessResult,whethercommit,commitstring) if sp_res[0]: self.commit_string(sp_res[1] + key_char) #self.add_string_len(sp_res[1]) self.db.check_phrase(sp_res[1], sp_res[2]) return True else: self.commit_string(key_char) return True else: if self._auto_commit and self._editor.one_candidate () and \ (len(self._editor._chars[0]) == self._ml ): return True self._update_ui() return True elif key.code in self._page_down_keys \ and self._editor._candidates[0]: res = self._editor.page_down() self._update_lookup_table() return res elif key.code in self._page_up_keys \ and self._editor._candidates[0]: res = self._editor.page_up() self._update_lookup_table() return res elif key.code >= keysyms._1 and key.code <= keysyms._9 and self._editor._candidates[ 0]: input_keys = self._editor.get_all_input_strings() res = self._editor.number(key.code - keysyms._1) if res: commit_string = self._editor.get_preedit_strings() self.commit_string(commit_string + " ") self._refresh_properties() self._update_ui() # modify freq info self.db.check_phrase(commit_string, input_keys) return True elif key.code <= 127: if not self._editor._candidates[0]: commit_string = self._editor.get_all_input_strings() else: self._editor.commit_to_preedit() commit_string = self._editor.get_preedit_strings() self._editor.clear() if ascii.ispunct(key.code): self.commit_string(commit_string + cond_punct_translate(unichr(key.code))) else: self.commit_string(commit_string + cond_letter_translate(unichr(key.code))) return True return False