Skip to content

Commit

Permalink
Fixed commit_nth_segment
Browse files Browse the repository at this point in the history
  • Loading branch information
fujiwarat committed Oct 15, 2010
1 parent ddaf0a5 commit 609de13
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 3 deletions.
16 changes: 13 additions & 3 deletions engine/engine.py
Expand Up @@ -2051,6 +2051,16 @@ def __cmd_expand_segment(self, keyval, state):
self.__shrink_segment(1)
return True

def __move_cursor_char_length(self, length):
if self.__input_mode == INPUT_MODE_HIRAGANA:
self.__preedit_ja_string.move_cursor_hiragana_length(length)
elif self.__input_mode == INPUT_MODE_KATAKANA:
self.__preedit_ja_string.move_cursor_katakana_length(length)
elif self.__input_mode == INPUT_MODE_HALF_WIDTH_KATAKANA:
self.__preedit_ja_string.move_cursor_half_with_katakana_length(length)
else:
self.__preedit_ja_string.move_cursor(length)

def __commit_nth_segment(self, commit_index, keyval, state):

if commit_index >= len(self.__segments):
Expand All @@ -2066,10 +2076,10 @@ def __commit_nth_segment(self, commit_index, keyval, state):
for i in xrange(0, commit_index + 1):
buf = self.__context.get_segment(i, NTH_UNCONVERTED_CANDIDATE)
commit_length += len(unicode(buf, "utf-8"))
self.__preedit_ja_string.move_cursor(commit_length - cursor)
self.__move_cursor_char_length(commit_length - cursor)
for i in xrange(0, commit_length):
self.__preedit_ja_string.remove_before()
self.__preedit_ja_string.move_cursor(cursor - commit_length)
self.__move_cursor_char_length(cursor - commit_length)

del self.__segments[0:commit_index + 1]

Expand All @@ -2080,7 +2090,7 @@ def __commit_nth_segment(self, commit_index, keyval, state):
self.__cursor_pos -= (commit_index + 1)
else:
self.__cursor_pos = 0
(seg_index, text) = self.__segments[self.__cursor_pos]
text, cursor = self.__get_preedit()
self.__convert_chars = text
self.__context.set_string(text.encode ("utf-8"))

Expand Down
71 changes: 71 additions & 0 deletions engine/jastring.py
Expand Up @@ -132,6 +132,77 @@ def move_cursor(self, delta):
elif self.__cursor > len(self.__segments):
self.__cursor = len(self.__segments)

# hiragana segments are not char lengths.
# e.g. 'ya' is 1 segment and 1 char and 'kya' is 1 segment and 2 chars.
def move_cursor_hiragana_length(self, length):
delta = length
if delta < 0:
if self.__cursor >= len(self.__segments):
delta = delta + (self.__cursor - len(self.__segments) + 1)
self.__cursor = len(self.__segments) - 1
while delta < 0:
text = unicode(self.__segments[self.__cursor].to_hiragana())
if len(text) > -delta:
break
delta = delta + len(text)
self.__cursor = self.__cursor - 1
else:
if self.__cursor >= len(self.__segments):
self.__cursor = len(self.__segments)
return
while delta > 0:
text = unicode(self.__segments[self.__cursor].to_hiragana())
if len(text) > delta:
break
delta = delta - len(text)
self.__cursor = self.__cursor + 1

def move_cursor_katakana_length(self, length):
delta = length
if delta < 0:
if self.__cursor >= len(self.__segments):
delta = delta + (self.__cursor - len(self.__segments) + 1)
self.__cursor = len(self.__segments) - 1
while delta < 0:
text = unicode(self.__segments[self.__cursor].to_katanaka())
if len(text) > -delta:
break
delta = delta + len(text)
self.__cursor = self.__cursor - 1
else:
if self.__cursor >= len(self.__segments):
self.__cursor = len(self.__segments)
return
while delta > 0:
text = unicode(self.__segments[self.__cursor].to_katanaka())
if len(text) > delta:
break
delta = delta - len(text)
self.__cursor = self.__cursor + 1

def move_cursor_half_with_katakana_length(self, length):
delta = length
if delta < 0:
if self.__cursor >= len(self.__segments):
delta = delta + (self.__cursor - len(self.__segments) + 1)
self.__cursor = len(self.__segments) - 1
while delta < 0:
text = unicode(self.__segments[self.__cursor].to_half_width_katakana())
if len(text) > -delta:
break
delta = delta + len(text)
self.__cursor = self.__cursor - 1
else:
if self.__cursor >= len(self.__segments):
self.__cursor = len(self.__segments)
return
while delta > 0:
text = unicode(self.__segments[self.__cursor].to_half_width_katakana())
if len(text) > delta:
break
delta = delta - len(text)
self.__cursor = self.__cursor + 1

def _chk_text(self, s):
period = self._prefs.get_value('common', 'period_style')
symbol = self._prefs.get_value('common', 'symbol_style')
Expand Down

0 comments on commit 609de13

Please sign in to comment.