diff options
author | Choe Hwanjin <choe.hwanjin@gmail.com> | 2010-12-25 23:17:20 +0900 |
---|---|---|
committer | Choe Hwanjin <choe.hwanjin@gmail.com> | 2010-12-25 23:17:20 +0900 |
commit | a4f04ac118195b72138761019ed9b812776bb714 (patch) | |
tree | ac9c4c884673ebc9caa956ddd8d012c889e6f4b7 | |
parent | f20d0892a471f4661c71b160050b32668151c94c (diff) | |
download | libhangul-a4f04ac118195b72138761019ed9b812776bb714.tar.gz |
두벌식에서 초성이 옛글에서만 사용되는 종성으로 변환되는 경우 처리
ㅃㅉㄸ은 옛글 자모 글자인데, 이번에 두벌식 옛글자판을 구현하면서
hangul_choseong_to_jongseong() 함수로 초성에서 종성으로 변환이 가능해진
자모 글자다. 그런데 저 글자는 현대 한글에서는 유효하지 않은 종성이므로
현대 한글 자판에서는 위 초성들이 종성으로 변환되어서는 안된다.
그래서 combination_table을 비교하여 conjoinable 자모인지 아닌지에
따라서 종성 변환을 할 것인지 말 것인지 처리한다.
git-svn-id: http://kldp.net/svn/hangul/libhangul/trunk@242 8f00fcd2-89fc-0310-932e-b01be5b65e01
-rw-r--r-- | hangul/hangulinputcontext.c | 26 |
1 files 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)) { |