summaryrefslogtreecommitdiffstats
path: root/src/ZYZPinyinEditor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/ZYZPinyinEditor.cc')
-rw-r--r--src/ZYZPinyinEditor.cc21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/ZYZPinyinEditor.cc b/src/ZYZPinyinEditor.cc
index a3683a8..30457f1 100644
--- a/src/ZYZPinyinEditor.cc
+++ b/src/ZYZPinyinEditor.cc
@@ -63,10 +63,12 @@ PinyinEditor::commit (void)
void
PinyinEditor::reset (void)
{
+ m_preedit_text = "";
+
PhoneticEditor::reset ();
}
-void
+guint
PinyinEditor::updateZhuyin (void)
{
const String & enhanced_text = m_text;
@@ -75,6 +77,7 @@ PinyinEditor::updateZhuyin (void)
size_t index = 0;
size_t start_pos = 0, end_pos = 0;
+ guint pos = 0;
while (end_pos != enhanced_text.size ()) {
section_t type = probe_section_quick (enhanced_text, start_pos);
@@ -84,9 +87,12 @@ PinyinEditor::updateZhuyin (void)
get_phonetic_section (enhanced_text, start_pos, end_pos, section);
zhuyin_instance_t * instance = m_instances[index];
- zhuyin_parse_more_full_pinyins (instance, section.c_str ());
+ size_t len = zhuyin_parse_more_full_pinyins
+ (instance, section.c_str ());
zhuyin_guess_sentence (instance);
+ pos = start_pos + len;
+
++index;
}
@@ -100,7 +106,7 @@ PinyinEditor::updateZhuyin (void)
start_pos = end_pos;
}
- return;
+ return pos;
}
void
@@ -181,6 +187,15 @@ PinyinEditor::insert (guint keyval, guint keycode, guint modifiers)
if (modifiers != 0 && m_text.empty ())
return FALSE;
+ /* the space key is not part of pinyin string. */
+ if (IBUS_space == keyval &&
+ m_cursor == get_enhanced_text_length (m_text)) {
+ commit ();
+ StaticText space (" ");
+ commitText (space);
+ return TRUE;
+ }
+
if (IS_PINYIN (keyval)) {
insert_phonetic (m_text, m_cursor++, keyval);