intl/uconv/ucvko/jamoclusters.h

changeset 0
6474c204b198
     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 +};

mercurial