summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChoe Hwanjin <choe.hwanjin@gmail.com>2010-12-25 23:17:20 +0900
committerChoe Hwanjin <choe.hwanjin@gmail.com>2010-12-25 23:17:20 +0900
commita4f04ac118195b72138761019ed9b812776bb714 (patch)
treeac9c4c884673ebc9caa956ddd8d012c889e6f4b7
parentf20d0892a471f4661c71b160050b32668151c94c (diff)
downloadlibhangul-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.c26
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)) {