summaryrefslogtreecommitdiffstats
path: root/src/ZYZPinyinEditor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/ZYZPinyinEditor.cc')
-rw-r--r--src/ZYZPinyinEditor.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/ZYZPinyinEditor.cc b/src/ZYZPinyinEditor.cc
index aa81602..4d7abe0 100644
--- a/src/ZYZPinyinEditor.cc
+++ b/src/ZYZPinyinEditor.cc
@@ -88,7 +88,20 @@ 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 ());
+ bool valid = zhuyin_valid_zhuyin_keys (instance);
+ if (!valid) {
+ size_t valid_len = zhuyin_get_parsed_input_length (instance);
+
+ const gchar * str = NULL;
+ zhuyin_get_raw_user_input (instance, &str);
+ section = str;
+
+ /* hack here: usually only one zhuyin key will have problem,
+ so it is safe to just move the cursor. */
+ m_cursor -= len - valid_len;
+ }
zhuyin_guess_sentence (instance);
new_text += section;