From a4f04ac118195b72138761019ed9b812776bb714 Mon Sep 17 00:00:00 2001 From: Choe Hwanjin Date: Sat, 25 Dec 2010 23:17:20 +0900 Subject: =?UTF-8?q?=EB=91=90=EB=B2=8C=EC=8B=9D=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=B4=88=EC=84=B1=EC=9D=B4=20=EC=98=9B=EA=B8=80=EC=97=90?= =?UTF-8?q?=EC=84=9C=EB=A7=8C=20=EC=82=AC=EC=9A=A9=EB=90=98=EB=8A=94=20?= =?UTF-8?q?=EC=A2=85=EC=84=B1=EC=9C=BC=EB=A1=9C=20=EB=B3=80=ED=99=98?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ㅃㅉㄸ은 옛글 자모 글자인데, 이번에 두벌식 옛글자판을 구현하면서 hangul_choseong_to_jongseong() 함수로 초성에서 종성으로 변환이 가능해진 자모 글자다. 그런데 저 글자는 현대 한글에서는 유효하지 않은 종성이므로 현대 한글 자판에서는 위 초성들이 종성으로 변환되어서는 안된다. 그래서 combination_table을 비교하여 conjoinable 자모인지 아닌지에 따라서 종성 변환을 할 것인지 말 것인지 처리한다. git-svn-id: http://kldp.net/svn/hangul/libhangul/trunk@242 8f00fcd2-89fc-0310-932e-b01be5b65e01 --- hangul/hangulinputcontext.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/hangul/hangulinputcontext.c b/hangul/hangulinputcontext.c index 1b3c707..144ed28 100644 --- a/hangul/hangulinputcontext.c +++ b/hangul/hangulinputcontext.c @@ -836,6 +836,23 @@ hangul_ic_save_commit_string(HangulInputContext *hic) hangul_buffer_clear(&hic->buffer); } +static ucschar +hangul_ic_choseong_to_jongseong(HangulInputContext* hic, ucschar cho) +{ + ucschar jong = hangul_choseong_to_jongseong(cho); + if (hangul_is_jongseong_conjoinable(jong)) { + return jong; + } else { + /* 옛글 조합 규칙을 사용하는 자판의 경우에는 종성이 conjoinable + * 하지 않아도 상관없다 */ + if (hic->keyboard->combination_table == &hangul_combination_full) { + return jong; + } + } + + return 0; +} + static bool hangul_ic_process_jamo(HangulInputContext *hic, ucschar ch) { @@ -850,7 +867,7 @@ hangul_ic_process_jamo(HangulInputContext *hic, ucschar ch) if (hic->buffer.jongseong) { if (hangul_is_choseong(ch)) { - jong = hangul_choseong_to_jongseong(ch); + jong = hangul_ic_choseong_to_jongseong(hic, ch); combined = hangul_combination_combine(hic->combination, hic->buffer.jongseong, jong); if (hangul_is_jongseong(combined)) { @@ -900,7 +917,7 @@ hangul_ic_process_jamo(HangulInputContext *hic, ucschar ch) } else if (hic->buffer.jungseong) { if (hangul_is_choseong(ch)) { if (hic->buffer.choseong) { - jong = hangul_choseong_to_jongseong(ch); + jong = hangul_ic_choseong_to_jongseong(hic, ch); if (hangul_is_jongseong(jong)) { if (!hangul_ic_push(hic, jong)) { if (!hangul_ic_push(hic, ch)) { @@ -1090,7 +1107,7 @@ hangul_ic_process_romaja(HangulInputContext *hic, int ascii, ucschar ch) if (hangul_is_jongseong(ch)) jong = ch; else - jong = hangul_choseong_to_jongseong(ch); + jong = hangul_ic_choseong_to_jongseong(hic, ch); combined = hangul_combination_combine(hic->combination, hic->buffer.jongseong, jong); if (hangul_is_jongseong(combined)) { @@ -1118,6 +1135,7 @@ hangul_ic_process_romaja(HangulInputContext *hic, int ascii, ucschar ch) if (hangul_is_jungseong(peek)) { if (pop == 0x11aa) { hic->buffer.jongseong = 0x11a8; + pop = 0x11ba; } else { hic->buffer.jongseong = 0; } @@ -1144,7 +1162,7 @@ hangul_ic_process_romaja(HangulInputContext *hic, int ascii, ucschar ch) } else if (hic->buffer.jungseong) { if (hangul_is_choseong(ch)) { if (hic->buffer.choseong) { - jong = hangul_choseong_to_jongseong(ch); + jong = hangul_ic_choseong_to_jongseong(hic, ch); if (hangul_is_jongseong(jong)) { if (!hangul_ic_push(hic, jong)) { if (!hangul_ic_push(hic, ch)) { -- cgit v1.2.1