1 static const ucschar hangul_keyboard_table_2[] = {
2     0x0000,     /* 0x00 null                                         */
3     0x0000,     /* 0x01 start of heading                             */
4     0x0000,     /* 0x02 start of text                                */
5     0x0000,     /* 0x03 end of text                                  */
6     0x0000,     /* 0x04 end of transmission                          */
7     0x0000,     /* 0x05 enquiry                                      */
8     0x0000,     /* 0x06 acknowledge                                  */
9     0x0000,     /* 0x07 bell                                         */
10     0x0000,     /* 0x08 backspace                                    */
11     0x0000,     /* 0x09 character tabulation                         */
12     0x0000,     /* 0x0A line feed (lf)                               */
13     0x0000,     /* 0x0B line tabulation                              */
14     0x0000,     /* 0x0C form feed (ff)                               */
15     0x0000,     /* 0x0D carriage return (cr)                         */
16     0x0000,     /* 0x0E shift out                                    */
17     0x0000,     /* 0x0F shift in                                     */
18     0x0000,     /* 0x10 data link escape                             */
19     0x0000,     /* 0x11 device control one                           */
20     0x0000,     /* 0x12 device control two                           */
21     0x0000,     /* 0x13 device control three                         */
22     0x0000,     /* 0x14 device control four                          */
23     0x0000,     /* 0x15 negative acknowledge                         */
24     0x0000,     /* 0x16 synchronous idle                             */
25     0x0000,     /* 0x17 end of transmission block                    */
26     0x0000,     /* 0x18 cancel                                       */
27     0x0000,     /* 0x19 end of medium                                */
28     0x0000,     /* 0x1A substitute                                   */
29     0x0000,     /* 0x1B escape                                       */
30     0x0000,     /* 0x1C information separator four                   */
31     0x0000,     /* 0x1D information separator three                  */
32     0x0000,     /* 0x1E information separator two                    */
33     0x0000,     /* 0x1F information separator one                    */
34     0x0000,     /* 0x20 space                                        */
35     0x0021,     /* 0x21 exclam:       exclamation mark               */
36     0x0022,     /* 0x22 quotedbl:     quotation mark                 */
37     0x0023,     /* 0x23 numbersign:   number sign                    */
38     0x0024,     /* 0x24 dollar:       dollar sign                    */
39     0x0025,     /* 0x25 percent:      percent sign                   */
40     0x0026,     /* 0x26 ampersand:    ampersand                      */
41     0x0027,     /* 0x27 apostrophe:   apostrophe                     */
42     0x0028,     /* 0x28 parenleft:    left parenthesis               */
43     0x0029,     /* 0x29 parenright:   right parenthesis              */
44     0x002a,     /* 0x2A asterisk:     asterisk                       */
45     0x002b,     /* 0x2B plus:         plus sign                      */
46     0x002c,     /* 0x2C comma:        comma                          */
47     0x002d,     /* 0x2D minus:        minus sign                     */
48     0x002e,     /* 0x2E period:       period                         */
49     0x002f,     /* 0x2F slash:        slash                          */
50     0x0030,     /* 0x30 0:            0                              */
51     0x0031,     /* 0x31 1:            1                              */
52     0x0032,     /* 0x32 2:            2                              */
53     0x0033,     /* 0x33 3:            3                              */
54     0x0034,     /* 0x34 4:            4                              */
55     0x0035,     /* 0x35 5:            5                              */
56     0x0036,     /* 0x36 6:            6                              */
57     0x0037,     /* 0x37 7:            7                              */
58     0x0038,     /* 0x38 8:            8                              */
59     0x0039,     /* 0x39 9:            9                              */
60     0x003a,     /* 0x3A colon:        colon                          */
61     0x003b,     /* 0x3B semicolon:    semicolon                      */
62     0x003c,     /* 0x3C less:         less-than sign                 */
63     0x003d,     /* 0x3D equal:        equals sign                    */
64     0x003e,     /* 0x3E greater:      greater-than sign              */
65     0x003f,     /* 0x3F question:     question mark                  */
66     0x0040,     /* 0x40 at:           commercial at                  */
67     0x1106,     /* 0x41 A:            choseong mieum                 */
68     0x1172,     /* 0x42 B:            jungseong yu                   */
69     0x110e,     /* 0x43 C:            choseong chieuch               */
70     0x110b,     /* 0x44 D:            choseong ieung                 */
71     0x1104,     /* 0x45 E:            choseong ssangtikeut           */
72     0x1105,     /* 0x46 F:            choseong rieul                 */
73     0x1112,     /* 0x47 G:            choseong hieuh                 */
74     0x1169,     /* 0x48 H:            jungseong o                    */
75     0x1163,     /* 0x49 I:            jungseong ya                   */
76     0x1165,     /* 0x4A J:            jungseong eo                   */
77     0x1161,     /* 0x4B K:            jungseong a                    */
78     0x1175,     /* 0x4C L:            jungseong i                    */
79     0x1173,     /* 0x4D M:            jungseong eu                   */
80     0x116e,     /* 0x4E N:            jungseong u                    */
81     0x1164,     /* 0x4F O:            jungseong yae                  */
82     0x1168,     /* 0x50 P:            jungseong ye                   */
83     0x1108,     /* 0x51 Q:            choseong ssangpieup            */
84     0x1101,     /* 0x52 R:            choseong ssangkiyeok           */
85     0x1102,     /* 0x53 S:            choseong nieun                 */
86     0x110a,     /* 0x54 T:            choseong ssangsios             */
87     0x1167,     /* 0x55 U:            jungseong yeo                  */
88     0x1111,     /* 0x56 V:            choseong phieuph               */
89     0x110d,     /* 0x57 W:            choseong ssangcieuc            */
90     0x1110,     /* 0x58 X:            choseong thieuth               */
91     0x116d,     /* 0x59 Y:            jungseong yo                   */
92     0x110f,     /* 0x5A Z:            choseong khieukh               */
93     0x005b,     /* 0x5B bracketleft:  left bracket                   */
94     0x005c,     /* 0x5C backslash:    backslash                      */
95     0x005d,     /* 0x5D bracketright: right bracket                  */
96     0x005e,     /* 0x5E asciicircum:  circumflex accent              */
97     0x005f,     /* 0x5F underscore:   underscore                     */
98     0x0060,     /* 0x60 quoteleft:    grave accent                   */
99     0x1106,     /* 0x61 a:            choseong  mieum                */
100     0x1172,     /* 0x62 b:            jungseong yu                   */
101     0x110e,     /* 0x63 c:            choseong  chieuch              */
102     0x110b,     /* 0x64 d:            choseong  ieung                */
103     0x1103,     /* 0x65 e:            choseong  tikeut               */
104     0x1105,     /* 0x66 f:            choseong  rieul                */
105     0x1112,     /* 0x67 g:            choseong  hieuh                */
106     0x1169,     /* 0x68 h:            jungseong o                    */
107     0x1163,     /* 0x69 i:            jungseong ya                   */
108     0x1165,     /* 0x6A j:            jungseong eo                   */
109     0x1161,     /* 0x6B k:            jungseong a                    */
110     0x1175,     /* 0x6C l:            jungseong i                    */
111     0x1173,     /* 0x6D m:            jungseong eu                   */
112     0x116e,     /* 0x6E n:            jungseong u                    */
113     0x1162,     /* 0x6F o:            jungseong ae                   */
114     0x1166,     /* 0x70 p:            jungseong e                    */
115     0x1107,     /* 0x71 q:            choseong  pieup                */
116     0x1100,     /* 0x72 r:            choseong  kiyeok               */
117     0x1102,     /* 0x73 s:            choseong  nieun                */
118     0x1109,     /* 0x74 t:            choseong  sios                 */
119     0x1167,     /* 0x75 u:            jungseong yeo                  */
120     0x1111,     /* 0x76 v:            choseong  phieuph              */
121     0x110c,     /* 0x77 w:            choseong  cieuc                */
122     0x1110,     /* 0x78 x:            choseong  thieuth              */
123     0x116d,     /* 0x79 y:            jungseong yo                   */
124     0x110f,     /* 0x7A z:            choseong  khieukh              */
125     0x007b,     /* 0x7B braceleft:    left brace                     */
126     0x007c,     /* 0x7C bar:          vertical bar                   */
127     0x007d,     /* 0x7D braceright:   right brace                    */
128     0x007e,     /* 0x7E asciitilde:   tilde                          */
129     0x0000      /* 0x7F delete                                       */
130 };
131 
132 static const ucschar hangul_keyboard_table_2y[] = {
133     0x0000,     /* 0x00 null                                         */
134     0x0000,     /* 0x01 start of heading                             */
135     0x0000,     /* 0x02 start of text                                */
136     0x0000,     /* 0x03 end of text                                  */
137     0x0000,     /* 0x04 end of transmission                          */
138     0x0000,     /* 0x05 enquiry                                      */
139     0x0000,     /* 0x06 acknowledge                                  */
140     0x0000,     /* 0x07 bell                                         */
141     0x0000,     /* 0x08 backspace                                    */
142     0x0000,     /* 0x09 character tabulation                         */
143     0x0000,     /* 0x0A line feed (lf)                               */
144     0x0000,     /* 0x0B line tabulation                              */
145     0x0000,     /* 0x0C form feed (ff)                               */
146     0x0000,     /* 0x0D carriage return (cr)                         */
147     0x0000,     /* 0x0E shift out                                    */
148     0x0000,     /* 0x0F shift in                                     */
149     0x0000,     /* 0x10 data link escape                             */
150     0x0000,     /* 0x11 device control one                           */
151     0x0000,     /* 0x12 device control two                           */
152     0x0000,     /* 0x13 device control three                         */
153     0x0000,     /* 0x14 device control four                          */
154     0x0000,     /* 0x15 negative acknowledge                         */
155     0x0000,     /* 0x16 synchronous idle                             */
156     0x0000,     /* 0x17 end of transmission block                    */
157     0x0000,     /* 0x18 cancel                                       */
158     0x0000,     /* 0x19 end of medium                                */
159     0x0000,     /* 0x1A substitute                                   */
160     0x0000,     /* 0x1B escape                                       */
161     0x0000,     /* 0x1C information separator four                   */
162     0x0000,     /* 0x1D information separator three                  */
163     0x0000,     /* 0x1E information separator two                    */
164     0x0000,     /* 0x1F information separator one                    */
165     0x0000,     /* 0x20 space                                        */
166     0x0021,     /* 0x21 exclam:       exclamation mark               */
167     0x0022,     /* 0x22 quotedbl:     quotation mark                 */
168     0x0023,     /* 0x23 numbersign:   number sign                    */
169     0x0024,     /* 0x24 dollar:       dollar sign                    */
170     0x0025,     /* 0x25 percent:      percent sign                   */
171     0x0026,     /* 0x26 ampersand:    ampersand                      */
172     0x0027,     /* 0x27 apostrophe:   apostrophe                     */
173     0x0028,     /* 0x28 parenleft:    left parenthesis               */
174     0x0029,     /* 0x29 parenright:   right parenthesis              */
175     0x002a,     /* 0x2A asterisk:     asterisk                       */
176     0x002b,     /* 0x2B plus:         plus sign                      */
177     0x002c,     /* 0x2C comma:        comma                          */
178     0x002d,     /* 0x2D minus:        minus sign                     */
179     0x002e,     /* 0x2E period:       period                         */
180     0x002f,     /* 0x2F slash:        slash                          */
181     0x0030,     /* 0x30 0:            0                              */
182     0x0031,     /* 0x31 1:            1                              */
183     0x0032,     /* 0x32 2:            2                              */
184     0x0033,     /* 0x33 3:            3                              */
185     0x0034,     /* 0x34 4:            4                              */
186     0x0035,     /* 0x35 5:            5                              */
187     0x0036,     /* 0x36 6:            6                              */
188     0x0037,     /* 0x37 7:            7                              */
189     0x0038,     /* 0x38 8:            8                              */
190     0x0039,     /* 0x39 9:            9                              */
191     0x003a,     /* 0x3A colon:        colon                          */
192     0x003b,     /* 0x3B semicolon:    semicolon                      */
193     0x003c,     /* 0x3C less:         less-than sign                 */
194     0x003d,     /* 0x3D equal:        equals sign                    */
195     0x003e,     /* 0x3E greater:      greater-than sign              */
196     0x003f,     /* 0x3F question:     question mark                  */
197     0x0040,     /* 0x40 at:           commercial at                  */
198     0x1140,     /* 0x41 A:            choseong pansios               */
199     0x1154,     /* 0x42 B:            choseong chitueumchieuch       */
200     0x114e,     /* 0x43 C:            choseong chitueumcieuc         */
201     0x114c,     /* 0x44 D:            choseong yesieung              */
202     0x1104,     /* 0x45 E:            choseong ssangtikeut           */
203     0x111a,     /* 0x46 F:            choseong rieul-hieuh           */
204     0x1159,     /* 0x47 G:            choseong yeorinhieuh           */
205     0x1183,     /* 0x48 H:            jungseong o-u                  */
206     0x1163,     /* 0x49 I:            jungseong ya                   */
207     0x1165,     /* 0x4A J:            jungseong eo                   */
208     0x119e,     /* 0x4B K:            jungseong araea                */
209     0x1194,     /* 0x4C L:            jungseong yu-i                 */
210     0x1173,     /* 0x4D M:            jungseong eu                   */
211     0x1155,     /* 0x4E N:            choseong ceongchieumchieuch    */
212     0x1164,     /* 0x4F O:            jungseong yae                  */
213     0x1168,     /* 0x50 P:            jungseong ye                   */
214     0x1108,     /* 0x51 Q:            choseong ssangpieup            */
215     0x1101,     /* 0x52 R:            choseong ssangkiyeok           */
216     0x115d,     /* 0x53 S:            choseong nieun-hieuh           */
217     0x110a,     /* 0x54 T:            choseong ssangsios             */
218     0x1167,     /* 0x55 U:            jungseong yeo                  */
219     0x1150,     /* 0x56 V:            choseong ceongchieumcieuc      */
220     0x110d,     /* 0x57 W:            choseong ssangcieuc            */
221     0x113e,     /* 0x58 X:            choseong ceongchieumsios       */
222     0x116d,     /* 0x59 Y:            jungseong yo                   */
223     0x113c,     /* 0x5A Z:            choseong chitueumsios          */
224     0x005b,     /* 0x5B bracketleft:  left bracket                   */
225     0x005c,     /* 0x5C backslash:    backslash                      */
226     0x005d,     /* 0x5D bracketright: right bracket                  */
227     0x005e,     /* 0x5E asciicircum:  circumflex accent              */
228     0x005f,     /* 0x5F underscore:   underscore                     */
229     0x0060,     /* 0x60 quoteleft:    grave accent                   */
230     0x1106,     /* 0x61 a:            choseong  mieum                */
231     0x1172,     /* 0x62 b:            jungseong yu                   */
232     0x110e,     /* 0x63 c:            choseong  chieuch              */
233     0x110b,     /* 0x64 d:            choseong  ieung                */
234     0x1103,     /* 0x65 e:            choseong  tikeut               */
235     0x1105,     /* 0x66 f:            choseong  rieul                */
236     0x1112,     /* 0x67 g:            choseong  hieuh                */
237     0x1169,     /* 0x68 h:            jungseong o                    */
238     0x1163,     /* 0x69 i:            jungseong ya                   */
239     0x1165,     /* 0x6A j:            jungseong eo                   */
240     0x1161,     /* 0x6B k:            jungseong a                    */
241     0x1175,     /* 0x6C l:            jungseong i                    */
242     0x1173,     /* 0x6D m:            jungseong eu                   */
243     0x116e,     /* 0x6E n:            jungseong u                    */
244     0x1162,     /* 0x6F o:            jungseong ae                   */
245     0x1166,     /* 0x70 p:            jungseong e                    */
246     0x1107,     /* 0x71 q:            choseong  pieup                */
247     0x1100,     /* 0x72 r:            choseong  kiyeok               */
248     0x1102,     /* 0x73 s:            choseong  nieun                */
249     0x1109,     /* 0x74 t:            choseong  sios                 */
250     0x1167,     /* 0x75 u:            jungseong yeo                  */
251     0x1111,     /* 0x76 v:            choseong  phieuph              */
252     0x110c,     /* 0x77 w:            choseong  cieuc                */
253     0x1110,     /* 0x78 x:            choseong  thieuth              */
254     0x116d,     /* 0x79 y:            jungseong yo                   */
255     0x110f,     /* 0x7A z:            choseong  khieukh              */
256     0x007b,     /* 0x7B braceleft:    left brace                     */
257     0x007c,     /* 0x7C bar:          vertical bar                   */
258     0x007d,     /* 0x7D braceright:   right brace                    */
259     0x007e,     /* 0x7E asciitilde:   tilde                          */
260     0x0000      /* 0x7F delete                                       */
261 };
262 
263 static const ucschar hangul_keyboard_table_32[] = {
264     0x0000,     /* 0x00 null                                         */
265     0x0000,     /* 0x01 start of heading                             */
266     0x0000,     /* 0x02 start of text                                */
267     0x0000,     /* 0x03 end of text                                  */
268     0x0000,     /* 0x04 end of transmission                          */
269     0x0000,     /* 0x05 enquiry                                      */
270     0x0000,     /* 0x06 acknowledge                                  */
271     0x0000,     /* 0x07 bell                                         */
272     0x0000,     /* 0x08 backspace                                    */
273     0x0000,     /* 0x09 character tabulation                         */
274     0x0000,     /* 0x0A line feed (lf)                               */
275     0x0000,     /* 0x0B line tabulation                              */
276     0x0000,     /* 0x0C form feed (ff)                               */
277     0x0000,     /* 0x0D carriage return (cr)                         */
278     0x0000,     /* 0x0E shift out                                    */
279     0x0000,     /* 0x0F shift in                                     */
280     0x0000,     /* 0x10 data link escape                             */
281     0x0000,     /* 0x11 device control one                           */
282     0x0000,     /* 0x12 device control two                           */
283     0x0000,     /* 0x13 device control three                         */
284     0x0000,     /* 0x14 device control four                          */
285     0x0000,     /* 0x15 negative acknowledge                         */
286     0x0000,     /* 0x16 synchronous idle                             */
287     0x0000,     /* 0x17 end of transmission block                    */
288     0x0000,     /* 0x18 cancel                                       */
289     0x0000,     /* 0x19 end of medium                                */
290     0x0000,     /* 0x1A substitute                                   */
291     0x0000,     /* 0x1B escape                                       */
292     0x0000,     /* 0x1C information separator four                   */
293     0x0000,     /* 0x1D information separator three                  */
294     0x0000,     /* 0x1E information separator two                    */
295     0x0000,     /* 0x1F information separator one                    */
296     0x0000,     /* 0x20 space                                        */
297     0x0021,     /* 0x21 exclam:         exclamation mark             */
298     0x0022,     /* 0x22 quotedbl:       quotation mark               */
299     0x0023,     /* 0x23 numbersign:     number sign                  */
300     0x0024,     /* 0x24 dollar:         dollar sign                  */
301     0x0025,     /* 0x25 percent:        percent sign                 */
302     0x0026,     /* 0x26 ampersand:      ampersand                    */
303     0x0027,     /* 0x27 apostrophe:     apostrophe                   */
304     0x0028,     /* 0x28 parenleft:      left parenthesis             */
305     0x0029,     /* 0x29 parenright:     right parenthesis            */
306     0x002a,     /* 0x2A asterisk:       asterisk                     */
307     0x002b,     /* 0x2B plus:           plus sign                    */
308     0x002c,     /* 0x2C comma:          comma                        */
309     0x002d,     /* 0x2D minus:          minus sign                   */
310     0x002e,     /* 0x2E period:         period                       */
311     0x002f,     /* 0x2F slash:          slash                        */
312     0x0030,     /* 0x30 0:              0                            */
313     0x0031,     /* 0x31 1:              1                            */
314     0x0032,     /* 0x32 2:              2                            */
315     0x0033,     /* 0x33 3:              3                            */
316     0x0034,     /* 0x34 4:              4                            */
317     0x0035,     /* 0x35 5:              5                            */
318     0x0036,     /* 0x36 6:              6                            */
319     0x0037,     /* 0x37 7:              7                            */
320     0x0038,     /* 0x38 8:              8                            */
321     0x0039,     /* 0x39 9:              9                            */
322     0x003a,     /* 0x3A colon:          colon                        */
323     0x003b,     /* 0x3B semicolon:      semicolon                    */
324     0x003c,     /* 0x3C less:           less-than sign               */
325     0x003d,     /* 0x3D equal:          equals sign                  */
326     0x003e,     /* 0x3E greater:        greater-than sign            */
327     0x003f,     /* 0x3F question:       question mark                */
328     0x0040,     /* 0x40 at:             commercial at                */
329     0x11b7,     /* 0x41 A:              jongseong mieum              */
330     0x1172,     /* 0x42 B:              jungseong yu                 */
331     0x11be,     /* 0x43 C:              jongseong chieuch            */
332     0x11bc,     /* 0x44 D:              jongseong ieung              */
333     0x11ae,     /* 0x45 E:              jongseong tikeut             */
334     0x11af,     /* 0x46 F:              jongseong rieul              */
335     0x11c2,     /* 0x47 G:              jongseong hieuh              */
336     0x1169,     /* 0x48 H:              jungseong o                  */
337     0x1163,     /* 0x49 I:              jungseong ya                 */
338     0x1165,     /* 0x4A J:              jungseong eo                 */
339     0x1161,     /* 0x4B K:              jungseong a                  */
340     0x1175,     /* 0x4C L:              jungseong i                  */
341     0x1173,     /* 0x4D M:              jungseong eu                 */
342     0x116e,     /* 0x4E N:              jungseong u                  */
343     0x1164,     /* 0x4F O:              jungseong yae                */
344     0x1168,     /* 0x50 P:              jungseong ye                 */
345     0x11b8,     /* 0x51 Q:              jongseong pieup              */
346     0x11a8,     /* 0x52 R:              jongseong kiyeok             */
347     0x11ab,     /* 0x53 S:              jongseong nieun              */
348     0x11ba,     /* 0x54 T:              jongseong sios               */
349     0x1167,     /* 0x55 U:              jungseong yeo                */
350     0x11c1,     /* 0x56 V:              jongseong phieuph            */
351     0x11bd,     /* 0x57 W:              jongseong cieuc              */
352     0x11c0,     /* 0x58 X:              jongseong thieuth            */
353     0x116d,     /* 0x59 Y:              jungseong yo                 */
354     0x11bf,     /* 0x5A Z:              jongseong khieukh            */
355     0x005b,     /* 0x5B bracketleft:    left bracket                 */
356     0x005c,     /* 0x5C backslash:      backslash                    */
357     0x005d,     /* 0x5D bracketright:   right bracket                */
358     0x005e,     /* 0x5E asciicircum:    circumflex accent            */
359     0x005f,     /* 0x5F underscore:     underscore                   */
360     0x0060,     /* 0x60 quoteleft:      grave accent                 */
361     0x1106,     /* 0x61 a:              choseong  mieum              */
362     0x1172,     /* 0x62 b:              jungseong yu                 */
363     0x110e,     /* 0x63 c:              choseong  chieuch            */
364     0x110b,     /* 0x64 d:              choseong  ieung              */
365     0x1103,     /* 0x65 e:              choseong  tikeut             */
366     0x1105,     /* 0x66 f:              choseong  rieul              */
367     0x1112,     /* 0x67 g:              choseong  hieuh              */
368     0x1169,     /* 0x68 h:              jungseong o                  */
369     0x1163,     /* 0x69 i:              jungseong ya                 */
370     0x1165,     /* 0x6A j:              jungseong eo                 */
371     0x1161,     /* 0x6B k:              jungseong a                  */
372     0x1175,     /* 0x6C l:              jungseong i                  */
373     0x1173,     /* 0x6D m:              jungseong eu                 */
374     0x116e,     /* 0x6E n:              jungseong u                  */
375     0x1162,     /* 0x6F o:              jungseong ae                 */
376     0x1166,     /* 0x70 p:              jungseong e                  */
377     0x1107,     /* 0x71 q:              choseong  pieup              */
378     0x1100,     /* 0x72 r:              choseong  kiyeok             */
379     0x1102,     /* 0x73 s:              choseong  nieun              */
380     0x1109,     /* 0x74 t:              choseong  sios               */
381     0x1167,     /* 0x75 u:              jungseong yeo                */
382     0x1111,     /* 0x76 v:              choseong  phieuph            */
383     0x110c,     /* 0x77 w:              choseong  cieuc              */
384     0x1110,     /* 0x78 x:              choseong  thieuth            */
385     0x116d,     /* 0x79 y:              jungseong yo                 */
386     0x110f,     /* 0x7A z:              choseong  khieukh            */
387     0x007b,     /* 0x7B braceleft:      left brace                   */
388     0x007c,     /* 0x7C bar:            vertical bar                 */
389     0x007d,     /* 0x7D braceright:     right brace                  */
390     0x203b,     /* 0x7E asciitilde:     tilde                        */
391     0x0000      /* 0x7F delete                                       */
392 };
393 
394 static const ucschar hangul_keyboard_table_390[] = {
395     0x0000,     /* 0x00 null                                         */
396     0x0000,     /* 0x01 start of heading                             */
397     0x0000,     /* 0x02 start of text                                */
398     0x0000,     /* 0x03 end of text                                  */
399     0x0000,     /* 0x04 end of transmission                          */
400     0x0000,     /* 0x05 enquiry                                      */
401     0x0000,     /* 0x06 acknowledge                                  */
402     0x0000,     /* 0x07 bell                                         */
403     0x0000,     /* 0x08 backspace                                    */
404     0x0000,     /* 0x09 character tabulation                         */
405     0x0000,     /* 0x0A line feed (lf)                               */
406     0x0000,     /* 0x0B line tabulation                              */
407     0x0000,     /* 0x0C form feed (ff)                               */
408     0x0000,     /* 0x0D carriage return (cr)                         */
409     0x0000,     /* 0x0E shift out                                    */
410     0x0000,     /* 0x0F shift in                                     */
411     0x0000,     /* 0x10 data link escape                             */
412     0x0000,     /* 0x11 device control one                           */
413     0x0000,     /* 0x12 device control two                           */
414     0x0000,     /* 0x13 device control three                         */
415     0x0000,     /* 0x14 device control four                          */
416     0x0000,     /* 0x15 negative acknowledge                         */
417     0x0000,     /* 0x16 synchronous idle                             */
418     0x0000,     /* 0x17 end of transmission block                    */
419     0x0000,     /* 0x18 cancel                                       */
420     0x0000,     /* 0x19 end of medium                                */
421     0x0000,     /* 0x1A substitute                                   */
422     0x0000,     /* 0x1B escape                                       */
423     0x0000,     /* 0x1C information separator four                   */
424     0x0000,     /* 0x1D information separator three                  */
425     0x0000,     /* 0x1E information separator two                    */
426     0x0000,     /* 0x1F information separator one                    */
427     0x0000,     /* 0x20 space                                        */
428     0x11bd,     /* 0x21 exclam:         jongseong cieuc              */
429     0x0022,     /* 0x22 quotedbl:       quotatioin mark              */
430     0x0023,     /* 0x23 numbersign:     number sign                  */
431     0x0024,     /* 0x24 dollar:         dollar sign                  */
432     0x0025,     /* 0x25 percent:        percent sign                 */
433     0x0026,     /* 0x26 ampersand:      ampersand                    */
434     0x1110,     /* 0x27 apostrophe:     choseong thieuth             */
435     0x0028,     /* 0x28 parenleft:      left parenthesis             */
436     0x0029,     /* 0x29 parenright:     right parenthesis            */
437     0x002a,     /* 0x2A asterisk:       asterisk                     */
438     0x002b,     /* 0x2B plus:           plus sign                    */
439     0x002c,     /* 0x2C comma:          comma                        */
440     0x002d,     /* 0x2D minus:          minus sign                   */
441     0x002e,     /* 0x2E period:         period                       */
442     0x1169,     /* 0x2F slash:          jungseong o                  */
443     0x110f,     /* 0x30 0:              choseong  khieukh            */
444     0x11c2,     /* 0x31 1:              jongseong hieuh              */
445     0x11bb,     /* 0x32 2:              jongseong ssangsios          */
446     0x11b8,     /* 0x33 3:              jongseong pieup              */
447     0x116d,     /* 0x34 4:              jungseong yo                 */
448     0x1172,     /* 0x35 5:              jungseong yu                 */
449     0x1163,     /* 0x36 6:              jungseong ya                 */
450     0x1168,     /* 0x37 7:              jungseong ye                 */
451     0x1174,     /* 0x38 8:              jungseong yi                 */
452     0x116e,     /* 0x39 9:              jungseong u                  */
453     0x003a,     /* 0x3A colon:          colon                        */
454     0x1107,     /* 0x3B semicolon:      choseong  pieup              */
455     0x0032,     /* 0x3C less:           2                            */
456     0x003d,     /* 0x3D equal:          euals sign                   */
457     0x0033,     /* 0x3E greater:        3                            */
458     0x003f,     /* 0x3F question:       question mark                */
459     0x0040,     /* 0x40 at:             commertial at                */
460     0x11ae,     /* 0x41 A:              jongseong tikeut             */
461     0x0021,     /* 0x42 B:              exclamation mark             */
462     0x11b1,     /* 0x43 C:              jongseong rieul-mieum        */
463     0x11b0,     /* 0x44 D:              jongseong rieul-kiyeok       */
464     0x11bf,     /* 0x45 E:              jongseong khieukh            */
465     0x11a9,     /* 0x46 F:              jongseong ssangkiyeok        */
466     0x002f,     /* 0x47 G:              slash                        */
467     0x0027,     /* 0x48 H:              apostrophe                   */
468     0x0038,     /* 0x49 I:              8                            */
469     0x0034,     /* 0x4A J:              4                            */
470     0x0035,     /* 0x4B K:              5                            */
471     0x0036,     /* 0x4C L:              6                            */
472     0x0031,     /* 0x4D M:              1                            */
473     0x0030,     /* 0x4E N:              0                            */
474     0x0039,     /* 0x4F O:              9                            */
475     0x003e,     /* 0x50 P:              greater-than sign            */
476     0x11c1,     /* 0x51 Q:              jongseong phieuph            */
477     0x1164,     /* 0x52 R:              jungseong yae                */
478     0x11ad,     /* 0x53 S:              jongseong nieun-hieuh        */
479     0x003b,     /* 0x54 T:              semicolon                    */
480     0x0037,     /* 0x55 U:              7                            */
481     0x11b6,     /* 0x56 V:              jongseong rieul-hieuh        */
482     0x11c0,     /* 0x57 W:              jongseong thikeuth           */
483     0x11b9,     /* 0x58 X:              jongseong pieup-sios         */
484     0x003c,     /* 0x59 Y:              less-than sign               */
485     0x11be,     /* 0x5A Z:              jongseong chieuch            */
486     0x005b,     /* 0x5B bracketleft:    left bracket                 */
487     0x005c,     /* 0x5C backslash:      backslash                    */
488     0x005d,     /* 0x5D bracketright:   right bracket                */
489     0x005e,     /* 0x5E asciicircum:    circumflex accent            */
490     0x005f,     /* 0x5F underscore:     underscore                   */
491     0x0060,     /* 0x60 quoteleft:      grave accent                 */
492     0x11bc,     /* 0x61 a:              jongseong ieung              */
493     0x116e,     /* 0x62 b:              jungseong u                  */
494     0x1166,     /* 0x63 c:              jungseong e                  */
495     0x1175,     /* 0x64 d:              jungseong i                  */
496     0x1167,     /* 0x65 e:              jungseong yeo                */
497     0x1161,     /* 0x66 f:              jungseong a                  */
498     0x1173,     /* 0x67 g:              jungseong eu                 */
499     0x1102,     /* 0x68 h:              choseong  nieun              */
500     0x1106,     /* 0x69 i:              choseong  mieum              */
501     0x110b,     /* 0x6A j:              choseong  ieung              */
502     0x1100,     /* 0x6B k:              choseong  kiyeok             */
503     0x110c,     /* 0x6C l:              choseong  cieuc              */
504     0x1112,     /* 0x6D m:              choseong  hieuh              */
505     0x1109,     /* 0x6E n:              choseong  sios               */
506     0x110e,     /* 0x6F o:              choseong  chieuch            */
507     0x1111,     /* 0x70 p:              choseong  phieuph            */
508     0x11ba,     /* 0x71 q:              jongseong sios               */
509     0x1162,     /* 0x72 r:              jungseong ae                 */
510     0x11ab,     /* 0x73 s:              jongseong nieun              */
511     0x1165,     /* 0x74 t:              jungseong eo                 */
512     0x1103,     /* 0x75 u:              choseong  tikeut             */
513     0x1169,     /* 0x76 v:              jungseong o                  */
514     0x11af,     /* 0x77 w:              jongseong rieul              */
515     0x11a8,     /* 0x78 x:              jongseong kiyeok             */
516     0x1105,     /* 0x79 y:              choseong  rieul              */
517     0x11b7,     /* 0x7A z:              jongseong mieum              */
518     0x007b,     /* 0x7B braceleft:      left brace                   */
519     0x007c,     /* 0x7C bar:            vertical line(bar)           */
520     0x007d,     /* 0x7D braceright:     right brace                  */
521     0x007e,     /* 0x7E asciitilde:     tilde                        */
522     0x0000      /* 0x7F delete                                       */
523 };
524 
525 static const ucschar hangul_keyboard_table_3final[] = {
526     0x0000,     /* 0x00 null                                         */
527     0x0000,     /* 0x01 start of heading                             */
528     0x0000,     /* 0x02 start of text                                */
529     0x0000,     /* 0x03 end of text                                  */
530     0x0000,     /* 0x04 end of transmission                          */
531     0x0000,     /* 0x05 enquiry                                      */
532     0x0000,     /* 0x06 acknowledge                                  */
533     0x0000,     /* 0x07 bell                                         */
534     0x0000,     /* 0x08 backspace                                    */
535     0x0000,     /* 0x09 character tabulation                         */
536     0x0000,     /* 0x0A line feed (lf)                               */
537     0x0000,     /* 0x0B line tabulation                              */
538     0x0000,     /* 0x0C form feed (ff)                               */
539     0x0000,     /* 0x0D carriage return (cr)                         */
540     0x0000,     /* 0x0E shift out                                    */
541     0x0000,     /* 0x0F shift in                                     */
542     0x0000,     /* 0x10 data link escape                             */
543     0x0000,     /* 0x11 device control one                           */
544     0x0000,     /* 0x12 device control two                           */
545     0x0000,     /* 0x13 device control three                         */
546     0x0000,     /* 0x14 device control four                          */
547     0x0000,     /* 0x15 negative acknowledge                         */
548     0x0000,     /* 0x16 synchronous idle                             */
549     0x0000,     /* 0x17 end of transmission block                    */
550     0x0000,     /* 0x18 cancel                                       */
551     0x0000,     /* 0x19 end of medium                                */
552     0x0000,     /* 0x1A substitute                                   */
553     0x0000,     /* 0x1B escape                                       */
554     0x0000,     /* 0x1C information separator four                   */
555     0x0000,     /* 0x1D information separator three                  */
556     0x0000,     /* 0x1E information separator two                    */
557     0x0000,     /* 0x1F information separator one                    */
558     0x0000,     /* 0x20 space                                        */
559     0x11a9,     /* 0x21 exclam:         jongseong ssangkiyeok        */
560     0x00b7,     /* 0x22 quotedbl:       middle dot                   */
561     0x11bd,     /* 0x23 numbersign:     jognseong cieuc              */
562     0x11b5,     /* 0x24 dollar:         jongseong rieul-phieuph      */
563     0x11b4,     /* 0x25 percent:        jongseong rieul-thieuth      */
564     0x201c,     /* 0x26 ampersand:      left double quotation mark   */
565     0x1110,     /* 0x27 apostrophe:     choseong  thieuth            */
566     0x0027,     /* 0x28 parenleft:      apostrophe                   */
567     0x007e,     /* 0x29 parenright:     Tilde                        */
568     0x201d,     /* 0x2A asterisk:       right double quotation mark  */
569     0x002b,     /* 0x2B plus:           plus sign                    */
570     0x002c,     /* 0x2C comma:          comma                        */
571     0x0029,     /* 0x2D minus:          right parenthesis            */
572     0x002e,     /* 0x2E period:         period                       */
573     0x1169,     /* 0x2F slash:          jungseong o                  */
574     0x110f,     /* 0x30 0:              choseong  khieukh            */
575     0x11c2,     /* 0x31 1:              jongseong hieuh              */
576     0x11bb,     /* 0x32 2:              jongseong ssangsios          */
577     0x11b8,     /* 0x33 3:              jongseong pieup              */
578     0x116d,     /* 0x34 4:              jungseong yo                 */
579     0x1172,     /* 0x35 5:              jungseong yu                 */
580     0x1163,     /* 0x36 6:              jungseong ya                 */
581     0x1168,     /* 0x37 7:              jungseong ye                 */
582     0x1174,     /* 0x38 8:              jungseong yi                 */
583     0x116e,     /* 0x39 9:              jungseong u                  */
584     0x0034,     /* 0x3A colon:          4                            */
585     0x1107,     /* 0x3B semicolon:      choseong  pieup              */
586     0x002c,     /* 0x3C less:           comma                        */
587     0x003e,     /* 0x3D equal:          greater-than sign            */
588     0x002e,     /* 0x3E greater:        period                       */
589     0x0021,     /* 0x3F question:       exclamation mark             */
590     0x11b0,     /* 0x40 at:             jongseong rieul-kiyeok       */
591     0x11ae,     /* 0x41 A:              jongseong tikeut             */
592     0x003f,     /* 0x42 B:              question mark                */
593     0x11bf,     /* 0x43 C:              jongseong khieukh            */
594     0x11b2,     /* 0x44 D:              jongseong rieul-pieup        */
595     0x11ac,     /* 0x45 E:              jongseong nieun-cieuc        */
596     0x11b1,     /* 0x46 F:              jongseong rieul-mieum        */
597     0x1164,     /* 0x47 G:              jungseong yae                */
598     0x0030,     /* 0x48 H:              0                            */
599     0x0037,     /* 0x49 I:              7                            */
600     0x0031,     /* 0x4A J:              1                            */
601     0x0032,     /* 0x4B K:              2                            */
602     0x0033,     /* 0x4C L:              3                            */
603     0x0022,     /* 0x4D M:              double quotation mark        */
604     0x002d,     /* 0x4E N:              minus sign                   */
605     0x0038,     /* 0x4F O:              8                            */
606     0x0039,     /* 0x50 P:              9                            */
607     0x11c1,     /* 0x51 Q:              jongseong phieuph            */
608     0x11b6,     /* 0x52 R:              jongseong rieul-hieuh        */
609     0x11ad,     /* 0x53 S:              jongseong nieun-hieuh        */
610     0x11b3,     /* 0x54 T:              jongseong rieul-sios         */
611     0x0036,     /* 0x55 U:              6                            */
612     0x11aa,     /* 0x56 V:              jongseong kiyeok-sios        */
613     0x11c0,     /* 0x57 W:              jongseong thikeuth           */
614     0x11b9,     /* 0x58 X:              jongseong pieup-sios         */
615     0x0035,     /* 0x59 Y:              5                            */
616     0x11be,     /* 0x5A Z:              jongseong chieuch            */
617     0x0028,     /* 0x5B bracketleft:    left parenthesis             */
618     0x003a,     /* 0x5C backslash:      colon                        */
619     0x003c,     /* 0x5D bracketright:   less-than sign               */
620     0x003d,     /* 0x5E asciicircum:    equals sign                  */
621     0x003b,     /* 0x5F underscore:     semicolon                    */
622     0x002a,     /* 0x60 quoteleft:      asterisk                     */
623     0x11bc,     /* 0x61 a:              jongseong ieung              */
624     0x116e,     /* 0x62 b:              jungseong u                  */
625     0x1166,     /* 0x63 c:              jungseong e                  */
626     0x1175,     /* 0x64 d:              jungseong i                  */
627     0x1167,     /* 0x65 e:              jungseong yeo                */
628     0x1161,     /* 0x66 f:              jungseong a                  */
629     0x1173,     /* 0x67 g:              jungseong eu                 */
630     0x1102,     /* 0x68 h:              choseong  nieun              */
631     0x1106,     /* 0x69 i:              choseong  mieum              */
632     0x110b,     /* 0x6A j:              choseong  ieung              */
633     0x1100,     /* 0x6B k:              choseong  kiyeok             */
634     0x110c,     /* 0x6C l:              choseong  cieuc              */
635     0x1112,     /* 0x6D m:              choseong  hieuh              */
636     0x1109,     /* 0x6E n:              choseong  sios               */
637     0x110e,     /* 0x6F o:              choseong  chieuch            */
638     0x1111,     /* 0x70 p:              choseong  phieuph            */
639     0x11ba,     /* 0x71 q:              jongseong sios               */
640     0x1162,     /* 0x72 r:              jungseong ae                 */
641     0x11ab,     /* 0x73 s:              jongseong nieun              */
642     0x1165,     /* 0x74 t:              jungseong eo                 */
643     0x1103,     /* 0x75 u:              choseong  tikeut             */
644     0x1169,     /* 0x76 v:              jungseong o                  */
645     0x11af,     /* 0x77 w:              jongseong rieul              */
646     0x11a8,     /* 0x78 x:              jongseong kiyeok             */
647     0x1105,     /* 0x79 y:              choseong  rieul              */
648     0x11b7,     /* 0x7A z:              jongseong mieum              */
649     0x0025,     /* 0x7B braceleft:      percent sign                 */
650     0x005c,     /* 0x7C bar:            backslash                    */
651     0x002f,     /* 0x7D braceright:     slash                        */
652     0x203b,     /* 0x7E asciitilde:     reference mark               */
653     0x0000      /* 0x7F delete                                       */
654 };
655 
656 static const ucschar hangul_keyboard_table_3sun[] = {
657     0x0000,     /* 0x00 null                                         */
658     0x0000,     /* 0x01 start of heading                             */
659     0x0000,     /* 0x02 start of text                                */
660     0x0000,     /* 0x03 end of text                                  */
661     0x0000,     /* 0x04 end of transmission                          */
662     0x0000,     /* 0x05 enquiry                                      */
663     0x0000,     /* 0x06 acknowledge                                  */
664     0x0000,     /* 0x07 bell                                         */
665     0x0000,     /* 0x08 backspace                                    */
666     0x0000,     /* 0x09 character tabulation                         */
667     0x0000,     /* 0x0A line feed (lf)                               */
668     0x0000,     /* 0x0B line tabulation                              */
669     0x0000,     /* 0x0C form feed (ff)                               */
670     0x0000,     /* 0x0D carriage return (cr)                         */
671     0x0000,     /* 0x0E shift out                                    */
672     0x0000,     /* 0x0F shift in                                     */
673     0x0000,     /* 0x10 data link escape                             */
674     0x0000,     /* 0x11 device control one                           */
675     0x0000,     /* 0x12 device control two                           */
676     0x0000,     /* 0x13 device control three                         */
677     0x0000,     /* 0x14 device control four                          */
678     0x0000,     /* 0x15 negative acknowledge                         */
679     0x0000,     /* 0x16 synchronous idle                             */
680     0x0000,     /* 0x17 end of transmission block                    */
681     0x0000,     /* 0x18 cancel                                       */
682     0x0000,     /* 0x19 end of medium                                */
683     0x0000,     /* 0x1A substitute                                   */
684     0x0000,     /* 0x1B escape                                       */
685     0x0000,     /* 0x1C information separator four                   */
686     0x0000,     /* 0x1D information separator three                  */
687     0x0000,     /* 0x1E information separator two                    */
688     0x0000,     /* 0x1F information separator one                    */
689     0x0000,     /* 0x20 space                                        */
690     0x0021,     /* 0x21 exclam:         exclamation mark             */
691     0x0022,     /* 0x22 quotedbl:       quotatioin mark              */
692     0x0023,     /* 0x23 numbersign:     number sign                  */
693     0x0024,     /* 0x24 dollar:         dollar sign                  */
694     0x0025,     /* 0x25 percent:        percent sign                 */
695     0x0026,     /* 0x26 ampersand:      ampersand                    */
696     0x1110,     /* 0x27 apostrophe:     choseong thieuth             */
697     0x0028,     /* 0x28 parenleft:      left parenthesis             */
698     0x0029,     /* 0x29 parenright:     right parenthesis            */
699     0x002a,     /* 0x2A asterisk:       asterisk                     */
700     0x002b,     /* 0x2B plus:           plus sign                    */
701     0x002c,     /* 0x2C comma:          comma                        */
702     0x11bd,     /* 0x2D minus:          jongseong cieuc              */
703     0x002e,     /* 0x2E period:         period                       */
704     0x11ae,     /* 0x2F slash:          jongseong tikeut             */
705     0x1164,     /* 0x30 0:              choseong  yae                */
706     0x11c2,     /* 0x31 1:              jongseong hieuh              */
707     0x11bb,     /* 0x32 2:              jongseong ssangsios          */
708     0x11b8,     /* 0x33 3:              jongseong pieup              */
709     0x116d,     /* 0x34 4:              jungseong yo                 */
710     0x1172,     /* 0x35 5:              jungseong yu                 */
711     0x1163,     /* 0x36 6:              jungseong ya                 */
712     0x1168,     /* 0x37 7:              jungseong ye                 */
713     0x1174,     /* 0x38 8:              jungseong yi                 */
714     0x110f,     /* 0x39 9:              choseong khieukh             */
715     0x003a,     /* 0x3A colon:          colon                        */
716     0x1107,     /* 0x3B semicolon:      choseong  pieup              */
717     0x0032,     /* 0x3C less:           2                            */
718     0x11be,     /* 0x3D equal:          jongseong chieuch            */
719     0x0033,     /* 0x3E greater:        3                            */
720     0x003f,     /* 0x3F question:       question mark                */
721     0x0040,     /* 0x40 at:             commertial at                */
722     0x11bc,     /* 0x41 A:              jongseong ieung              */
723     0x0021,     /* 0x42 B:              exclamation mark             */
724     0x005c,     /* 0x43 C:              backslash                    */
725     0x005d,     /* 0x44 D:              right bracket                */
726     0x1167,     /* 0x45 E:              jungseong yeo                */
727     0x1161,     /* 0x46 F:              jungseong a                  */
728     0x002f,     /* 0x47 G:              slash                        */
729     0x0027,     /* 0x48 H:              apostrophe                   */
730     0x0038,     /* 0x49 I:              8                            */
731     0x0034,     /* 0x4A J:              4                            */
732     0x0035,     /* 0x4B K:              5                            */
733     0x0036,     /* 0x4C L:              6                            */
734     0x0031,     /* 0x4D M:              1                            */
735     0x0030,     /* 0x4E N:              0                            */
736     0x0039,     /* 0x4F O:              9                            */
737     0x003e,     /* 0x50 P:              greater-than sign            */
738     0x11ba,     /* 0x51 Q:              jongseong sios               */
739     0x1162,     /* 0x52 R:              jungseong ae                 */
740     0x005b,     /* 0x53 S:              left bracket                 */
741     0x003b,     /* 0x54 T:              semicolon                    */
742     0x0037,     /* 0x55 U:              7                            */
743     0x1169,     /* 0x56 V:              jungseong o                  */
744     0x11af,     /* 0x57 W:              jongseong rieul              */
745     0x003d,     /* 0x58 X:              equals sign                  */
746     0x003c,     /* 0x59 Y:              less-than sign               */
747     0x002d,     /* 0x5A Z:              minus sign                   */
748     0x11c0,     /* 0x5B bracketleft:    jongseong thieuth            */
749     0x11bf,     /* 0x5C backslash:      jongseong khieukh            */
750     0x11c1,     /* 0x5D bracketright:   jongseong phieuph            */
751     0x005e,     /* 0x5E asciicircum:    circumflex accent            */
752     0x005f,     /* 0x5F underscore:     underscore                   */
753     0x0060,     /* 0x60 quoteleft:      grave accent                 */
754     0x11bc,     /* 0x61 a:              jongseong ieung              */
755     0x116e,     /* 0x62 b:              jungseong u                  */
756     0x1166,     /* 0x63 c:              jungseong e                  */
757     0x1175,     /* 0x64 d:              jungseong i                  */
758     0x1167,     /* 0x65 e:              jungseong yeo                */
759     0x1161,     /* 0x66 f:              jungseong a                  */
760     0x1173,     /* 0x67 g:              jungseong eu                 */
761     0x1102,     /* 0x68 h:              choseong  nieun              */
762     0x1106,     /* 0x69 i:              choseong  mieum              */
763     0x110b,     /* 0x6A j:              choseong  ieung              */
764     0x1100,     /* 0x6B k:              choseong  kiyeok             */
765     0x110c,     /* 0x6C l:              choseong  cieuc              */
766     0x1112,     /* 0x6D m:              choseong  hieuh              */
767     0x1109,     /* 0x6E n:              choseong  sios               */
768     0x110e,     /* 0x6F o:              choseong  chieuch            */
769     0x1111,     /* 0x70 p:              choseong  phieuph            */
770     0x11ba,     /* 0x71 q:              jongseong sios               */
771     0x1162,     /* 0x72 r:              jungseong ae                 */
772     0x11ab,     /* 0x73 s:              jongseong nieun              */
773     0x1165,     /* 0x74 t:              jungseong eo                 */
774     0x1103,     /* 0x75 u:              choseong  tikeut             */
775     0x1169,     /* 0x76 v:              jungseong o                  */
776     0x11af,     /* 0x77 w:              jongseong rieul              */
777     0x11a8,     /* 0x78 x:              jongseong kiyeok             */
778     0x1105,     /* 0x79 y:              choseong  rieul              */
779     0x11b7,     /* 0x7A z:              jongseong mieum              */
780     0x007b,     /* 0x7B braceleft:      left brace                   */
781     0x007c,     /* 0x7C bar:            vertical line(bar)           */
782     0x007d,     /* 0x7D braceright:     right brace                  */
783     0x007e,     /* 0x7E asciitilde:     tilde                        */
784     0x0000      /* 0x7F delete                                       */
785 };
786 
787 static const ucschar hangul_keyboard_table_3yet[] = {
788     0x0000,     /* 0x00 null                                         */
789     0x0000,     /* 0x01 start of heading                             */
790     0x0000,     /* 0x02 start of text                                */
791     0x0000,     /* 0x03 end of text                                  */
792     0x0000,     /* 0x04 end of transmission                          */
793     0x0000,     /* 0x05 enquiry                                      */
794     0x0000,     /* 0x06 acknowledge                                  */
795     0x0000,     /* 0x07 bell                                         */
796     0x0000,     /* 0x08 backspace                                    */
797     0x0000,     /* 0x09 character tabulation                         */
798     0x0000,     /* 0x0A line feed (lf)                               */
799     0x0000,     /* 0x0B line tabulation                              */
800     0x0000,     /* 0x0C form feed (ff)                               */
801     0x0000,     /* 0x0D carriage return (cr)                         */
802     0x0000,     /* 0x0E shift out                                    */
803     0x0000,     /* 0x0F shift in                                     */
804     0x0000,     /* 0x10 data link escape                             */
805     0x0000,     /* 0x11 device control one                           */
806     0x0000,     /* 0x12 device control two                           */
807     0x0000,     /* 0x13 device control three                         */
808     0x0000,     /* 0x14 device control four                          */
809     0x0000,     /* 0x15 negative acknowledge                         */
810     0x0000,     /* 0x16 synchronous idle                             */
811     0x0000,     /* 0x17 end of transmission block                    */
812     0x0000,     /* 0x18 cancel                                       */
813     0x0000,     /* 0x19 end of medium                                */
814     0x0000,     /* 0x1A substitute                                   */
815     0x0000,     /* 0x1B escape                                       */
816     0x0000,     /* 0x1C information separator four                   */
817     0x0000,     /* 0x1D information separator three                  */
818     0x0000,     /* 0x1E information separator two                    */
819     0x0000,     /* 0x1F information separator one                    */
820     0x0000,     /* 0x20 space                                        */
821     0x11bd,     /* 0x21 exclam:         jongseong cieuc              */
822     0x0022,     /* 0x22 quotedbl:       quotatioin mark              */
823     0x0023,     /* 0x23 numbersign:     number sign                  */
824     0x0024,     /* 0x24 dollar:         dollar sign                  */
825     0x0025,     /* 0x25 percent:        percent sign                 */
826     0x0026,     /* 0x26 ampersand:      ampersand                    */
827     0x1110,     /* 0x27 apostrophe:     choseong thieuth             */
828     0x0028,     /* 0x28 parenleft:      left parenthesis             */
829     0x0029,     /* 0x29 parenright:     right parenthesis            */
830     0x002a,     /* 0x2A asterisk:       asterisk                     */
831     0x002b,     /* 0x2B plus:           plus sign                    */
832     0x002c,     /* 0x2C comma:          comma                        */
833     0x002d,     /* 0x2D minus:          minus sign                   */
834     0x002e,     /* 0x2E period:         period                       */
835     0x1169,     /* 0x2F slash:          jungseong o                  */
836     0x110f,     /* 0x30 0:              choseong  khieukh            */
837     0x11c2,     /* 0x31 1:              jongseong hieuh              */
838     0x11bb,     /* 0x32 2:              jongseong ssangsios          */
839     0x11b8,     /* 0x33 3:              jongseong pieup              */
840     0x116d,     /* 0x34 4:              jungseong yo                 */
841     0x1172,     /* 0x35 5:              jungseong yu                 */
842     0x1163,     /* 0x36 6:              jungseong ya                 */
843     0x1168,     /* 0x37 7:              jungseong ye                 */
844     0x1174,     /* 0x38 8:              jungseong yi                 */
845     0x116e,     /* 0x39 9:              jungseong u                  */
846     0x003a,     /* 0x3A colon:          colon                        */
847     0x1107,     /* 0x3B semicolon:      choseong  pieup              */
848     0x113c,     /* 0x3C less:           choseong chitueumsios        */
849     0x003d,     /* 0x3D equal:          euals sign                   */
850     0x113e,     /* 0x3E greater:        choseong ceongchieumsios     */
851     0x003f,     /* 0x3F question:       question mark                */
852     0x11eb,     /* 0x40 at:             jongseong pansios            */
853     0x11ae,     /* 0x41 A:              jongseong tikeut             */
854     0x0021,     /* 0x42 B:              exclamation mark             */
855     0x11b1,     /* 0x43 C:              jongseong rieul-mieum        */
856     0x11b0,     /* 0x44 D:              jongseong rieul-kiyeok       */
857     0x11bf,     /* 0x45 E:              jongseong khieukh            */
858     0x11a9,     /* 0x46 F:              jongseong ssangkiyeok        */
859     0x119e,     /* 0x47 G:              jungseong araea              */
860     0x0027,     /* 0x48 H:              apostrophe                   */
861     0x1154,     /* 0x49 I:              choseong chitueumchieuch     */
862     0x114c,     /* 0x4A J:              choseong yesieung            */
863     0x114e,     /* 0x4B K:              choseong chitueumcieuc       */
864     0x1150,     /* 0x4C L:              choseong ceongchieumcieuc    */
865     0x1159,     /* 0x4D M:              choseong yeorinhieuh         */
866     0x1140,     /* 0x4E N:              choseong pansios             */
867     0x1155,     /* 0x4F O:              choseong ceongchieumchieuch  */
868     0x003e,     /* 0x50 P:              greater-than sign            */
869     0x11c1,     /* 0x51 Q:              jongseong phieuph            */
870     0x1164,     /* 0x52 R:              jungseong yae                */
871     0x11ad,     /* 0x53 S:              jongseong nieun-hieuh        */
872     0x003b,     /* 0x54 T:              semicolon                    */
873     0x00b7,     /* 0x55 U:              middle dot                   */
874     0x11b6,     /* 0x56 V:              jongseong rieul-hieuh        */
875     0x11c0,     /* 0x57 W:              jongseong thikeuth           */
876     0x11b9,     /* 0x58 X:              jongseong pieup-sios         */
877     0x003c,     /* 0x59 Y:              less-than sign               */
878     0x11be,     /* 0x5A Z:              jongseong chieuch            */
879     0x005b,     /* 0x5B bracketleft:    left bracket                 */
880     0x005c,     /* 0x5C backslash:      backslash                    */
881     0x005d,     /* 0x5D bracketright:   right bracket                */
882     0x114c,     /* 0x5E asciicircum:    choseong yesieung            */
883     0x005f,     /* 0x5F underscore:     underscore                   */
884     0x11f9,     /* 0x60 quoteleft:      jongseong yeorinhieuh        */
885     0x11bc,     /* 0x61 a:              jongseong ieung              */
886     0x116e,     /* 0x62 b:              jungseong u                  */
887     0x1166,     /* 0x63 c:              jungseong e                  */
888     0x1175,     /* 0x64 d:              jungseong i                  */
889     0x1167,     /* 0x65 e:              jungseong yeo                */
890     0x1161,     /* 0x66 f:              jungseong a                  */
891     0x1173,     /* 0x67 g:              jungseong eu                 */
892     0x1102,     /* 0x68 h:              choseong  nieun              */
893     0x1106,     /* 0x69 i:              choseong  mieum              */
894     0x110b,     /* 0x6A j:              choseong  ieung              */
895     0x1100,     /* 0x6B k:              choseong  kiyeok             */
896     0x110c,     /* 0x6C l:              choseong  cieuc              */
897     0x1112,     /* 0x6D m:              choseong  hieuh              */
898     0x1109,     /* 0x6E n:              choseong  sios               */
899     0x110e,     /* 0x6F o:              choseong  chieuch            */
900     0x1111,     /* 0x70 p:              choseong  phieuph            */
901     0x11ba,     /* 0x71 q:              jongseong sios               */
902     0x1162,     /* 0x72 r:              jungseong ae                 */
903     0x11ab,     /* 0x73 s:              jongseong nieun              */
904     0x1165,     /* 0x74 t:              jungseong eo                 */
905     0x1103,     /* 0x75 u:              choseong  tikeut             */
906     0x1169,     /* 0x76 v:              jungseong o                  */
907     0x11af,     /* 0x77 w:              jongseong rieul              */
908     0x11a8,     /* 0x78 x:              jongseong kiyeok             */
909     0x1105,     /* 0x79 y:              choseong  rieul              */
910     0x11b7,     /* 0x7A z:              jongseong mieum              */
911     0x007b,     /* 0x7B braceleft:      left brace                   */
912     0x007c,     /* 0x7C bar:            vertical line(bar)           */
913     0x007d,     /* 0x7D braceright:     right brace                  */
914     0x11f0,     /* 0x7E asciitilde:     jongseong yesieung           */
915     0x0000      /* 0x7F delete                                       */
916 };
917 
918 static const ucschar hangul_keyboard_table_romaja[] = {
919     0x0000,     /* 0x00 null                                         */
920     0x0000,     /* 0x01 start of heading                             */
921     0x0000,     /* 0x02 start of text                                */
922     0x0000,     /* 0x03 end of text                                  */
923     0x0000,     /* 0x04 end of transmission                          */
924     0x0000,     /* 0x05 enquiry                                      */
925     0x0000,     /* 0x06 acknowledge                                  */
926     0x0000,     /* 0x07 bell                                         */
927     0x0000,     /* 0x08 backspace                                    */
928     0x0000,     /* 0x09 character tabulation                         */
929     0x0000,     /* 0x0A line feed (lf)                               */
930     0x0000,     /* 0x0B line tabulation                              */
931     0x0000,     /* 0x0C form feed (ff)                               */
932     0x0000,     /* 0x0D carriage return (cr)                         */
933     0x0000,     /* 0x0E shift out                                    */
934     0x0000,     /* 0x0F shift in                                     */
935     0x0000,     /* 0x10 data link escape                             */
936     0x0000,     /* 0x11 device control one                           */
937     0x0000,     /* 0x12 device control two                           */
938     0x0000,     /* 0x13 device control three                         */
939     0x0000,     /* 0x14 device control four                          */
940     0x0000,     /* 0x15 negative acknowledge                         */
941     0x0000,     /* 0x16 synchronous idle                             */
942     0x0000,     /* 0x17 end of transmission block                    */
943     0x0000,     /* 0x18 cancel                                       */
944     0x0000,     /* 0x19 end of medium                                */
945     0x0000,     /* 0x1A substitute                                   */
946     0x0000,     /* 0x1B escape                                       */
947     0x0000,     /* 0x1C information separator four                   */
948     0x0000,     /* 0x1D information separator three                  */
949     0x0000,     /* 0x1E information separator two                    */
950     0x0000,     /* 0x1F information separator one                    */
951     0x0000,     /* 0x20 space                                        */
952     0x0021,     /* 0x21 exclam:       exclamation mark               */
953     0x0022,     /* 0x22 quotedbl:     quotation mark                 */
954     0x0023,     /* 0x23 numbersign:   number sign                    */
955     0x0024,     /* 0x24 dollar:       dollar sign                    */
956     0x0025,     /* 0x25 percent:      percent sign                   */
957     0x0026,     /* 0x26 ampersand:    ampersand                      */
958     0x0027,     /* 0x27 apostrophe:   apostrophe                     */
959     0x0028,     /* 0x28 parenleft:    left parenthesis               */
960     0x0029,     /* 0x29 parenright:   right parenthesis              */
961     0x002a,     /* 0x2A asterisk:     asterisk                       */
962     0x002b,     /* 0x2B plus:         plus sign                      */
963     0x002c,     /* 0x2C comma:        comma                          */
964     0x002d,     /* 0x2D minus:        minus sign                     */
965     0x002e,     /* 0x2E period:       period                         */
966     0x002f,     /* 0x2F slash:        slash                          */
967     0x0030,     /* 0x30 0:            0                              */
968     0x0031,     /* 0x31 1:            1                              */
969     0x0032,     /* 0x32 2:            2                              */
970     0x0033,     /* 0x33 3:            3                              */
971     0x0034,     /* 0x34 4:            4                              */
972     0x0035,     /* 0x35 5:            5                              */
973     0x0036,     /* 0x36 6:            6                              */
974     0x0037,     /* 0x37 7:            7                              */
975     0x0038,     /* 0x38 8:            8                              */
976     0x0039,     /* 0x39 9:            9                              */
977     0x003a,     /* 0x3A colon:        colon                          */
978     0x003b,     /* 0x3B semicolon:    semicolon                      */
979     0x003c,     /* 0x3C less:         less-than sign                 */
980     0x003d,     /* 0x3D equal:        equals sign                    */
981     0x003e,     /* 0x3E greater:      greater-than sign              */
982     0x003f,     /* 0x3F question:     question mark                  */
983     0x0040,     /* 0x40 at:           commercial at                  */
984     0x1161,     /* 0x41 A:            jungseong a                    */
985     0x1107,     /* 0x42 B:            choseong  pieup                */
986     0x110e,     /* 0x43 C:            choseong  chieuch              */
987     0x1103,     /* 0x44 D:            choseong  tikeut               */
988     0x1166,     /* 0x45 E:            jungseong e                    */
989     0x1111,     /* 0x46 F:            choseong  phieuph              */
990     0x1100,     /* 0x47 G:            choseong  kiyeok               */
991     0x1112,     /* 0x48 H:            choseong  heiuh                */
992     0x1175,     /* 0x49 I:            jungseong i                    */
993     0x110c,     /* 0x4A J:            choseong  cieuc                */
994     0x110f,     /* 0x4B K:            choseong  khieukh              */
995     0x1105,     /* 0x4C L:            choseong  rieul                */
996     0x1106,     /* 0x4D M:            choseong  mieum                */
997     0x1102,     /* 0x4E N:            choseong  nieun                */
998     0x1169,     /* 0x4F O:            jungseong o                    */
999     0x1111,     /* 0x50 P:            choseong  phieuph              */
1000     0x110f,     /* 0x51 Q:            choseong  khieukh              */
1001     0x1105,     /* 0x52 R:            choseong  rieul                */
1002     0x1109,     /* 0x53 S:            choseong  sios                 */
1003     0x1110,     /* 0x54 T:            choseong  thieuth              */
1004     0x116e,     /* 0x55 U:            jungseong u                    */
1005     0x1107,     /* 0x56 V:            choseong  pieup                */
1006     0x116e,     /* 0x57 W:            jungseong u                    */
1007     0x110c,     /* 0x58 X:            choseong  cieuc                */
1008     0x1175,     /* 0x59 Y:            jungseong i                    */
1009     0x110c,     /* 0x5A Z:            choseong  cieuc                */
1010     0x005b,     /* 0x5B bracketleft:  left bracket                   */
1011     0x005c,     /* 0x5C backslash:    backslash                      */
1012     0x005d,     /* 0x5D bracketright: right bracket                  */
1013     0x005e,     /* 0x5E asciicircum:  circumflex accent              */
1014     0x005f,     /* 0x5F underscore:   underscore                     */
1015     0x0060,     /* 0x60 quoteleft:    grave accent                   */
1016     0x1161,     /* 0x61 a:            jungseong a                    */
1017     0x1107,     /* 0x62 b:            choseong  pieup                */
1018     0x110e,     /* 0x63 c:            choseong  chieuch              */
1019     0x1103,     /* 0x64 d:            choseong  tikeut               */
1020     0x1166,     /* 0x65 e:            jungseong e                    */
1021     0x1111,     /* 0x66 f:            choseong  phieuph              */
1022     0x1100,     /* 0x67 g:            choseong  kiyeok               */
1023     0x1112,     /* 0x68 h:            choseong  hieuh                */
1024     0x1175,     /* 0x69 i:            jungseong i                    */
1025     0x110c,     /* 0x6A j:            choseong  cieuc                */
1026     0x110f,     /* 0x6B k:            choseong  khieukh              */
1027     0x1105,     /* 0x6C l:            choseong  rieul                */
1028     0x1106,     /* 0x6D m:            choseong  mieum                */
1029     0x1102,     /* 0x6E n:            choseong  nieun                */
1030     0x1169,     /* 0x6F o:            jungseong o                    */
1031     0x1111,     /* 0x70 p:            choseong  pieup                */
1032     0x110f,     /* 0x71 q:            choseong  khieukh              */
1033     0x1105,     /* 0x72 r:            choseong  rieul                */
1034     0x1109,     /* 0x73 s:            choseong  sios                 */
1035     0x1110,     /* 0x74 t:            choseong  thieuth              */
1036     0x116e,     /* 0x75 u:            jungseong u                    */
1037     0x1107,     /* 0x76 v:            choseong  phieuph              */
1038     0x116e,     /* 0x77 w:            jungseong u                    */
1039     0x11aa,     /* 0x78 x:            jongseong kiyeoksios           */
1040     0x1175,     /* 0x79 y:            jungseong i                    */
1041     0x110c,     /* 0x7A z:            choseong  cieuc                */
1042     0x007b,     /* 0x7B braceleft:    left brace                     */
1043     0x007c,     /* 0x7C bar:          vertical bar                   */
1044     0x007d,     /* 0x7D braceright:   right brace                    */
1045     0x007e,     /* 0x7E asciitilde:   tilde                          */
1046     0x0000      /* 0x7F delete                                       */
1047 };
1048 
1049 static const ucschar hangul_keyboard_table_ahn[] = {
1050     0x0000,     /* 0x00 null                                         */
1051     0x0000,     /* 0x01 start of heading                             */
1052     0x0000,     /* 0x02 start of text                                */
1053     0x0000,     /* 0x03 end of text                                  */
1054     0x0000,     /* 0x04 end of transmission                          */
1055     0x0000,     /* 0x05 enquiry                                      */
1056     0x0000,     /* 0x06 acknowledge                                  */
1057     0x0000,     /* 0x07 bell                                         */
1058     0x0000,     /* 0x08 backspace                                    */
1059     0x0000,     /* 0x09 character tabulation                         */
1060     0x0000,     /* 0x0A line feed (lf)                               */
1061     0x0000,     /* 0x0B line tabulation                              */
1062     0x0000,     /* 0x0C form feed (ff)                               */
1063     0x0000,     /* 0x0D carriage return (cr)                         */
1064     0x0000,     /* 0x0E shift out                                    */
1065     0x0000,     /* 0x0F shift in                                     */
1066     0x0000,     /* 0x10 data link escape                             */
1067     0x0000,     /* 0x11 device control one                           */
1068     0x0000,     /* 0x12 device control two                           */
1069     0x0000,     /* 0x13 device control three                         */
1070     0x0000,     /* 0x14 device control four                          */
1071     0x0000,     /* 0x15 negative acknowledge                         */
1072     0x0000,     /* 0x16 synchronous idle                             */
1073     0x0000,     /* 0x17 end of transmission block                    */
1074     0x0000,     /* 0x18 cancel                                       */
1075     0x0000,     /* 0x19 end of medium                                */
1076     0x0000,     /* 0x1A substitute                                   */
1077     0x0000,     /* 0x1B escape                                       */
1078     0x0000,     /* 0x1C information separator four                   */
1079     0x0000,     /* 0x1D information separator three                  */
1080     0x0000,     /* 0x1E information separator two                    */
1081     0x0000,     /* 0x1F information separator one                    */
1082     0x0000,     /* 0x20 space                                        */
1083     0x0021,     /* 0x21 exclam:       exclamation mark               */
1084     0x0022,     /* 0x22 quotedbl:     quotation mark                 */
1085     0x0023,     /* 0x23 numbersign:   number sign                    */
1086     0x0024,     /* 0x24 dollar:       dollar sign                    */
1087     0x0025,     /* 0x25 percent:      percent sign                   */
1088     0x0026,     /* 0x26 ampersand:    ampersand                      */
1089     0x002e,     /* 0x27 apostrophe:   period                         */
1090     0x0028,     /* 0x28 parenleft:    left parenthesis               */
1091     0x0029,     /* 0x29 parenright:   right parenthesis              */
1092     0x002a,     /* 0x2A asterisk:     asterisk                       */
1093     0x002b,     /* 0x2B plus:         plus sign                      */
1094     0x11b7,     /* 0x2C comma:        jongseong mieum                */
1095     0x002d,     /* 0x2D minus:        minus sign                     */
1096     0x11af,     /* 0x2E period:       jongseong rieul                */
1097     0x11c2,     /* 0x2F slash:        jongseong hieuh                */
1098     0x0030,     /* 0x30 0:            0                              */
1099     0x0031,     /* 0x31 1:            1                              */
1100     0x0032,     /* 0x32 2:            2                              */
1101     0x0033,     /* 0x33 3:            3                              */
1102     0x0034,     /* 0x34 4:            4                              */
1103     0x0035,     /* 0x35 5:            5                              */
1104     0x0036,     /* 0x36 6:            6                              */
1105     0x0037,     /* 0x37 7:            7                              */
1106     0x0038,     /* 0x38 8:            8                              */
1107     0x0039,     /* 0x39 9:            9                              */
1108     0x003a,     /* 0x3A colon:        colon                          */
1109     0x116e,     /* 0x3B semicolon:    jungseong u                    */
1110     0x003c,     /* 0x3C less:         less-than sign                 */
1111     0x003d,     /* 0x3D equal:        equals sign                    */
1112     0x003e,     /* 0x3E greater:      greater-than sign              */
1113     0x11f9,     /* 0x3F question:     jongseong yeorinhieuh          */
1114     0x0040,     /* 0x40 at:           commercial at                  */
1115     0x1107,     /* 0x41 A:            choseong pieup                 */
1116     0x11f0,     /* 0x42 B:            jongseong yesieung             */
1117     0x11b8,     /* 0x43 C:            jongseong pieup                */
1118     0x1103,     /* 0x44 D:            choseong tikeut                */
1119     0x1102,     /* 0x45 E:            choseong nieun                 */
1120     0x1100,     /* 0x46 F:            choseong kiyeok                */
1121     0x114c,     /* 0x47 G:            choseong yesieung              */
1122     0x1165,     /* 0x48 H:            jungseong eo                   */
1123     0x002f,     /* 0x49 I:            slash                          */
1124     0x119e,     /* 0x4A J:            jungseong araea                */
1125     0x1175,     /* 0x4B K:            jungseong i                    */
1126     0x1169,     /* 0x4C L:            jungseong o                    */
1127     0x11ab,     /* 0x4D M:            jongseong nienu                */
1128     0x11eb,     /* 0x4E N:            jongseung pansios              */
1129     0x005b,     /* 0x4F O:            left bracket                   */
1130     0x005d,     /* 0x50 P:            right bracket                  */
1131     0x1106,     /* 0x51 Q:            choseong mieum                 */
1132     0x1105,     /* 0x52 R:            choseong rieul                 */
1133     0x110c,     /* 0x53 S:            choseong cieuc                 */
1134     0x1159,     /* 0x54 T:            choseong yeorinhieuh           */
1135     0x0027,     /* 0x55 U:            apostrophe                     */
1136     0x11a8,     /* 0x56 V:            jongseong kiyeok               */
1137     0x1140,     /* 0x57 W:            choseong pansios               */
1138     0x11ae,     /* 0x58 X:            jongseong tikeut               */
1139     0x003b,     /* 0x59 Y:            semicolon                      */
1140     0x11bd,     /* 0x5A Z:            jongseong cieuc                */
1141     0x002c,     /* 0x5B bracketleft:  comma                          */
1142     0x005c,     /* 0x5C backslash:    backslash                      */
1143     0x003f,     /* 0x5D bracketright: qustion mark                   */
1144     0x005e,     /* 0x5E asciicircum:  circumflex accent              */
1145     0x005f,     /* 0x5F underscore:   underscore                     */
1146     0x0060,     /* 0x60 quoteleft:    grave accent                   */
1147     0x1107,     /* 0x61 a:            choseong  pieup                */
1148     0x11bc,     /* 0x62 b:            jongseong ieung                */
1149     0x11b8,     /* 0x63 c:            jongseong pieup                */
1150     0x1103,     /* 0x64 d:            choseong  tikeut               */
1151     0x1102,     /* 0x65 e:            choseong nieun                 */
1152     0x1100,     /* 0x66 f:            choseong kiyeok                */
1153     0x110b,     /* 0x67 g:            choseong ieung                 */
1154     0x1165,     /* 0x68 h:            jungseong eo                   */
1155     0x1173,     /* 0x69 i:            jungseong eu                   */
1156     0x1161,     /* 0x6A j:            jungseong a                    */
1157     0x1175,     /* 0x6B k:            jungseong i                    */
1158     0x1169,     /* 0x6C l:            jungseong o                    */
1159     0x11ab,     /* 0x6D m:            jongseong nieun                */
1160     0x11ba,     /* 0x6E n:            jongseong sios                 */
1161     0x116d,     /* 0x6F o:            jungseong yo                   */
1162     0x1172,     /* 0x70 p:            jungseong yu                   */
1163     0x1106,     /* 0x71 q:            choseong mieum                 */
1164     0x1105,     /* 0x72 r:            choseong rieul                 */
1165     0x110c,     /* 0x73 s:            choseong cieuc                 */
1166     0x1112,     /* 0x74 t:            choseong hieuh                 */
1167     0x1163,     /* 0x75 u:            jungseong ya                   */
1168     0x11a8,     /* 0x76 v:            jongseong kiyok                */
1169     0x1109,     /* 0x77 w:            choseong sios                  */
1170     0x11ae,     /* 0x78 x:            jongseong tikeut               */
1171     0x1167,     /* 0x79 y:            jungseong yeo                  */
1172     0x11bd,     /* 0x7A z:            jongseong cieuc                */
1173     0x007b,     /* 0x7B braceleft:    left brace                     */
1174     0x007c,     /* 0x7C bar:          vertical bar                   */
1175     0x007d,     /* 0x7D braceright:   right brace                    */
1176     0x007e,     /* 0x7E asciitilde:   tilde                          */
1177     0x0000      /* 0x7F delete                                       */
1178 };
1179 
1180 static const HangulCombinationItem hangul_combination_table_default[] = {
1181   { 0x11001100, 0x1101 }, /* choseong  kiyeok + kiyeok  = ssangkiyeok   */
1182   { 0x11031103, 0x1104 }, /* choseong  tikeut + tikeut  = ssangtikeut   */
1183   { 0x11071107, 0x1108 }, /* choseong  pieup  + pieup   = ssangpieup    */
1184   { 0x11091109, 0x110a }, /* choseong  sios   + sios    = ssangsios     */
1185   { 0x110c110c, 0x110d }, /* choseong  cieuc  + cieuc   = ssangcieuc    */
1186   { 0x11691161, 0x116a }, /* jungseong o      + a       = wa            */
1187   { 0x11691162, 0x116b }, /* jungseong o      + ae      = wae           */
1188   { 0x11691175, 0x116c }, /* jungseong o      + i       = oe            */
1189   { 0x116e1165, 0x116f }, /* jungseong u      + eo      = weo           */
1190   { 0x116e1166, 0x1170 }, /* jungseong u      + e       = we            */
1191   { 0x116e1175, 0x1171 }, /* jungseong u      + i       = wi            */
1192   { 0x11731175, 0x1174 }, /* jungseong eu     + i       = yi            */
1193   { 0x11a811a8, 0x11a9 }, /* jongseong kiyeok + kiyeok  = ssangekiyeok  */
1194   { 0x11a811ba, 0x11aa }, /* jongseong kiyeok + sios    = kiyeok-sois   */
1195   { 0x11ab11bd, 0x11ac }, /* jongseong nieun  + cieuc   = nieun-cieuc   */
1196   { 0x11ab11c2, 0x11ad }, /* jongseong nieun  + hieuh   = nieun-hieuh   */
1197   { 0x11af11a8, 0x11b0 }, /* jongseong rieul  + kiyeok  = rieul-kiyeok  */
1198   { 0x11af11b7, 0x11b1 }, /* jongseong rieul  + mieum   = rieul-mieum   */
1199   { 0x11af11b8, 0x11b2 }, /* jongseong rieul  + pieup   = rieul-pieup   */
1200   { 0x11af11ba, 0x11b3 }, /* jongseong rieul  + sios    = rieul-sios    */
1201   { 0x11af11c0, 0x11b4 }, /* jongseong rieul  + thieuth = rieul-thieuth */
1202   { 0x11af11c1, 0x11b5 }, /* jongseong rieul  + phieuph = rieul-phieuph */
1203   { 0x11af11c2, 0x11b6 }, /* jongseong rieul  + hieuh   = rieul-hieuh   */
1204   { 0x11b811ba, 0x11b9 }, /* jongseong pieup  + sios    = pieup-sios    */
1205   { 0x11ba11ba, 0x11bb }, /* jongseong sios   + sios    = ssangsios     */
1206 };
1207 
1208 static const HangulCombinationItem hangul_combination_table_romaja[] = {
1209   { 0x11001100, 0x1101 }, /* choseong  kiyeok + kiyeok  = ssangkiyeok   */
1210   { 0x11031103, 0x1104 }, /* choseong  tikeut + tikeut  = ssangtikeut   */
1211   { 0x11071107, 0x1108 }, /* choseong  pieup  + pieup   = ssangpieup    */
1212   { 0x11091109, 0x110a }, /* choseong  sios   + sios    = ssangsios     */
1213   { 0x110c110c, 0x110d }, /* choseong  cieuc  + cieuc   = ssangcieuc    */
1214   { 0x110e1112, 0x110e }, /* choseong  chieuch+ hieuh   = chieuch       */
1215   { 0x11611166, 0x1162 }, /* jungseong a      + e       = ae            */
1216   { 0x11611175, 0x1162 }, /* jungseong a      + i       = ae            */
1217   { 0x11631166, 0x1164 }, /* jungseong ya     + e       = yae           */
1218   { 0x11631175, 0x1164 }, /* jungseong ya     + i       = yae           */
1219   { 0x11661169, 0x1165 }, /* jungseong e      + o       = eo            */
1220   { 0x1166116e, 0x1173 }, /* jungseong e      + u       = eu            */
1221   { 0x11681169, 0x1167 }, /* jungseong ye     + o       = yeo           */
1222   { 0x11691161, 0x116a }, /* jungseong o      + a       = wa            */
1223   { 0x11691162, 0x116b }, /* jungseong o      + ae      = wae           */
1224   { 0x11691175, 0x116c }, /* jungseong o      + i       = oe            */
1225   { 0x116a1166, 0x116b }, /* jungseong wa     + e       = wae           */
1226   { 0x116a1175, 0x116b }, /* jungseong wa     + i       = wae           */
1227   { 0x116e1161, 0x116a }, /* jungseong u      + a       = wa            */
1228   { 0x116e1165, 0x116f }, /* jungseong u      + eo      = weo           */
1229   { 0x116e1166, 0x1170 }, /* jungseong u      + e       = we            */
1230   { 0x116e1169, 0x116f }, /* jungseong u      + o       = weo           */
1231   { 0x116e1175, 0x1171 }, /* jungseong u      + i       = wi            */
1232   { 0x11701169, 0x116f }, /* jungseong we     + o       = weo           */
1233   { 0x11731175, 0x1174 }, /* jungseong eu     + i       = yi            */
1234   { 0x11751161, 0x1163 }, /* jungseong i      + a       = ya            */
1235   { 0x11751162, 0x1164 }, /* jungseong i      + ae      = yae           */
1236   { 0x11751165, 0x1167 }, /* jungseong i      + eo      = yeo           */
1237   { 0x11751166, 0x1168 }, /* jungseong i      + e       = ye            */
1238   { 0x11751169, 0x116d }, /* jungseong i      + o       = yo            */
1239   { 0x1175116e, 0x1172 }, /* jungseong i      + u       = yu            */
1240   { 0x11a811a8, 0x11a9 }, /* jongseong kiyeok + kiyeok  = ssangekiyeok  */
1241   { 0x11a811ba, 0x11aa }, /* jongseong kiyeok + sios    = kiyeok-sois   */
1242   { 0x11ab11a8, 0x11bc }, /* jongseong nieun  + kiyeok  = ieung         */
1243   { 0x11ab11bd, 0x11ac }, /* jongseong nieun  + cieuc   = nieun-cieuc   */
1244   { 0x11ab11c2, 0x11ad }, /* jongseong nieun  + hieuh   = nieun-hieuh   */
1245   { 0x11af11a8, 0x11b0 }, /* jongseong rieul  + kiyeok  = rieul-kiyeok  */
1246   { 0x11af11b7, 0x11b1 }, /* jongseong rieul  + mieum   = rieul-mieum   */
1247   { 0x11af11b8, 0x11b2 }, /* jongseong rieul  + pieup   = rieul-pieup   */
1248   { 0x11af11ba, 0x11b3 }, /* jongseong rieul  + sios    = rieul-sios    */
1249   { 0x11af11c0, 0x11b4 }, /* jongseong rieul  + thieuth = rieul-thieuth */
1250   { 0x11af11c1, 0x11b5 }, /* jongseong rieul  + phieuph = rieul-phieuph */
1251   { 0x11af11c2, 0x11b6 }, /* jongseong rieul  + hieuh   = rieul-hieuh   */
1252   { 0x11b811ba, 0x11b9 }, /* jongseong pieup  + sios    = pieup-sios    */
1253   { 0x11ba11ba, 0x11bb }, /* jongseong sios   + sios    = ssangsios     */
1254 };
1255 
1256 static const HangulCombinationItem hangul_combination_table_full[] = {
1257   { 0x11001100, 0x1101 }, /* choseong kiyeok + kiyeok          = ssangkiyeok */
1258   { 0x11001103, 0x115a }, /* choseong kiyeok + tikeut          = kiyeok-tikeut */
1259   { 0x11021100, 0x1113 }, /* choseong nieun + kiyeok           = nieun-kiyeok */
1260   { 0x11021102, 0x1114 }, /* choseong nieun + nieun            = ssangnieun */
1261   { 0x11021103, 0x1115 }, /* choseong nieun + tikeut           = nieun-tikeut */
1262   { 0x11021107, 0x1116 }, /* choseong nieun + pieup            = nieun-pieup */
1263   { 0x11021109, 0x115b }, /* choseong nieun + sios             = nieun-sios */
1264   { 0x1102110c, 0x115c }, /* choseong nieun + cieuc            = nieun-cieuc */
1265   { 0x11021112, 0x115d }, /* choseong nieun + hieuh            = nieun-hieuh */
1266   { 0x11031100, 0x1117 }, /* choseong tikeut + kiyeok          = tikeut-kiyeok */
1267   { 0x11031103, 0x1104 }, /* choseong tikeut + tikeut          = ssangtikeut */
1268   { 0x11031105, 0x115e }, /* choseong tikeut + rieul           = tikeut-rieul */
1269   { 0x11031106, 0xa960 }, /* choseong tikeut + mieum           = tikeut-mieum */
1270   { 0x11031107, 0xa961 }, /* choseong tikeut + pieup           = tikeut-pieup */
1271   { 0x11031109, 0xa962 }, /* choseong tikeut + sios            = tikeut-sios */
1272   { 0x1103110c, 0xa963 }, /* choseong tikeut + cieuc           = tikeut-cieuc */
1273   { 0x11051100, 0xa964 }, /* choseong rieul + kiyeok           = rieul-kiyeok */
1274   { 0x11051101, 0xa965 }, /* choseong rieul + ssangkiyeok      = rieul-ssangkiyeok */
1275   { 0x11051102, 0x1118 }, /* choseong rieul + nieun            = rieul-nieun */
1276   { 0x11051103, 0xa966 }, /* choseong rieul + tikeut           = rieul-tikeut */
1277   { 0x11051104, 0xa967 }, /* choseong rieul + ssangtikeut      = rieul-ssangtikeut */
1278   { 0x11051105, 0x1119 }, /* choseong rieul + rieul            = ssangrieul */
1279   { 0x11051106, 0xa968 }, /* choseong rieul + mieum            = rieul-mieum */
1280   { 0x11051107, 0xa969 }, /* choseong rieul + pieup            = rieul-pieup */
1281   { 0x11051108, 0xa96a }, /* choseong rieul + ssangpieup       = rieul-ssangpieup */
1282   { 0x11051109, 0xa96c }, /* choseong rieul + sios             = rieul-sios */
1283   { 0x1105110b, 0x111b }, /* choseong rieul + ieung            = kapyeounrieul */
1284   { 0x1105110c, 0xa96d }, /* choseong rieul + cieuc            = rieul-cieuc */
1285   { 0x1105110f, 0xa96e }, /* choseong rieul + khieukh          = rieul-khieukh */
1286   { 0x11051112, 0x111a }, /* choseong rieul + hieuh            = rieul-hieuh */
1287   { 0x1105112b, 0xa96b }, /* choseong rieul + kapyeounpieup    = rieul-kapyeounpieup */
1288   { 0x11061100, 0xa96f }, /* choseong mieum + kiyeok           = mieum-kiyeok */
1289   { 0x11061103, 0xa970 }, /* choseong mieum + tikeut           = mieum-tikeut */
1290   { 0x11061107, 0x111c }, /* choseong mieum + pieup            = mieum-pieup */
1291   { 0x11061109, 0xa971 }, /* choseong mieum + sios             = mieum-sios */
1292   { 0x1106110b, 0x111d }, /* choseong mieum + ieung            = kapyeounmieum */
1293   { 0x11071100, 0x111e }, /* choseong pieup + kiyeok           = pieup-kiyeok */
1294   { 0x11071102, 0x111f }, /* choseong pieup + nieun            = pieup-nieun */
1295   { 0x11071103, 0x1120 }, /* choseong pieup + tikeut           = pieup-tikeut */
1296   { 0x11071107, 0x1108 }, /* choseong pieup + pieup            = ssangpieup */
1297   { 0x11071109, 0x1121 }, /* choseong pieup + sios             = pieup-sios */
1298   { 0x1107110a, 0x1125 }, /* choseong pieup + ssangsios        = pieup-ssangsios */
1299   { 0x1107110b, 0x112b }, /* choseong pieup + ieung            = kapyeounpieup */
1300   { 0x1107110c, 0x1127 }, /* choseong pieup + cieuc            = pieup-cieuc */
1301   { 0x1107110e, 0x1128 }, /* choseong pieup + chieuch          = pieup-chieuch */
1302   { 0x1107110f, 0xa973 }, /* choseong pieup + khieukh          = pieup-khieukh */
1303   { 0x11071110, 0x1129 }, /* choseong pieup + thieuth          = pieup-thieuth */
1304   { 0x11071111, 0x112a }, /* choseong pieup + phieuph          = pieup-phieuph */
1305   { 0x11071112, 0xa974 }, /* choseong pieup + hieuh            = pieup-hieuh */
1306   { 0x1107112b, 0x112c }, /* choseong pieup + kapyeounpieup    = kapyeounssangpieup */
1307   { 0x1107112d, 0x1122 }, /* choseong pieup + sios-kiyeok      = pieup-sios-kiyeok */
1308   { 0x1107112f, 0x1123 }, /* choseong pieup + sios-tikeut      = pieup-sios-tikeut */
1309   { 0x11071132, 0x1124 }, /* choseong pieup + sios-pieup       = pieup-sios-pieup */
1310   { 0x11071136, 0x1126 }, /* choseong pieup + sios-cieuc       = pieup-sios-cieuc */
1311   { 0x11071139, 0xa972 }, /* choseong pieup + sios-thieuth     = pieup-sios-thieuth */
1312   { 0x1108110b, 0x112c }, /* choseong ssangpieup + ieung       = kapyeounssangpieup */
1313   { 0x11091100, 0x112d }, /* choseong sios + kiyeok            = sios-kiyeok */
1314   { 0x11091102, 0x112e }, /* choseong sios + nieun             = sios-nieun */
1315   { 0x11091103, 0x112f }, /* choseong sios + tikeut            = sios-tikeut */
1316   { 0x11091105, 0x1130 }, /* choseong sios + rieul             = sios-rieul */
1317   { 0x11091106, 0x1131 }, /* choseong sios + mieum             = sios-mieum */
1318   { 0x11091107, 0x1132 }, /* choseong sios + pieup             = sios-pieup */
1319   { 0x11091109, 0x110a }, /* choseong sios + sios              = ssangsios */
1320   { 0x1109110a, 0x1134 }, /* choseong sios + ssangsios         = sios-ssangsios */
1321   { 0x1109110b, 0x1135 }, /* choseong sios + ieung             = sios-ieung */
1322   { 0x1109110c, 0x1136 }, /* choseong sios + cieuc             = sios-cieuc */
1323   { 0x1109110e, 0x1137 }, /* choseong sios + chieuch           = sios-chieuch */
1324   { 0x1109110f, 0x1138 }, /* choseong sios + khieukh           = sios-khieukh */
1325   { 0x11091110, 0x1139 }, /* choseong sios + thieuth           = sios-thieuth */
1326   { 0x11091111, 0x113a }, /* choseong sios + phieuph           = sios-phieuph */
1327   { 0x11091112, 0x113b }, /* choseong sios + hieuh             = sios-hieuh */
1328   { 0x1109111e, 0x1133 }, /* choseong sios + pieup-kiyeok      = sios-pieup-kiyeok */
1329   { 0x11091132, 0xa975 }, /* choseong sios + sios-pieup        = ssangsios-pieup */
1330   { 0x110a1107, 0xa975 }, /* choseong ssangsios + pieup        = ssangsios-pieup */
1331   { 0x110a1109, 0x1134 }, /* choseong ssangsios + sios         = sios-ssangsios */
1332   { 0x110b1100, 0x1141 }, /* choseong ieung + kiyeok           = ieung-kiyeok */
1333   { 0x110b1103, 0x1142 }, /* choseong ieung + tikeut           = ieung-tikeut */
1334   { 0x110b1105, 0xa976 }, /* choseong ieung + rieul            = ieung-rieul */
1335   { 0x110b1106, 0x1143 }, /* choseong ieung + mieum            = ieung-mieum */
1336   { 0x110b1107, 0x1144 }, /* choseong ieung + pieup            = ieung-pieup */
1337   { 0x110b1109, 0x1145 }, /* choseong ieung + sios             = ieung-sios */
1338   { 0x110b110b, 0x1147 }, /* choseong ieung + ieung            = ssangieung */
1339   { 0x110b110c, 0x1148 }, /* choseong ieung + cieuc            = ieung-cieuc */
1340   { 0x110b110e, 0x1149 }, /* choseong ieung + chieuch          = ieung-chieuch */
1341   { 0x110b1110, 0x114a }, /* choseong ieung + thieuth          = ieung-thieuth */
1342   { 0x110b1111, 0x114b }, /* choseong ieung + phieuph          = ieung-phieuph */
1343   { 0x110b1112, 0xa977 }, /* choseong ieung + hieuh            = ieung-hieuh */
1344   { 0x110b1140, 0x1146 }, /* choseong ieung + pansios          = ieung-pansios */
1345   { 0x110c110b, 0x114d }, /* choseong cieuc + ieung            = cieuc-ieung */
1346   { 0x110c110c, 0x110d }, /* choseong cieuc + cieuc            = ssangcieuc */
1347   { 0x110d1112, 0xa978 }, /* choseong ssangcieuc + hieuh       = ssangcieuc-hieuh */
1348   { 0x110e110f, 0x1152 }, /* choseong chieuch + khieukh        = chieuch-khieukh */
1349   { 0x110e1112, 0x1153 }, /* choseong chieuch + hieuh          = chieuch-hieuh */
1350   { 0x11101110, 0xa979 }, /* choseong thieuth + thieuth        = ssangthieuth */
1351   { 0x11111107, 0x1156 }, /* choseong phieuph + pieup          = phieuph-pieup */
1352   { 0x1111110b, 0x1157 }, /* choseong phieuph + ieung          = kapyeounphieuph */
1353   { 0x11111112, 0xa97a }, /* choseong phieuph + hieuh          = phieuph-hieuh */
1354   { 0x11121109, 0xa97b }, /* choseong hieuh + sios             = hieuh-sios */
1355   { 0x11121112, 0x1158 }, /* choseong hieuh + hieuh            = ssanghieuh */
1356   { 0x11211100, 0x1122 }, /* choseong pieup-sios + kiyeok      = pieup-sios-kiyeok */
1357   { 0x11211103, 0x1123 }, /* choseong pieup-sios + tikeut      = pieup-sios-tikeut */
1358   { 0x11211107, 0x1124 }, /* choseong pieup-sios + pieup       = pieup-sios-pieup */
1359   { 0x11211109, 0x1125 }, /* choseong pieup-sios + sios        = pieup-ssangsios */
1360   { 0x1121110c, 0x1126 }, /* choseong pieup-sios + cieuc       = pieup-sios-cieuc */
1361   { 0x11211110, 0xa972 }, /* choseong pieup-sios + thieuth     = pieup-sios-thieuth */
1362   { 0x11321100, 0x1133 }, /* choseong sios-pieup + kiyeok      = sios-pieup-kiyeok */
1363   { 0x113c113c, 0x113d }, /* choseong chitueumsios + chitueumsios = chitueumssangsios */
1364   { 0x113e113e, 0x113f }, /* choseong ceongchieumsios + ceongchieumsios = ceongchieumssangsios */
1365   { 0x114e114e, 0x114f }, /* choseong chitueumcieuc + chitueumcieuc = chitueumssangcieuc */
1366   { 0x11501150, 0x1151 }, /* choseong ceongchieumcieuc + ceongchieumcieuc = ceongchieumssangcieuc */
1367   { 0x11591159, 0xa97c }, /* choseong yeorinhieuh + yeorinhieuh = ssangyeorinhieuh */
1368   { 0x11611161, 0x119e }, /* jungseong a + a                   = arae-a */
1369   { 0x11611169, 0x1176 }, /* jungseong a + o                   = a-o */
1370   { 0x1161116e, 0x1177 }, /* jungseong a + u                   = a-u */
1371   { 0x11611173, 0x11a3 }, /* jungseong a + eu                  = a-eu */
1372   { 0x11611175, 0x1162 }, /* jungseong a + i                   = ae */
1373   { 0x11631169, 0x1178 }, /* jungseong ya + o                  = ya-o */
1374   { 0x1163116d, 0x1179 }, /* jungseong ya + yo                 = ya-yo */
1375   { 0x1163116e, 0x11a4 }, /* jungseong ya + u                  = ya-u */
1376   { 0x11631175, 0x1164 }, /* jungseong ya + i                  = yae */
1377   { 0x11651169, 0x117a }, /* jungseong eo + o                  = eo-o */
1378   { 0x1165116e, 0x117b }, /* jungseong eo + u                  = eo-u */
1379   { 0x11651173, 0x117c }, /* jungseong eo + eu                 = eo-eu */
1380   { 0x11651175, 0x1166 }, /* jungseong eo + i                  = e */
1381   { 0x11671163, 0x11a5 }, /* jungseong yeo + ya                = yeo-ya */
1382   { 0x11671169, 0x117d }, /* jungseong yeo + o                 = yeo-o */
1383   { 0x1167116e, 0x117e }, /* jungseong yeo + u                 = yeo-u */
1384   { 0x11671175, 0x1168 }, /* jungseong yeo + i                 = ye */
1385   { 0x11691161, 0x116a }, /* jungseong o + a                   = wa */
1386   { 0x11691162, 0x116b }, /* jungseong o + ae                  = wae */
1387   { 0x11691163, 0x11a6 }, /* jungseong o + ya                  = o-ya */
1388   { 0x11691164, 0x11a7 }, /* jungseong o + yae                 = o-yae */
1389   { 0x11691165, 0x117f }, /* jungseong o + eo                  = o-eo */
1390   { 0x11691166, 0x1180 }, /* jungseong o + e                   = o-e */
1391   { 0x11691167, 0xd7b0 }, /* jungseong o + yeo                 = o-yeo */
1392   { 0x11691168, 0x1181 }, /* jungseong o + ye                  = o-ye */
1393   { 0x11691169, 0x1182 }, /* jungseong o + o                   = o-o */
1394   { 0x1169116e, 0x1183 }, /* jungseong o + u                   = o-u */
1395   { 0x11691175, 0x116c }, /* jungseong o + i                   = oe */
1396   { 0x116a1175, 0x116b }, /* jungseong wa + i                  = wae */
1397   { 0x116d1161, 0xd7b2 }, /* jungseong yo + a                  = yo-a */
1398   { 0x116d1162, 0xd7b3 }, /* jungseong yo + ae                 = yo-ae */
1399   { 0x116d1163, 0x1184 }, /* jungseong yo + ya                 = yo-ya */
1400   { 0x116d1164, 0x1185 }, /* jungseong yo + yae                = yo-yae */
1401   { 0x116d1165, 0xd7b4 }, /* jungseong yo + eo                 = yo-eo */
1402   { 0x116d1167, 0x1186 }, /* jungseong yo + yeo                = yo-yeo */
1403   { 0x116d1169, 0x1187 }, /* jungseong yo + o                  = yo-o */
1404   { 0x116d1175, 0x1188 }, /* jungseong yo + i                  = yo-i */
1405   { 0x116e1161, 0x1189 }, /* jungseong u + a                   = u-a */
1406   { 0x116e1162, 0x118a }, /* jungseong u + ae                  = u-ae */
1407   { 0x116e1165, 0x116f }, /* jungseong u + eo                  = weo */
1408   { 0x116e1166, 0x1170 }, /* jungseong u + e                   = we */
1409   { 0x116e1167, 0xd7b5 }, /* jungseong u + yeo                 = u-yeo */
1410   { 0x116e1168, 0x118c }, /* jungseong u + ye                  = u-ye */
1411   { 0x116e116e, 0x118d }, /* jungseong u + u                   = u-u */
1412   { 0x116e1175, 0x1171 }, /* jungseong u + i                   = wi */
1413   { 0x116e117c, 0x118b }, /* jungseong u + eo-eu               = u-eo-eu */
1414   { 0x116ed7c4, 0xd7b6 }, /* jungseong u + i-i                 = u-i-i */
1415   { 0x116f1173, 0x118b }, /* jungseong weo + eu                = u-eo-eu */
1416   { 0x116f1175, 0x1170 }, /* jungseong weo + i                 = we */
1417   { 0x11711175, 0xd7b6 }, /* jungseong wi + i                  = u-i-i */
1418   { 0x11721161, 0x118e }, /* jungseong yu + a                  = yu-a */
1419   { 0x11721162, 0xd7b7 }, /* jungseong yu + ae                 = yu-ae */
1420   { 0x11721165, 0x118f }, /* jungseong yu + eo                 = yu-eo */
1421   { 0x11721166, 0x1190 }, /* jungseong yu + e                  = yu-e */
1422   { 0x11721167, 0x1191 }, /* jungseong yu + yeo                = yu-yeo */
1423   { 0x11721168, 0x1192 }, /* jungseong yu + ye                 = yu-ye */
1424   { 0x11721169, 0xd7b8 }, /* jungseong yu + o                  = yu-o */
1425   { 0x1172116e, 0x1193 }, /* jungseong yu + u                  = yu-u */
1426   { 0x11721175, 0x1194 }, /* jungseong yu + i                  = yu-i */
1427   { 0x11731161, 0xd7b9 }, /* jungseong eu + a                  = eu-a */
1428   { 0x11731165, 0xd7ba }, /* jungseong eu + eo                 = eu-eo */
1429   { 0x11731166, 0xd7bb }, /* jungseong eu + e                  = eu-e */
1430   { 0x11731169, 0xd7bc }, /* jungseong eu + o                  = eu-o */
1431   { 0x1173116e, 0x1195 }, /* jungseong eu + u                  = eu-u */
1432   { 0x11731173, 0x1196 }, /* jungseong eu + eu                 = eu-eu */
1433   { 0x11731175, 0x1174 }, /* jungseong eu + i                  = yi */
1434   { 0x1174116e, 0x1197 }, /* jungseong yi + u                  = yi-u */
1435   { 0x11751161, 0x1198 }, /* jungseong i + a                   = i-a */
1436   { 0x11751163, 0x1199 }, /* jungseong i + ya                  = i-ya */
1437   { 0x11751164, 0xd7be }, /* jungseong i + yae                 = i-yae */
1438   { 0x11751167, 0xd7bf }, /* jungseong i + yeo                 = i-yeo */
1439   { 0x11751168, 0xd7c0 }, /* jungseong i + ye                  = i-ye */
1440   { 0x11751169, 0x119a }, /* jungseong i + o                   = i-o */
1441   { 0x1175116d, 0xd7c2 }, /* jungseong i + yo                  = i-yo */
1442   { 0x1175116e, 0x119b }, /* jungseong i + u                   = i-u */
1443   { 0x11751172, 0xd7c3 }, /* jungseong i + yu                  = i-yu */
1444   { 0x11751173, 0x119c }, /* jungseong i + eu                  = i-eu */
1445   { 0x11751175, 0xd7c4 }, /* jungseong i + i                   = i-i */
1446   { 0x11751178, 0xd7bd }, /* jungseong i + ya-o                = i-ya-o */
1447   { 0x1175119e, 0x119d }, /* jungseong i + araea               = i-araea */
1448   { 0x11821175, 0xd7b1 }, /* jungseong o-o + i                 = o-o-i */
1449   { 0x11991169, 0xd7bd }, /* jungseong i-ya + o                = i-ya-o */
1450   { 0x119a1175, 0xd7c1 }, /* jungseong i-o + i                 = i-o-i */
1451   { 0x119e1161, 0xd7c5 }, /* jungseong araea + a               = araea-a */
1452   { 0x119e1165, 0x119f }, /* jungseong araea + eo              = araea-eo */
1453   { 0x119e1166, 0xd7c6 }, /* jungseong araea + e               = araea-e */
1454   { 0x119e116e, 0x11a0 }, /* jungseong araea + u               = araea-u */
1455   { 0x119e1175, 0x11a1 }, /* jungseong araea + i               = araea-i */
1456   { 0x119e119e, 0x11a2 }, /* jungseong araea + araea           = ssangaraea */
1457   { 0x11a811a8, 0x11a9 }, /* jongseong kiyeok + kiyeok         = ssangkiyeok */
1458   { 0x11a811ab, 0x11fa }, /* jongseong kiyeok + nieun          = kiyeok-nieun */
1459   { 0x11a811af, 0x11c3 }, /* jongseong kiyeok + rieul          = kiyeok-rieul */
1460   { 0x11a811b8, 0x11fb }, /* jongseong kiyeok + pieup          = kiyeok-pieup */
1461   { 0x11a811ba, 0x11aa }, /* jongseong kiyeok + sios           = kiyeok-sios */
1462   { 0x11a811be, 0x11fc }, /* jongseong kiyeok + chieuch        = kiyeok-chieuch */
1463   { 0x11a811bf, 0x11fd }, /* jongseong kiyeok + khieukh        = kiyeok-khieukh */
1464   { 0x11a811c2, 0x11fe }, /* jongseong kiyeok + hieuh          = kiyeok-hieuh */
1465   { 0x11a811e7, 0x11c4 }, /* jongseong kiyeok + sios-kiyeok    = kiyeok-sios-kiyeok */
1466   { 0x11aa11a8, 0x11c4 }, /* jongseong kiyeok-sios + kiyeok    = kiyeok-sios-kiyeok */
1467   { 0x11ab11a8, 0x11c5 }, /* jongseong nieun + kiyeok          = nieun-kiyeok */
1468   { 0x11ab11ab, 0x11ff }, /* jongseong nieun + nieun           = ssangnieun */
1469   { 0x11ab11ae, 0x11c6 }, /* jongseong nieun + tikeut          = nieun-tikeut */
1470   { 0x11ab11af, 0xd7cb }, /* jongseong nieun + rieul           = nieun-rieul */
1471   { 0x11ab11ba, 0x11c7 }, /* jongseong nieun + sios            = nieun-sios */
1472   { 0x11ab11bd, 0x11ac }, /* jongseong nieun + cieuc           = nieun-cieuc */
1473   { 0x11ab11be, 0xd7cc }, /* jongseong nieun + chieuch         = nieun-chieuch */
1474   { 0x11ab11c0, 0x11c9 }, /* jongseong nieun + thieuth         = nieun-thieuth */
1475   { 0x11ab11c2, 0x11ad }, /* jongseong nieun + hieuh           = nieun-hieuh */
1476   { 0x11ab11eb, 0x11c8 }, /* jongseong nieun + pansios         = nieun-pansios */
1477   { 0x11ae11a8, 0x11ca }, /* jongseong tikeut + kiyeok         = tikeut-kiyeok */
1478   { 0x11ae11ae, 0xd7cd }, /* jongseong tikeut + tikeut         = ssangtikeut */
1479   { 0x11ae11af, 0x11cb }, /* jongseong tikeut + rieul          = tikeut-rieul */
1480   { 0x11ae11b8, 0xd7cf }, /* jongseong tikeut + pieup          = tikeut-pieup */
1481   { 0x11ae11ba, 0xd7d0 }, /* jongseong tikeut + sios           = tikeut-sios */
1482   { 0x11ae11bd, 0xd7d2 }, /* jongseong tikeut + cieuc          = tikeut-cieuc */
1483   { 0x11ae11be, 0xd7d3 }, /* jongseong tikeut + chieuch        = tikeut-chieuch */
1484   { 0x11ae11c0, 0xd7d4 }, /* jongseong tikeut + thieuth        = tikeut-thieuth */
1485   { 0x11ae11e7, 0xd7d1 }, /* jongseong tikeut + sios-kiyeok    = tikeut-sios-kiyeok */
1486   { 0x11aed7cf, 0xd7ce }, /* jongseong tikeut + tikeut-pieup   = ssangtikeut-pieup */
1487   { 0x11af11a8, 0x11b0 }, /* jongseong rieul + kiyeok          = rieul-kiyeok */
1488   { 0x11af11a9, 0xd7d5 }, /* jongseong rieul + ssangkiyeok     = rieul-ssangkiyeok */
1489   { 0x11af11aa, 0x11cc }, /* jongseong rieul + kiyeok-sios     = rieul-kiyeok-sios */
1490   { 0x11af11ab, 0x11cd }, /* jongseong rieul + nieun           = rieul-nieun */
1491   { 0x11af11ae, 0x11ce }, /* jongseong rieul + tikeut          = rieul-tikeut */
1492   { 0x11af11af, 0x11d0 }, /* jongseong rieul + rieul           = ssangrieul */
1493   { 0x11af11b7, 0x11b1 }, /* jongseong rieul + mieum           = rieul-mieum */
1494   { 0x11af11b8, 0x11b2 }, /* jongseong rieul + pieup           = rieul-pieup */
1495   { 0x11af11b9, 0x11d3 }, /* jongseong rieul + pieup-sios      = rieul-pieup-sios */
1496   { 0x11af11ba, 0x11b3 }, /* jongseong rieul + sios            = rieul-sios */
1497   { 0x11af11bb, 0x11d6 }, /* jongseong rieul + ssangsios       = rieul-ssangsios */
1498   { 0x11af11bc, 0xd7dd }, /* jongseong rieul + ieung           = kapyeounrieul */
1499   { 0x11af11bf, 0x11d8 }, /* jongseong rieul + khieukh         = rieul-khieukh */
1500   { 0x11af11c0, 0x11b4 }, /* jongseong rieul + thieuth         = rieul-thieuth */
1501   { 0x11af11c1, 0x11b5 }, /* jongseong rieul + phieuph         = rieul-phieuph */
1502   { 0x11af11c2, 0x11b6 }, /* jongseong rieul + hieuh           = rieul-hieuh */
1503   { 0x11af11d8, 0xd7d7 }, /* jongseong rieul + rieul-khieukh   = ssangrieul-khieukh */
1504   { 0x11af11da, 0x11d1 }, /* jongseong rieul + mieum-kiyeok    = rieul-mieum-kiyeok */
1505   { 0x11af11dd, 0x11d2 }, /* jongseong rieul + mieum-sios      = rieul-mieum-sios */
1506   { 0x11af11e1, 0xd7d8 }, /* jongseong rieul + mieum-hieuh     = rieul-mieum-hieuh */
1507   { 0x11af11e4, 0xd7da }, /* jongseong rieul + pieup-phieuph   = rieul-pieup-phieuph */
1508   { 0x11af11e5, 0x11d4 }, /* jongseong rieul + pieup-hieuh     = rieul-pieup-hieuh */
1509   { 0x11af11e6, 0x11d5 }, /* jongseong rieul + kapyeounpieup   = rieul-kapyeounpieup */
1510   { 0x11af11eb, 0x11d7 }, /* jongseong rieul + pansios         = rieul-pansios */
1511   { 0x11af11f0, 0xd7db }, /* jongseong rieul + yesieung        = rieul-yesieung */
1512   { 0x11af11f9, 0x11d9 }, /* jongseong rieul + yeorinhieuh     = rieul-yeorinhieuh */
1513   { 0x11af11fe, 0xd7d6 }, /* jongseong rieul + kiyeok-hieuh    = rieul-kiyeok-hieuh */
1514   { 0x11afd7e3, 0xd7d9 }, /* jongseong rieul + pieup-tikeut    = rieul-pieup-tikeut */
1515   { 0x11b011a8, 0xd7d5 }, /* jongseong rieul-kiyeok + kiyeok   = rieul-ssangkiyeok */
1516   { 0x11b011ba, 0x11cc }, /* jongseong rieul-kiyeok + sios     = rieul-kiyeok-sios */
1517   { 0x11b011c2, 0xd7d6 }, /* jongseong rieul-kiyeok + hieuh    = rieul-kiyeok-hieuh */
1518   { 0x11b111a8, 0x11d1 }, /* jongseong rieul-mieum + kiyeok    = rieul-mieum-kiyeok */
1519   { 0x11b111ba, 0x11d2 }, /* jongseong rieul-mieum + sios      = rieul-mieum-sios */
1520   { 0x11b111c2, 0xd7d8 }, /* jongseong rieul-mieum + hieuh     = rieul-mieum-hieuh */
1521   { 0x11b211ae, 0xd7d9 }, /* jongseong rieul-pieup + tikeut    = rieul-pieup-tikeut */
1522   { 0x11b211ba, 0x11d3 }, /* jongseong rieul-pieup + sios      = rieul-pieup-sios */
1523   { 0x11b211bc, 0x11d5 }, /* jongseong rieul-pieup + ieung     = rieul-kapyeounpieup */
1524   { 0x11b211c1, 0xd7da }, /* jongseong rieul-pieup + phieuph   = rieul-pieup-phieuph */
1525   { 0x11b211c2, 0x11d4 }, /* jongseong rieul-pieup + hieuh     = rieul-pieup-hieuh */
1526   { 0x11b311ba, 0x11d6 }, /* jongseong rieul-sios + sios       = rieul-ssangsios */
1527   { 0x11b711a8, 0x11da }, /* jongseong mieum + kiyeok          = mieum-kiyeok */
1528   { 0x11b711ab, 0xd7de }, /* jongseong mieum + nieun           = mieum-nieun */
1529   { 0x11b711af, 0x11db }, /* jongseong mieum + rieul           = mieum-rieul */
1530   { 0x11b711b7, 0xd7e0 }, /* jongseong mieum + mieum           = ssangmieum */
1531   { 0x11b711b8, 0x11dc }, /* jongseong mieum + pieup           = mieum-pieup */
1532   { 0x11b711b9, 0xd7e1 }, /* jongseong mieum + pieup-sios      = mieum-pieup-sios */
1533   { 0x11b711ba, 0x11dd }, /* jongseong mieum + sios            = mieum-sios */
1534   { 0x11b711bb, 0x11de }, /* jongseong mieum + ssangsios       = mieum-ssangsios */
1535   { 0x11b711bc, 0x11e2 }, /* jongseong mieum + ieung           = kapyeounmieum */
1536   { 0x11b711bd, 0xd7e2 }, /* jongseong mieum + cieuc           = mieum-cieuc */
1537   { 0x11b711be, 0x11e0 }, /* jongseong mieum + chieuch         = mieum-chieuch */
1538   { 0x11b711c2, 0x11e1 }, /* jongseong mieum + hieuh           = mieum-hieuh */
1539   { 0x11b711eb, 0x11df }, /* jongseong mieum + pansios         = mieum-pansios */
1540   { 0x11b711ff, 0xd7df }, /* jongseong mieum + ssangnieun      = mieum-ssangnieun */
1541   { 0x11b811ae, 0xd7e3 }, /* jongseong pieup + tikeut          = pieup-tikeut */
1542   { 0x11b811af, 0x11e3 }, /* jongseong pieup + rieul           = pieup-rieul */
1543   { 0x11b811b5, 0xd7e4 }, /* jongseong pieup + rieul-phieuph   = pieup-rieul-phieuph */
1544   { 0x11b811b7, 0xd7e5 }, /* jongseong pieup + mieum           = pieup-mieum */
1545   { 0x11b811b8, 0xd7e6 }, /* jongseong pieup + pieup           = ssangpieup */
1546   { 0x11b811ba, 0x11b9 }, /* jongseong pieup + sios            = pieup-sios */
1547   { 0x11b811bc, 0x11e6 }, /* jongseong pieup + ieung           = kapyeounpieup */
1548   { 0x11b811bd, 0xd7e8 }, /* jongseong pieup + cieuc           = pieup-cieuc */
1549   { 0x11b811be, 0xd7e9 }, /* jongseong pieup + chieuch         = pieup-chieuch */
1550   { 0x11b811c1, 0x11e4 }, /* jongseong pieup + phieuph         = pieup-phieuph */
1551   { 0x11b811c2, 0x11e5 }, /* jongseong pieup + hieuh           = pieup-hieuh */
1552   { 0x11b811e8, 0xd7e7 }, /* jongseong pieup + sios-tikeut     = pieup-sios-tikeut */
1553   { 0x11b911ae, 0xd7e7 }, /* jongseong pieup-sios + tikeut     = pieup-sios-tikeut */
1554   { 0x11ba11a8, 0x11e7 }, /* jongseong sios + kiyeok           = sios-kiyeok */
1555   { 0x11ba11ae, 0x11e8 }, /* jongseong sios + tikeut           = sios-tikeut */
1556   { 0x11ba11af, 0x11e9 }, /* jongseong sios + rieul            = sios-rieul */
1557   { 0x11ba11b7, 0xd7ea }, /* jongseong sios + mieum            = sios-mieum */
1558   { 0x11ba11b8, 0x11ea }, /* jongseong sios + pieup            = sios-pieup */
1559   { 0x11ba11ba, 0x11bb }, /* jongseong sios + sios             = ssangsios */
1560   { 0x11ba11bd, 0xd7ef }, /* jongseong sios + cieuc            = sios-cieuc */
1561   { 0x11ba11be, 0xd7f0 }, /* jongseong sios + chieuch          = sios-chieuch */
1562   { 0x11ba11c0, 0xd7f1 }, /* jongseong sios + thieuth          = sios-thieuth */
1563   { 0x11ba11c2, 0xd7f2 }, /* jongseong sios + hieuh            = sios-hieuh */
1564   { 0x11ba11e6, 0xd7eb }, /* jongseong sios + kapyeounpieup    = sios-kapyeounpieup */
1565   { 0x11ba11e7, 0xd7ec }, /* jongseong sios + sios-kiyeok      = ssangsios-kiyeok */
1566   { 0x11ba11e8, 0xd7ed }, /* jongseong sios + sios-tikeut      = ssangsios-tikeut */
1567   { 0x11ba11eb, 0xd7ee }, /* jongseong sios + pansios          = sios-pansios */
1568   { 0x11bb11a8, 0xd7ec }, /* jongseong ssangsios + kiyeok      = ssangsios-kiyeok */
1569   { 0x11bb11ae, 0xd7ed }, /* jongseong ssangsios + tikeut      = ssangsios-tikeut */
1570   { 0x11bd11b8, 0xd7f7 }, /* jongseong cieuc + pieup           = cieuc-pieup */
1571   { 0x11bd11bd, 0xd7f9 }, /* jongseong cieuc + cieuc           = ssangcieuc */
1572   { 0x11bdd7e6, 0xd7f8 }, /* jongseong cieuc + ssangpieup      = cieuc-ssangpieup */
1573   { 0x11c111b8, 0x11f3 }, /* jongseong phieuph + pieup         = phieuph-pieup */
1574   { 0x11c111ba, 0xd7fa }, /* jongseong phieuph + sios          = phieuph-sios */
1575   { 0x11c111bc, 0x11f4 }, /* jongseong phieuph + ieung         = kapyeounphieuph */
1576   { 0x11c111c0, 0xd7fb }, /* jongseong phieuph + thieuth       = phieuph-thieuth */
1577   { 0x11c211ab, 0x11f5 }, /* jongseong hieuh + nieun           = hieuh-nieun */
1578   { 0x11c211af, 0x11f6 }, /* jongseong hieuh + rieul           = hieuh-rieul */
1579   { 0x11c211b7, 0x11f7 }, /* jongseong hieuh + mieum           = hieuh-mieum */
1580   { 0x11c211b8, 0x11f8 }, /* jongseong hieuh + pieup           = hieuh-pieup */
1581   { 0x11ce11c2, 0x11cf }, /* jongseong rieul-tikeut + hieuh    = rieul-tikeut-hieuh */
1582   { 0x11d011bf, 0xd7d7 }, /* jongseong ssangrieul + khieukh    = ssangrieul-khieukh */
1583   { 0x11d911c2, 0xd7dc }, /* jongseong rieul-yeorinhieuh + hieuh = rieul-yeorinhieuh-hieuh */
1584   { 0x11dc11ba, 0xd7e1 }, /* jongseong mieum-pieup + sios      = mieum-pieup-sios */
1585   { 0x11dd11ba, 0x11de }, /* jongseong mieum-sios + sios       = mieum-ssangsios */
1586   { 0x11e311c1, 0xd7e4 }, /* jongseong pieup-rieul + phieuph   = pieup-rieul-phieuph */
1587   { 0x11ea11bc, 0xd7eb }, /* jongseong sios-pieup + ieung      = sios-kapyeounpieup */
1588   { 0x11eb11b8, 0xd7f3 }, /* jongseong pansios + pieup         = pansios-pieup */
1589   { 0x11eb11e6, 0xd7f4 }, /* jongseong pansios + kapyeounpieup = pansios-kapyeounpieup */
1590   { 0x11ec11a8, 0x11ed }, /* jongseong ieung-kiyeok + kiyeok   = ieung-ssangkiyeok */
1591   { 0x11f011a8, 0x11ec }, /* jongseong yesieung + kiyeok       = yesieung-kiyeok */
1592   { 0x11f011a9, 0x11ed }, /* jongseong yesieung + ssangkiyeok  = yesieung-ssangkiyeok */
1593   { 0x11f011b7, 0xd7f5 }, /* jongseong yesieung + mieum        = yesieung-mieum */
1594   { 0x11f011ba, 0x11f1 }, /* jongseong yesieung + sios         = yesieung-sios */
1595   { 0x11f011bf, 0x11ef }, /* jongseong yesieung + khieukh      = yesieung-khieukh */
1596   { 0x11f011c2, 0xd7f6 }, /* jongseong yesieung + hieuh        = yesieung-hieuh */
1597   { 0x11f011eb, 0x11f2 }, /* jongseong yesieung + pansios      = yesieung-pansios */
1598   { 0x11f011f0, 0x11ee }, /* jongseong yesieung + yesieung     = ssangyesieung */
1599   { 0xa9641100, 0xa965 }, /* choseong rieul-kiyeok + kiyeok    = rieul-ssangkiyeok */
1600   { 0xa9661103, 0xa967 }, /* choseong rieul-tikeut + tikeut    = rieul-ssangtikeut */
1601   { 0xa9691107, 0xa96a }, /* choseong rieul-pieup + pieup      = rieul-ssangpieup */
1602   { 0xa969110b, 0xa96b }, /* choseong rieul-pieup + ieung      = rieul-kapyeounpieup */
1603   { 0xd7c51161, 0x11a2 }, /* jungseong araea-a + a             = ssangaraea */
1604   { 0xd7cd11b8, 0xd7ce }, /* jongseong ssangtikeut + pieup     = ssangtikeut-pieup */
1605   { 0xd7d011a8, 0xd7d1 }, /* jongseong tikeut-sios + kiyeok    = tikeut-sios-kiyeok */
1606   { 0xd7de11ab, 0xd7df }, /* jongseong mieum-nieun + nieun     = mieum-ssangnieun */
1607   { 0xd7f311bc, 0xd7f4 }, /* jongseong pansios-pieup + ieung   = pansios-kapyeounpieup */
1608   { 0xd7f711b8, 0xd7f8 }, /* jongseong cieuc-pieup + pieup     = cieuc-ssangpieup */
1609 };
1610 
1611 static const HangulCombinationItem hangul_combination_table_ahn[] = {
1612   { 0x11001103, 0x1104 }, /* choseong  kiyeok       + tikeut = ssangtikeut   */
1613   { 0x1100110b, 0x1101 }, /* choseong  kiyeok       + ieung  = ssangkiyeok   */
1614   { 0x11001112, 0x110f }, /* choseong  kiyeok       + hieuh  = khieukh       */
1615   { 0x11021109, 0x110a }, /* choseong  nieun        + sios   = ssangsios     */
1616   { 0x11031100, 0x1104 }, /* choseong  tikeut       + kiyeok = ssangtikeut   */
1617   { 0x1103110c, 0x110d }, /* choseong  tikeut       + cieuc  = ssangcieuc    */
1618   { 0x11031112, 0x1110 }, /* choseong  tikeut       + hieuh  = thieuth       */
1619   { 0x1107110c, 0x1108 }, /* choseong  pieup        + cieuc  = ssangpieup    */
1620   { 0x11071112, 0x1111 }, /* choseong  pieup        + hieuh  = phieuph       */
1621   { 0x11091102, 0x110a }, /* choseong  sios         + nieun  = ssangsios     */
1622   { 0x110b1100, 0x1101 }, /* choseong  ieung        + kiyeok = ssangkiyeok   */
1623   { 0x110c1103, 0x110d }, /* choseong  cieuc        + tikeut = ssangcieuc    */
1624   { 0x110c1107, 0x1108 }, /* choseong  cieuc        + pieup  = ssangpieup    */
1625   { 0x110c1112, 0x110e }, /* choseong  cieuc        + hieuh  = chieuch       */
1626   { 0x11121100, 0x110f }, /* choseong  hieuh        + kiyeok = khieukh       */
1627   { 0x11121103, 0x1110 }, /* choseong  hieuh        + tikeut = thieuth       */
1628   { 0x11121107, 0x1111 }, /* choseong  hieuh        + pieup  = phieuph       */
1629   { 0x1112110c, 0x110e }, /* choseong  hieuh        + cieuc  = chieuch       */
1630   { 0x11611169, 0x116a }, /* jungseong a            + o      = wa            */
1631   { 0x11611175, 0x1162 }, /* jungseong a            + i      = ae            */
1632   { 0x11621169, 0x116b }, /* jungseong ae           + o      = wae           */
1633   { 0x11631175, 0x1164 }, /* jungseong ya           + i      = yae           */
1634   { 0x1165116e, 0x116f }, /* jungseong eo           + u      = weo           */
1635   { 0x11651175, 0x1166 }, /* jungseong eo           + i      = e             */
1636   { 0x1166116e, 0x1170 }, /* jungseong e            + u      = we            */
1637   { 0x11671175, 0x1168 }, /* jungseong yeo          + i      = ye            */
1638   { 0x11691161, 0x116a }, /* jungseong o            + a      = wa            */
1639   { 0x11691175, 0x116c }, /* jungseong o            + i      = oe            */
1640   { 0x116a1175, 0x116b }, /* jungseong wa           + i      = wae           */
1641   { 0x116c1161, 0x116b }, /* jungseong oe           + a      = wae           */
1642   { 0x116e1165, 0x116f }, /* jungseong u            + eo     = weo           */
1643   { 0x116e1175, 0x1171 }, /* jungseong u            + i      = wi            */
1644   { 0x116f1175, 0x1170 }, /* jungseong weo          + i      = we            */
1645   { 0x11711165, 0x1170 }, /* jungseong wi           + eo     = we            */
1646   { 0x11731175, 0x1174 }, /* jungseong eu           + i      = yi            */
1647   { 0x11751161, 0x1162 }, /* jungseong i            + a      = ae            */
1648   { 0x11751163, 0x1164 }, /* jungseong i            + ya     = yae           */
1649   { 0x11751165, 0x1166 }, /* jungseong i            + eo     = e             */
1650   { 0x11751167, 0x1168 }, /* jungseong i            + yeo    = ye            */
1651   { 0x11751169, 0x116c }, /* jungseong i            + o      = oe            */
1652   { 0x1175116e, 0x1171 }, /* jungseong i            + u      = wi            */
1653   { 0x11751173, 0x1174 }, /* jungseong i            + eu     = yi            */
1654   { 0x11a811af, 0x11b0 }, /* jongseong kiyeok       + rieul  = rieul-kiyeok  */
1655   { 0x11a811ba, 0x11aa }, /* jongseong kiyeok       + sios   = kiyeok-sios   */
1656   { 0x11a811bc, 0x11a9 }, /* jongseong kiyeok       + ieung  = ssangkiyeok   */
1657   { 0x11a811c2, 0x11bf }, /* jongseong kiyeok       + hieuh  = khieukh       */
1658   { 0x11ab11ba, 0x11bb }, /* jongseong nieun        + sios   = ssangsios     */
1659   { 0x11ab11bd, 0x11ac }, /* jongseong nieun        + cieuc  = nieun-cieuc   */
1660   { 0x11ab11c2, 0x11ad }, /* jongseong nieun        + hieuh  = nieun-hieuh   */
1661   { 0x11ae11af, 0x11ce }, /* jongseong tikeut       + rieul  = rieul-tikeut  */
1662   { 0x11ae11c2, 0x11c0 }, /* jongseong tikeut       + hieuh  = thieuth       */
1663   { 0x11af11a8, 0x11b0 }, /* jongseong rieul        + kiyeok = rieul-kiyeok  */
1664   { 0x11af11ae, 0x11ce }, /* jongseong rieul        + tikeut = rieul-tikeut  */
1665   { 0x11af11b7, 0x11b1 }, /* jongseong rieul        + mieum  = rieul-mieum   */
1666   { 0x11af11b8, 0x11b2 }, /* jongseong rieul        + pieup  = rieul-pieup   */
1667   { 0x11af11ba, 0x11b3 }, /* jongseong rieul        + sios   = rieul-sios    */
1668   { 0x11af11c2, 0x11b6 }, /* jongseong rieul        + hieuh  = rieul-hieuh   */
1669   { 0x11b211c2, 0x11b5 }, /* jongseong rieul-pieup  + hieuh  = rieul-phieuph */
1670   { 0x11b611ae, 0x11b4 }, /* jongseong rieul-hieuh  + tikeut = rieul-thieuth */
1671   { 0x11b611b8, 0x11b5 }, /* jongseong rieul-hieuh  + pieup  = rieul-phieuph */
1672   { 0x11b711af, 0x11b1 }, /* jongseong mieum        + rieul  = rieul-mieum   */
1673   { 0x11b811af, 0x11b2 }, /* jongseong pieup        + rieul  = rieul-pieup   */
1674   { 0x11b811ba, 0x11b9 }, /* jongseong pieup        + sios   = pieup-sios    */
1675   { 0x11b811c2, 0x11c1 }, /* jongseong pieup        + hieuh  = phieuph       */
1676   { 0x11ba11a8, 0x11aa }, /* jongseong sios         + kiyeok = kiyeok-sios   */
1677   { 0x11ba11ab, 0x11bb }, /* jongseong sios         + nieun  = ssangsios     */
1678   { 0x11ba11af, 0x11b3 }, /* jongseong sios         + rieul  = rieul-sios    */
1679   { 0x11ba11b8, 0x11b9 }, /* jongseong sios         + pieup  = pieup-sios    */
1680   { 0x11bc11a8, 0x11a9 }, /* jongseong ieung        + kiyeok = ssangkiyeok   */
1681   { 0x11bd11ab, 0x11ac }, /* jongseong cieuc        + nieun  = nieun-cieuc   */
1682   { 0x11bd11c2, 0x11be }, /* jongseong cieuc        + hieuh  = chieuch       */
1683   { 0x11c011af, 0x11b4 }, /* jongseong thieuth      + rieul  = rieul-thieuth */
1684   { 0x11c111af, 0x11b5 }, /* jongseong phieuph      + rieul  = rieul-phieuph */
1685   { 0x11c211a8, 0x11bf }, /* jongseong hieuh        + kiyeok = khieukh       */
1686   { 0x11c211ab, 0x11ad }, /* jongseong hieuh        + nieun  = nieun-hieuh   */
1687   { 0x11c211ae, 0x11c0 }, /* jongseong hieuh        + tikeut = thieuth       */
1688   { 0x11c211af, 0x11b6 }, /* jongseong hieuh        + rieul  = rieul-hieuh   */
1689   { 0x11c211b8, 0x11c1 }, /* jongseong hieuh        + pieup  = phieuph       */
1690   { 0x11c211bd, 0x11be }, /* jongseong hieuh        + cieuc  = chieuch       */
1691   { 0x11ce11c2, 0x11b4 }, /* jongseong rieul-tikeut + hieuh  = rieul-thieuth */
1692 };
1693