diff options
author | Choe Hwanjin <choe.hwanjin@gmail.com> | 2009-10-18 23:24:45 +0900 |
---|---|---|
committer | Choe Hwanjin <choe.hwanjin@gmail.com> | 2009-10-18 23:24:45 +0900 |
commit | 99e93204ecd2bb3ab1f3902bf25bceb999d5ea52 (patch) | |
tree | 52f208ac678143704b13eb84955c3080fb1f3d27 | |
parent | 94ee75dd9b15d4dffbe1e63274c1e26189865fa7 (diff) | |
download | libhangul-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.c | 449 |
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 */ |