summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfujiwarat <takao.fujiwara1@gmail.com>2010-02-12 10:42:18 +0900
committerfujiwarat <takao.fujiwara1@gmail.com>2010-02-12 10:42:18 +0900
commit866a2668eb3d0f5fb237ca1b32f745b35935d968 (patch)
treeec61ac28286e1b5381f3ec52fb7a525de49a4238
parentafde33eb8a14d7922e475a967d66ba230c519af0 (diff)
downloadibus-anthy-866a2668eb3d0f5fb237ca1b32f745b35935d968.tar.gz
Fix Shift + char with CapsLock ON in romaji mode.
-rw-r--r--engine/engine.py5
-rw-r--r--engine/jastring.py17
-rw-r--r--engine/romaji.py15
3 files changed, 28 insertions, 9 deletions
diff --git a/engine/engine.py b/engine/engine.py
index 023d4d9..0ceaa11 100644
--- a/engine/engine.py
+++ b/engine/engine.py
@@ -958,7 +958,7 @@ class Engine(ibus.EngineBase):
self.__invalidate()
return True
- def __on_key_common(self, keyval):
+ def __on_key_common(self, keyval, state=0):
if self.__input_mode == INPUT_MODE_LATIN:
# Input Latin chars
@@ -983,6 +983,7 @@ class Engine(ibus.EngineBase):
elif self.__convert_mode != CONV_MODE_OFF:
self.__commit_string(self.__convert_chars)
+ self.__preedit_ja_string.set_shift((state & modifier.SHIFT_MASK) != 0)
self.__preedit_ja_string.insert(unichr(keyval))
self.__invalidate()
return True
@@ -1239,7 +1240,7 @@ class Engine(ibus.EngineBase):
keyval = keysyms.asciitilde
elif keyval == keysyms.backslash and keycode in [132-8, 133-8]:
keyval = keysyms.yen
- ret = self.__on_key_common(keyval)
+ ret = self.__on_key_common(keyval, state)
if (unichr(keyval) in u',.' and
self.__prefs.get_value('common', 'behavior_on_period')):
return self.__cmd_convert(keyval, state)
diff --git a/engine/jastring.py b/engine/jastring.py
index 306691e..0ec4df6 100644
--- a/engine/jastring.py
+++ b/engine/jastring.py
@@ -55,11 +55,15 @@ class JaString:
def reset(self):
self.__cursor = 0
self.__segments = list()
+ self.__shift = False
def set_mode(self, mode):
self.__mode = mode
self.reset()
+ def set_shift(self, shift):
+ self.__shift = shift
+
def insert(self, c):
segment_before = None
segment_after = None
@@ -70,14 +74,21 @@ class JaString:
if self.__cursor < len(self.__segments):
segment_after = self.__segments[self.__cursor]
if segment_before and not segment_before.is_finished():
- new_segments = segment_before.append(c)
+ if type(segment_before) == romaji.RomajiSegment:
+ new_segments = segment_before.append(c, self.__shift)
+ else:
+ new_segments = segment_before.append(c)
elif segment_after and not segment_after.is_finished():
- new_segments = segment_after.prepend(c)
+ if type(segment_after) == romaji.RomajiSegment:
+ new_segments = segment_after.prepend(c, self.__shift)
+ else:
+ new_segments = segment_after.prepend(c)
else:
if c != u"\0" and c != u"":
if self.__mode == TYPING_MODE_ROMAJI:
- new_segments = [romaji.RomajiSegment(c)]
+ new_segments = [romaji.RomajiSegment(c, u"", self.__shift)]
elif self.__mode == TYPING_MODE_KANA:
+ # kana mode doesn't have shift latin in MS.
new_segments = [kana.KanaSegment(c)]
elif self.__mode == TYPING_MODE_THUMB_SHIFT:
new_segments = [thumb.ThumbShiftSegment(c)]
diff --git a/engine/romaji.py b/engine/romaji.py
index 12c6656..3deb8f9 100644
--- a/engine/romaji.py
+++ b/engine/romaji.py
@@ -28,8 +28,8 @@ def romaji_correction_rule_get(k, d):
return (u'ん', k[1:2]) if k[0:1] == u'n' and not k[1:2] in u"aiueony'" else d
class RomajiSegment(segment.Segment):
- def __init__(self, enchars=u"", jachars=u""):
- if not jachars:
+ def __init__(self, enchars=u"", jachars=u"", shift=False):
+ if not jachars and not shift:
jachars = romaji_typing_rule.get(enchars, None)
if jachars == None:
jachars = symbol_rule.get(enchars, u"")
@@ -38,13 +38,16 @@ class RomajiSegment(segment.Segment):
def is_finished(self):
return self._jachars != u""
- def append(self, enchar):
+ def append(self, enchar, shift=False):
if self.is_finished():
if enchar == u"" and enchar == u"\0":
return []
return [RomajiSegment(enchar)]
text = self._enchars + enchar
+ if shift:
+ self._enchars = text
+ return []
jachars = romaji_typing_rule.get(text, None)
if jachars == None:
@@ -98,7 +101,7 @@ class RomajiSegment(segment.Segment):
self._enchars = text
return []
- def prepend(self, enchar):
+ def prepend(self, enchar, shift=False):
if enchar == u"" or enchar == u"\0":
return []
@@ -106,6 +109,10 @@ class RomajiSegment(segment.Segment):
return [RomajiSegment(enchar)]
text = enchar + self._enchars
+ if shift:
+ self._enchars = text
+ return []
+
jachars = romaji_typing_rule.get(text, None)
if jachars == None:
jachars = symbol_rule.get(text, None)