summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2013-03-22 14:29:19 +0800
committerPeng Wu <alexepico@gmail.com>2013-03-22 14:29:19 +0800
commitd375107f4c4118ecc4f74cb11e5372a42e8554b5 (patch)
treef5a9015899355b38868742b4e46143aa910e4cf3 /src
parent9e7d2f34f4f21db9914b63bd837a7c7371148238 (diff)
downloadibus-libpinyin-d375107f4c4118ecc4f74cb11e5372a42e8554b5.tar.gz
ibus-libpinyin-d375107f4c4118ecc4f74cb11e5372a42e8554b5.tar.bz2
ibus-libpinyin-d375107f4c4118ecc4f74cb11e5372a42e8554b5.zip
update double pinyin editor
Diffstat (limited to 'src')
-rw-r--r--src/PYPDoublePinyinEditor.cc37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/PYPDoublePinyinEditor.cc b/src/PYPDoublePinyinEditor.cc
index b023313..b204fcd 100644
--- a/src/PYPDoublePinyinEditor.cc
+++ b/src/PYPDoublePinyinEditor.cc
@@ -127,31 +127,38 @@ LibPinyinDoublePinyinEditor::updateAuxiliaryText (void)
m_buffer.clear ();
- // guint pinyin_cursor = getPinyinCursor ();
- PinyinKeyVector & pinyin_keys = m_instance->m_pinyin_keys;
- PinyinKeyPosVector & pinyin_poses = m_instance->m_pinyin_key_rests;
- for (guint i = 0; i < pinyin_keys->len; ++i) {
- PinyinKey *key = &g_array_index (pinyin_keys, PinyinKey, i);
- PinyinKeyPos *pos = &g_array_index (pinyin_poses, PinyinKeyPos, i);
- guint cursor = pos->m_raw_begin;
+ guint len = 0;
+ pinyin_get_n_pinyin (m_instance, &len);
+
+ for (guint i = 0; i < len; ++i) {
+ PinyinKey *key = NULL;
+ pinyin_get_pinyin_key (m_instance, i, &key);
+
+ PinyinKeyPos *pos = NULL;
+ pinyin_get_pinyin_key_rest (m_instance, i, &pos);
+
+ guint16 cursor = 0, end = 0;
+ pinyin_get_pinyin_key_rest_positions (m_instance, pos, &cursor, &end);
gchar * str = NULL;
if (G_UNLIKELY (cursor == m_cursor)) { /* at word boundary. */
- pinyin_get_pinyin_string(m_instance, key, &str);
+ pinyin_get_pinyin_string (m_instance, key, &str);
m_buffer << '|' << str;
- g_free(str);
- } else if (G_LIKELY ( cursor < m_cursor &&
- m_cursor < pos->m_raw_end )) { /* in word */
+ g_free (str);
+ } else if (G_LIKELY (cursor < m_cursor &&
+ m_cursor < end)) { /* in word */
+ guint16 length = 0;
+ pinyin_get_pinyin_key_rest_length (m_instance, pos, &length);
+
/* raw text */
- String raw = m_text.substr (cursor,
- pos->length ());
+ String raw = m_text.substr (cursor, length);
guint offset = m_cursor - cursor;
m_buffer << ' ' << raw.substr (0, offset)
<< '|' << raw.substr (offset);
} else { /* other words */
- pinyin_get_pinyin_string(m_instance, key, &str);
+ pinyin_get_pinyin_string (m_instance, key, &str);
m_buffer << ' ' << str;
- g_free(str);
+ g_free (str);
}
}