1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/intl/uconv/ucvko/jamoclusters.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,491 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +/* 1.9 + * The mapping table converting a sequence of 'basic' jamos to a cluster jamo. 1.10 + * There are 4 groups in the table. Group 1 and Group 2 are obtained by the 1.11 + * direct translation of Hangul Jamo compatibility decomposition mapping 1.12 + * found in Unicode 2.0 data table at 1.13 + * ftp://ftp.unicode.org/Public/2.0-update to 1.14 + * JamoNormMap type struct. Group 3 and Group 4 are derived from Group 1 1.15 + * entries mapping a sequence of three Jamos to a cluster Jamo. In Group 3 and 1.16 + * Group 4, the first two Jamos or the last two Jamos in Group 1 are combined 1.17 + * together, if possible, to form a new 'basic' Jamo that, in turn is mapped 1.18 + * along with the last Jamo (in case of Group 3) or the first Jamo (in Group 4) 1.19 + * to a cluster jamo. 1.20 + * 1.21 + * The full list is available at http://jshin.net/i18n/korean/jamocomp.html. 1.22 + */ 1.23 + 1.24 +// To reduce memory footprint, array elements are shifted by 0x1100 1.25 +// from their actual positions at 0x1100. 1.26 + 1.27 +// group 1: cluster jamos made of three basic jamos sorted for binary search 1.28 + 1.29 +const static JamoNormMap gJamoClustersGroup1[] = 1.30 +{ 1.31 + {{0x07, 0x07, 0x0b}, 0x2c}, 1.32 + {{0x07, 0x09, 0x00}, 0x22}, 1.33 + {{0x07, 0x09, 0x03}, 0x23}, 1.34 + {{0x07, 0x09, 0x07}, 0x24}, 1.35 + {{0x07, 0x09, 0x09}, 0x25}, 1.36 + {{0x07, 0x09, 0x0c}, 0x26}, 1.37 + {{0x09, 0x07, 0x00}, 0x33}, 1.38 + {{0x09, 0x09, 0x09}, 0x34}, 1.39 + {{0x69, 0x61, 0x75}, 0x6b}, 1.40 + {{0x69, 0x65, 0x75}, 0x80}, 1.41 + {{0x69, 0x67, 0x75}, 0x81}, 1.42 + {{0x6d, 0x63, 0x75}, 0x85}, 1.43 + {{0x6e, 0x61, 0x75}, 0x8a}, 1.44 + {{0x6e, 0x65, 0x73}, 0x8b}, 1.45 + {{0x6e, 0x65, 0x75}, 0x70}, 1.46 + {{0x6e, 0x67, 0x75}, 0x8c}, 1.47 + {{0x72, 0x65, 0x75}, 0x90}, 1.48 + {{0x72, 0x67, 0x75}, 0x92}, 1.49 + {{0x73, 0x75, 0x6e}, 0x97}, 1.50 + {{0xa8, 0xba, 0xa8}, 0xc4}, 1.51 + {{0xaf, 0xa8, 0xba}, 0xcc}, 1.52 + {{0xaf, 0xae, 0xc2}, 0xcf}, 1.53 + {{0xaf, 0xb7, 0xa8}, 0xd1}, 1.54 + {{0xaf, 0xb7, 0xba}, 0xd2}, 1.55 + {{0xaf, 0xb8, 0xba}, 0xd3}, 1.56 + {{0xaf, 0xb8, 0xbc}, 0xd5}, 1.57 + {{0xaf, 0xb8, 0xc2}, 0xd4}, 1.58 + {{0xaf, 0xba, 0xba}, 0xd6}, 1.59 + {{0xb7, 0xba, 0xba}, 0xde}, 1.60 + {{0xbc, 0xa8, 0xa8}, 0xed} 1.61 +}; 1.62 + 1.63 +const static JamoNormMap gJamoClustersGroup234[] = 1.64 +{ 1.65 + {{0x00, 0x00, 0}, 0x01}, 1.66 + {{0x02, 0x00, 0}, 0x13}, 1.67 + {{0x02, 0x02, 0}, 0x14}, 1.68 + {{0x02, 0x03, 0}, 0x15}, 1.69 + {{0x02, 0x07, 0}, 0x16}, 1.70 + {{0x03, 0x00, 0}, 0x17}, 1.71 + {{0x03, 0x03, 0}, 0x04}, 1.72 + {{0x05, 0x02, 0}, 0x18}, 1.73 + {{0x05, 0x05, 0}, 0x19}, 1.74 + {{0x05, 0x0b, 0}, 0x1b}, 1.75 + {{0x05, 0x12, 0}, 0x1a}, 1.76 + {{0x06, 0x07, 0}, 0x1c}, 1.77 + {{0x06, 0x0b, 0}, 0x1d}, 1.78 + {{0x07, 0x00, 0}, 0x1e}, 1.79 + {{0x07, 0x02, 0}, 0x1f}, 1.80 + {{0x07, 0x03, 0}, 0x20}, 1.81 + {{0x07, 0x07, 0}, 0x08}, 1.82 + {{0x07, 0x09, 0}, 0x21}, 1.83 + {{0x07, 0x0a, 0}, 0x25}, 1.84 + {{0x07, 0x0b, 0}, 0x2b}, 1.85 + {{0x07, 0x0c, 0}, 0x27}, 1.86 + {{0x07, 0x0e, 0}, 0x28}, 1.87 + {{0x07, 0x10, 0}, 0x29}, 1.88 + {{0x07, 0x11, 0}, 0x2a}, 1.89 + {{0x07, 0x2b, 0}, 0x2c}, 1.90 + {{0x07, 0x2d, 0}, 0x22}, 1.91 + {{0x07, 0x2f, 0}, 0x23}, 1.92 + {{0x07, 0x32, 0}, 0x24}, 1.93 + {{0x07, 0x36, 0}, 0x26}, 1.94 + {{0x08, 0x0b, 0}, 0x2c}, 1.95 + {{0x09, 0x00, 0}, 0x2d}, 1.96 + {{0x09, 0x02, 0}, 0x2e}, 1.97 + {{0x09, 0x03, 0}, 0x2f}, 1.98 + {{0x09, 0x05, 0}, 0x30}, 1.99 + {{0x09, 0x06, 0}, 0x31}, 1.100 + {{0x09, 0x07, 0}, 0x32}, 1.101 + {{0x09, 0x09, 0}, 0x0a}, 1.102 + {{0x09, 0x0a, 0}, 0x34}, 1.103 + {{0x09, 0x0b, 0}, 0x35}, 1.104 + {{0x09, 0x0c, 0}, 0x36}, 1.105 + {{0x09, 0x0e, 0}, 0x37}, 1.106 + {{0x09, 0x0f, 0}, 0x38}, 1.107 + {{0x09, 0x10, 0}, 0x39}, 1.108 + {{0x09, 0x11, 0}, 0x3a}, 1.109 + {{0x09, 0x12, 0}, 0x3b}, 1.110 + {{0x09, 0x1e, 0}, 0x33}, 1.111 + {{0x0a, 0x09, 0}, 0x34}, 1.112 + {{0x0b, 0x00, 0}, 0x41}, 1.113 + {{0x0b, 0x03, 0}, 0x42}, 1.114 + {{0x0b, 0x06, 0}, 0x43}, 1.115 + {{0x0b, 0x07, 0}, 0x44}, 1.116 + {{0x0b, 0x09, 0}, 0x45}, 1.117 + {{0x0b, 0x0b, 0}, 0x47}, 1.118 + {{0x0b, 0x0c, 0}, 0x48}, 1.119 + {{0x0b, 0x0e, 0}, 0x49}, 1.120 + {{0x0b, 0x10, 0}, 0x4a}, 1.121 + {{0x0b, 0x11, 0}, 0x4b}, 1.122 + {{0x0b, 0x40, 0}, 0x46}, 1.123 + {{0x0c, 0x0b, 0}, 0x4d}, 1.124 + {{0x0c, 0x0c, 0}, 0x0d}, 1.125 + {{0x0e, 0x0f, 0}, 0x52}, 1.126 + {{0x0e, 0x12, 0}, 0x53}, 1.127 + {{0x11, 0x07, 0}, 0x56}, 1.128 + {{0x11, 0x0b, 0}, 0x57}, 1.129 + {{0x12, 0x12, 0}, 0x58}, 1.130 + {{0x21, 0x00, 0}, 0x22}, 1.131 + {{0x21, 0x03, 0}, 0x23}, 1.132 + {{0x21, 0x07, 0}, 0x24}, 1.133 + {{0x21, 0x09, 0}, 0x25}, 1.134 + {{0x21, 0x0c, 0}, 0x26}, 1.135 + {{0x32, 0x00, 0}, 0x33}, 1.136 + {{0x3c, 0x3c, 0}, 0x3d}, 1.137 + {{0x3e, 0x3e, 0}, 0x3f}, 1.138 + {{0x4e, 0x4e, 0}, 0x4f}, 1.139 + {{0x50, 0x50, 0}, 0x51}, 1.140 + {{0x61, 0x69, 0}, 0x76}, 1.141 + {{0x61, 0x6e, 0}, 0x77}, 1.142 + {{0x61, 0x75, 0}, 0x62}, 1.143 + {{0x63, 0x69, 0}, 0x78}, 1.144 + {{0x63, 0x6d, 0}, 0x79}, 1.145 + {{0x63, 0x75, 0}, 0x64}, 1.146 + {{0x65, 0x69, 0}, 0x7a}, 1.147 + {{0x65, 0x6e, 0}, 0x7b}, 1.148 + {{0x65, 0x73, 0}, 0x7c}, 1.149 + {{0x65, 0x75, 0}, 0x66}, 1.150 + {{0x67, 0x69, 0}, 0x7d}, 1.151 + {{0x67, 0x6e, 0}, 0x7e}, 1.152 + {{0x67, 0x75, 0}, 0x68}, 1.153 + {{0x69, 0x61, 0}, 0x6a}, 1.154 + {{0x69, 0x62, 0}, 0x6b}, 1.155 + {{0x69, 0x65, 0}, 0x7f}, 1.156 + {{0x69, 0x66, 0}, 0x80}, 1.157 + {{0x69, 0x68, 0}, 0x81}, 1.158 + {{0x69, 0x69, 0}, 0x82}, 1.159 + {{0x69, 0x6e, 0}, 0x83}, 1.160 + {{0x69, 0x75, 0}, 0x6c}, 1.161 + {{0x6a, 0x75, 0}, 0x6b}, 1.162 + {{0x6d, 0x63, 0}, 0x84}, 1.163 + {{0x6d, 0x64, 0}, 0x85}, 1.164 + {{0x6d, 0x67, 0}, 0x86}, 1.165 + {{0x6d, 0x69, 0}, 0x87}, 1.166 + {{0x6d, 0x75, 0}, 0x88}, 1.167 + {{0x6e, 0x61, 0}, 0x89}, 1.168 + {{0x6e, 0x62, 0}, 0x8a}, 1.169 + {{0x6e, 0x65, 0}, 0x6f}, 1.170 + {{0x6e, 0x66, 0}, 0x70}, 1.171 + {{0x6e, 0x68, 0}, 0x8c}, 1.172 + {{0x6e, 0x6e, 0}, 0x8d}, 1.173 + {{0x6e, 0x75, 0}, 0x71}, 1.174 + {{0x6e, 0x7c, 0}, 0x8b}, 1.175 + {{0x6f, 0x73, 0}, 0x8b}, 1.176 + {{0x6f, 0x75, 0}, 0x70}, 1.177 + {{0x72, 0x61, 0}, 0x8e}, 1.178 + {{0x72, 0x65, 0}, 0x8f}, 1.179 + {{0x72, 0x66, 0}, 0x90}, 1.180 + {{0x72, 0x67, 0}, 0x91}, 1.181 + {{0x72, 0x68, 0}, 0x92}, 1.182 + {{0x72, 0x6e, 0}, 0x93}, 1.183 + {{0x72, 0x75, 0}, 0x94}, 1.184 + {{0x73, 0x6e, 0}, 0x95}, 1.185 + {{0x73, 0x73, 0}, 0x96}, 1.186 + {{0x73, 0x75, 0}, 0x74}, 1.187 + {{0x73, 0x9b, 0}, 0x97}, 1.188 + {{0x74, 0x6e, 0}, 0x97}, 1.189 + {{0x75, 0x61, 0}, 0x98}, 1.190 + {{0x75, 0x63, 0}, 0x99}, 1.191 + {{0x75, 0x69, 0}, 0x9a}, 1.192 + {{0x75, 0x6e, 0}, 0x9b}, 1.193 + {{0x75, 0x73, 0}, 0x9c}, 1.194 + {{0x75, 0x9e, 0}, 0x9d}, 1.195 + {{0x7f, 0x75, 0}, 0x80}, 1.196 + {{0x84, 0x75, 0}, 0x85}, 1.197 + {{0x89, 0x75, 0}, 0x8a}, 1.198 + {{0x8f, 0x75, 0}, 0x90}, 1.199 + {{0x91, 0x75, 0}, 0x92}, 1.200 + {{0x9e, 0x65, 0}, 0x9f}, 1.201 + {{0x9e, 0x6e, 0}, 0xa0}, 1.202 + {{0x9e, 0x75, 0}, 0xa1}, 1.203 + {{0x9e, 0x9e, 0}, 0xa2}, 1.204 + {{0xa8, 0xa8, 0}, 0xa9}, 1.205 + {{0xa8, 0xaf, 0}, 0xc3}, 1.206 + {{0xa8, 0xba, 0}, 0xaa}, 1.207 + {{0xa8, 0xe7, 0}, 0xc4}, 1.208 + {{0xaa, 0xa8, 0}, 0xc4}, 1.209 + {{0xab, 0xa8, 0}, 0xc5}, 1.210 + {{0xab, 0xae, 0}, 0xc6}, 1.211 + {{0xab, 0xba, 0}, 0xc7}, 1.212 + {{0xab, 0xbd, 0}, 0xac}, 1.213 + {{0xab, 0xc0, 0}, 0xc9}, 1.214 + {{0xab, 0xc2, 0}, 0xad}, 1.215 + {{0xab, 0xeb, 0}, 0xc8}, 1.216 + {{0xae, 0xa8, 0}, 0xca}, 1.217 + {{0xae, 0xaf, 0}, 0xcb}, 1.218 + {{0xaf, 0xa8, 0}, 0xb0}, 1.219 + {{0xaf, 0xaa, 0}, 0xcc}, 1.220 + {{0xaf, 0xab, 0}, 0xcd}, 1.221 + {{0xaf, 0xae, 0}, 0xce}, 1.222 + {{0xaf, 0xaf, 0}, 0xd0}, 1.223 + {{0xaf, 0xb7, 0}, 0xb1}, 1.224 + {{0xaf, 0xb8, 0}, 0xb2}, 1.225 + {{0xaf, 0xb9, 0}, 0xd3}, 1.226 + {{0xaf, 0xba, 0}, 0xb3}, 1.227 + {{0xaf, 0xbb, 0}, 0xd6}, 1.228 + {{0xaf, 0xbf, 0}, 0xd8}, 1.229 + {{0xaf, 0xc0, 0}, 0xb4}, 1.230 + {{0xaf, 0xc1, 0}, 0xb5}, 1.231 + {{0xaf, 0xc2, 0}, 0xb6}, 1.232 + {{0xaf, 0xda, 0}, 0xd1}, 1.233 + {{0xaf, 0xdd, 0}, 0xd2}, 1.234 + {{0xaf, 0xe5, 0}, 0xd4}, 1.235 + {{0xaf, 0xe6, 0}, 0xd5}, 1.236 + {{0xaf, 0xeb, 0}, 0xd7}, 1.237 + {{0xaf, 0xf9, 0}, 0xd9}, 1.238 + {{0xb0, 0xba, 0}, 0xcc}, 1.239 + {{0xb1, 0xa8, 0}, 0xd1}, 1.240 + {{0xb1, 0xba, 0}, 0xd2}, 1.241 + {{0xb2, 0xba, 0}, 0xd3}, 1.242 + {{0xb2, 0xbc, 0}, 0xd5}, 1.243 + {{0xb2, 0xc2, 0}, 0xd4}, 1.244 + {{0xb3, 0xba, 0}, 0xd6}, 1.245 + {{0xb7, 0xa8, 0}, 0xda}, 1.246 + {{0xb7, 0xaf, 0}, 0xdb}, 1.247 + {{0xb7, 0xb8, 0}, 0xdc}, 1.248 + {{0xb7, 0xba, 0}, 0xdd}, 1.249 + {{0xb7, 0xbb, 0}, 0xde}, 1.250 + {{0xb7, 0xbc, 0}, 0xe2}, 1.251 + {{0xb7, 0xbe, 0}, 0xe0}, 1.252 + {{0xb7, 0xc2, 0}, 0xe1}, 1.253 + {{0xb7, 0xeb, 0}, 0xdf}, 1.254 + {{0xb8, 0xaf, 0}, 0xe3}, 1.255 + {{0xb8, 0xba, 0}, 0xb9}, 1.256 + {{0xb8, 0xbc, 0}, 0xe6}, 1.257 + {{0xb8, 0xc1, 0}, 0xe4}, 1.258 + {{0xb8, 0xc2, 0}, 0xe5}, 1.259 + {{0xba, 0xa8, 0}, 0xe7}, 1.260 + {{0xba, 0xae, 0}, 0xe8}, 1.261 + {{0xba, 0xaf, 0}, 0xe9}, 1.262 + {{0xba, 0xb8, 0}, 0xea}, 1.263 + {{0xba, 0xba, 0}, 0xbb}, 1.264 + {{0xbc, 0xa8, 0}, 0xec}, 1.265 + {{0xbc, 0xa9, 0}, 0xed}, 1.266 + {{0xbc, 0xbc, 0}, 0xee}, 1.267 + {{0xbc, 0xbf, 0}, 0xef}, 1.268 + {{0xc1, 0xb8, 0}, 0xf3}, 1.269 + {{0xc1, 0xbc, 0}, 0xf4}, 1.270 + {{0xc2, 0xab, 0}, 0xf5}, 1.271 + {{0xc2, 0xaf, 0}, 0xf6}, 1.272 + {{0xc2, 0xb7, 0}, 0xf7}, 1.273 + {{0xc2, 0xb8, 0}, 0xf8}, 1.274 + {{0xce, 0xc2, 0}, 0xcf}, 1.275 + {{0xdd, 0xba, 0}, 0xde}, 1.276 + {{0xec, 0xa8, 0}, 0xed}, 1.277 + {{0xf0, 0xba, 0}, 0xf1}, 1.278 + {{0xf0, 0xeb, 0}, 0xf2} 1.279 +}; 1.280 + 1.281 +/** 1.282 + * Extended Jamo clusters included below were identified by Korean linguists 1.283 + * consulted by Microsoft Korea and the list is available at 1.284 + * http://www.microsoft.com/typography/otfntdev/hangulot/appen.htm 1.285 + * as well as obtainable from truetype fonts supporting them. 1.286 + */ 1.287 + 1.288 +/** 1.289 + * The map from sequences of leading consonants forming consonant clusters 1.290 + * not encoded in U+1100 block to temporary code points in the 0xf000 block. 1.291 + * To reduce memory footprint, array elements are shifted by 0xf000 1.292 + * from their actual positions. 1.293 + */ 1.294 + 1.295 +const static JamoNormMap gExtLcClustersGroup1[]= 1.296 +{ 1.297 + {{0x05, 0x00, 0x00}, 0x6a}, // U+1105 U+1100 U+1100 => lc # 0x6a 1.298 + {{0x05, 0x03, 0x03}, 0x6c}, // U+1105 U+1103 U+1103 => lc # 0x6c 1.299 + {{0x05, 0x07, 0x07}, 0x6f}, // U+1105 U+1107 U+1107 => lc # 0x6f 1.300 + {{0x05, 0x07, 0x0b}, 0x70}, // U+1105 U+1107 U+110b => lc # 0x70 1.301 + {{0x07, 0x09, 0x10}, 0x77}, // U+1107 U+1109 U+1110 => lc # 0x77 1.302 + {{0x09, 0x09, 0x07}, 0x7a}, // U+1109 U+1109 U+1107 => lc # 0x7a 1.303 + {{0x0c, 0x0c, 0x12}, 0x7d}, // U+110c U+110c U+1112 => lc # 0x7d 1.304 +}; 1.305 + 1.306 +const static JamoNormMap gExtLcClustersGroup2[]= 1.307 +{ 1.308 + {{0x00, 0x03, 0}, 0x60}, // U+1100 U+1103 => lc # 0x60 1.309 + {{0x02, 0x09, 0}, 0x61}, // U+1102 U+1109 => lc # 0x61 1.310 + {{0x02, 0x0c, 0}, 0x62}, // U+1102 U+110c => lc # 0x62 1.311 + {{0x02, 0x12, 0}, 0x63}, // U+1102 U+1112 => lc # 0x63 1.312 + {{0x03, 0x05, 0}, 0x64}, // U+1103 U+1105 => lc # 0x64 1.313 + {{0x03, 0x06, 0}, 0x65}, // U+1103 U+1106 => lc # 0x65 1.314 + {{0x03, 0x07, 0}, 0x66}, // U+1103 U+1107 => lc # 0x66 1.315 + {{0x03, 0x09, 0}, 0x67}, // U+1103 U+1109 => lc # 0x67 1.316 + {{0x03, 0x0c, 0}, 0x68}, // U+1103 U+110c => lc # 0x68 1.317 + {{0x05, 0x00, 0}, 0x69}, // U+1105 U+1100 => lc # 0x69 1.318 + {{0x05, 0x01, 0}, 0x6a}, // U+1105 U+1101 => lc # 0x6a 1.319 + {{0x05, 0x03, 0}, 0x6b}, // U+1105 U+1103 => lc # 0x6b 1.320 + {{0x05, 0x04, 0}, 0x6c}, // U+1105 U+1104 => lc # 0x6c 1.321 + {{0x05, 0x06, 0}, 0x6d}, // U+1105 U+1106 => lc # 0x6d 1.322 + {{0x05, 0x07, 0}, 0x6e}, // U+1105 U+1107 => lc # 0x6e 1.323 + {{0x05, 0x08, 0}, 0x6f}, // U+1105 U+1108 => lc # 0x6f 1.324 + {{0x05, 0x09, 0}, 0x71}, // U+1105 U+1109 => lc # 0x71 1.325 + {{0x05, 0x0c, 0}, 0x72}, // U+1105 U+110c => lc # 0x72 1.326 + {{0x05, 0x0f, 0}, 0x73}, // U+1105 U+110f => lc # 0x73 1.327 + {{0x05, 0x2b, 0}, 0x70}, // U+1105 U+112b => lc # 0x70 1.328 + {{0x06, 0x00, 0}, 0x74}, // U+1106 U+1100 => lc # 0x74 1.329 + {{0x06, 0x03, 0}, 0x75}, // U+1106 U+1103 => lc # 0x75 1.330 + {{0x06, 0x09, 0}, 0x76}, // U+1106 U+1109 => lc # 0x76 1.331 + {{0x07, 0x0f, 0}, 0x78}, // U+1107 U+110f => lc # 0x78 1.332 + {{0x07, 0x12, 0}, 0x79}, // U+1107 U+1112 => lc # 0x79 1.333 + {{0x0a, 0x07, 0}, 0x7a}, // U+110a U+1107 => lc # 0x7a 1.334 + {{0x0b, 0x05, 0}, 0x7b}, // U+110b U+1105 => lc # 0x7b 1.335 + {{0x0b, 0x12, 0}, 0x7c}, // U+110b U+1112 => lc # 0x7c 1.336 + {{0x0d, 0x12, 0}, 0x7d}, // U+110d U+1112 => lc # 0x7d 1.337 + {{0x10, 0x10, 0}, 0x7e}, // U+1110 U+1110 => lc # 0x7e 1.338 + {{0x11, 0x12, 0}, 0x7f}, // U+1111 U+1112 => lc # 0x7f 1.339 + {{0x12, 0x09, 0}, 0x80}, // U+1112 U+1109 => lc # 0x80 1.340 + {{0x59, 0x59, 0}, 0x81}, // U+1159 U+1159 => lc # 0x81 1.341 +}; 1.342 + 1.343 +/** 1.344 + * The map from sequences of vowels forming vowels clusters 1.345 + * not encoded in U+1100 block to temporary code points in the 0xf100 block. 1.346 + * To reduce memory footprint, array elements are shifted by 0xf100 1.347 + * from their actual positions. 1.348 + */ 1.349 + 1.350 +const static JamoNormMap gExtVoClustersGroup1[]= 1.351 +{ 1.352 + {{0x09, 0x03, 0x15}, 0x47}, // U+1169 U+1163 U+1175 => vowel # 0x47 1.353 + {{0x09, 0x0e, 0x3e}, 0x49}, // U+1169 U+116e U+119e => vowel # 0x49 1.354 + {{0x0d, 0x01, 0x15}, 0x4b}, // U+116d U+1161 U+1175 => vowel # 0x4b 1.355 + {{0x0e, 0x15, 0x15}, 0x4e}, // U+116e U+1175 U+1175 => vowel # 0x4e 1.356 + {{0x12, 0x01, 0x15}, 0x4f}, // U+1172 U+1161 U+1175 => vowel # 0x4f 1.357 + {{0x13, 0x05, 0x15}, 0x53}, // U+1173 U+1165 U+1175 => vowel # 0x53 1.358 + {{0x15, 0x03, 0x09}, 0x55}, // U+1175 U+1163 U+1169 => vowel # 0x55 1.359 + {{0x15, 0x03, 0x15}, 0x56}, // U+1175 U+1163 U+1175 => vowel # 0x56 1.360 + {{0x15, 0x07, 0x15}, 0x58}, // U+1175 U+1167 U+1175 => vowel # 0x58 1.361 + {{0x15, 0x09, 0x3e}, 0x59}, // U+1175 U+1169 U+119e => vowel # 0x59 1.362 + {{0x3e, 0x05, 0x15}, 0x5e}, // U+119e U+1165 U+1175 => vowel # 0x5e 1.363 +}; 1.364 + 1.365 +const static JamoNormMap gExtVoClustersGroup2[]= 1.366 +{ 1.367 + {{0x01, 0x13, 0}, 0x43}, // U+1161 U+1173 => vowel # 0x43 1.368 + {{0x03, 0x0e, 0}, 0x44}, // U+1163 U+116e => vowel # 0x44 1.369 + {{0x07, 0x03, 0}, 0x45}, // U+1167 U+1163 => vowel # 0x45 1.370 + {{0x09, 0x03, 0}, 0x46}, // U+1169 U+1163 => vowel # 0x46 1.371 + {{0x09, 0x04, 0}, 0x47}, // U+1169 U+1164 => vowel # 0x47 1.372 + {{0x09, 0x07, 0}, 0x48}, // U+1169 U+1167 => vowel # 0x48 1.373 + {{0x0d, 0x01, 0}, 0x4a}, // U+116d U+1161 => vowel # 0x4a 1.374 + {{0x0d, 0x02, 0}, 0x4b}, // U+116d U+1162 => vowel # 0x4b 1.375 + {{0x0d, 0x05, 0}, 0x4c}, // U+116d U+1165 => vowel # 0x4c 1.376 + {{0x0e, 0x07, 0}, 0x4d}, // U+116e U+1167 => vowel # 0x4d 1.377 + {{0x11, 0x15, 0}, 0x4e}, // U+1171 U+1175 => vowel # 0x4e 1.378 + {{0x12, 0x02, 0}, 0x4f}, // U+1172 U+1162 => vowel # 0x4f 1.379 + {{0x12, 0x09, 0}, 0x50}, // U+1172 U+1169 => vowel # 0x50 1.380 + {{0x13, 0x01, 0}, 0x51}, // U+1173 U+1161 => vowel # 0x51 1.381 + {{0x13, 0x05, 0}, 0x52}, // U+1173 U+1165 => vowel # 0x52 1.382 + {{0x13, 0x06, 0}, 0x53}, // U+1173 U+1166 => vowel # 0x53 1.383 + {{0x13, 0x09, 0}, 0x54}, // U+1173 U+1169 => vowel # 0x54 1.384 + {{0x15, 0x04, 0}, 0x56}, // U+1175 U+1164 => vowel # 0x56 1.385 + {{0x15, 0x07, 0}, 0x57}, // U+1175 U+1167 => vowel # 0x57 1.386 + {{0x15, 0x08, 0}, 0x58}, // U+1175 U+1168 => vowel # 0x58 1.387 + {{0x15, 0x0d, 0}, 0x5a}, // U+1175 U+116d => vowel # 0x5a 1.388 + {{0x15, 0x12, 0}, 0x5b}, // U+1175 U+1172 => vowel # 0x5b 1.389 + {{0x15, 0x15, 0}, 0x5c}, // U+1175 U+1175 => vowel # 0x5c 1.390 + {{0x23, 0x3e, 0}, 0x49}, // U+1183 U+119e => vowel # 0x49 1.391 + {{0x2e, 0x15, 0}, 0x4f}, // U+118e U+1175 => vowel # 0x4f 1.392 + {{0x3a, 0x3e, 0}, 0x59}, // U+119a U+119e => vowel # 0x59 1.393 + {{0x3e, 0x01, 0}, 0x5d}, // U+119e U+1161 => vowel # 0x5d 1.394 + {{0x3e, 0x06, 0}, 0x5e}, // U+119e U+1166 => vowel # 0x5e 1.395 + {{0x3f, 0x15, 0}, 0x5e}, // U+119f U+1175 => vowel # 0x5e 1.396 +}; 1.397 + 1.398 +/** 1.399 + * The map from sequences of trailing consonants forming consonant clusters 1.400 + * not encoded in U+1100 block to temporary code points in the 0xf200 block. 1.401 + * To reduce memory footprint, array elements are shifted by 0xf200 1.402 + * from their actual positions. 1.403 + */ 1.404 + 1.405 +const static JamoNormMap gExtTcClustersGroup1[]= 1.406 +{ 1.407 + {{0x06, 0x06, 0x10}, 0x5b}, // U+11ae U+11ae U+11b8 => tc # 0x5b 1.408 + {{0x06, 0x12, 0x00}, 0x5e}, // U+11ae U+11ba U+11a8 => tc # 0x5e 1.409 + {{0x07, 0x00, 0x00}, 0x62}, // U+11af U+11a8 U+11a8 => tc # 0x62 1.410 + {{0x07, 0x00, 0x1a}, 0x63}, // U+11af U+11a8 U+11c2 => tc # 0x63 1.411 + {{0x07, 0x07, 0x17}, 0x64}, // U+11af U+11af U+11bf => tc # 0x64 1.412 + {{0x07, 0x0f, 0x1a}, 0x65}, // U+11af U+11b7 U+11c2 => tc # 0x65 1.413 + {{0x07, 0x10, 0x06}, 0x66}, // U+11af U+11b8 U+11ae => tc # 0x66 1.414 + {{0x07, 0x10, 0x19}, 0x67}, // U+11af U+11b8 U+11c1 => tc # 0x67 1.415 + {{0x07, 0x51, 0x1a}, 0x69}, // U+11af U+11f9 U+11c2 => tc # 0x69 1.416 + {{0x0f, 0x03, 0x03}, 0x6c}, // U+11b7 U+11ab U+11ab => tc # 0x6c 1.417 + {{0x0f, 0x10, 0x12}, 0x6e}, // U+11b7 U+11b8 U+11ba => tc # 0x6e 1.418 + {{0x10, 0x07, 0x19}, 0x71}, // U+11b8 U+11af U+11c1 => tc # 0x71 1.419 + {{0x10, 0x12, 0x06}, 0x74}, // U+11b8 U+11ba U+11ae => tc # 0x74 1.420 + {{0x12, 0x10, 0x14}, 0x78}, // U+11ba U+11b8 U+11bc => tc # 0x78 1.421 + {{0x12, 0x12, 0x00}, 0x79}, // U+11ba U+11ba U+11a8 => tc # 0x79 1.422 + {{0x12, 0x12, 0x06}, 0x7a}, // U+11ba U+11ba U+11ae => tc # 0x7a 1.423 + {{0x15, 0x10, 0x10}, 0x89}, // U+11bd U+11b8 U+11b8 => tc # 0x89 1.424 + {{0x43, 0x10, 0x14}, 0x81}, // U+11eb U+11b8 U+11bc => tc # 0x81 1.425 +}; 1.426 + 1.427 +const static JamoNormMap gExtTcClustersGroup2[]= 1.428 +{ 1.429 + {{0x00, 0x03, 0}, 0x52}, // U+11a8 U+11ab => tc # 0x52 1.430 + {{0x00, 0x10, 0}, 0x53}, // U+11a8 U+11b8 => tc # 0x53 1.431 + {{0x00, 0x16, 0}, 0x54}, // U+11a8 U+11be => tc # 0x54 1.432 + {{0x00, 0x17, 0}, 0x55}, // U+11a8 U+11bf => tc # 0x55 1.433 + {{0x00, 0x1a, 0}, 0x56}, // U+11a8 U+11c2 => tc # 0x56 1.434 + {{0x03, 0x03, 0}, 0x57}, // U+11ab U+11ab => tc # 0x57 1.435 + {{0x03, 0x07, 0}, 0x58}, // U+11ab U+11af => tc # 0x58 1.436 + {{0x03, 0x16, 0}, 0x59}, // U+11ab U+11be => tc # 0x59 1.437 + {{0x06, 0x06, 0}, 0x5a}, // U+11ae U+11ae => tc # 0x5a 1.438 + {{0x06, 0x10, 0}, 0x5c}, // U+11ae U+11b8 => tc # 0x5c 1.439 + {{0x06, 0x12, 0}, 0x5d}, // U+11ae U+11ba => tc # 0x5d 1.440 + {{0x06, 0x15, 0}, 0x5f}, // U+11ae U+11bd => tc # 0x5f 1.441 + {{0x06, 0x16, 0}, 0x60}, // U+11ae U+11be => tc # 0x60 1.442 + {{0x06, 0x18, 0}, 0x61}, // U+11ae U+11c0 => tc # 0x61 1.443 + {{0x06, 0x3f, 0}, 0x5e}, // U+11ae U+11e7 => tc # 0x5e 1.444 + {{0x07, 0x01, 0}, 0x62}, // U+11af U+11a9 => tc # 0x62 1.445 + {{0x07, 0x14, 0}, 0x6a}, // U+11af U+11bc => tc # 0x6a 1.446 + {{0x07, 0x30, 0}, 0x64}, // U+11af U+11d8 => tc # 0x64 1.447 + {{0x07, 0x39, 0}, 0x65}, // U+11af U+11e1 => tc # 0x65 1.448 + {{0x07, 0x3c, 0}, 0x67}, // U+11af U+11e4 => tc # 0x67 1.449 + {{0x07, 0x48, 0}, 0x68}, // U+11af U+11f0 => tc # 0x68 1.450 + {{0x08, 0x00, 0}, 0x62}, // U+11b0 U+11a8 => tc # 0x62 1.451 + {{0x08, 0x1a, 0}, 0x63}, // U+11b0 U+11c2 => tc # 0x63 1.452 + {{0x09, 0x1a, 0}, 0x65}, // U+11b1 U+11c2 => tc # 0x65 1.453 + {{0x0a, 0x06, 0}, 0x66}, // U+11b2 U+11ae => tc # 0x66 1.454 + {{0x0a, 0x19, 0}, 0x67}, // U+11b2 U+11c1 => tc # 0x67 1.455 + {{0x0f, 0x03, 0}, 0x6b}, // U+11b7 U+11ab => tc # 0x6b 1.456 + {{0x0f, 0x0f, 0}, 0x6d}, // U+11b7 U+11b7 => tc # 0x6d 1.457 + {{0x0f, 0x11, 0}, 0x6e}, // U+11b7 U+11b9 => tc # 0x6e 1.458 + {{0x0f, 0x15, 0}, 0x6f}, // U+11b7 U+11bd => tc # 0x6f 1.459 + {{0x10, 0x06, 0}, 0x70}, // U+11b8 U+11ae => tc # 0x70 1.460 + {{0x10, 0x0f, 0}, 0x72}, // U+11b8 U+11b7 => tc # 0x72 1.461 + {{0x10, 0x10, 0}, 0x73}, // U+11b8 U+11b8 => tc # 0x73 1.462 + {{0x10, 0x15, 0}, 0x75}, // U+11b8 U+11bd => tc # 0x75 1.463 + {{0x10, 0x16, 0}, 0x76}, // U+11b8 U+11be => tc # 0x76 1.464 + {{0x10, 0x40, 0}, 0x74}, // U+11b8 U+11e8 => tc # 0x74 1.465 + {{0x11, 0x06, 0}, 0x74}, // U+11b9 U+11ae => tc # 0x74 1.466 + {{0x12, 0x0f, 0}, 0x77}, // U+11ba U+11b7 => tc # 0x77 1.467 + {{0x12, 0x15, 0}, 0x7c}, // U+11ba U+11bd => tc # 0x7c 1.468 + {{0x12, 0x16, 0}, 0x7d}, // U+11ba U+11be => tc # 0x7d 1.469 + {{0x12, 0x18, 0}, 0x7e}, // U+11ba U+11c0 => tc # 0x7e 1.470 + {{0x12, 0x1a, 0}, 0x7f}, // U+11ba U+11c2 => tc # 0x7f 1.471 + {{0x12, 0x3e, 0}, 0x78}, // U+11ba U+11e6 => tc # 0x78 1.472 + {{0x12, 0x3f, 0}, 0x79}, // U+11ba U+11e7 => tc # 0x79 1.473 + {{0x12, 0x40, 0}, 0x7a}, // U+11ba U+11e8 => tc # 0x7a 1.474 + {{0x12, 0x43, 0}, 0x7b}, // U+11ba U+11eb => tc # 0x7b 1.475 + {{0x13, 0x00, 0}, 0x79}, // U+11bb U+11a8 => tc # 0x79 1.476 + {{0x13, 0x06, 0}, 0x7a}, // U+11bb U+11ae => tc # 0x7a 1.477 + {{0x14, 0x0f, 0}, 0x82}, // U+11bc U+11b7 => tc # 0x82 1.478 + {{0x14, 0x12, 0}, 0x83}, // U+11bc U+11ba => tc # 0x83 1.479 + {{0x14, 0x1a, 0}, 0x84}, // U+11bc U+11c2 => tc # 0x84 1.480 + {{0x15, 0x10, 0}, 0x88}, // U+11bd U+11b8 => tc # 0x88 1.481 + {{0x15, 0x15, 0}, 0x8a}, // U+11bd U+11bd => tc # 0x8a 1.482 + {{0x19, 0x14, 0}, 0x8c}, // U+11c1 U+11bc => tc # 0x8c 1.483 + {{0x19, 0x18, 0}, 0x8b}, // U+11c1 U+11c0 => tc # 0x8b 1.484 + {{0x28, 0x17, 0}, 0x64}, // U+11d0 U+11bf => tc # 0x64 1.485 + {{0x31, 0x1a, 0}, 0x69}, // U+11d9 U+11c2 => tc # 0x69 1.486 + {{0x34, 0x12, 0}, 0x6e}, // U+11dc U+11ba => tc # 0x6e 1.487 + {{0x3b, 0x19, 0}, 0x71}, // U+11e3 U+11c1 => tc # 0x71 1.488 + {{0x42, 0x14, 0}, 0x78}, // U+11ea U+11bc => tc # 0x78 1.489 + {{0x43, 0x10, 0}, 0x80}, // U+11eb U+11b8 => tc # 0x80 1.490 + {{0x43, 0x3e, 0}, 0x81}, // U+11eb U+11e6 => tc # 0x81 1.491 + {{0x48, 0x00, 0}, 0x85}, // U+11f0 U+11a8 => tc # 0x85 1.492 + {{0x48, 0x17, 0}, 0x86}, // U+11f0 U+11bf => tc # 0x86 1.493 + {{0x48, 0x1a, 0}, 0x87}, // U+11f0 U+11c2 => tc # 0x87 1.494 +};