int currentCode;// 포인터 대체 // 버퍼 초기화 public void Clear() { m_nStatus = HAN_STATUS.HS_FIRST; completeText = ""; ingWord = null; m_completeWord = null; }
public void SetKeyString(char str) { m_nStatus = HAN_STATUS.HS_FIRST; if (ingWord != null) { completeText += ingWord; completeText += str; } else { completeText += str; } ingWord = null; }
void CombineIngWord(HAN_STATUS status) { switch (m_nStatus) { case HAN_STATUS.HS_FIRST: case HAN_STATUS.HS_FIRST_V: case HAN_STATUS.HS_FIRST_C: ingWord = new string(SOUND_TABLE[m_nPhonemez[0]], 1); break; case HAN_STATUS.HS_MIDDLE_STATE: case HAN_STATUS.HS_END: ingWord = CombineHangle(1); break; case HAN_STATUS.HS_END_STATE: case HAN_STATUS.HS_END_EXCEPTION: ingWord = CombineHangle(2); break; } }
public string SetKeyCode(int nKeyCode) { m_completeWord = null; // 특수키 입력 if (nKeyCode < 0) { m_nStatus = HAN_STATUS.HS_FIRST; if (nKeyCode == KEY_CODE_SPACE) // 띄어쓰기 { if (ingWord != null) { completeText += ingWord; completeText += " "; } else { completeText += " "; } ingWord = null; } else if (nKeyCode == KEY_CODE_ENTER) // 내려쓰기 { if (ingWord != null) { completeText += ingWord; } completeText += "\r\n"; ingWord = null; } else if (nKeyCode == KEY_CODE_BACKSPACE) // 지우기 { if (ingWord == null) // 쓰던 문자가 없을때 { if (completeText != null) { if (completeText.Length > 0) { int n = completeText.LastIndexOf("\n"); if (n == -1) { completeText = completeText.Remove(completeText.Length - 1); } else { completeText = completeText.Remove(completeText.Length - 2); } } } } else { m_nStatus = DownGradeIngWordStatus(ingWord); } } return(m_completeWord); } // 특수키가 아닌 경우 switch (m_nStatus) { case HAN_STATUS.HS_FIRST: // 초성 // 초성 m_nPhonemez[0] = nKeyCode; ingWord = new string(SOUND_TABLE[m_nPhonemez[0]], 1); m_nStatus = (nKeyCode > 18) ? HAN_STATUS.HS_FIRST_C : HAN_STATUS.HS_FIRST_V; break; case HAN_STATUS.HS_FIRST_C: // 모음 + 모음 // 모음 + 모음 m_completeWord = new string(SOUND_TABLE[m_nPhonemez[0]], 1); m_nPhonemez[0] = nKeyCode; if (nKeyCode > 18) // 모음 { } else // 자음 { m_nStatus = HAN_STATUS.HS_FIRST_V; } break; case HAN_STATUS.HS_FIRST_V: // 자음 + 자음 // 자음 + 자음 if (nKeyCode > 18) // 모음 { m_nPhonemez[1] = nKeyCode; m_nStatus = HAN_STATUS.HS_MIDDLE_STATE; } else // 자음 { // if(!MixInitial(nKeyCode)) { m_completeWord = new string(SOUND_TABLE[m_nPhonemez[0]], 1); m_nPhonemez[0] = nKeyCode; m_nStatus = HAN_STATUS.HS_FIRST_V; } } break; case HAN_STATUS.HS_MIDDLE_STATE: // 초성 + 모음 + 모음 // 초성 + 모음 + 모음 if (nKeyCode > 18) { if (MixVowel(m_nPhonemez[1], nKeyCode) == false) // 모음+모음 합성 안될때 { m_completeWord = CombineHangle(1); m_nPhonemez[0] = nKeyCode; m_nStatus = HAN_STATUS.HS_FIRST_C; } else { m_nPhonemez[1] = currentCode; // 중성 모음+모음 합성 m_nStatus = HAN_STATUS.HS_MIDDLE_STATE; } } else // 자음이 들어올때 { int jungCode = ToFinal(nKeyCode); if (jungCode > 0) { m_nPhonemez[2] = jungCode; m_nStatus = HAN_STATUS.HS_END_STATE; } else { m_completeWord = CombineHangle(1); m_nPhonemez[0] = nKeyCode; m_nStatus = HAN_STATUS.HS_FIRST; } } break; case HAN_STATUS.HS_END: // 초성 + 중성 + 종성 if (nKeyCode > 18) { m_completeWord = CombineHangle(1); m_nPhonemez[0] = nKeyCode; m_nStatus = HAN_STATUS.HS_FIRST; } else { int jungCode = ToFinal(nKeyCode); if (jungCode > 0) { m_nPhonemez[2] = jungCode; m_nStatus = HAN_STATUS.HS_END_STATE; } else { m_completeWord = CombineHangle(1); m_nPhonemez[0] = nKeyCode; m_nStatus = HAN_STATUS.HS_FIRST; } } break; case HAN_STATUS.HS_END_STATE: // 초성 + 중성 + 자음(종) + 자음(종) if (nKeyCode > 18) { m_completeWord = CombineHangle(1); m_nPhonemez[0] = ToInitial(m_nPhonemez[2]); m_nPhonemez[1] = nKeyCode; m_nStatus = HAN_STATUS.HS_MIDDLE_STATE; } else { int jungCode = ToFinal(nKeyCode); if (jungCode > 0) { m_nStatus = HAN_STATUS.HS_END_EXCEPTION; if (!MixFinal(jungCode)) // 종성 자음 합성 무시 { m_completeWord = CombineHangle(2); m_nPhonemez[0] = nKeyCode; m_nStatus = HAN_STATUS.HS_FIRST_V; } } else { m_completeWord = CombineHangle(2); m_nPhonemez[0] = nKeyCode; m_nStatus = HAN_STATUS.HS_FIRST_V; } } break; case HAN_STATUS.HS_END_EXCEPTION: // 초성 + 중성 + 종성(곁자음) if (nKeyCode > 18) { DecomposeConsonant(); m_nPhonemez[1] = nKeyCode; m_nStatus = HAN_STATUS.HS_MIDDLE_STATE; } else { int jungCode = ToFinal(nKeyCode); if (jungCode > 0) { m_nStatus = HAN_STATUS.HS_END_EXCEPTION; if (!MixFinal(jungCode)) { m_completeWord = CombineHangle(2); m_nPhonemez[0] = nKeyCode; m_nStatus = HAN_STATUS.HS_FIRST_V; } } else { m_completeWord = CombineHangle(2); m_nPhonemez[0] = nKeyCode; m_nStatus = HAN_STATUS.HS_FIRST_V; } } break; } // 현재 보이는 글자상태 CombineIngWord(m_nStatus); // 완성 문자열 만들기 if (m_completeWord != null) { completeText += m_completeWord; } return(m_completeWord); }