Esempio n. 1
0
        int currentCode;// 포인터 대체

        // 버퍼 초기화
        public void Clear()
        {
            m_nStatus      = HAN_STATUS.HS_FIRST;
            completeText   = "";
            ingWord        = null;
            m_completeWord = null;
        }
Esempio n. 2
0
        public void SetKeyString(char str)
        {
            m_nStatus = HAN_STATUS.HS_FIRST;
            if (ingWord != null)
            {
                completeText += ingWord;
                completeText += str;
            }
            else
            {
                completeText += str;
            }

            ingWord = null;
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
        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);
        }