Ejemplo n.º 1
0
    public SHangulString DoInsert(char ch한글)
    {
        // Case 1 - 빈 문자열이면 무조건 추가입력.
        // Case 2 - 입력 실패의 경우,
        //  Case 2.1 - 입력한 글자가 자음일 때 뒤에 추가로 입력.
        //  Case 2.2 - 입력한 글자가 모음일 때 전의 글자의 종성이 있으면 종성을 빼오고 모음 입력.
        //  Case 2.3 - 입력한 글자가 모음일 때 전의 글자의 종성이 없으면 뒤에 추가로 입력.
        // Case 3 - 입력에 성공한 경우, 마지막 글자를 추가한 글자로 갱신


        // Case 1 - 빈 문자열이면 무조건 추가입력.
        if (_listHangulChar.Count == 0)
        {
            _listHangulChar.AddLast(SHangulChar.Empty.DoInsert(ch한글));
            return(this);
        }

        SHangulChar chNewHangul = _chLastHangul.DoInsert(ch한글);

        if (chNewHangul.p_bHas한글아닌글자) // 한글이 아닌 경우에도 추가입력
        {
            _listHangulChar.AddLast(SHangulChar.Empty.DoInsert(ch한글));
            return(this);
        }

        bool bIsFail_InsertHangul = chNewHangul == _chLastHangul;

        if (bIsFail_InsertHangul)
        {
            if (SHangulChar.CheckIs자음(ch한글)) // Case 2.1 - 입력한 글자가 자음일 때 뒤에 추가로 입력.
            {
                _listHangulChar.AddLast(SHangulChar.Empty.DoInsert(ch한글));
            }
            else

            // Case 2.2 - 입력한 글자가 모음일 때 전의 글자의 종성이 있으면 종성을 빼오고 모음 입력.
            if (chNewHangul.p_bHas종성)
            {
                char ch직전글자의종성 = chNewHangul.p_ch종성;
                char ch직전글자의종성_왼쪽, ch직전글자의종성_오른쪽;
                if (SHangulChar.CheckIs이중종성(ch직전글자의종성, out ch직전글자의종성_왼쪽, out ch직전글자의종성_오른쪽))
                {
                    ch직전글자의종성 = ch직전글자의종성_오른쪽;
                }

                _listHangulChar.Last.Value = chNewHangul.DoRemove();
                _listHangulChar.AddLast(SHangulChar.ConvertToHangul(ch직전글자의종성).DoInsert(ch한글));
            }
            else // Case 2.3 - 입력한 글자가 모음일 때 전의 글자의 종성이 없으면 뒤에 추가로 입력.
            {
                _listHangulChar.AddLast(SHangulChar.Empty.DoInsert(ch한글));
            }
        }
        else // Case 3 - 입력에 성공한 경우, 마지막 글자를 추가한 글자로 갱신
        {
            _listHangulChar.Last.Value = chNewHangul;
        }

        return(this);
    }
Ejemplo n.º 2
0
 public SHangulString(string strText)
 {
     _listHangulChar = new LinkedList <SHangulChar>();
     for (int i = 0; i < strText.Length; i++)
     {
         _listHangulChar.AddLast(SHangulChar.ConvertToHangul(strText[i]));
     }
 }
        public void 한글컨버팅_테스트()
        {
            Assert.AreEqual("ㄱ", SHangulChar.ConvertToHangul("ㄱ").ToString());
            Assert.AreEqual("가", SHangulChar.ConvertToHangul("가").ToString());
            Assert.AreEqual("각", SHangulChar.ConvertToHangul("각").ToString());
            Assert.AreEqual("갂", SHangulChar.ConvertToHangul("갂").ToString());

            Assert.AreEqual("ㄲ", SHangulChar.ConvertToHangul("ㄲ").ToString());
            Assert.AreEqual("꺼", SHangulChar.ConvertToHangul("꺼").ToString());
            Assert.AreEqual("꺽", SHangulChar.ConvertToHangul("꺽").ToString());
            Assert.AreEqual("꺾", SHangulChar.ConvertToHangul("꺾").ToString());

            // 두글자 이상인 경우 첫글자만
            Assert.AreEqual("꺾", SHangulChar.ConvertToHangul("꺾ㄷ").ToString());
            Assert.AreEqual("ㄲ", SHangulChar.ConvertToHangul("ㄲㄲ").ToString());
        }
