return FALSE;
return TRUE;
im_hangul2_automata(GtkIMContextHangul *hcontext,		    GdkEventKey *key){  guint keyval, state;  gunichar ch;  if (pref_use_dvorak) {    keyval = im_hangul_dvorak_to_qwerty(key->keyval);    state = key->state;  } else {    keyval = key->keyval;    state = key->state;  }  if (hcontext->state == 0) {    ch = im_hangul2_choseong(keyval, state);    if (im_hangul_is_choseong(ch)) {      hcontext->state = 1;      hcontext->choseong[0] = ch;      goto done;    }    ch = im_hangul2_jungseong(keyval, state);    if (im_hangul_is_jungseong(ch)) {      hcontext->state = 2;      hcontext->choseong[0] = 0;      hcontext->jungseong[0] = ch;      goto done;    }    if (im_hangul_is_backspace(key))      return FALSE;  } else if (hcontext->state == 1) {    ch = im_hangul2_choseong(keyval, state);    if (im_hangul_is_choseong(ch)) {      im_hangul_commit(hcontext);      hcontext->state = 1;      hcontext->choseong[0] = ch;      goto done;    }    ch = im_hangul2_jungseong(keyval, state);    if (im_hangul_is_jungseong(ch)) {      hcontext->jungseong[0] = ch;      hcontext->state = 3;      goto done;    }    if (im_hangul_is_backspace(key)) {      hcontext->choseong[0] = 0;      hcontext->state = 0;      goto done;    }  } else if (hcontext->state == 2) {    ch = im_hangul2_choseong(keyval, state);    if (im_hangul_is_choseong(ch)) {      if (pref_enable_inverse_sequence) {        hcontext->state = 3;      } else {        im_hangul_commit(hcontext);        hcontext->state = 1;      }      hcontext->choseong[0] = ch;      goto done;    }    ch = im_hangul2_comp_jungseong(hcontext->jungseong[0], keyval, state);    if (im_hangul_is_jungseong(ch)) {      hcontext->jungseong[0] = ch;      hcontext->state = 4;      goto done;    }    ch = im_hangul2_jungseong(keyval, state);    if (im_hangul_is_jungseong(ch)) {      im_hangul_commit(hcontext);      hcontext->jungseong[0] = ch;      hcontext->state = 2;      goto done;    }    if (im_hangul_is_backspace(key)) {      hcontext->jungseong[0] = 0;      hcontext->state = 0;      goto done;    }  } else if (hcontext->state == 3) {    ch = im_hangul2_jongseong(keyval, state);    if (im_hangul_is_jongseong(ch)) {      hcontext->jongseong[0] = ch;      hcontext->state = 5;      goto done;    }    ch = im_hangul2_choseong(keyval, state);    if (im_hangul_is_choseong(ch)) {      im_hangul_commit(hcontext);      hcontext->choseong[0] = ch;      hcontext->state = 1;      goto done;    }    ch = im_hangul2_comp_jungseong(hcontext->jungseong[0], keyval, state);    if (im_hangul_is_jungseong(ch)) {      hcontext->jungseong[0] = ch;      hcontext->state = 6;      goto done;    }    ch = im_hangul2_jungseong(keyval, state);    if (im_hangul_is_jungseong(ch)) {      im_hangul_commit(hcontext);      hcontext->jungseong[0] = ch;      hcontext->state = 2;      goto done;    }    if (im_hangul_is_backspace(key)) {      hcontext->jungseong[0] = 0;      hcontext->state = 1;      goto done;    }  } else if (hcontext->state == 4) {    ch = im_hangul2_choseong(keyval, state);    if (im_hangul_is_choseong(ch)) {      if (pref_enable_inverse_sequence) {        hcontext->state = 3;      } else {        im_hangul_commit(hcontext);        hcontext->state = 1;      }      hcontext->choseong[0] = ch;      goto done;    }    ch = im_hangul2_jungseong(keyval, state);    if (im_hangul_is_jungseong(ch)) {      im_hangul_commit(hcontext);      hcontext->jungseong[0] = ch;      hcontext->state = 2;      goto done;    }    if (im_hangul_is_backspace(key)) {      hcontext->jungseong[0] = 		im_hangul_compjungseong_to_single(hcontext->jungseong[0]);      hcontext->state = 2;      goto done;    }  } else if (hcontext->state == 5) {    ch = im_hangul2_comp_jongseong(hcontext->jongseong[0], keyval, state);    if (im_hangul_is_jongseong(ch)) {      hcontext->jongseong[0] = ch;      hcontext->state = 7;      goto done;    }    ch = im_hangul2_choseong(keyval, state);    if (im_hangul_is_choseong(ch)) {      im_hangul_commit(hcontext);      hcontext->choseong[0] = ch;      hcontext->state = 1;      goto done;    }    ch = im_hangul2_jungseong(keyval, state);    if (im_hangul_is_jungseong(ch)) {      gunichar choseong = 		im_hangul2_jongseong_to_choseong(hcontext->jongseong[0]);      hcontext->jongseong[0] = 0;      im_hangul_commit(hcontext);      hcontext->choseong[0] = choseong;      hcontext->jungseong[0] = ch;      hcontext->state = 3;      goto done;    }    if (im_hangul_is_backspace(key)) {      hcontext->jongseong[0] = 0;      hcontext->state = 3;      goto done;    }  } else if (hcontext->state == 6) {    ch = im_hangul2_jongseong(keyval, state);    if (im_hangul_is_jongseong(ch)) {      hcontext->jongseong[0] = ch;      hcontext->state = 8;      goto done;    }    ch = im_hangul2_choseong(keyval, state);    if (im_hangul_is_choseong(ch)) {      im_hangul_commit(hcontext);      hcontext->choseong[0] = ch;      hcontext->state = 1;      goto done;    }    ch = im_hangul2_jungseong(keyval, state);    if (im_hangul_is_jungseong(ch)) {      im_hangul_commit(hcontext);      hcontext->jungseong[0] = ch;      hcontext->state = 2;      goto done;    }    if (im_hangul_is_backspace(key)) {      hcontext->jungseong[0] =        im_hangul_compjungseong_to_single(hcontext->jungseong[0]);      hcontext->state = 3;      goto done;    }  } else if (hcontext->state == 7) {    ch = im_hangul2_choseong(keyval, state);    if (im_hangul_is_choseong(ch)) {      im_hangul_commit(hcontext);      hcontext->choseong[0] = ch;      hcontext->state = 1;      goto done;    }    ch = im_hangul2_jungseong(keyval, state);    if (im_hangul_is_jungseong(ch)) {      /* complex final consonant       * to single final consonant and initial consonant */      gunichar choseong = 		im_hangul2_jongseong_to_choseong(hcontext->jongseong[0]);      hcontext->jongseong[0] = 		im_hangul_compjongseong_to_single(hcontext->jongseong[0]);      im_hangul_commit(hcontext);      hcontext->choseong[0] = choseong;      hcontext->jungseong[0] = ch;      hcontext->state = 3;      goto done;    }    if (im_hangul_is_backspace(key)) {      hcontext->jongseong[0] = 		im_hangul_compjongseong_to_single(hcontext->jongseong[0]);      hcontext->state = 5;      goto done;    }  } else if (hcontext->state == 8) {    ch = im_hangul2_comp_jongseong(hcontext->jongseong[0], keyval, state);    if (im_hangul_is_jongseong(ch)) {      hcontext->jongseong[0] = ch;      hcontext->state = 9;      goto done;    }    ch = im_hangul2_choseong(keyval, state);    if (im_hangul_is_choseong(ch)) {      im_hangul_commit(hcontext);      hcontext->choseong[0] = ch;      hcontext->state = 1;      goto done;    }    ch = im_hangul2_jungseong(keyval, state);    if (im_hangul_is_jungseong(ch)) {      gunichar choseong = 		im_hangul2_jongseong_to_choseong(hcontext->jongseong[0]);      hcontext->jongseong[0] = 0;      im_hangul_commit(hcontext);      hcontext->state = 3;      hcontext->choseong[0] = choseong;      hcontext->jungseong[0] = ch;      goto done;    }    if (im_hangul_is_backspace(key)) {      hcontext->state = 6;      hcontext->jongseong[0] = 0;      goto done;    }  } else if (hcontext->state == 9) {    ch = im_hangul2_choseong(keyval, state);    if (im_hangul_is_choseong(ch)) {      im_hangul_commit(hcontext);      hcontext->state = 1;      hcontext->choseong[0] = ch;      goto done;    }    ch = im_hangul2_jungseong(keyval, state);    if (im_hangul_is_jungseong(ch)) {      /* complex final consonant       * to single final consonant and initial consonant */      gunichar choseong = 		im_hangul2_jongseong_to_choseong(hcontext->jongseong[0]);      hcontext->jongseong[0] =       		im_hangul_compjongseong_to_single(hcontext->jongseong[0]);      im_hangul_commit(hcontext);      hcontext->state = 3;      hcontext->choseong[0] = choseong;      hcontext->jungseong[0] = ch;      goto done;    }    if (im_hangul_is_backspace(key)) {      hcontext->jongseong[0] =       		im_hangul_compjongseong_to_single(hcontext->jongseong[0]);      hcontext->state = 8;      goto done;    }  }  if (im_hangul_is_trigger(key)) {    /* hangul mode change to englishmode */    if (im_hangul_commit(hcontext))      g_signal_emit_by_name (hcontext, "preedit_changed");    im_hangul_mode_direct(hcontext);    return FALSE;  }  if (hcontext->state != 0) {    if (im_hangul_commit(hcontext))      g_signal_emit_by_name (hcontext, "preedit_changed");    hcontext->state = 0;  }  return im_hangul_process_nonhangul(hcontext, key); /* english */done:  g_signal_emit_by_name (hcontext, "preedit_changed");  return TRUE;}