Exemple #1
0
            /// <summary>
            /// 한글자의 한글을 초성, 중성, 종성으로 나눈다.
            /// </summary>
            /// <param name="hanChar">한글</param>
            /// <returns>분리된 한글에 대한 정보</returns>
            /// <seealso cref="HANGUL_INFO"/>
            /// <remarks>
            /// <para>
            /// 한글자의 한글을 초성, 중성, 종성으로 나눈다.
            /// </para>
            /// <example>
            /// <code>
            /// HANGUL_INFO hinfo = DevideJaso('강');
            /// // hinfo.isHangul -> "H" (한글)
            /// // hinfo.originalChar -> 강
            /// // hinfo.chars[0] -> ㄱ, hinfo.chars[1] -> ㄴ, hinfo.chars[2] = ㅇ
            /// </code>
            /// </example>
            /// </remarks>
            public static HANGUL_INFO DevideJaso(char hanChar)
            {
                int         ChoSung, JungSung, JongSung;
                ushort      temp = 0x0000;
                HANGUL_INFO hi   = new HANGUL_INFO();

                //Char을 16비트 부호없는 정수형 형태로 변환 - Unicode
                temp = Convert.ToUInt16(hanChar);

                // 캐릭터가 한글이 아닐 경우 처리
                if ((temp < m_UniCodeHangulBase) || (temp > m_UniCodeHangulLast))
                {
                    hi.isHangul     = "NH";
                    hi.originalChar = hanChar;
                    hi.chars        = null;
                }
                else
                {
                    // nUniCode에 한글코드에 대한 유니코드 위치를 담고 이를 이용해 인덱스 계산.
                    int nUniCode = temp - m_UniCodeHangulBase;
                    ChoSung  = nUniCode / (21 * 28);
                    nUniCode = nUniCode % (21 * 28);
                    JungSung = nUniCode / 28;
                    nUniCode = nUniCode % 28;
                    JongSung = nUniCode;

                    hi.isHangul     = "H";
                    hi.originalChar = hanChar;
                    hi.chars        = new char[] { HTable_ChoSung[ChoSung], HTable_JungSung[JungSung], HTable_JongSung[JongSung] };
                }

                return(hi);
            }
            /// <summary>
            /// 한글자의 한글을 초성, 중성, 종성으로 나눈다.
            /// </summary>
            /// <param name="hanChar">한글</param>
            /// <returns>분리된 한글에 대한 정보</returns>
            /// <seealso cref="HANGUL_INFO"/>
            /// <remarks>
            /// <para>
            /// 한글자의 한글을 초성, 중성, 종성으로 나눈다.
            /// </para>
            /// <example>
            /// <code>
            /// HANGUL_INFO hinfo = DevideJaso('강');
            /// // hinfo.isHangul -> "H" (한글)
            /// // hinfo.originalChar -> 강
            /// // hinfo.chars[0] -> ㄱ, hinfo.chars[1] -> ㄴ, hinfo.chars[2] = ㅇ
            /// </code>
            /// </example>
            /// </remarks>
            public static HANGUL_INFO DevideJaso(string val)
            {
                int         ChoSung, JungSung, JongSung; // 초성,중성,종성의 인덱스
                ushort      temp = 0x0000;               // 임시로 코드값을 담을 변수
                HANGUL_INFO hi   = new HANGUL_INFO();

                hi.originalVal = val;
                hi.isHangul    = false;
                hi.splitstring = "";
                hi.chosung     = "";
                hi.jungsung    = "";
                hi.jongsung    = "";
                if (!string.IsNullOrEmpty(val))
                {
                    foreach (char hanChar in val)
                    {
                        //Char을 16비트 부호없는 정수형 형태로 변환 - Unicode
                        temp = Convert.ToUInt16(hanChar);

                        // 캐릭터가 한글이 아닐 경우 처리
                        if ((temp < m_UniCodeHangulBase) || (temp > m_UniCodeHangulLast))
                        {
                            hi.splitstring += hanChar;

                            if (!HTable_JungSung.Contains(hanChar))
                            {
                                hi.chosung  += hanChar;
                                hi.jungsung += " ";
                            }
                            else
                            {
                                hi.chosung  += " ";
                                hi.jungsung += hanChar;
                            }
                            hi.jongsung += " ";
                        }
                        else
                        {
                            hi.isHangul = true;
                            // nUniCode에 한글코드에 대한 유니코드 위치를 담고 이를 이용해 인덱스 계산.
                            int nUniCode = temp - m_UniCodeHangulBase;
                            ChoSung  = nUniCode / (21 * 28);
                            nUniCode = nUniCode % (21 * 28);
                            JungSung = nUniCode / 28;
                            nUniCode = nUniCode % 28;
                            JongSung = nUniCode;


                            var    tmpChar = new char[] { HTable_ChoSung[ChoSung], HTable_JungSung[JungSung], HTable_JongSung[JongSung] };
                            string tmpData = "";


                            tmpData      = HTable_ChoSung[ChoSung].ToString();
                            hi.chosung  += string.IsNullOrEmpty(tmpData) ? " " : tmpData;
                            tmpData      = HTable_JungSung[JungSung].ToString();
                            hi.jungsung += string.IsNullOrEmpty(tmpData) ? " " : tmpData;
                            tmpData      = HTable_JongSung[JongSung].ToString();
                            hi.jongsung += string.IsNullOrEmpty(tmpData) ? " " : tmpData;
                            foreach (var dchar in tmpChar)
                            {
                                hi.splitstring += dchar;
                            }
                        }
                    }
                }
                return(hi);
            }