summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2008-08-09 14:15:38 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2008-08-09 14:15:38 +0800
commit04a71600d8310a4ed8fe1bea7d95be46a05b1bfe (patch)
tree5be897911826a9a78951fa7cf74139e181275d5e
parent04c9b7f8fe89a43f1c576b2557165e60559679c1 (diff)
downloadibus-anthy-04a71600d8310a4ed8fe1bea7d95be46a05b1bfe.tar.gz
Implement Latin and Wide Latin input mode.
-rw-r--r--engine/engine.py53
1 files changed, 42 insertions, 11 deletions
diff --git a/engine/engine.py b/engine/engine.py
index d6625cb..91db235 100644
--- a/engine/engine.py
+++ b/engine/engine.py
@@ -186,8 +186,7 @@ class Engine(ibus.EngineBase):
elif keyval == keysyms.space:
return self.__on_key_space()
elif keyval >= keysyms._1 and keyval <= keysyms._9:
- index = keyval - keysyms._1
- return self.__on_key_number(index)
+ return self.__on_key_number(keyval)
elif keyval == keysyms.Page_Up or keyval == keysyms.KP_Page_Up:
return self.__on_key_page_up()
elif keyval == keysyms.Page_Down or keyval == keysyms.KP_Page_Down:
@@ -219,26 +218,36 @@ class Engine(ibus.EngineBase):
prop.set_label(_(u"あ"))
self.__input_mode = MODE_HIRAGANA
self.update_property(prop)
+ self.__reset()
+ self.__invalidate()
elif prop_name == "InputMode.Katakana":
prop = self.__prop_dict["InputMode"]
prop.set_label(_(u"ア"))
self.__input_mode = MODE_KATAKANA
self.update_property(prop)
+ self.__reset()
+ self.__invalidate()
elif prop_name == "InputMode.HalfWidthKatakana":
prop = self.__prop_dict["InputMode"]
prop.set_label(_(u"ア"))
self.__input_mode = MODE_HALF_WIDTH_KATAKANA
self.update_property(prop)
+ self.__reset()
+ self.__invalidate()
elif prop_name == "InputMode.Latin":
prop = self.__prop_dict["InputMode"]
self.__input_mode = MODE_LATIN
prop.set_label(_(u"A"))
self.update_property(prop)
+ self.__reset()
+ self.__invalidate()
elif prop_name == "InputMode.WideLatin":
prop = self.__prop_dict["InputMode"]
prop.set_label(_(u"A"))
self.__input_mode = MODE_WIDE_LATIN
self.update_property(prop)
+ self.__reset()
+ self.__invalidate()
def focus_in(self):
self.register_properties(self.__prop_list)
@@ -304,12 +313,7 @@ class Engine(ibus.EngineBase):
self.__cursor_pos += len(text)
def __update_input_chars(self):
- if self.__input_mode == MODE_LATIN:
- pass
- elif self.__input_mode == MODE_WIDE_LATIN:
- pass
- else:
- self.__translate_to_ja()
+ self.__translate_to_ja()
attrs = ibus.AttrList()
attrs.append(ibus.AttributeUnderline(ibus.ATTR_UNDERLINE_SINGLE, 0, len(self.__input_chars.encode("utf-8"))))
@@ -462,10 +466,21 @@ class Engine(ibus.EngineBase):
return True
- def __on_key_number(self, index):
+ def __on_key_number(self, keyval):
+ if self.__input_mode == MODE_LATIN:
+ char = unichr(keyval)
+ self.__commit_string(char)
+ return True
+ elif self.__input_mode == MODE_WIDE_LATIN:
+ char = ibus.unichar_half_to_full(unichr(keyval))
+ self.__commit_string(char)
+ return True
+
if not self.__input_chars:
- return False
+ self.__commit_string(unichr(keyval))
+ return True
+ index = keyval - keysyms._1
if self.__convert_begined and self.__lookup_table_visible:
candidates = self.__lookup_table.get_canidates_in_current_page()
if self.__lookup_table.set_cursor_pos_in_current_page(index):
@@ -479,12 +494,28 @@ class Engine(ibus.EngineBase):
def __on_key_common(self, keyval):
+ if self.__input_mode == MODE_LATIN:
+ char = unichr(keyval)
+ self.__commit_string(char)
+ return True
+ elif self.__input_mode == MODE_WIDE_LATIN:
+ char = unichr(keyval)
+ if char in symbols_set:
+ char = romaji_typing_rule[char]
+ else:
+ char = ibus.unichar_half_to_full(char)
+ self.__commit_string(char)
+ return True
+
if self.__convert_begined:
i = 0
for seg_index, text in self.__segments:
self.__context.commit_segment(i, seg_index)
self.__commit_string(self.__convert_chars)
- self.__input_chars += unichr(keyval)
+ self.__input_chars = \
+ self.__input_chars[:self.__cursor_pos] + \
+ unichr(keyval) + \
+ self.__input_chars[self.__cursor_pos:]
self.__cursor_pos += 1
self.__invalidate()
return True