|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 /* |
|
6 * The mapping table converting a sequence of 'basic' jamos to a cluster jamo. |
|
7 * There are 4 groups in the table. Group 1 and Group 2 are obtained by the |
|
8 * direct translation of Hangul Jamo compatibility decomposition mapping |
|
9 * found in Unicode 2.0 data table at |
|
10 * ftp://ftp.unicode.org/Public/2.0-update to |
|
11 * JamoNormMap type struct. Group 3 and Group 4 are derived from Group 1 |
|
12 * entries mapping a sequence of three Jamos to a cluster Jamo. In Group 3 and |
|
13 * Group 4, the first two Jamos or the last two Jamos in Group 1 are combined |
|
14 * together, if possible, to form a new 'basic' Jamo that, in turn is mapped |
|
15 * along with the last Jamo (in case of Group 3) or the first Jamo (in Group 4) |
|
16 * to a cluster jamo. |
|
17 * |
|
18 * The full list is available at http://jshin.net/i18n/korean/jamocomp.html. |
|
19 */ |
|
20 |
|
21 // To reduce memory footprint, array elements are shifted by 0x1100 |
|
22 // from their actual positions at 0x1100. |
|
23 |
|
24 // group 1: cluster jamos made of three basic jamos sorted for binary search |
|
25 |
|
26 const static JamoNormMap gJamoClustersGroup1[] = |
|
27 { |
|
28 {{0x07, 0x07, 0x0b}, 0x2c}, |
|
29 {{0x07, 0x09, 0x00}, 0x22}, |
|
30 {{0x07, 0x09, 0x03}, 0x23}, |
|
31 {{0x07, 0x09, 0x07}, 0x24}, |
|
32 {{0x07, 0x09, 0x09}, 0x25}, |
|
33 {{0x07, 0x09, 0x0c}, 0x26}, |
|
34 {{0x09, 0x07, 0x00}, 0x33}, |
|
35 {{0x09, 0x09, 0x09}, 0x34}, |
|
36 {{0x69, 0x61, 0x75}, 0x6b}, |
|
37 {{0x69, 0x65, 0x75}, 0x80}, |
|
38 {{0x69, 0x67, 0x75}, 0x81}, |
|
39 {{0x6d, 0x63, 0x75}, 0x85}, |
|
40 {{0x6e, 0x61, 0x75}, 0x8a}, |
|
41 {{0x6e, 0x65, 0x73}, 0x8b}, |
|
42 {{0x6e, 0x65, 0x75}, 0x70}, |
|
43 {{0x6e, 0x67, 0x75}, 0x8c}, |
|
44 {{0x72, 0x65, 0x75}, 0x90}, |
|
45 {{0x72, 0x67, 0x75}, 0x92}, |
|
46 {{0x73, 0x75, 0x6e}, 0x97}, |
|
47 {{0xa8, 0xba, 0xa8}, 0xc4}, |
|
48 {{0xaf, 0xa8, 0xba}, 0xcc}, |
|
49 {{0xaf, 0xae, 0xc2}, 0xcf}, |
|
50 {{0xaf, 0xb7, 0xa8}, 0xd1}, |
|
51 {{0xaf, 0xb7, 0xba}, 0xd2}, |
|
52 {{0xaf, 0xb8, 0xba}, 0xd3}, |
|
53 {{0xaf, 0xb8, 0xbc}, 0xd5}, |
|
54 {{0xaf, 0xb8, 0xc2}, 0xd4}, |
|
55 {{0xaf, 0xba, 0xba}, 0xd6}, |
|
56 {{0xb7, 0xba, 0xba}, 0xde}, |
|
57 {{0xbc, 0xa8, 0xa8}, 0xed} |
|
58 }; |
|
59 |
|
60 const static JamoNormMap gJamoClustersGroup234[] = |
|
61 { |
|
62 {{0x00, 0x00, 0}, 0x01}, |
|
63 {{0x02, 0x00, 0}, 0x13}, |
|
64 {{0x02, 0x02, 0}, 0x14}, |
|
65 {{0x02, 0x03, 0}, 0x15}, |
|
66 {{0x02, 0x07, 0}, 0x16}, |
|
67 {{0x03, 0x00, 0}, 0x17}, |
|
68 {{0x03, 0x03, 0}, 0x04}, |
|
69 {{0x05, 0x02, 0}, 0x18}, |
|
70 {{0x05, 0x05, 0}, 0x19}, |
|
71 {{0x05, 0x0b, 0}, 0x1b}, |
|
72 {{0x05, 0x12, 0}, 0x1a}, |
|
73 {{0x06, 0x07, 0}, 0x1c}, |
|
74 {{0x06, 0x0b, 0}, 0x1d}, |
|
75 {{0x07, 0x00, 0}, 0x1e}, |
|
76 {{0x07, 0x02, 0}, 0x1f}, |
|
77 {{0x07, 0x03, 0}, 0x20}, |
|
78 {{0x07, 0x07, 0}, 0x08}, |
|
79 {{0x07, 0x09, 0}, 0x21}, |
|
80 {{0x07, 0x0a, 0}, 0x25}, |
|
81 {{0x07, 0x0b, 0}, 0x2b}, |
|
82 {{0x07, 0x0c, 0}, 0x27}, |
|
83 {{0x07, 0x0e, 0}, 0x28}, |
|
84 {{0x07, 0x10, 0}, 0x29}, |
|
85 {{0x07, 0x11, 0}, 0x2a}, |
|
86 {{0x07, 0x2b, 0}, 0x2c}, |
|
87 {{0x07, 0x2d, 0}, 0x22}, |
|
88 {{0x07, 0x2f, 0}, 0x23}, |
|
89 {{0x07, 0x32, 0}, 0x24}, |
|
90 {{0x07, 0x36, 0}, 0x26}, |
|
91 {{0x08, 0x0b, 0}, 0x2c}, |
|
92 {{0x09, 0x00, 0}, 0x2d}, |
|
93 {{0x09, 0x02, 0}, 0x2e}, |
|
94 {{0x09, 0x03, 0}, 0x2f}, |
|
95 {{0x09, 0x05, 0}, 0x30}, |
|
96 {{0x09, 0x06, 0}, 0x31}, |
|
97 {{0x09, 0x07, 0}, 0x32}, |
|
98 {{0x09, 0x09, 0}, 0x0a}, |
|
99 {{0x09, 0x0a, 0}, 0x34}, |
|
100 {{0x09, 0x0b, 0}, 0x35}, |
|
101 {{0x09, 0x0c, 0}, 0x36}, |
|
102 {{0x09, 0x0e, 0}, 0x37}, |
|
103 {{0x09, 0x0f, 0}, 0x38}, |
|
104 {{0x09, 0x10, 0}, 0x39}, |
|
105 {{0x09, 0x11, 0}, 0x3a}, |
|
106 {{0x09, 0x12, 0}, 0x3b}, |
|
107 {{0x09, 0x1e, 0}, 0x33}, |
|
108 {{0x0a, 0x09, 0}, 0x34}, |
|
109 {{0x0b, 0x00, 0}, 0x41}, |
|
110 {{0x0b, 0x03, 0}, 0x42}, |
|
111 {{0x0b, 0x06, 0}, 0x43}, |
|
112 {{0x0b, 0x07, 0}, 0x44}, |
|
113 {{0x0b, 0x09, 0}, 0x45}, |
|
114 {{0x0b, 0x0b, 0}, 0x47}, |
|
115 {{0x0b, 0x0c, 0}, 0x48}, |
|
116 {{0x0b, 0x0e, 0}, 0x49}, |
|
117 {{0x0b, 0x10, 0}, 0x4a}, |
|
118 {{0x0b, 0x11, 0}, 0x4b}, |
|
119 {{0x0b, 0x40, 0}, 0x46}, |
|
120 {{0x0c, 0x0b, 0}, 0x4d}, |
|
121 {{0x0c, 0x0c, 0}, 0x0d}, |
|
122 {{0x0e, 0x0f, 0}, 0x52}, |
|
123 {{0x0e, 0x12, 0}, 0x53}, |
|
124 {{0x11, 0x07, 0}, 0x56}, |
|
125 {{0x11, 0x0b, 0}, 0x57}, |
|
126 {{0x12, 0x12, 0}, 0x58}, |
|
127 {{0x21, 0x00, 0}, 0x22}, |
|
128 {{0x21, 0x03, 0}, 0x23}, |
|
129 {{0x21, 0x07, 0}, 0x24}, |
|
130 {{0x21, 0x09, 0}, 0x25}, |
|
131 {{0x21, 0x0c, 0}, 0x26}, |
|
132 {{0x32, 0x00, 0}, 0x33}, |
|
133 {{0x3c, 0x3c, 0}, 0x3d}, |
|
134 {{0x3e, 0x3e, 0}, 0x3f}, |
|
135 {{0x4e, 0x4e, 0}, 0x4f}, |
|
136 {{0x50, 0x50, 0}, 0x51}, |
|
137 {{0x61, 0x69, 0}, 0x76}, |
|
138 {{0x61, 0x6e, 0}, 0x77}, |
|
139 {{0x61, 0x75, 0}, 0x62}, |
|
140 {{0x63, 0x69, 0}, 0x78}, |
|
141 {{0x63, 0x6d, 0}, 0x79}, |
|
142 {{0x63, 0x75, 0}, 0x64}, |
|
143 {{0x65, 0x69, 0}, 0x7a}, |
|
144 {{0x65, 0x6e, 0}, 0x7b}, |
|
145 {{0x65, 0x73, 0}, 0x7c}, |
|
146 {{0x65, 0x75, 0}, 0x66}, |
|
147 {{0x67, 0x69, 0}, 0x7d}, |
|
148 {{0x67, 0x6e, 0}, 0x7e}, |
|
149 {{0x67, 0x75, 0}, 0x68}, |
|
150 {{0x69, 0x61, 0}, 0x6a}, |
|
151 {{0x69, 0x62, 0}, 0x6b}, |
|
152 {{0x69, 0x65, 0}, 0x7f}, |
|
153 {{0x69, 0x66, 0}, 0x80}, |
|
154 {{0x69, 0x68, 0}, 0x81}, |
|
155 {{0x69, 0x69, 0}, 0x82}, |
|
156 {{0x69, 0x6e, 0}, 0x83}, |
|
157 {{0x69, 0x75, 0}, 0x6c}, |
|
158 {{0x6a, 0x75, 0}, 0x6b}, |
|
159 {{0x6d, 0x63, 0}, 0x84}, |
|
160 {{0x6d, 0x64, 0}, 0x85}, |
|
161 {{0x6d, 0x67, 0}, 0x86}, |
|
162 {{0x6d, 0x69, 0}, 0x87}, |
|
163 {{0x6d, 0x75, 0}, 0x88}, |
|
164 {{0x6e, 0x61, 0}, 0x89}, |
|
165 {{0x6e, 0x62, 0}, 0x8a}, |
|
166 {{0x6e, 0x65, 0}, 0x6f}, |
|
167 {{0x6e, 0x66, 0}, 0x70}, |
|
168 {{0x6e, 0x68, 0}, 0x8c}, |
|
169 {{0x6e, 0x6e, 0}, 0x8d}, |
|
170 {{0x6e, 0x75, 0}, 0x71}, |
|
171 {{0x6e, 0x7c, 0}, 0x8b}, |
|
172 {{0x6f, 0x73, 0}, 0x8b}, |
|
173 {{0x6f, 0x75, 0}, 0x70}, |
|
174 {{0x72, 0x61, 0}, 0x8e}, |
|
175 {{0x72, 0x65, 0}, 0x8f}, |
|
176 {{0x72, 0x66, 0}, 0x90}, |
|
177 {{0x72, 0x67, 0}, 0x91}, |
|
178 {{0x72, 0x68, 0}, 0x92}, |
|
179 {{0x72, 0x6e, 0}, 0x93}, |
|
180 {{0x72, 0x75, 0}, 0x94}, |
|
181 {{0x73, 0x6e, 0}, 0x95}, |
|
182 {{0x73, 0x73, 0}, 0x96}, |
|
183 {{0x73, 0x75, 0}, 0x74}, |
|
184 {{0x73, 0x9b, 0}, 0x97}, |
|
185 {{0x74, 0x6e, 0}, 0x97}, |
|
186 {{0x75, 0x61, 0}, 0x98}, |
|
187 {{0x75, 0x63, 0}, 0x99}, |
|
188 {{0x75, 0x69, 0}, 0x9a}, |
|
189 {{0x75, 0x6e, 0}, 0x9b}, |
|
190 {{0x75, 0x73, 0}, 0x9c}, |
|
191 {{0x75, 0x9e, 0}, 0x9d}, |
|
192 {{0x7f, 0x75, 0}, 0x80}, |
|
193 {{0x84, 0x75, 0}, 0x85}, |
|
194 {{0x89, 0x75, 0}, 0x8a}, |
|
195 {{0x8f, 0x75, 0}, 0x90}, |
|
196 {{0x91, 0x75, 0}, 0x92}, |
|
197 {{0x9e, 0x65, 0}, 0x9f}, |
|
198 {{0x9e, 0x6e, 0}, 0xa0}, |
|
199 {{0x9e, 0x75, 0}, 0xa1}, |
|
200 {{0x9e, 0x9e, 0}, 0xa2}, |
|
201 {{0xa8, 0xa8, 0}, 0xa9}, |
|
202 {{0xa8, 0xaf, 0}, 0xc3}, |
|
203 {{0xa8, 0xba, 0}, 0xaa}, |
|
204 {{0xa8, 0xe7, 0}, 0xc4}, |
|
205 {{0xaa, 0xa8, 0}, 0xc4}, |
|
206 {{0xab, 0xa8, 0}, 0xc5}, |
|
207 {{0xab, 0xae, 0}, 0xc6}, |
|
208 {{0xab, 0xba, 0}, 0xc7}, |
|
209 {{0xab, 0xbd, 0}, 0xac}, |
|
210 {{0xab, 0xc0, 0}, 0xc9}, |
|
211 {{0xab, 0xc2, 0}, 0xad}, |
|
212 {{0xab, 0xeb, 0}, 0xc8}, |
|
213 {{0xae, 0xa8, 0}, 0xca}, |
|
214 {{0xae, 0xaf, 0}, 0xcb}, |
|
215 {{0xaf, 0xa8, 0}, 0xb0}, |
|
216 {{0xaf, 0xaa, 0}, 0xcc}, |
|
217 {{0xaf, 0xab, 0}, 0xcd}, |
|
218 {{0xaf, 0xae, 0}, 0xce}, |
|
219 {{0xaf, 0xaf, 0}, 0xd0}, |
|
220 {{0xaf, 0xb7, 0}, 0xb1}, |
|
221 {{0xaf, 0xb8, 0}, 0xb2}, |
|
222 {{0xaf, 0xb9, 0}, 0xd3}, |
|
223 {{0xaf, 0xba, 0}, 0xb3}, |
|
224 {{0xaf, 0xbb, 0}, 0xd6}, |
|
225 {{0xaf, 0xbf, 0}, 0xd8}, |
|
226 {{0xaf, 0xc0, 0}, 0xb4}, |
|
227 {{0xaf, 0xc1, 0}, 0xb5}, |
|
228 {{0xaf, 0xc2, 0}, 0xb6}, |
|
229 {{0xaf, 0xda, 0}, 0xd1}, |
|
230 {{0xaf, 0xdd, 0}, 0xd2}, |
|
231 {{0xaf, 0xe5, 0}, 0xd4}, |
|
232 {{0xaf, 0xe6, 0}, 0xd5}, |
|
233 {{0xaf, 0xeb, 0}, 0xd7}, |
|
234 {{0xaf, 0xf9, 0}, 0xd9}, |
|
235 {{0xb0, 0xba, 0}, 0xcc}, |
|
236 {{0xb1, 0xa8, 0}, 0xd1}, |
|
237 {{0xb1, 0xba, 0}, 0xd2}, |
|
238 {{0xb2, 0xba, 0}, 0xd3}, |
|
239 {{0xb2, 0xbc, 0}, 0xd5}, |
|
240 {{0xb2, 0xc2, 0}, 0xd4}, |
|
241 {{0xb3, 0xba, 0}, 0xd6}, |
|
242 {{0xb7, 0xa8, 0}, 0xda}, |
|
243 {{0xb7, 0xaf, 0}, 0xdb}, |
|
244 {{0xb7, 0xb8, 0}, 0xdc}, |
|
245 {{0xb7, 0xba, 0}, 0xdd}, |
|
246 {{0xb7, 0xbb, 0}, 0xde}, |
|
247 {{0xb7, 0xbc, 0}, 0xe2}, |
|
248 {{0xb7, 0xbe, 0}, 0xe0}, |
|
249 {{0xb7, 0xc2, 0}, 0xe1}, |
|
250 {{0xb7, 0xeb, 0}, 0xdf}, |
|
251 {{0xb8, 0xaf, 0}, 0xe3}, |
|
252 {{0xb8, 0xba, 0}, 0xb9}, |
|
253 {{0xb8, 0xbc, 0}, 0xe6}, |
|
254 {{0xb8, 0xc1, 0}, 0xe4}, |
|
255 {{0xb8, 0xc2, 0}, 0xe5}, |
|
256 {{0xba, 0xa8, 0}, 0xe7}, |
|
257 {{0xba, 0xae, 0}, 0xe8}, |
|
258 {{0xba, 0xaf, 0}, 0xe9}, |
|
259 {{0xba, 0xb8, 0}, 0xea}, |
|
260 {{0xba, 0xba, 0}, 0xbb}, |
|
261 {{0xbc, 0xa8, 0}, 0xec}, |
|
262 {{0xbc, 0xa9, 0}, 0xed}, |
|
263 {{0xbc, 0xbc, 0}, 0xee}, |
|
264 {{0xbc, 0xbf, 0}, 0xef}, |
|
265 {{0xc1, 0xb8, 0}, 0xf3}, |
|
266 {{0xc1, 0xbc, 0}, 0xf4}, |
|
267 {{0xc2, 0xab, 0}, 0xf5}, |
|
268 {{0xc2, 0xaf, 0}, 0xf6}, |
|
269 {{0xc2, 0xb7, 0}, 0xf7}, |
|
270 {{0xc2, 0xb8, 0}, 0xf8}, |
|
271 {{0xce, 0xc2, 0}, 0xcf}, |
|
272 {{0xdd, 0xba, 0}, 0xde}, |
|
273 {{0xec, 0xa8, 0}, 0xed}, |
|
274 {{0xf0, 0xba, 0}, 0xf1}, |
|
275 {{0xf0, 0xeb, 0}, 0xf2} |
|
276 }; |
|
277 |
|
278 /** |
|
279 * Extended Jamo clusters included below were identified by Korean linguists |
|
280 * consulted by Microsoft Korea and the list is available at |
|
281 * http://www.microsoft.com/typography/otfntdev/hangulot/appen.htm |
|
282 * as well as obtainable from truetype fonts supporting them. |
|
283 */ |
|
284 |
|
285 /** |
|
286 * The map from sequences of leading consonants forming consonant clusters |
|
287 * not encoded in U+1100 block to temporary code points in the 0xf000 block. |
|
288 * To reduce memory footprint, array elements are shifted by 0xf000 |
|
289 * from their actual positions. |
|
290 */ |
|
291 |
|
292 const static JamoNormMap gExtLcClustersGroup1[]= |
|
293 { |
|
294 {{0x05, 0x00, 0x00}, 0x6a}, // U+1105 U+1100 U+1100 => lc # 0x6a |
|
295 {{0x05, 0x03, 0x03}, 0x6c}, // U+1105 U+1103 U+1103 => lc # 0x6c |
|
296 {{0x05, 0x07, 0x07}, 0x6f}, // U+1105 U+1107 U+1107 => lc # 0x6f |
|
297 {{0x05, 0x07, 0x0b}, 0x70}, // U+1105 U+1107 U+110b => lc # 0x70 |
|
298 {{0x07, 0x09, 0x10}, 0x77}, // U+1107 U+1109 U+1110 => lc # 0x77 |
|
299 {{0x09, 0x09, 0x07}, 0x7a}, // U+1109 U+1109 U+1107 => lc # 0x7a |
|
300 {{0x0c, 0x0c, 0x12}, 0x7d}, // U+110c U+110c U+1112 => lc # 0x7d |
|
301 }; |
|
302 |
|
303 const static JamoNormMap gExtLcClustersGroup2[]= |
|
304 { |
|
305 {{0x00, 0x03, 0}, 0x60}, // U+1100 U+1103 => lc # 0x60 |
|
306 {{0x02, 0x09, 0}, 0x61}, // U+1102 U+1109 => lc # 0x61 |
|
307 {{0x02, 0x0c, 0}, 0x62}, // U+1102 U+110c => lc # 0x62 |
|
308 {{0x02, 0x12, 0}, 0x63}, // U+1102 U+1112 => lc # 0x63 |
|
309 {{0x03, 0x05, 0}, 0x64}, // U+1103 U+1105 => lc # 0x64 |
|
310 {{0x03, 0x06, 0}, 0x65}, // U+1103 U+1106 => lc # 0x65 |
|
311 {{0x03, 0x07, 0}, 0x66}, // U+1103 U+1107 => lc # 0x66 |
|
312 {{0x03, 0x09, 0}, 0x67}, // U+1103 U+1109 => lc # 0x67 |
|
313 {{0x03, 0x0c, 0}, 0x68}, // U+1103 U+110c => lc # 0x68 |
|
314 {{0x05, 0x00, 0}, 0x69}, // U+1105 U+1100 => lc # 0x69 |
|
315 {{0x05, 0x01, 0}, 0x6a}, // U+1105 U+1101 => lc # 0x6a |
|
316 {{0x05, 0x03, 0}, 0x6b}, // U+1105 U+1103 => lc # 0x6b |
|
317 {{0x05, 0x04, 0}, 0x6c}, // U+1105 U+1104 => lc # 0x6c |
|
318 {{0x05, 0x06, 0}, 0x6d}, // U+1105 U+1106 => lc # 0x6d |
|
319 {{0x05, 0x07, 0}, 0x6e}, // U+1105 U+1107 => lc # 0x6e |
|
320 {{0x05, 0x08, 0}, 0x6f}, // U+1105 U+1108 => lc # 0x6f |
|
321 {{0x05, 0x09, 0}, 0x71}, // U+1105 U+1109 => lc # 0x71 |
|
322 {{0x05, 0x0c, 0}, 0x72}, // U+1105 U+110c => lc # 0x72 |
|
323 {{0x05, 0x0f, 0}, 0x73}, // U+1105 U+110f => lc # 0x73 |
|
324 {{0x05, 0x2b, 0}, 0x70}, // U+1105 U+112b => lc # 0x70 |
|
325 {{0x06, 0x00, 0}, 0x74}, // U+1106 U+1100 => lc # 0x74 |
|
326 {{0x06, 0x03, 0}, 0x75}, // U+1106 U+1103 => lc # 0x75 |
|
327 {{0x06, 0x09, 0}, 0x76}, // U+1106 U+1109 => lc # 0x76 |
|
328 {{0x07, 0x0f, 0}, 0x78}, // U+1107 U+110f => lc # 0x78 |
|
329 {{0x07, 0x12, 0}, 0x79}, // U+1107 U+1112 => lc # 0x79 |
|
330 {{0x0a, 0x07, 0}, 0x7a}, // U+110a U+1107 => lc # 0x7a |
|
331 {{0x0b, 0x05, 0}, 0x7b}, // U+110b U+1105 => lc # 0x7b |
|
332 {{0x0b, 0x12, 0}, 0x7c}, // U+110b U+1112 => lc # 0x7c |
|
333 {{0x0d, 0x12, 0}, 0x7d}, // U+110d U+1112 => lc # 0x7d |
|
334 {{0x10, 0x10, 0}, 0x7e}, // U+1110 U+1110 => lc # 0x7e |
|
335 {{0x11, 0x12, 0}, 0x7f}, // U+1111 U+1112 => lc # 0x7f |
|
336 {{0x12, 0x09, 0}, 0x80}, // U+1112 U+1109 => lc # 0x80 |
|
337 {{0x59, 0x59, 0}, 0x81}, // U+1159 U+1159 => lc # 0x81 |
|
338 }; |
|
339 |
|
340 /** |
|
341 * The map from sequences of vowels forming vowels clusters |
|
342 * not encoded in U+1100 block to temporary code points in the 0xf100 block. |
|
343 * To reduce memory footprint, array elements are shifted by 0xf100 |
|
344 * from their actual positions. |
|
345 */ |
|
346 |
|
347 const static JamoNormMap gExtVoClustersGroup1[]= |
|
348 { |
|
349 {{0x09, 0x03, 0x15}, 0x47}, // U+1169 U+1163 U+1175 => vowel # 0x47 |
|
350 {{0x09, 0x0e, 0x3e}, 0x49}, // U+1169 U+116e U+119e => vowel # 0x49 |
|
351 {{0x0d, 0x01, 0x15}, 0x4b}, // U+116d U+1161 U+1175 => vowel # 0x4b |
|
352 {{0x0e, 0x15, 0x15}, 0x4e}, // U+116e U+1175 U+1175 => vowel # 0x4e |
|
353 {{0x12, 0x01, 0x15}, 0x4f}, // U+1172 U+1161 U+1175 => vowel # 0x4f |
|
354 {{0x13, 0x05, 0x15}, 0x53}, // U+1173 U+1165 U+1175 => vowel # 0x53 |
|
355 {{0x15, 0x03, 0x09}, 0x55}, // U+1175 U+1163 U+1169 => vowel # 0x55 |
|
356 {{0x15, 0x03, 0x15}, 0x56}, // U+1175 U+1163 U+1175 => vowel # 0x56 |
|
357 {{0x15, 0x07, 0x15}, 0x58}, // U+1175 U+1167 U+1175 => vowel # 0x58 |
|
358 {{0x15, 0x09, 0x3e}, 0x59}, // U+1175 U+1169 U+119e => vowel # 0x59 |
|
359 {{0x3e, 0x05, 0x15}, 0x5e}, // U+119e U+1165 U+1175 => vowel # 0x5e |
|
360 }; |
|
361 |
|
362 const static JamoNormMap gExtVoClustersGroup2[]= |
|
363 { |
|
364 {{0x01, 0x13, 0}, 0x43}, // U+1161 U+1173 => vowel # 0x43 |
|
365 {{0x03, 0x0e, 0}, 0x44}, // U+1163 U+116e => vowel # 0x44 |
|
366 {{0x07, 0x03, 0}, 0x45}, // U+1167 U+1163 => vowel # 0x45 |
|
367 {{0x09, 0x03, 0}, 0x46}, // U+1169 U+1163 => vowel # 0x46 |
|
368 {{0x09, 0x04, 0}, 0x47}, // U+1169 U+1164 => vowel # 0x47 |
|
369 {{0x09, 0x07, 0}, 0x48}, // U+1169 U+1167 => vowel # 0x48 |
|
370 {{0x0d, 0x01, 0}, 0x4a}, // U+116d U+1161 => vowel # 0x4a |
|
371 {{0x0d, 0x02, 0}, 0x4b}, // U+116d U+1162 => vowel # 0x4b |
|
372 {{0x0d, 0x05, 0}, 0x4c}, // U+116d U+1165 => vowel # 0x4c |
|
373 {{0x0e, 0x07, 0}, 0x4d}, // U+116e U+1167 => vowel # 0x4d |
|
374 {{0x11, 0x15, 0}, 0x4e}, // U+1171 U+1175 => vowel # 0x4e |
|
375 {{0x12, 0x02, 0}, 0x4f}, // U+1172 U+1162 => vowel # 0x4f |
|
376 {{0x12, 0x09, 0}, 0x50}, // U+1172 U+1169 => vowel # 0x50 |
|
377 {{0x13, 0x01, 0}, 0x51}, // U+1173 U+1161 => vowel # 0x51 |
|
378 {{0x13, 0x05, 0}, 0x52}, // U+1173 U+1165 => vowel # 0x52 |
|
379 {{0x13, 0x06, 0}, 0x53}, // U+1173 U+1166 => vowel # 0x53 |
|
380 {{0x13, 0x09, 0}, 0x54}, // U+1173 U+1169 => vowel # 0x54 |
|
381 {{0x15, 0x04, 0}, 0x56}, // U+1175 U+1164 => vowel # 0x56 |
|
382 {{0x15, 0x07, 0}, 0x57}, // U+1175 U+1167 => vowel # 0x57 |
|
383 {{0x15, 0x08, 0}, 0x58}, // U+1175 U+1168 => vowel # 0x58 |
|
384 {{0x15, 0x0d, 0}, 0x5a}, // U+1175 U+116d => vowel # 0x5a |
|
385 {{0x15, 0x12, 0}, 0x5b}, // U+1175 U+1172 => vowel # 0x5b |
|
386 {{0x15, 0x15, 0}, 0x5c}, // U+1175 U+1175 => vowel # 0x5c |
|
387 {{0x23, 0x3e, 0}, 0x49}, // U+1183 U+119e => vowel # 0x49 |
|
388 {{0x2e, 0x15, 0}, 0x4f}, // U+118e U+1175 => vowel # 0x4f |
|
389 {{0x3a, 0x3e, 0}, 0x59}, // U+119a U+119e => vowel # 0x59 |
|
390 {{0x3e, 0x01, 0}, 0x5d}, // U+119e U+1161 => vowel # 0x5d |
|
391 {{0x3e, 0x06, 0}, 0x5e}, // U+119e U+1166 => vowel # 0x5e |
|
392 {{0x3f, 0x15, 0}, 0x5e}, // U+119f U+1175 => vowel # 0x5e |
|
393 }; |
|
394 |
|
395 /** |
|
396 * The map from sequences of trailing consonants forming consonant clusters |
|
397 * not encoded in U+1100 block to temporary code points in the 0xf200 block. |
|
398 * To reduce memory footprint, array elements are shifted by 0xf200 |
|
399 * from their actual positions. |
|
400 */ |
|
401 |
|
402 const static JamoNormMap gExtTcClustersGroup1[]= |
|
403 { |
|
404 {{0x06, 0x06, 0x10}, 0x5b}, // U+11ae U+11ae U+11b8 => tc # 0x5b |
|
405 {{0x06, 0x12, 0x00}, 0x5e}, // U+11ae U+11ba U+11a8 => tc # 0x5e |
|
406 {{0x07, 0x00, 0x00}, 0x62}, // U+11af U+11a8 U+11a8 => tc # 0x62 |
|
407 {{0x07, 0x00, 0x1a}, 0x63}, // U+11af U+11a8 U+11c2 => tc # 0x63 |
|
408 {{0x07, 0x07, 0x17}, 0x64}, // U+11af U+11af U+11bf => tc # 0x64 |
|
409 {{0x07, 0x0f, 0x1a}, 0x65}, // U+11af U+11b7 U+11c2 => tc # 0x65 |
|
410 {{0x07, 0x10, 0x06}, 0x66}, // U+11af U+11b8 U+11ae => tc # 0x66 |
|
411 {{0x07, 0x10, 0x19}, 0x67}, // U+11af U+11b8 U+11c1 => tc # 0x67 |
|
412 {{0x07, 0x51, 0x1a}, 0x69}, // U+11af U+11f9 U+11c2 => tc # 0x69 |
|
413 {{0x0f, 0x03, 0x03}, 0x6c}, // U+11b7 U+11ab U+11ab => tc # 0x6c |
|
414 {{0x0f, 0x10, 0x12}, 0x6e}, // U+11b7 U+11b8 U+11ba => tc # 0x6e |
|
415 {{0x10, 0x07, 0x19}, 0x71}, // U+11b8 U+11af U+11c1 => tc # 0x71 |
|
416 {{0x10, 0x12, 0x06}, 0x74}, // U+11b8 U+11ba U+11ae => tc # 0x74 |
|
417 {{0x12, 0x10, 0x14}, 0x78}, // U+11ba U+11b8 U+11bc => tc # 0x78 |
|
418 {{0x12, 0x12, 0x00}, 0x79}, // U+11ba U+11ba U+11a8 => tc # 0x79 |
|
419 {{0x12, 0x12, 0x06}, 0x7a}, // U+11ba U+11ba U+11ae => tc # 0x7a |
|
420 {{0x15, 0x10, 0x10}, 0x89}, // U+11bd U+11b8 U+11b8 => tc # 0x89 |
|
421 {{0x43, 0x10, 0x14}, 0x81}, // U+11eb U+11b8 U+11bc => tc # 0x81 |
|
422 }; |
|
423 |
|
424 const static JamoNormMap gExtTcClustersGroup2[]= |
|
425 { |
|
426 {{0x00, 0x03, 0}, 0x52}, // U+11a8 U+11ab => tc # 0x52 |
|
427 {{0x00, 0x10, 0}, 0x53}, // U+11a8 U+11b8 => tc # 0x53 |
|
428 {{0x00, 0x16, 0}, 0x54}, // U+11a8 U+11be => tc # 0x54 |
|
429 {{0x00, 0x17, 0}, 0x55}, // U+11a8 U+11bf => tc # 0x55 |
|
430 {{0x00, 0x1a, 0}, 0x56}, // U+11a8 U+11c2 => tc # 0x56 |
|
431 {{0x03, 0x03, 0}, 0x57}, // U+11ab U+11ab => tc # 0x57 |
|
432 {{0x03, 0x07, 0}, 0x58}, // U+11ab U+11af => tc # 0x58 |
|
433 {{0x03, 0x16, 0}, 0x59}, // U+11ab U+11be => tc # 0x59 |
|
434 {{0x06, 0x06, 0}, 0x5a}, // U+11ae U+11ae => tc # 0x5a |
|
435 {{0x06, 0x10, 0}, 0x5c}, // U+11ae U+11b8 => tc # 0x5c |
|
436 {{0x06, 0x12, 0}, 0x5d}, // U+11ae U+11ba => tc # 0x5d |
|
437 {{0x06, 0x15, 0}, 0x5f}, // U+11ae U+11bd => tc # 0x5f |
|
438 {{0x06, 0x16, 0}, 0x60}, // U+11ae U+11be => tc # 0x60 |
|
439 {{0x06, 0x18, 0}, 0x61}, // U+11ae U+11c0 => tc # 0x61 |
|
440 {{0x06, 0x3f, 0}, 0x5e}, // U+11ae U+11e7 => tc # 0x5e |
|
441 {{0x07, 0x01, 0}, 0x62}, // U+11af U+11a9 => tc # 0x62 |
|
442 {{0x07, 0x14, 0}, 0x6a}, // U+11af U+11bc => tc # 0x6a |
|
443 {{0x07, 0x30, 0}, 0x64}, // U+11af U+11d8 => tc # 0x64 |
|
444 {{0x07, 0x39, 0}, 0x65}, // U+11af U+11e1 => tc # 0x65 |
|
445 {{0x07, 0x3c, 0}, 0x67}, // U+11af U+11e4 => tc # 0x67 |
|
446 {{0x07, 0x48, 0}, 0x68}, // U+11af U+11f0 => tc # 0x68 |
|
447 {{0x08, 0x00, 0}, 0x62}, // U+11b0 U+11a8 => tc # 0x62 |
|
448 {{0x08, 0x1a, 0}, 0x63}, // U+11b0 U+11c2 => tc # 0x63 |
|
449 {{0x09, 0x1a, 0}, 0x65}, // U+11b1 U+11c2 => tc # 0x65 |
|
450 {{0x0a, 0x06, 0}, 0x66}, // U+11b2 U+11ae => tc # 0x66 |
|
451 {{0x0a, 0x19, 0}, 0x67}, // U+11b2 U+11c1 => tc # 0x67 |
|
452 {{0x0f, 0x03, 0}, 0x6b}, // U+11b7 U+11ab => tc # 0x6b |
|
453 {{0x0f, 0x0f, 0}, 0x6d}, // U+11b7 U+11b7 => tc # 0x6d |
|
454 {{0x0f, 0x11, 0}, 0x6e}, // U+11b7 U+11b9 => tc # 0x6e |
|
455 {{0x0f, 0x15, 0}, 0x6f}, // U+11b7 U+11bd => tc # 0x6f |
|
456 {{0x10, 0x06, 0}, 0x70}, // U+11b8 U+11ae => tc # 0x70 |
|
457 {{0x10, 0x0f, 0}, 0x72}, // U+11b8 U+11b7 => tc # 0x72 |
|
458 {{0x10, 0x10, 0}, 0x73}, // U+11b8 U+11b8 => tc # 0x73 |
|
459 {{0x10, 0x15, 0}, 0x75}, // U+11b8 U+11bd => tc # 0x75 |
|
460 {{0x10, 0x16, 0}, 0x76}, // U+11b8 U+11be => tc # 0x76 |
|
461 {{0x10, 0x40, 0}, 0x74}, // U+11b8 U+11e8 => tc # 0x74 |
|
462 {{0x11, 0x06, 0}, 0x74}, // U+11b9 U+11ae => tc # 0x74 |
|
463 {{0x12, 0x0f, 0}, 0x77}, // U+11ba U+11b7 => tc # 0x77 |
|
464 {{0x12, 0x15, 0}, 0x7c}, // U+11ba U+11bd => tc # 0x7c |
|
465 {{0x12, 0x16, 0}, 0x7d}, // U+11ba U+11be => tc # 0x7d |
|
466 {{0x12, 0x18, 0}, 0x7e}, // U+11ba U+11c0 => tc # 0x7e |
|
467 {{0x12, 0x1a, 0}, 0x7f}, // U+11ba U+11c2 => tc # 0x7f |
|
468 {{0x12, 0x3e, 0}, 0x78}, // U+11ba U+11e6 => tc # 0x78 |
|
469 {{0x12, 0x3f, 0}, 0x79}, // U+11ba U+11e7 => tc # 0x79 |
|
470 {{0x12, 0x40, 0}, 0x7a}, // U+11ba U+11e8 => tc # 0x7a |
|
471 {{0x12, 0x43, 0}, 0x7b}, // U+11ba U+11eb => tc # 0x7b |
|
472 {{0x13, 0x00, 0}, 0x79}, // U+11bb U+11a8 => tc # 0x79 |
|
473 {{0x13, 0x06, 0}, 0x7a}, // U+11bb U+11ae => tc # 0x7a |
|
474 {{0x14, 0x0f, 0}, 0x82}, // U+11bc U+11b7 => tc # 0x82 |
|
475 {{0x14, 0x12, 0}, 0x83}, // U+11bc U+11ba => tc # 0x83 |
|
476 {{0x14, 0x1a, 0}, 0x84}, // U+11bc U+11c2 => tc # 0x84 |
|
477 {{0x15, 0x10, 0}, 0x88}, // U+11bd U+11b8 => tc # 0x88 |
|
478 {{0x15, 0x15, 0}, 0x8a}, // U+11bd U+11bd => tc # 0x8a |
|
479 {{0x19, 0x14, 0}, 0x8c}, // U+11c1 U+11bc => tc # 0x8c |
|
480 {{0x19, 0x18, 0}, 0x8b}, // U+11c1 U+11c0 => tc # 0x8b |
|
481 {{0x28, 0x17, 0}, 0x64}, // U+11d0 U+11bf => tc # 0x64 |
|
482 {{0x31, 0x1a, 0}, 0x69}, // U+11d9 U+11c2 => tc # 0x69 |
|
483 {{0x34, 0x12, 0}, 0x6e}, // U+11dc U+11ba => tc # 0x6e |
|
484 {{0x3b, 0x19, 0}, 0x71}, // U+11e3 U+11c1 => tc # 0x71 |
|
485 {{0x42, 0x14, 0}, 0x78}, // U+11ea U+11bc => tc # 0x78 |
|
486 {{0x43, 0x10, 0}, 0x80}, // U+11eb U+11b8 => tc # 0x80 |
|
487 {{0x43, 0x3e, 0}, 0x81}, // U+11eb U+11e6 => tc # 0x81 |
|
488 {{0x48, 0x00, 0}, 0x85}, // U+11f0 U+11a8 => tc # 0x85 |
|
489 {{0x48, 0x17, 0}, 0x86}, // U+11f0 U+11bf => tc # 0x86 |
|
490 {{0x48, 0x1a, 0}, 0x87}, // U+11f0 U+11c2 => tc # 0x87 |
|
491 }; |