Ejemplo n.º 4
0
    public SHangulString DoRemove()
    {
        if (_listHangulChar.Count == 0)
        {
            return(this);
        }

        SHangulChar chNewHangul = _chLastHangul.DoRemove();

        if (chNewHangul == SHangulChar.Empty)
        {
            _listHangulChar.RemoveLast();
        }
        else
        {
            _listHangulChar.Last.Value = chNewHangul;
        }

        return(this);
    }
        public void 한글지우기_테스트()
        {
            string      strText = "궯";
            SHangulChar pHangul = SHangulChar.ConvertToHangul(strText);

            Assert.AreEqual("궬", pHangul.DoRemove().ToString());
            Assert.AreEqual("궤", pHangul.DoRemove().DoRemove().ToString());
            Assert.AreEqual("구", pHangul.DoRemove().DoRemove().DoRemove().ToString());
            Assert.AreEqual("ㄱ", pHangul.DoRemove().DoRemove().DoRemove().DoRemove().ToString());
            Assert.AreEqual("", pHangul.DoRemove().DoRemove().DoRemove().DoRemove().DoRemove().ToString());


            strText = "뛙";
            pHangul = SHangulChar.ConvertToHangul(strText);

            Assert.AreEqual("뛘", pHangul.DoRemove().ToString());
            Assert.AreEqual("뛔", pHangul.DoRemove().DoRemove().ToString());
            Assert.AreEqual("뚜", pHangul.DoRemove().DoRemove().DoRemove().ToString());
            Assert.AreEqual("ㄸ", pHangul.DoRemove().DoRemove().DoRemove().DoRemove().ToString());
            Assert.AreEqual("", pHangul.DoRemove().DoRemove().DoRemove().DoRemove().DoRemove().ToString());


            strText = "가";
            pHangul = SHangulChar.ConvertToHangul(strText);

            Assert.AreEqual("ㄱ", pHangul.DoRemove().ToString());
            Assert.AreEqual("", pHangul.DoRemove().DoRemove().ToString());


            strText = "위";
            pHangul = SHangulChar.ConvertToHangul(strText);

            Assert.AreEqual("우", pHangul.DoRemove().ToString());
            Assert.AreEqual("ㅇ", pHangul.DoRemove().DoRemove().ToString());
            Assert.AreEqual("", pHangul.DoRemove().DoRemove().DoRemove().ToString());
        }
        public void 한글작성하기_테스트()
        {
            SHangulChar pHangul = SHangulChar.Empty;

            Assert.AreEqual("ㄱ", pHangul.DoInsert("ㄱ").ToString());
            Assert.AreEqual("가", pHangul.DoInsert("ㄱ").DoInsert("ㅏ").ToString());
            Assert.AreEqual("각", pHangul.DoInsert("ㄱ").DoInsert("ㅏ").DoInsert("ㄱ").ToString());


            Assert.AreEqual("ㅂ", pHangul.DoInsert("ㅂ").ToString());
            Assert.AreEqual("붸", pHangul.DoInsert("ㅂ").DoInsert("ㅜ").DoInsert("ㅔ").ToString());
            Assert.AreEqual("뷀", pHangul.DoInsert("ㅂ").DoInsert("ㅜ").DoInsert("ㅔ").DoInsert("ㄹ").ToString());
            Assert.AreEqual("뷁", pHangul.DoInsert("ㅂ").DoInsert("ㅜ").DoInsert("ㅔ").DoInsert("ㄹ").DoInsert("ㄱ").ToString());


            Assert.AreEqual("ㄲ", pHangul.DoInsert("ㄲ").ToString());
            Assert.AreEqual("꺄", pHangul.DoInsert("ㄲ").DoInsert("ㅑ").ToString());
            Assert.AreEqual("꺆", pHangul.DoInsert("ㄲ").DoInsert("ㅑ").DoInsert("ㄲ").ToString());

            //잘못된 케이스의 경우 마지막에서 변동사항 없음
            Assert.AreEqual("각", pHangul.DoInsert("ㄱ").DoInsert("ㅏ").DoInsert("ㄱ").DoInsert("ㄱ").ToString());
            Assert.AreEqual("뷀", pHangul.DoInsert("ㅂ").DoInsert("ㅜ").DoInsert("ㅔ").DoInsert("ㄹ").DoInsert("ㄷ").ToString());
            Assert.AreEqual("꺄", pHangul.DoInsert("ㄲ").DoInsert("ㅑ").DoInsert("ㄸ").ToString());
        }
        void 테스트_자소나누고합치기(string strText)
        {
            SHangulChar pHangul = SHangulChar.ConvertToHangul(strText);

            Assert.AreEqual(strText, pHangul.ToString());
        }