xref: /haiku/src/libs/iconv/hkscs2004.h (revision 68ea01249e1e2088933cb12f9c28d4e5c5d1c9ef)
1 /*
2  * Copyright (C) 1999-2006 Free Software Foundation, Inc.
3  * This file is part of the GNU LIBICONV Library.
4  *
5  * The GNU LIBICONV Library is free software; you can redistribute it
6  * and/or modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * The GNU LIBICONV Library is distributed in the hope that it will be
11  * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public
16  * License along with the GNU LIBICONV Library; see the file COPYING.LIB.
17  * If not, write to the Free Software Foundation, Inc., 51 Franklin Street,
18  * Fifth Floor, Boston, MA 02110-1301, USA.
19  */
20 
21 /*
22  * HKSCS:2004
23  */
24 
25 static const unsigned short hkscs2004_2uni_page87[58] = {
26   /* 0x87 */
27   0x0af0, 0x1032, 0x0d03, 0x0ca6, 0x0c78, 0x4167, 0x1177, 0x0cb3,
28   0x44b1, 0x10e2, 0x44c5, 0x0595, 0x0e36, 0x0e44, 0x1047, 0x1040,
29   0x39bf, 0x3417, 0x4252, 0x3f8b, 0x40d2, 0x1057, 0x4d51, 0x0e4f,
30   0x0cda, 0x1085, 0x446c, 0x1107, 0x0fa4, 0x0da1, 0x3d23, 0x1e25,
31   0x3c54, 0x2d63, 0x3606, 0x3761, 0x1a4d, 0x13fb, 0x28fd, 0x2195,
32   0x141d, 0x47b9, 0x06f4, 0x2534, 0x43ef, 0x16db, 0x2e5e, 0x15a4,
33   0x0125, 0x4bb0, 0x15d1, 0x16b7, 0x17fc, 0x1b6e, 0x2393, 0x4a45,
34   0x1f61, 0x1f9d,
35 };
36 static const unsigned short hkscs2004_2uni_page8c[189] = {
37   /* 0x8c */
38   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
39   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
40   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
41   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
42   0x28fd, 0x28fd, 0x2b6f, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
43   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
44   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
45   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
46   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
47   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
48   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
49   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
50   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
51   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
52   0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd, 0x28fd,
53   0x28fd, 0x1ae7, 0x28fd, 0x1c57, 0x20ca, 0x0688, 0x0bc3, 0x3256,
54   0x3196, 0x0a9a, 0x0c36, 0x28fd, 0x17d5, 0x351a, 0x24f9, 0x1778,
55   0x0612, 0x3351, 0x1878, 0x27b2, 0x1d57, 0x0c58, 0x38ec, 0x2f23,
56   0x1077, 0x0478, 0x004a, 0x29a4, 0x3e41, 0x24cc, 0x12b4, 0x2a39,
57   0x14bf, 0x226c, 0x2656, 0x49fa, 0x193b,
58   /* 0x8d */
59   0x2c9f, 0x28fd, 0x30c1, 0x466d, 0x0902, 0x0dbb, 0x4879, 0x0707,
60   0x27b3, 0x4cb5, 0x08f8, 0x02d6, 0x0df7, 0x3e46, 0x097c, 0x45b2,
61   0x42ff, 0x0c6d, 0x03d4, 0x3b9a, 0x0c61, 0x0c1b, 0x1189, 0x107b,
62   0x1176, 0x0cea, 0x07c8, 0x3a0f, 0x0161, 0x0bde, 0x0bbd, 0x09ed,
63 };
64 
65 static const ucs4_t hkscs2004_2uni_upages[78] = {
66   0x03400, 0x03600, 0x03700, 0x03800, 0x03900, 0x03b00, 0x03d00, 0x03f00,
67   0x04000, 0x04100, 0x04300, 0x04400, 0x04500, 0x04600, 0x04700, 0x04a00,
68   0x04c00, 0x04d00, 0x04f00, 0x05600, 0x05900, 0x05a00, 0x05b00, 0x05c00,
69   0x05d00, 0x05f00, 0x06600, 0x06700, 0x06e00, 0x07100, 0x07200, 0x07400,
70   0x07900, 0x07d00, 0x08100, 0x08500, 0x08a00, 0x09700, 0x09800, 0x09f00,
71   0x0ff00, 0x20100, 0x20200, 0x20a00, 0x20b00, 0x21a00, 0x21d00, 0x21e00,
72   0x22100, 0x22700, 0x23200, 0x23500, 0x23600, 0x23b00, 0x23e00, 0x23f00,
73   0x24000, 0x24200, 0x24b00, 0x25400, 0x25a00, 0x26b00, 0x26c00, 0x26e00,
74   0x27000, 0x27200, 0x27300, 0x27b00, 0x27c00, 0x28600, 0x28900, 0x28b00,
75   0x29000, 0x29800, 0x29900, 0x29e00, 0x2a100, 0x2a300,
76 };
77 
78 static int
79 hkscs2004_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
80 {
81   unsigned char c1 = s[0];
82   if ((c1 == 0x87) || (c1 >= 0x8c && c1 <= 0x8d)) {
83     if (n >= 2) {
84       unsigned char c2 = s[1];
85       if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) {
86         unsigned int i = 157 * (c1 - 0x80) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40));
87         ucs4_t wc = 0xfffd;
88         unsigned short swc;
89         if (i < 1884) {
90           if (i < 1157)
91             swc = hkscs2004_2uni_page87[i-1099],
92             wc = hkscs2004_2uni_upages[swc>>8] | (swc & 0xff);
93         } else {
94           if (i < 2073)
95             swc = hkscs2004_2uni_page8c[i-1884],
96             wc = hkscs2004_2uni_upages[swc>>8] | (swc & 0xff);
97         }
98         if (wc != 0xfffd) {
99           *pwc = wc;
100           return 2;
101         }
102       }
103       return RET_ILSEQ;
104     }
105     return RET_TOOFEW(0);
106   }
107   return RET_ILSEQ;
108 }
109 
110 static const unsigned short hkscs2004_2charset[123] = {
111   0x8cf4, 0x8770, 0x8d5c, 0x8d4b, 0x8d52, 0x8cf3, 0x874b, 0x8cea,
112   0x8cdf, 0x876a, 0x8d47, 0x8d5a, 0x8d4a, 0x8d44, 0x8d4e, 0x8d5f,
113   0x8ce3, 0x8740, 0x8d5e, 0x8ce0, 0x8d5d, 0x8d55, 0x8ce4, 0x8cef,
114   0x8d54, 0x8d51, 0x8744, 0x8743, 0x8747, 0x8758, 0x8d59, 0x8742,
115   0x875d, 0x8d45, 0x8d4c, 0x874c, 0x874d, 0x8757, 0x875c, 0x8741,
116   0x874f, 0x874e, 0x8755, 0x8cf2, 0x8d57, 0x8759, 0x8749, 0x875b,
117   0x8d58, 0x8746, 0x8d56, 0x8cf8, 0x8765, 0x8768, 0x8cfa, 0x876f,
118   0x8772, 0x8773, 0x876d, 0x8ce9, 0x8ce6, 0x8774, 0x8cec, 0x8cfe,
119   0x8764, 0x8cdb, 0x8775, 0x8cdd, 0x8cee, 0x875f, 0x8778, 0x8779,
120   0x8cde, 0x8767, 0x8cfb, 0x8776, 0x8cf7, 0x8ce8, 0x876b, 0x8cfc,
121   0x8ced, 0x8d48, 0x8cf5, 0x8cf9, 0x8c62, 0x8d40, 0x8761, 0x876e,
122   0x8cf1, 0x8d42, 0x8ce2, 0x8ce1, 0x8ceb, 0x8751, 0x8ce7, 0x8762,
123   0x8763, 0x8cf0, 0x8750, 0x8d5b, 0x8d53, 0x8760, 0x875e, 0x8cf6,
124   0x8d4d, 0x8753, 0x8754, 0x8745, 0x8752, 0x8d50, 0x876c, 0x875a,
125   0x8748, 0x874a, 0x8d4f, 0x8d43, 0x8769, 0x8d46, 0x8cfd, 0x8777,
126   0x8771, 0x8d49, 0x8756,
127 };
128 
129 static const Summary16 hkscs2004_uni2indx_page34[5] = {
130   /* 0x3400 */
131   {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
132   {    0, 0x0400 },
133 };
134 static const Summary16 hkscs2004_uni2indx_page36[56] = {
135   /* 0x3600 */
136   {    1, 0x0000 }, {    1, 0x0000 }, {    1, 0x0020 }, {    2, 0x0000 },
137   {    2, 0x0000 }, {    2, 0x0000 }, {    2, 0x0002 }, {    3, 0x0000 },
138   {    3, 0x0000 }, {    3, 0x0000 }, {    3, 0x0000 }, {    3, 0x0000 },
139   {    3, 0x0000 }, {    3, 0x0000 }, {    3, 0x0000 }, {    3, 0x0000 },
140   /* 0x3700 */
141   {    3, 0x0000 }, {    3, 0x0000 }, {    3, 0x0000 }, {    3, 0x0000 },
142   {    3, 0x0000 }, {    3, 0x0000 }, {    3, 0x0000 }, {    3, 0x0000 },
143   {    3, 0x0000 }, {    3, 0x0000 }, {    3, 0x0000 }, {    3, 0x0000 },
144   {    3, 0x0000 }, {    3, 0x0040 }, {    4, 0x0000 }, {    4, 0x0000 },
145   /* 0x3800 */
146   {    4, 0x0000 }, {    4, 0x0000 }, {    4, 0x0000 }, {    4, 0x0000 },
147   {    4, 0x0000 }, {    4, 0x0000 }, {    4, 0x0000 }, {    4, 0x0000 },
148   {    4, 0x0000 }, {    4, 0x0000 }, {    4, 0x0000 }, {    4, 0x0000 },
149   {    4, 0x0000 }, {    4, 0x0010 }, {    5, 0x0000 }, {    5, 0x0000 },
150   /* 0x3900 */
151   {    5, 0x0000 }, {    5, 0x0000 }, {    5, 0x0000 }, {    5, 0x0000 },
152   {    5, 0x0000 }, {    5, 0x0000 }, {    5, 0x0000 }, {    5, 0x0100 },
153 };
154 static const Summary16 hkscs2004_uni2indx_page3b[10] = {
155   /* 0x3b00 */
156   {    6, 0x0000 }, {    6, 0x0000 }, {    6, 0x0000 }, {    6, 0x0000 },
157   {    6, 0x0000 }, {    6, 0x0000 }, {    6, 0x0000 }, {    6, 0x0000 },
158   {    6, 0x0000 }, {    6, 0x0020 },
159 };
160 static const Summary16 hkscs2004_uni2indx_page3d[16] = {
161   /* 0x3d00 */
162   {    7, 0x0000 }, {    7, 0x0004 }, {    8, 0x0000 }, {    8, 0x0000 },
163   {    8, 0x0000 }, {    8, 0x0000 }, {    8, 0x0000 }, {    8, 0x0000 },
164   {    8, 0x0100 }, {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 },
165   {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0010 },
166 };
167 static const Summary16 hkscs2004_uni2indx_page3f[47] = {
168   /* 0x3f00 */
169   {   10, 0x0080 }, {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 },
170   {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 },
171   {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 }, {   11, 0x0000 },
172   {   11, 0x0100 }, {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 },
173   /* 0x4000 */
174   {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 },
175   {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 },
176   {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 },
177   {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0100 },
178   /* 0x4100 */
179   {   13, 0x0004 }, {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x0000 },
180   {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x1000 },
181   {   15, 0x0000 }, {   15, 0x0000 }, {   15, 0x0000 }, {   15, 0x0000 },
182   {   15, 0x0000 }, {   15, 0x0000 }, {   15, 0x2000 },
183 };
184 static const Summary16 hkscs2004_uni2indx_page43[69] = {
185   /* 0x4300 */
186   {   16, 0x0000 }, {   16, 0x0000 }, {   16, 0x0000 }, {   16, 0x0000 },
187   {   16, 0x0000 }, {   16, 0x0000 }, {   16, 0x0000 }, {   16, 0x0000 },
188   {   16, 0x0000 }, {   16, 0x0400 }, {   17, 0x0000 }, {   17, 0x0000 },
189   {   17, 0x0000 }, {   17, 0x0000 }, {   17, 0x0000 }, {   17, 0x0001 },
190   /* 0x4400 */
191   {   18, 0x0000 }, {   18, 0x0000 }, {   18, 0x0000 }, {   18, 0x0000 },
192   {   18, 0x0000 }, {   18, 0x0000 }, {   18, 0x0000 }, {   18, 0x0000 },
193   {   18, 0x0000 }, {   18, 0x0000 }, {   18, 0x0000 }, {   18, 0x2000 },
194   {   19, 0x0008 }, {   20, 0x4000 }, {   21, 0x0000 }, {   21, 0x0000 },
195   /* 0x4500 */
196   {   21, 0x0000 }, {   21, 0x0800 }, {   22, 0x0000 }, {   22, 0x0040 },
197   {   23, 0x0000 }, {   23, 0x0100 }, {   24, 0x2002 }, {   26, 0x0100 },
198   {   27, 0x0000 }, {   27, 0x0000 }, {   27, 0x0040 }, {   28, 0x0008 },
199   {   29, 0x0000 }, {   29, 0x0400 }, {   30, 0x0400 }, {   31, 0x0000 },
200   /* 0x4600 */
201   {   31, 0x0008 }, {   32, 0x0000 }, {   32, 0x0000 }, {   32, 0x0000 },
202   {   32, 0x0000 }, {   32, 0x0000 }, {   32, 0x0000 }, {   32, 0x0000 },
203   {   32, 0x0000 }, {   32, 0x0000 }, {   32, 0x0002 }, {   33, 0x0800 },
204   {   34, 0x0000 }, {   34, 0x0000 }, {   34, 0x0000 }, {   34, 0x0080 },
205   /* 0x4700 */
206   {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0040 },
207   {   36, 0x8010 },
208 };
209 static const Summary16 hkscs2004_uni2indx_page4a[11] = {
210   /* 0x4a00 */
211   {   38, 0x0000 }, {   38, 0x0000 }, {   38, 0x0000 }, {   38, 0x0000 },
212   {   38, 0x0000 }, {   38, 0x0000 }, {   38, 0x0000 }, {   38, 0x0000 },
213   {   38, 0x0000 }, {   38, 0x0000 }, {   38, 0x0010 },
214 };
215 static const Summary16 hkscs2004_uni2indx_page4c[25] = {
216   /* 0x4c00 */
217   {   39, 0x0000 }, {   39, 0x0000 }, {   39, 0x0000 }, {   39, 0x0004 },
218   {   40, 0x0081 }, {   42, 0x0080 }, {   43, 0x0000 }, {   43, 0x0880 },
219   {   45, 0x0020 }, {   46, 0x0000 }, {   46, 0x0000 }, {   46, 0x0000 },
220   {   46, 0x0000 }, {   46, 0x0000 }, {   46, 0x0004 }, {   47, 0x0000 },
221   /* 0x4d00 */
222   {   47, 0x0080 }, {   48, 0x0000 }, {   48, 0x0000 }, {   48, 0x0000 },
223   {   48, 0x0000 }, {   48, 0x0000 }, {   48, 0x0000 }, {   48, 0x00c0 },
224   {   50, 0x0200 },
225 };
226 static const Summary16 hkscs2004_uni2indx_page4f[12] = {
227   /* 0x4f00 */
228   {   51, 0x0000 }, {   51, 0x0000 }, {   51, 0x0000 }, {   51, 0x0000 },
229   {   51, 0x0000 }, {   51, 0x0000 }, {   51, 0x0000 }, {   51, 0x0000 },
230   {   51, 0x0000 }, {   51, 0x0000 }, {   51, 0x0000 }, {   51, 0x0010 },
231 };
232 static const Summary16 hkscs2004_uni2indx_page56[16] = {
233   /* 0x5600 */
234   {   52, 0x0000 }, {   52, 0x0000 }, {   52, 0x0000 }, {   52, 0x0000 },
235   {   52, 0x0000 }, {   52, 0x0000 }, {   52, 0x0000 }, {   52, 0x0000 },
236   {   52, 0x0000 }, {   52, 0x0000 }, {   52, 0x0000 }, {   52, 0x0000 },
237   {   52, 0x0000 }, {   52, 0x0000 }, {   52, 0x0000 }, {   52, 0x0800 },
238 };
239 static const Summary16 hkscs2004_uni2indx_page59[72] = {
240   /* 0x5900 */
241   {   53, 0x0000 }, {   53, 0x2000 }, {   54, 0x0000 }, {   54, 0x0000 },
242   {   54, 0x0000 }, {   54, 0x0000 }, {   54, 0x0000 }, {   54, 0x0000 },
243   {   54, 0x0000 }, {   54, 0x0000 }, {   54, 0x0000 }, {   54, 0x8000 },
244   {   55, 0x0000 }, {   55, 0x0000 }, {   55, 0x0000 }, {   55, 0x0000 },
245   /* 0x5a00 */
246   {   55, 0x0000 }, {   55, 0x0000 }, {   55, 0x0000 }, {   55, 0x0000 },
247   {   55, 0x0000 }, {   55, 0x0000 }, {   55, 0x0000 }, {   55, 0x0000 },
248   {   55, 0x0000 }, {   55, 0x0000 }, {   55, 0x0010 }, {   56, 0x0000 },
249   {   56, 0x0000 }, {   56, 0x0002 }, {   57, 0x0000 }, {   57, 0x0000 },
250   /* 0x5b00 */
251   {   57, 0x0000 }, {   57, 0x0000 }, {   57, 0x0000 }, {   57, 0x0000 },
252   {   57, 0x0000 }, {   57, 0x0000 }, {   57, 0x0000 }, {   57, 0x0000 },
253   {   57, 0x0000 }, {   57, 0x0000 }, {   57, 0x0000 }, {   57, 0x0080 },
254   {   58, 0x0000 }, {   58, 0x0800 }, {   59, 0x0000 }, {   59, 0x0000 },
255   /* 0x5c00 */
256   {   59, 0x0000 }, {   59, 0x0000 }, {   59, 0x0000 }, {   59, 0x0000 },
257   {   59, 0x0000 }, {   59, 0x0000 }, {   59, 0x0000 }, {   59, 0x0100 },
258   {   60, 0x0000 }, {   60, 0x0000 }, {   60, 0x0000 }, {   60, 0x0000 },
259   {   60, 0x0000 }, {   60, 0x0020 }, {   61, 0x0000 }, {   61, 0x1000 },
260   /* 0x5d00 */
261   {   62, 0x0000 }, {   62, 0x0000 }, {   62, 0x0000 }, {   62, 0x0000 },
262   {   62, 0x0000 }, {   62, 0x0000 }, {   62, 0x0000 }, {   62, 0x0100 },
263 };
264 static const Summary16 hkscs2004_uni2indx_page5f[4] = {
265   /* 0x5f00 */
266   {   63, 0x0000 }, {   63, 0x0000 }, {   63, 0x0000 }, {   63, 0x0800 },
267 };
268 static const Summary16 hkscs2004_uni2indx_page66[23] = {
269   /* 0x6600 */
270   {   64, 0x0000 }, {   64, 0x0000 }, {   64, 0x0000 }, {   64, 0x0000 },
271   {   64, 0x2000 }, {   65, 0x0000 }, {   65, 0x0000 }, {   65, 0x0000 },
272   {   65, 0x0000 }, {   65, 0x0000 }, {   65, 0x0000 }, {   65, 0x0000 },
273   {   65, 0x0000 }, {   65, 0x0000 }, {   65, 0x0080 }, {   66, 0x0000 },
274   /* 0x6700 */
275   {   66, 0x0000 }, {   66, 0x0000 }, {   66, 0x0000 }, {   66, 0x0000 },
276   {   66, 0x0000 }, {   66, 0x0000 }, {   66, 0x4000 },
277 };
278 static const Summary16 hkscs2004_uni2indx_page6e[6] = {
279   /* 0x6e00 */
280   {   67, 0x0000 }, {   67, 0x0000 }, {   67, 0x0000 }, {   67, 0x0000 },
281   {   67, 0x0000 }, {   67, 0x0080 },
282 };
283 static const Summary16 hkscs2004_uni2indx_page71[19] = {
284   /* 0x7100 */
285   {   68, 0x0000 }, {   68, 0x0000 }, {   68, 0x0000 }, {   68, 0x0000 },
286   {   68, 0x0000 }, {   68, 0x0080 }, {   69, 0x0000 }, {   69, 0x0000 },
287   {   69, 0x0000 }, {   69, 0x0000 }, {   69, 0x0000 }, {   69, 0x0000 },
288   {   69, 0x0000 }, {   69, 0x0000 }, {   69, 0x0000 }, {   69, 0x0000 },
289   /* 0x7200 */
290   {   69, 0x0000 }, {   69, 0x0000 }, {   69, 0x0020 },
291 };
292 static const Summary16 hkscs2004_uni2indx_page74[10] = {
293   /* 0x7400 */
294   {   70, 0x0000 }, {   70, 0x0000 }, {   70, 0x0000 }, {   70, 0x0000 },
295   {   70, 0x0000 }, {   70, 0x0000 }, {   70, 0x0002 }, {   71, 0x0000 },
296   {   71, 0x0000 }, {   71, 0x2000 },
297 };
298 static const Summary16 hkscs2004_uni2indx_page79[13] = {
299   /* 0x7900 */
300   {   72, 0x0000 }, {   72, 0x0000 }, {   72, 0x0000 }, {   72, 0x0000 },
301   {   72, 0x0000 }, {   72, 0x0000 }, {   72, 0x0000 }, {   72, 0x0000 },
302   {   72, 0x0000 }, {   72, 0x0000 }, {   72, 0x0000 }, {   72, 0x0000 },
303   {   72, 0x0400 },
304 };
305 static const Summary16 hkscs2004_uni2indx_page7d[10] = {
306   /* 0x7d00 */
307   {   73, 0x0000 }, {   73, 0x0000 }, {   73, 0x0000 }, {   73, 0x0000 },
308   {   73, 0x0000 }, {   73, 0x0000 }, {   73, 0x0000 }, {   73, 0x0000 },
309   {   73, 0x0000 }, {   73, 0x0020 },
310 };
311 static const Summary16 hkscs2004_uni2indx_page81[7] = {
312   /* 0x8100 */
313   {   74, 0x0000 }, {   74, 0x0000 }, {   74, 0x0000 }, {   74, 0x0000 },
314   {   74, 0x0000 }, {   74, 0x0000 }, {   74, 0x1000 },
315 };
316 static const Summary16 hkscs2004_uni2indx_page85[10] = {
317   /* 0x8500 */
318   {   75, 0x0000 }, {   75, 0x0000 }, {   75, 0x0000 }, {   75, 0x0000 },
319   {   75, 0x0000 }, {   75, 0x0000 }, {   75, 0x0000 }, {   75, 0x0000 },
320   {   75, 0x0000 }, {   75, 0x0008 },
321 };
322 static const Summary16 hkscs2004_uni2indx_page8a[16] = {
323   /* 0x8a00 */
324   {   76, 0x0000 }, {   76, 0x0000 }, {   76, 0x0000 }, {   76, 0x0000 },
325   {   76, 0x0000 }, {   76, 0x0000 }, {   76, 0x0000 }, {   76, 0x0000 },
326   {   76, 0x0000 }, {   76, 0x0000 }, {   76, 0x0000 }, {   76, 0x0000 },
327   {   76, 0x1000 }, {   77, 0x0000 }, {   77, 0x0000 }, {   77, 0x0200 },
328 };
329 static const Summary16 hkscs2004_uni2indx_page97[22] = {
330   /* 0x9700 */
331   {   78, 0x0000 }, {   78, 0x0000 }, {   78, 0x0000 }, {   78, 0x0010 },
332   {   79, 0x0000 }, {   79, 0x0000 }, {   79, 0x0000 }, {   79, 0x0000 },
333   {   79, 0x0000 }, {   79, 0x0000 }, {   79, 0x0000 }, {   79, 0x0000 },
334   {   79, 0x0000 }, {   79, 0x0000 }, {   79, 0x0000 }, {   79, 0x0000 },
335   /* 0x9800 */
336   {   79, 0x0000 }, {   79, 0x0000 }, {   79, 0x0000 }, {   79, 0x0000 },
337   {   79, 0x0000 }, {   79, 0x0040 },
338 };
339 static const Summary16 hkscs2004_uni2indx_page9f[12] = {
340   /* 0x9f00 */
341   {   80, 0x0000 }, {   80, 0x0000 }, {   80, 0x0000 }, {   80, 0x0000 },
342   {   80, 0x0000 }, {   80, 0x0000 }, {   80, 0x0000 }, {   80, 0x0000 },
343   {   80, 0x0000 }, {   80, 0x0000 }, {   80, 0x0000 }, {   80, 0x000c },
344 };
345 static const Summary16 hkscs2004_uni2indx_page201[20] = {
346   /* 0x20100 */
347   {   82, 0x0000 }, {   82, 0x0000 }, {   82, 0x0000 }, {   82, 0x0000 },
348   {   82, 0x0000 }, {   82, 0x0000 }, {   82, 0x0000 }, {   82, 0x0000 },
349   {   82, 0x0000 }, {   82, 0x0000 }, {   82, 0x0010 }, {   83, 0x0000 },
350   {   83, 0x0000 }, {   83, 0x0000 }, {   83, 0x0000 }, {   83, 0x0000 },
351   /* 0x20200 */
352   {   83, 0x0000 }, {   83, 0x0000 }, {   83, 0x0000 }, {   83, 0x0200 },
353 };
354 static const Summary16 hkscs2004_uni2indx_page20a[26] = {
355   /* 0x20a00 */
356   {   84, 0x0000 }, {   84, 0x0000 }, {   84, 0x0000 }, {   84, 0x0000 },
357   {   84, 0x0000 }, {   84, 0x0000 }, {   84, 0x8000 }, {   85, 0x0000 },
358   {   85, 0x0000 }, {   85, 0x0000 }, {   85, 0x0000 }, {   85, 0x0000 },
359   {   85, 0x0000 }, {   85, 0x0000 }, {   85, 0x0000 }, {   85, 0x0000 },
360   /* 0x20b00 */
361   {   85, 0x0000 }, {   85, 0x0000 }, {   85, 0x0000 }, {   85, 0x0000 },
362   {   85, 0x0000 }, {   85, 0x0000 }, {   85, 0x0000 }, {   85, 0x0000 },
363   {   85, 0x0000 }, {   85, 0x8000 },
364 };
365 static const Summary16 hkscs2004_uni2indx_page21a[7] = {
366   /* 0x21a00 */
367   {   86, 0x0000 }, {   86, 0x0000 }, {   86, 0x0000 }, {   86, 0x0000 },
368   {   86, 0x0000 }, {   86, 0x0000 }, {   86, 0x0008 },
369 };
370 static const Summary16 hkscs2004_uni2indx_page21d[19] = {
371   /* 0x21d00 */
372   {   87, 0x0000 }, {   87, 0x0000 }, {   87, 0x0000 }, {   87, 0x0000 },
373   {   87, 0x0000 }, {   87, 0x4000 }, {   88, 0x0000 }, {   88, 0x0000 },
374   {   88, 0x0000 }, {   88, 0x0000 }, {   88, 0x0000 }, {   88, 0x0000 },
375   {   88, 0x0000 }, {   88, 0x0000 }, {   88, 0x0000 }, {   88, 0x0000 },
376   /* 0x21e00 */
377   {   88, 0x0000 }, {   88, 0x0000 }, {   88, 0x0008 },
378 };
379 static const Summary16 hkscs2004_uni2indx_page221[13] = {
380   /* 0x22100 */
381   {   89, 0x0000 }, {   89, 0x0000 }, {   89, 0x0000 }, {   89, 0x0000 },
382   {   89, 0x0000 }, {   89, 0x0000 }, {   89, 0x0000 }, {   89, 0x0000 },
383   {   89, 0x0000 }, {   89, 0x0000 }, {   89, 0x0000 }, {   89, 0x0000 },
384   {   89, 0x0002 },
385 };
386 static const Summary16 hkscs2004_uni2indx_page227[10] = {
387   /* 0x22700 */
388   {   90, 0x0000 }, {   90, 0x0000 }, {   90, 0x0000 }, {   90, 0x0000 },
389   {   90, 0x0000 }, {   90, 0x0000 }, {   90, 0x0000 }, {   90, 0x0000 },
390   {   90, 0x0000 }, {   90, 0x0040 },
391 };
392 static const Summary16 hkscs2004_uni2indx_page232[6] = {
393   /* 0x23200 */
394   {   91, 0x0000 }, {   91, 0x0000 }, {   91, 0x0000 }, {   91, 0x0000 },
395   {   91, 0x0000 }, {   91, 0x0040 },
396 };
397 static const Summary16 hkscs2004_uni2indx_page235[18] = {
398   /* 0x23500 */
399   {   92, 0x0000 }, {   92, 0x0000 }, {   92, 0x0000 }, {   92, 0x0000 },
400   {   92, 0x0000 }, {   92, 0x0002 }, {   93, 0x0000 }, {   93, 0x0000 },
401   {   93, 0x0000 }, {   93, 0x0000 }, {   93, 0x0000 }, {   93, 0x0000 },
402   {   93, 0x0000 }, {   93, 0x0000 }, {   93, 0x0000 }, {   93, 0x0000 },
403   /* 0x23600 */
404   {   93, 0x0000 }, {   93, 0x0080 },
405 };
406 static const Summary16 hkscs2004_uni2indx_page23b[2] = {
407   /* 0x23b00 */
408   {   94, 0x0000 }, {   94, 0x0400 },
409 };
410 static const Summary16 hkscs2004_uni2indx_page23e[47] = {
411   /* 0x23e00 */
412   {   95, 0x0040 }, {   96, 0x0000 }, {   96, 0x0000 }, {   96, 0x0000 },
413   {   96, 0x0000 }, {   96, 0x0000 }, {   96, 0x0000 }, {   96, 0x0000 },
414   {   96, 0x0000 }, {   96, 0x0000 }, {   96, 0x0000 }, {   96, 0x0000 },
415   {   96, 0x0000 }, {   96, 0x0000 }, {   96, 0x0000 }, {   96, 0x0000 },
416   /* 0x23f00 */
417   {   96, 0x0000 }, {   96, 0x0000 }, {   96, 0x0000 }, {   96, 0x0000 },
418   {   96, 0x0000 }, {   96, 0x0000 }, {   96, 0x0002 }, {   97, 0x0000 },
419   {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x0000 },
420   {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x0000 },
421   /* 0x24000 */
422   {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x0000 },
423   {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x0000 },
424   {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x0000 },
425   {   97, 0x0000 }, {   97, 0x0000 }, {   97, 0x1000 },
426 };
427 static const Summary16 hkscs2004_uni2indx_page242[12] = {
428   /* 0x24200 */
429   {   98, 0x0000 }, {   98, 0x0000 }, {   98, 0x0000 }, {   98, 0x0000 },
430   {   98, 0x0000 }, {   98, 0x0000 }, {   98, 0x0000 }, {   98, 0x0000 },
431   {   98, 0x0000 }, {   98, 0x0000 }, {   98, 0x0000 }, {   98, 0x8000 },
432 };
433 static const Summary16 hkscs2004_uni2indx_page24b[1] = {
434   /* 0x24b00 */
435   {   99, 0x8000 },
436 };
437 static const Summary16 hkscs2004_uni2indx_page254[10] = {
438   /* 0x25400 */
439   {  100, 0x0000 }, {  100, 0x0000 }, {  100, 0x0000 }, {  100, 0x0000 },
440   {  100, 0x0000 }, {  100, 0x0000 }, {  100, 0x0000 }, {  100, 0x0000 },
441   {  100, 0x0000 }, {  100, 0x0400 },
442 };
443 static const Summary16 hkscs2004_uni2indx_page25a[6] = {
444   /* 0x25a00 */
445   {  101, 0x0000 }, {  101, 0x0000 }, {  101, 0x0000 }, {  101, 0x0000 },
446   {  101, 0x0000 }, {  101, 0x0010 },
447 };
448 static const Summary16 hkscs2004_uni2indx_page26b[21] = {
449   /* 0x26b00 */
450   {  102, 0x0000 }, {  102, 0x0000 }, {  102, 0x0008 }, {  103, 0x0000 },
451   {  103, 0x0000 }, {  103, 0x0000 }, {  103, 0x0000 }, {  103, 0x0000 },
452   {  103, 0x0000 }, {  103, 0x0000 }, {  103, 0x0000 }, {  103, 0x0000 },
453   {  103, 0x0000 }, {  103, 0x0000 }, {  103, 0x0000 }, {  103, 0x0000 },
454   /* 0x26c00 */
455   {  103, 0x0000 }, {  103, 0x0000 }, {  103, 0x0000 }, {  103, 0x0000 },
456   {  103, 0x0042 },
457 };
458 static const Summary16 hkscs2004_uni2indx_page26e[9] = {
459   /* 0x26e00 */
460   {  105, 0x0000 }, {  105, 0x0000 }, {  105, 0x0000 }, {  105, 0x0000 },
461   {  105, 0x0000 }, {  105, 0x0000 }, {  105, 0x0000 }, {  105, 0x0000 },
462   {  105, 0x0800 },
463 };
464 static const Summary16 hkscs2004_uni2indx_page270[14] = {
465   /* 0x27000 */
466   {  106, 0x0000 }, {  106, 0x0000 }, {  106, 0x0000 }, {  106, 0x0000 },
467   {  106, 0x0000 }, {  106, 0x0000 }, {  106, 0x0000 }, {  106, 0x0000 },
468   {  106, 0x0000 }, {  106, 0x0000 }, {  106, 0x0000 }, {  106, 0x0000 },
469   {  106, 0x0000 }, {  106, 0x0004 },
470 };
471 static const Summary16 hkscs2004_uni2indx_page272[32] = {
472   /* 0x27200 */
473   {  107, 0x0000 }, {  107, 0x0000 }, {  107, 0x0000 }, {  107, 0x0000 },
474   {  107, 0x0000 }, {  107, 0x0000 }, {  107, 0x0080 }, {  108, 0x0000 },
475   {  108, 0x0000 }, {  108, 0x0000 }, {  108, 0x0000 }, {  108, 0x0000 },
476   {  108, 0x0000 }, {  108, 0x0000 }, {  108, 0x0000 }, {  108, 0x0000 },
477   /* 0x27300 */
478   {  108, 0x0000 }, {  108, 0x0000 }, {  108, 0x0000 }, {  108, 0x0000 },
479   {  108, 0x0000 }, {  108, 0x0004 }, {  109, 0x0000 }, {  109, 0x0000 },
480   {  109, 0x0000 }, {  109, 0x0000 }, {  109, 0x0000 }, {  109, 0x0000 },
481   {  109, 0x0000 }, {  109, 0x0000 }, {  109, 0x0000 }, {  109, 0x8000 },
482 };
483 static const Summary16 hkscs2004_uni2indx_page27b[29] = {
484   /* 0x27b00 */
485   {  110, 0x0000 }, {  110, 0x0000 }, {  110, 0x0000 }, {  110, 0x0000 },
486   {  110, 0x0000 }, {  110, 0x0000 }, {  110, 0x0000 }, {  110, 0x0000 },
487   {  110, 0x0000 }, {  110, 0x0000 }, {  110, 0x0000 }, {  110, 0x0000 },
488   {  110, 0x0000 }, {  110, 0x0000 }, {  110, 0x8000 }, {  111, 0x0000 },
489   /* 0x27c00 */
490   {  111, 0x0000 }, {  111, 0x0000 }, {  111, 0x0000 }, {  111, 0x0000 },
491   {  111, 0x0000 }, {  111, 0x0000 }, {  111, 0x1000 }, {  112, 0x0000 },
492   {  112, 0x0000 }, {  112, 0x0000 }, {  112, 0x0000 }, {  112, 0x0002 },
493   {  113, 0x0020 },
494 };
495 static const Summary16 hkscs2004_uni2indx_page286[12] = {
496   /* 0x28600 */
497   {  114, 0x0000 }, {  114, 0x0000 }, {  114, 0x0000 }, {  114, 0x0000 },
498   {  114, 0x0000 }, {  114, 0x0000 }, {  114, 0x0000 }, {  114, 0x0000 },
499   {  114, 0x0000 }, {  114, 0x0000 }, {  114, 0x0000 }, {  114, 0x0004 },
500 };
501 static const Summary16 hkscs2004_uni2indx_page289[7] = {
502   /* 0x28900 */
503   {  115, 0x0000 }, {  115, 0x0000 }, {  115, 0x0000 }, {  115, 0x0000 },
504   {  115, 0x0000 }, {  115, 0x0000 }, {  115, 0x2000 },
505 };
506 static const Summary16 hkscs2004_uni2indx_page28b[12] = {
507   /* 0x28b00 */
508   {  116, 0x0000 }, {  116, 0x0000 }, {  116, 0x0000 }, {  116, 0x0000 },
509   {  116, 0x0000 }, {  116, 0x0000 }, {  116, 0x0000 }, {  116, 0x0000 },
510   {  116, 0x0000 }, {  116, 0x0000 }, {  116, 0x0000 }, {  116, 0x0200 },
511 };
512 static const Summary16 hkscs2004_uni2indx_page290[8] = {
513   /* 0x29000 */
514   {  117, 0x0000 }, {  117, 0x0000 }, {  117, 0x0000 }, {  117, 0x0000 },
515   {  117, 0x0000 }, {  117, 0x0000 }, {  117, 0x0000 }, {  117, 0x0200 },
516 };
517 static const Summary16 hkscs2004_uni2indx_page298[21] = {
518   /* 0x29800 */
519   {  118, 0x0000 }, {  118, 0x0000 }, {  118, 0x0000 }, {  118, 0x0000 },
520   {  118, 0x0000 }, {  118, 0x0000 }, {  118, 0x0000 }, {  118, 0x0000 },
521   {  118, 0x0000 }, {  118, 0x0000 }, {  118, 0x0000 }, {  118, 0x0000 },
522   {  118, 0x0000 }, {  118, 0x0000 }, {  118, 0x0000 }, {  118, 0x0400 },
523   /* 0x29900 */
524   {  119, 0x0000 }, {  119, 0x0000 }, {  119, 0x0000 }, {  119, 0x0000 },
525   {  119, 0x0020 },
526 };
527 static const Summary16 hkscs2004_uni2indx_page29e[12] = {
528   /* 0x29e00 */
529   {  120, 0x0000 }, {  120, 0x0000 }, {  120, 0x0000 }, {  120, 0x0000 },
530   {  120, 0x0000 }, {  120, 0x0000 }, {  120, 0x0000 }, {  120, 0x0000 },
531   {  120, 0x0000 }, {  120, 0x0000 }, {  120, 0x0000 }, {  120, 0x0001 },
532 };
533 static const Summary16 hkscs2004_uni2indx_page2a1[12] = {
534   /* 0x2a100 */
535   {  121, 0x0000 }, {  121, 0x0000 }, {  121, 0x0000 }, {  121, 0x0000 },
536   {  121, 0x0000 }, {  121, 0x0000 }, {  121, 0x0000 }, {  121, 0x0000 },
537   {  121, 0x0000 }, {  121, 0x0000 }, {  121, 0x0000 }, {  121, 0x0020 },
538 };
539 static const Summary16 hkscs2004_uni2indx_page2a3[6] = {
540   /* 0x2a300 */
541   {  122, 0x0000 }, {  122, 0x0000 }, {  122, 0x0000 }, {  122, 0x0000 },
542   {  122, 0x0000 }, {  122, 0x0002 },
543 };
544 
545 static int
546 hkscs2004_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
547 {
548   if (n >= 2) {
549     const Summary16 *summary = NULL;
550     if (wc < 0x21a00) {
551       if (wc < 0x6e00) {
552         if (wc >= 0x3400 && wc < 0x3450)
553           summary = &hkscs2004_uni2indx_page34[(wc>>4)-0x340];
554         else if (wc >= 0x3600 && wc < 0x3980)
555           summary = &hkscs2004_uni2indx_page36[(wc>>4)-0x360];
556         else if (wc >= 0x3b00 && wc < 0x3ba0)
557           summary = &hkscs2004_uni2indx_page3b[(wc>>4)-0x3b0];
558         else if (wc >= 0x3d00 && wc < 0x3e00)
559           summary = &hkscs2004_uni2indx_page3d[(wc>>4)-0x3d0];
560         else if (wc >= 0x3f00 && wc < 0x41f0)
561           summary = &hkscs2004_uni2indx_page3f[(wc>>4)-0x3f0];
562         else if (wc >= 0x4300 && wc < 0x4750)
563           summary = &hkscs2004_uni2indx_page43[(wc>>4)-0x430];
564         else if (wc >= 0x4a00 && wc < 0x4ab0)
565           summary = &hkscs2004_uni2indx_page4a[(wc>>4)-0x4a0];
566         else if (wc >= 0x4c00 && wc < 0x4d90)
567           summary = &hkscs2004_uni2indx_page4c[(wc>>4)-0x4c0];
568         else if (wc >= 0x4f00 && wc < 0x4fc0)
569           summary = &hkscs2004_uni2indx_page4f[(wc>>4)-0x4f0];
570         else if (wc >= 0x5600 && wc < 0x5700)
571           summary = &hkscs2004_uni2indx_page56[(wc>>4)-0x560];
572         else if (wc >= 0x5900 && wc < 0x5d80)
573           summary = &hkscs2004_uni2indx_page59[(wc>>4)-0x590];
574         else if (wc >= 0x5f00 && wc < 0x5f40)
575           summary = &hkscs2004_uni2indx_page5f[(wc>>4)-0x5f0];
576         else if (wc >= 0x6600 && wc < 0x6770)
577           summary = &hkscs2004_uni2indx_page66[(wc>>4)-0x660];
578       } else {
579         if (wc >= 0x6e00 && wc < 0x6e60)
580           summary = &hkscs2004_uni2indx_page6e[(wc>>4)-0x6e0];
581         else if (wc >= 0x7100 && wc < 0x7230)
582           summary = &hkscs2004_uni2indx_page71[(wc>>4)-0x710];
583         else if (wc >= 0x7400 && wc < 0x74a0)
584           summary = &hkscs2004_uni2indx_page74[(wc>>4)-0x740];
585         else if (wc >= 0x7900 && wc < 0x79d0)
586           summary = &hkscs2004_uni2indx_page79[(wc>>4)-0x790];
587         else if (wc >= 0x7d00 && wc < 0x7da0)
588           summary = &hkscs2004_uni2indx_page7d[(wc>>4)-0x7d0];
589         else if (wc >= 0x8100 && wc < 0x8170)
590           summary = &hkscs2004_uni2indx_page81[(wc>>4)-0x810];
591         else if (wc >= 0x8500 && wc < 0x85a0)
592           summary = &hkscs2004_uni2indx_page85[(wc>>4)-0x850];
593         else if (wc >= 0x8a00 && wc < 0x8b00)
594           summary = &hkscs2004_uni2indx_page8a[(wc>>4)-0x8a0];
595         else if (wc >= 0x9700 && wc < 0x9860)
596           summary = &hkscs2004_uni2indx_page97[(wc>>4)-0x970];
597         else if (wc >= 0x9f00 && wc < 0x9fc0)
598           summary = &hkscs2004_uni2indx_page9f[(wc>>4)-0x9f0];
599         else if (wc >= 0x20100 && wc < 0x20240)
600           summary = &hkscs2004_uni2indx_page201[(wc>>4)-0x2010];
601         else if (wc >= 0x20a00 && wc < 0x20ba0)
602           summary = &hkscs2004_uni2indx_page20a[(wc>>4)-0x20a0];
603       }
604     } else {
605       if (wc < 0x26b00) {
606         if (wc >= 0x21a00 && wc < 0x21a70)
607           summary = &hkscs2004_uni2indx_page21a[(wc>>4)-0x21a0];
608         else if (wc >= 0x21d00 && wc < 0x21e30)
609           summary = &hkscs2004_uni2indx_page21d[(wc>>4)-0x21d0];
610         else if (wc >= 0x22100 && wc < 0x221d0)
611           summary = &hkscs2004_uni2indx_page221[(wc>>4)-0x2210];
612         else if (wc >= 0x22700 && wc < 0x227a0)
613           summary = &hkscs2004_uni2indx_page227[(wc>>4)-0x2270];
614         else if (wc >= 0x23200 && wc < 0x23260)
615           summary = &hkscs2004_uni2indx_page232[(wc>>4)-0x2320];
616         else if (wc >= 0x23500 && wc < 0x23620)
617           summary = &hkscs2004_uni2indx_page235[(wc>>4)-0x2350];
618         else if (wc >= 0x23b00 && wc < 0x23b20)
619           summary = &hkscs2004_uni2indx_page23b[(wc>>4)-0x23b0];
620         else if (wc >= 0x23e00 && wc < 0x240f0)
621           summary = &hkscs2004_uni2indx_page23e[(wc>>4)-0x23e0];
622         else if (wc >= 0x24200 && wc < 0x242c0)
623           summary = &hkscs2004_uni2indx_page242[(wc>>4)-0x2420];
624         else if (wc >= 0x24b00 && wc < 0x24b10)
625           summary = &hkscs2004_uni2indx_page24b[(wc>>4)-0x24b0];
626         else if (wc >= 0x25400 && wc < 0x254a0)
627           summary = &hkscs2004_uni2indx_page254[(wc>>4)-0x2540];
628         else if (wc >= 0x25a00 && wc < 0x25a60)
629           summary = &hkscs2004_uni2indx_page25a[(wc>>4)-0x25a0];
630       } else {
631         if (wc >= 0x26b00 && wc < 0x26c50)
632           summary = &hkscs2004_uni2indx_page26b[(wc>>4)-0x26b0];
633         else if (wc >= 0x26e00 && wc < 0x26e90)
634           summary = &hkscs2004_uni2indx_page26e[(wc>>4)-0x26e0];
635         else if (wc >= 0x27000 && wc < 0x270e0)
636           summary = &hkscs2004_uni2indx_page270[(wc>>4)-0x2700];
637         else if (wc >= 0x27200 && wc < 0x27400)
638           summary = &hkscs2004_uni2indx_page272[(wc>>4)-0x2720];
639         else if (wc >= 0x27b00 && wc < 0x27cd0)
640           summary = &hkscs2004_uni2indx_page27b[(wc>>4)-0x27b0];
641         else if (wc >= 0x28600 && wc < 0x286c0)
642           summary = &hkscs2004_uni2indx_page286[(wc>>4)-0x2860];
643         else if (wc >= 0x28900 && wc < 0x28970)
644           summary = &hkscs2004_uni2indx_page289[(wc>>4)-0x2890];
645         else if (wc >= 0x28b00 && wc < 0x28bc0)
646           summary = &hkscs2004_uni2indx_page28b[(wc>>4)-0x28b0];
647         else if (wc >= 0x29000 && wc < 0x29080)
648           summary = &hkscs2004_uni2indx_page290[(wc>>4)-0x2900];
649         else if (wc >= 0x29800 && wc < 0x29950)
650           summary = &hkscs2004_uni2indx_page298[(wc>>4)-0x2980];
651         else if (wc >= 0x29e00 && wc < 0x29ec0)
652           summary = &hkscs2004_uni2indx_page29e[(wc>>4)-0x29e0];
653         else if (wc >= 0x2a100 && wc < 0x2a1c0)
654           summary = &hkscs2004_uni2indx_page2a1[(wc>>4)-0x2a10];
655         else if (wc >= 0x2a300 && wc < 0x2a360)
656           summary = &hkscs2004_uni2indx_page2a3[(wc>>4)-0x2a30];
657       }
658     }
659     if (summary) {
660       unsigned short used = summary->used;
661       unsigned int i = wc & 0x0f;
662       if (used & ((unsigned short) 1 << i)) {
663         unsigned short c;
664         /* Keep in `used' only the bits 0..i-1. */
665         used &= ((unsigned short) 1 << i) - 1;
666         /* Add `summary->indx' and the number of bits set in `used'. */
667         used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
668         used = (used & 0x3333) + ((used & 0xcccc) >> 2);
669         used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
670         used = (used & 0x00ff) + (used >> 8);
671         c = hkscs2004_2charset[summary->indx + used];
672         r[0] = (c >> 8); r[1] = (c & 0xff);
673         return 2;
674       }
675     }
676     return RET_ILUNI;
677   }
678   return RET_TOOSMALL;
679 }
680