static bool on_libhangul_transition (HangulInputContext *ic, ucschar c, const ucschar *preedit, void *data) { g_debug (G_STRLOC ": %s", G_STRFUNC); if ((hangul_is_choseong (c) && (hangul_ic_has_jungseong (ic) || hangul_ic_has_jongseong (ic))) || (hangul_is_jungseong (c) && hangul_ic_has_jongseong (ic))) return false; return true; }
static bool ibus_hangul_engine_on_transition (HangulInputContext *hic, ucschar c, const ucschar *preedit, void *data) { if (!auto_reorder) { if (hangul_is_choseong (c)) { if (hangul_ic_has_jungseong (hic) || hangul_ic_has_jongseong (hic)) return false; } if (hangul_is_jungseong (c)) { if (hangul_ic_has_jongseong (hic)) return false; } } return true; }
static bool hangul_ic_process_jaso(HangulInputContext *hic, ucschar ch) { if (hangul_is_choseong(ch)) { if (hic->buffer.choseong == 0) { if (hic->option_auto_reorder) { if (!hangul_ic_push(hic, ch)) { if (!hangul_ic_push(hic, ch)) { return false; } } } else { if (hangul_ic_has_jungseong(hic) || hangul_ic_has_jongseong(hic)) { hangul_ic_save_commit_string(hic); if (!hangul_ic_push(hic, ch)) { return false; } } else { if (!hangul_ic_push(hic, ch)) { if (!hangul_ic_push(hic, ch)) { return false; } } } } } else { ucschar choseong = 0; if (hangul_is_choseong(hangul_ic_peek(hic))) { choseong = hangul_ic_combine(hic, hic->buffer.choseong, ch); } if (choseong) { if (!hangul_ic_push(hic, choseong)) { if (!hangul_ic_push(hic, choseong)) { return false; } } } else { hangul_ic_save_commit_string(hic); if (!hangul_ic_push(hic, ch)) { return false; } } } } else if (hangul_is_jungseong(ch)) { if (hic->buffer.jungseong == 0) { if (hic->option_auto_reorder) { if (!hangul_ic_push(hic, ch)) { if (!hangul_ic_push(hic, ch)) { return false; } } } else { if (hangul_ic_has_jongseong(hic)) { hangul_ic_save_commit_string(hic); if (!hangul_ic_push(hic, ch)) { return false; } } else { if (!hangul_ic_push(hic, ch)) { if (!hangul_ic_push(hic, ch)) { return false; } } } } } else { ucschar jungseong = 0; if (hangul_is_jungseong(hangul_ic_peek(hic))) { jungseong = hangul_ic_combine(hic, hic->buffer.jungseong, ch); } if (jungseong) { if (!hangul_ic_push(hic, jungseong)) { if (!hangul_ic_push(hic, jungseong)) { return false; } } } else { hangul_ic_save_commit_string(hic); if (!hangul_ic_push(hic, ch)) { if (!hangul_ic_push(hic, ch)) { return false; } } } } } else if (hangul_is_jongseong(ch)) { if (hic->buffer.jongseong == 0) { if (!hangul_ic_push(hic, ch)) { if (!hangul_ic_push(hic, ch)) { return false; } } } else { ucschar jongseong = 0; if (hangul_is_jongseong(hangul_ic_peek(hic))) { jongseong = hangul_ic_combine(hic, hic->buffer.jongseong, ch); } if (jongseong) { if (!hangul_ic_push(hic, jongseong)) { if (!hangul_ic_push(hic, jongseong)) { return false; } } } else { hangul_ic_save_commit_string(hic); if (!hangul_ic_push(hic, ch)) { if (!hangul_ic_push(hic, ch)) { return false; } } } } } else if (ch > 0) { hangul_ic_save_commit_string(hic); hangul_ic_append_commit_string(hic, ch); } else { hangul_ic_save_commit_string(hic); return false; } hangul_ic_save_preedit_string(hic); return true; }