summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChoe Hwanjin <choe.hwanjin@gmail.com>2009-10-18 23:24:45 +0900
committerChoe Hwanjin <choe.hwanjin@gmail.com>2009-10-18 23:24:45 +0900
commit99e93204ecd2bb3ab1f3902bf25bceb999d5ea52 (patch)
tree52f208ac678143704b13eb84955c3080fb1f3d27
parent94ee75dd9b15d4dffbe1e63274c1e26189865fa7 (diff)
downloadlibhangul-99e93204ecd2bb3ab1f3902bf25bceb999d5ea52.tar.gz
hangul_jamo_to_cjamo() 함수를 conjoinable jamo만 아니라
모든 자모 영역(Unicode 5.2에서 추가된 것 포함)에 대해서 작동하도록 확장함 git-svn-id: http://kldp.net/svn/hangul/libhangul/trunk@203 8f00fcd2-89fc-0310-932e-b01be5b65e01
-rw-r--r--hangul/hangulctype.c449
1 files changed, 372 insertions, 77 deletions
diff --git a/hangul/hangulctype.c b/hangul/hangulctype.c
index 81964f5..193e46a 100644
--- a/hangul/hangulctype.c
+++ b/hangul/hangulctype.c
@@ -180,91 +180,386 @@ hangul_is_cjamo(ucschar c)
ucschar
hangul_jamo_to_cjamo(ucschar c)
{
- static ucschar choseong[] = {
- 0x3131, /* 0x1100 */
- 0x3132, /* 0x1101 */
- 0x3134, /* 0x1102 */
- 0x3137, /* 0x1103 */
- 0x3138, /* 0x1104 */
- 0x3139, /* 0x1105 */
- 0x3141, /* 0x1106 */
- 0x3142, /* 0x1107 */
- 0x3143, /* 0x1108 */
- 0x3145, /* 0x1109 */
- 0x3146, /* 0x110a */
- 0x3147, /* 0x110b */
- 0x3148, /* 0x110c */
- 0x3149, /* 0x110d */
- 0x314a, /* 0x110e */
- 0x314b, /* 0x110f */
- 0x314c, /* 0x1110 */
- 0x314d, /* 0x1111 */
- 0x314e, /* 0x1112 */
+ static unsigned short jamo_table[] = {
+ 0x3131, /* 0x1100 */
+ 0x3132, /* 0x1101 */
+ 0x3134, /* 0x1102 */
+ 0x3137, /* 0x1103 */
+ 0x3138, /* 0x1104 */
+ 0x3139, /* 0x1105 */
+ 0x3141, /* 0x1106 */
+ 0x3142, /* 0x1107 */
+ 0x3143, /* 0x1108 */
+ 0x3145, /* 0x1109 */
+ 0x3146, /* 0x110a */
+ 0x3147, /* 0x110b */
+ 0x3148, /* 0x110c */
+ 0x3149, /* 0x110d */
+ 0x314a, /* 0x110e */
+ 0x314b, /* 0x110f */
+ 0x314c, /* 0x1110 */
+ 0x314d, /* 0x1111 */
+ 0x314e, /* 0x1112 */
+ 0x0000, /* 0x1113 */
+ 0x3165, /* 0x1114 */
+ 0x3166, /* 0x1115 */
+ 0x0000, /* 0x1116 */
+ 0x0000, /* 0x1117 */
+ 0x0000, /* 0x1118 */
+ 0x0000, /* 0x1119 */
+ 0x3140, /* 0x111a */
+ 0x0000, /* 0x111b */
+ 0x316e, /* 0x111c */
+ 0x3171, /* 0x111d */
+ 0x3172, /* 0x111e */
+ 0x0000, /* 0x111f */
+ 0x3173, /* 0x1120 */
+ 0x3144, /* 0x1121 */
+ 0x3174, /* 0x1122 */
+ 0x3175, /* 0x1123 */
+ 0x0000, /* 0x1124 */
+ 0x0000, /* 0x1125 */
+ 0x0000, /* 0x1126 */
+ 0x3176, /* 0x1127 */
+ 0x0000, /* 0x1128 */
+ 0x3177, /* 0x1129 */
+ 0x0000, /* 0x112a */
+ 0x3178, /* 0x112b */
+ 0x3179, /* 0x112c */
+ 0x317a, /* 0x112d */
+ 0x317b, /* 0x112e */
+ 0x317c, /* 0x112f */
+ 0x0000, /* 0x1130 */
+ 0x0000, /* 0x1131 */
+ 0x317d, /* 0x1132 */
+ 0x0000, /* 0x1133 */
+ 0x0000, /* 0x1134 */
+ 0x0000, /* 0x1135 */
+ 0x317e, /* 0x1136 */
+ 0x0000, /* 0x1137 */
+ 0x0000, /* 0x1138 */
+ 0x0000, /* 0x1139 */
+ 0x0000, /* 0x113a */
+ 0x0000, /* 0x113b */
+ 0x0000, /* 0x113c */
+ 0x0000, /* 0x113d */
+ 0x0000, /* 0x113e */
+ 0x0000, /* 0x113f */
+ 0x317f, /* 0x1140 */
+ 0x0000, /* 0x1141 */
+ 0x0000, /* 0x1142 */
+ 0x0000, /* 0x1143 */
+ 0x0000, /* 0x1144 */
+ 0x0000, /* 0x1145 */
+ 0x0000, /* 0x1146 */
+ 0x3180, /* 0x1147 */
+ 0x0000, /* 0x1148 */
+ 0x0000, /* 0x1149 */
+ 0x0000, /* 0x114a */
+ 0x0000, /* 0x114b */
+ 0x3181, /* 0x114c */
+ 0x0000, /* 0x114d */
+ 0x0000, /* 0x114e */
+ 0x0000, /* 0x114f */
+ 0x0000, /* 0x1150 */
+ 0x0000, /* 0x1151 */
+ 0x0000, /* 0x1152 */
+ 0x0000, /* 0x1153 */
+ 0x0000, /* 0x1154 */
+ 0x0000, /* 0x1155 */
+ 0x0000, /* 0x1156 */
+ 0x3184, /* 0x1157 */
+ 0x3185, /* 0x1158 */
+ 0x3186, /* 0x1159 */
+ 0x0000, /* 0x115a */
+ 0x0000, /* 0x115b */
+ 0x0000, /* 0x115c */
+ 0x0000, /* 0x115d */
+ 0x0000, /* 0x115e */
+ 0x0000, /* 0x115f */
+ 0x3164, /* 0x1160 */
+ 0x314f, /* 0x1161 */
+ 0x3150, /* 0x1162 */
+ 0x3151, /* 0x1163 */
+ 0x3152, /* 0x1164 */
+ 0x3153, /* 0x1165 */
+ 0x3154, /* 0x1166 */
+ 0x3155, /* 0x1167 */
+ 0x3156, /* 0x1168 */
+ 0x3157, /* 0x1169 */
+ 0x3158, /* 0x116a */
+ 0x3159, /* 0x116b */
+ 0x315a, /* 0x116c */
+ 0x315b, /* 0x116d */
+ 0x315c, /* 0x116e */
+ 0x315d, /* 0x116f */
+ 0x315e, /* 0x1170 */
+ 0x315f, /* 0x1171 */
+ 0x3160, /* 0x1172 */
+ 0x3161, /* 0x1173 */
+ 0x3162, /* 0x1174 */
+ 0x3163, /* 0x1175 */
+ 0x0000, /* 0x1176 */
+ 0x0000, /* 0x1177 */
+ 0x0000, /* 0x1178 */
+ 0x0000, /* 0x1179 */
+ 0x0000, /* 0x117a */
+ 0x0000, /* 0x117b */
+ 0x0000, /* 0x117c */
+ 0x0000, /* 0x117d */
+ 0x0000, /* 0x117e */
+ 0x0000, /* 0x117f */
+ 0x0000, /* 0x1180 */
+ 0x0000, /* 0x1181 */
+ 0x0000, /* 0x1182 */
+ 0x0000, /* 0x1183 */
+ 0x3187, /* 0x1184 */
+ 0x3188, /* 0x1185 */
+ 0x0000, /* 0x1186 */
+ 0x0000, /* 0x1187 */
+ 0x3189, /* 0x1188 */
+ 0x0000, /* 0x1189 */
+ 0x0000, /* 0x118a */
+ 0x0000, /* 0x118b */
+ 0x0000, /* 0x118c */
+ 0x0000, /* 0x118d */
+ 0x0000, /* 0x118e */
+ 0x0000, /* 0x118f */
+ 0x0000, /* 0x1190 */
+ 0x318a, /* 0x1191 */
+ 0x318b, /* 0x1192 */
+ 0x0000, /* 0x1193 */
+ 0x318c, /* 0x1194 */
+ 0x0000, /* 0x1195 */
+ 0x0000, /* 0x1196 */
+ 0x0000, /* 0x1197 */
+ 0x0000, /* 0x1198 */
+ 0x0000, /* 0x1199 */
+ 0x0000, /* 0x119a */
+ 0x0000, /* 0x119b */
+ 0x0000, /* 0x119c */
+ 0x0000, /* 0x119d */
+ 0x318d, /* 0x119e */
+ 0x0000, /* 0x119f */
+ 0x0000, /* 0x11a0 */
+ 0x318e, /* 0x11a1 */
+ 0x0000, /* 0x11a2 */
+ 0x0000, /* 0x11a3 */
+ 0x0000, /* 0x11a4 */
+ 0x0000, /* 0x11a5 */
+ 0x0000, /* 0x11a6 */
+ 0x0000, /* 0x11a7 */
+ 0x0000, /* 0x11a8 */
+ 0x0000, /* 0x11a9 */
+ 0x3133, /* 0x11aa */
+ 0x0000, /* 0x11ab */
+ 0x3135, /* 0x11ac */
+ 0x3136, /* 0x11ad */
+ 0x0000, /* 0x11ae */
+ 0x0000, /* 0x11af */
+ 0x313a, /* 0x11b0 */
+ 0x313b, /* 0x11b1 */
+ 0x313c, /* 0x11b2 */
+ 0x313d, /* 0x11b3 */
+ 0x313e, /* 0x11b4 */
+ 0x313f, /* 0x11b5 */
+ 0x0000, /* 0x11b6 */
+ 0x0000, /* 0x11b7 */
+ 0x0000, /* 0x11b8 */
+ 0x0000, /* 0x11b9 */
+ 0x0000, /* 0x11ba */
+ 0x0000, /* 0x11bb */
+ 0x0000, /* 0x11bc */
+ 0x0000, /* 0x11bd */
+ 0x0000, /* 0x11be */
+ 0x0000, /* 0x11bf */
+ 0x0000, /* 0x11c0 */
+ 0x0000, /* 0x11c1 */
+ 0x0000, /* 0x11c2 */
+ 0x0000, /* 0x11c3 */
+ 0x0000, /* 0x11c4 */
+ 0x0000, /* 0x11c5 */
+ 0x0000, /* 0x11c6 */
+ 0x3167, /* 0x11c7 */
+ 0x3168, /* 0x11c8 */
+ 0x0000, /* 0x11c9 */
+ 0x0000, /* 0x11ca */
+ 0x0000, /* 0x11cb */
+ 0x3169, /* 0x11cc */
+ 0x0000, /* 0x11cd */
+ 0x316a, /* 0x11ce */
+ 0x0000, /* 0x11cf */
+ 0x0000, /* 0x11d0 */
+ 0x0000, /* 0x11d1 */
+ 0x0000, /* 0x11d2 */
+ 0x316b, /* 0x11d3 */
+ 0x0000, /* 0x11d4 */
+ 0x0000, /* 0x11d5 */
+ 0x0000, /* 0x11d6 */
+ 0x316c, /* 0x11d7 */
+ 0x0000, /* 0x11d8 */
+ 0x316d, /* 0x11d9 */
+ 0x0000, /* 0x11da */
+ 0x0000, /* 0x11db */
+ 0x0000, /* 0x11dc */
+ 0x316f, /* 0x11dd */
+ 0x0000, /* 0x11de */
+ 0x3170, /* 0x11df */
+ 0x0000, /* 0x11e0 */
+ 0x0000, /* 0x11e1 */
+ 0x0000, /* 0x11e2 */
+ 0x0000, /* 0x11e3 */
+ 0x0000, /* 0x11e4 */
+ 0x0000, /* 0x11e5 */
+ 0x0000, /* 0x11e6 */
+ 0x0000, /* 0x11e7 */
+ 0x0000, /* 0x11e8 */
+ 0x0000, /* 0x11e9 */
+ 0x0000, /* 0x11ea */
+ 0x0000, /* 0x11eb */
+ 0x0000, /* 0x11ec */
+ 0x0000, /* 0x11ed */
+ 0x0000, /* 0x11ee */
+ 0x0000, /* 0x11ef */
+ 0x0000, /* 0x11f0 */
+ 0x3182, /* 0x11f1 */
+ 0x3183, /* 0x11f2 */
+ 0x0000, /* 0x11f3 */
+ 0x0000, /* 0x11f4 */
+ 0x0000, /* 0x11f5 */
+ 0x0000, /* 0x11f6 */
+ 0x0000, /* 0x11f7 */
+ 0x0000, /* 0x11f8 */
+ 0x0000, /* 0x11f9 */
+ 0x0000, /* 0x11fa */
+ 0x0000, /* 0x11fb */
+ 0x0000, /* 0x11fc */
+ 0x0000, /* 0x11fd */
+ 0x0000, /* 0x11fe */
+ 0x0000, /* 0x11ff */
};
- static ucschar jungseong[] = {
- 0x314f, /* 0x1161 */
- 0x3150, /* 0x1162 */
- 0x3151, /* 0x1163 */
- 0x3152, /* 0x1164 */
- 0x3153, /* 0x1165 */
- 0x3154, /* 0x1166 */
- 0x3155, /* 0x1167 */
- 0x3156, /* 0x1168 */
- 0x3157, /* 0x1169 */
- 0x3158, /* 0x116a */
- 0x3159, /* 0x116b */
- 0x315a, /* 0x116c */
- 0x315b, /* 0x116d */
- 0x315c, /* 0x116e */
- 0x315d, /* 0x116f */
- 0x315e, /* 0x1170 */
- 0x315f, /* 0x1171 */
- 0x3160, /* 0x1172 */
- 0x3161, /* 0x1173 */
- 0x3162, /* 0x1174 */
- 0x3163 /* 0x1175 */
+ static unsigned short jamo_ext_A_table[] = {
+ 0x0000, /* 0xa960 */
+ 0x0000, /* 0xa961 */
+ 0x0000, /* 0xa962 */
+ 0x0000, /* 0xa963 */
+ 0x313a, /* 0xa964 */
+ 0x0000, /* 0xa965 */
+ 0x316a, /* 0xa966 */
+ 0x0000, /* 0xa967 */
+ 0x313b, /* 0xa968 */
+ 0x313c, /* 0xa969 */
+ 0x0000, /* 0xa96a */
+ 0x0000, /* 0xa96b */
+ 0x313d, /* 0xa96c */
+ 0x0000, /* 0xa96d */
+ 0x0000, /* 0xa96e */
+ 0x0000, /* 0xa96f */
+ 0x0000, /* 0xa970 */
+ 0x316f, /* 0xa971 */
+ 0x0000, /* 0xa972 */
+ 0x0000, /* 0xa973 */
+ 0x0000, /* 0xa974 */
+ 0x0000, /* 0xa975 */
+ 0x0000, /* 0xa976 */
+ 0x0000, /* 0xa977 */
+ 0x0000, /* 0xa978 */
+ 0x0000, /* 0xa979 */
+ 0x0000, /* 0xa97a */
+ 0x0000, /* 0xa97b */
+ 0x0000, /* 0xa97c */
};
- static ucschar jongseong[] = {
- 0x3131, /* 0x11a8 */
- 0x3132, /* 0x11a9 */
- 0x3133, /* 0x11aa */
- 0x3134, /* 0x11ab */
- 0x3135, /* 0x11ac */
- 0x3136, /* 0x11ad */
- 0x3137, /* 0x11ae */
- 0x3139, /* 0x11af */
- 0x313a, /* 0x11b0 */
- 0x313b, /* 0x11b1 */
- 0x313c, /* 0x11b2 */
- 0x313d, /* 0x11b3 */
- 0x313e, /* 0x11b4 */
- 0x313f, /* 0x11b5 */
- 0x3140, /* 0x11b6 */
- 0x3141, /* 0x11b7 */
- 0x3142, /* 0x11b8 */
- 0x3144, /* 0x11b9 */
- 0x3145, /* 0x11ba */
- 0x3146, /* 0x11bb */
- 0x3147, /* 0x11bc */
- 0x3148, /* 0x11bd */
- 0x314a, /* 0x11be */
- 0x314b, /* 0x11bf */
- 0x314c, /* 0x11c0 */
- 0x314d, /* 0x11c1 */
- 0x314e /* 0x11c2 */
+ static unsigned short jamo_ext_B_table[] = {
+ 0x0000, /* 0xd7b0 */
+ 0x0000, /* 0xd7b1 */
+ 0x0000, /* 0xd7b2 */
+ 0x0000, /* 0xd7b3 */
+ 0x0000, /* 0xd7b4 */
+ 0x0000, /* 0xd7b5 */
+ 0x0000, /* 0xd7b6 */
+ 0x0000, /* 0xd7b7 */
+ 0x0000, /* 0xd7b8 */
+ 0x0000, /* 0xd7b9 */
+ 0x0000, /* 0xd7ba */
+ 0x0000, /* 0xd7bb */
+ 0x0000, /* 0xd7bc */
+ 0x0000, /* 0xd7bd */
+ 0x0000, /* 0xd7be */
+ 0x0000, /* 0xd7bf */
+ 0x0000, /* 0xd7c0 */
+ 0x0000, /* 0xd7c1 */
+ 0x0000, /* 0xd7c2 */
+ 0x0000, /* 0xd7c3 */
+ 0x0000, /* 0xd7c4 */
+ 0x0000, /* 0xd7c5 */
+ 0x0000, /* 0xd7c6 */
+ 0x0000, /* 0xd7cb */
+ 0x0000, /* 0xd7cc */
+ 0x3138, /* 0xd7cd */
+ 0x0000, /* 0xd7ce */
+ 0x0000, /* 0xd7cf */
+ 0x0000, /* 0xd7d0 */
+ 0x0000, /* 0xd7d1 */
+ 0x0000, /* 0xd7d2 */
+ 0x0000, /* 0xd7d3 */
+ 0x0000, /* 0xd7d4 */
+ 0x0000, /* 0xd7d5 */
+ 0x0000, /* 0xd7d6 */
+ 0x0000, /* 0xd7d7 */
+ 0x0000, /* 0xd7d8 */
+ 0x0000, /* 0xd7d9 */
+ 0x0000, /* 0xd7da */
+ 0x0000, /* 0xd7db */
+ 0x0000, /* 0xd7dc */
+ 0x0000, /* 0xd7dd */
+ 0x0000, /* 0xd7de */
+ 0x0000, /* 0xd7df */
+ 0x0000, /* 0xd7e0 */
+ 0x0000, /* 0xd7e1 */
+ 0x0000, /* 0xd7e2 */
+ 0x3173, /* 0xd7e3 */
+ 0x0000, /* 0xd7e4 */
+ 0x0000, /* 0xd7e5 */
+ 0x3143, /* 0xd7e6 */
+ 0x3175, /* 0xd7e7 */
+ 0x3176, /* 0xd7e8 */
+ 0x0000, /* 0xd7e9 */
+ 0x0000, /* 0xd7ea */
+ 0x0000, /* 0xd7eb */
+ 0x0000, /* 0xd7ec */
+ 0x0000, /* 0xd7ed */
+ 0x0000, /* 0xd7ee */
+ 0x317e, /* 0xd7ef */
+ 0x0000, /* 0xd7f0 */
+ 0x0000, /* 0xd7f1 */
+ 0x0000, /* 0xd7f2 */
+ 0x0000, /* 0xd7f3 */
+ 0x0000, /* 0xd7f4 */
+ 0x0000, /* 0xd7f5 */
+ 0x0000, /* 0xd7f6 */
+ 0x0000, /* 0xd7f7 */
+ 0x0000, /* 0xd7f8 */
+ 0x3149, /* 0xd7f9 */
+ 0x0000, /* 0xd7fa */
+ 0x0000, /* 0xd7fb */
};
- if (c >= 0x1100 && c <= 0x1112) {
- return choseong[c - 0x1100];
- } else if (c >= 0x1161 && c <= 0x1175) {
- return jungseong[c - 0x1161];
- } else if (c >= 0x11a8 && c <= 0x11c2) {
- return jongseong[c - 0x11a8];
+ ucschar ret = 0;
+
+ if (c >= 0x1100 && c <= 0x11ff) {
+ ret = jamo_table[c - 0x1100];
+ } else if (c >= 0xa960 && c <= 0xa97c) {
+ ret = jamo_ext_A_table[c - 0xa960];
+ } else if (c >= 0xd7b0 && c <= 0xd7fb) {
+ ret = jamo_ext_B_table[c - 0xd7b0];
}
- return c;
+ if (ret == 0)
+ ret = c;
+
+ return ret;
}
/* deprecated */