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); }
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()); }
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()); }