2 * Copyright (c) 1998, Luoqi Chen
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 VARIABLE 1 0x0000 2 0x8080 2 0x0080 3 0x8000 0x8080
33 ALPHA 'A' - 'Z' 'a' - 'z'
34 CONTROL 0x00 - 0x1f 0x7f
38 PUNCT 0x21 - 0x2f 0x3a - 0x40 0x5b - 0x60 0x7b - 0x7e
39 SPACE 0x09 - 0x0d 0x20
41 XDIGIT '0' - '9' 'a' - 'f' 'A' - 'F'
46 MAPLOWER < 'A' - 'Z' : 'a' > < 'a' - 'z' : 'a' >
47 MAPUPPER < 'A' - 'Z' : 'A' > < 'a' - 'z' : 'A' >
48 TODIGIT < '0' - '9' : 0 >
49 TODIGIT < 'A' - 'F' : 10 > < 'a' - 'f' : 10 >
57 SWIDTH2 0xa1a1 - 0xa1fe
59 /* ?DIGIT 0xa2b1 - 0xa2e2 0xa2e5 - 0xa2ee 0xa2f1 - 0xa2fc */
60 SWIDTH2 0xa2b1 - 0xa2e2 0xa2e5 - 0xa2ee 0xa2f1 - 0xa2fc
62 TODIGIT < 0xa2b1 - 0xa2c4 : 0 >
63 TODIGIT < 0xa2c5 - 0xa2d8 : 0 >
64 TODIGIT < 0xa2d9 - 0xa2e2 : 0 >
65 TODIGIT < 0xa2e5 - 0xa2ee : 0 >
66 TODIGIT < 0xa2f1 - 0xa2fc : 0 >
68 ALPHA 0xa3c1 - 0xa3da 0xa3e1 - 0xa3fa
69 SWIDTH2 0xa3c1 - 0xa3da 0xa3e1 - 0xa3fa
70 /* ?DIGIT 0xa3b0 - 0xa3b9 */
71 SWIDTH2 0xa3b0 - 0xa3b9
74 PUNCT 0xa3a1 - 0xa3af 0xa3ba - 0xa3c0 0xa3db - 0xa3e0 0xa3fb - 0xa3fe
75 SWIDTH2 0xa3a1 - 0xa3af 0xa3ba - 0xa3c0 0xa3db - 0xa3e0 0xa3fb - 0xa3fe
76 /* ?XDIGIT 0xa3b0 - 0xa3b9 0xa3c1 - 0xa3c6 0xa3e1 - 0xa3e6 */
78 MAPLOWER < 0xa3c1 - 0xa3da : 0xa3e1 > < 0xa3e1 - 0xa3fa : 0xa3e1 >
79 MAPUPPER < 0xa3c1 - 0xa3da : 0xa3c1 > < 0xa3b0 - 0xa3b9 : 0xa3c1 >
80 TODIGIT < 0xa3b0 - 0xa3b9 : 0 >
81 TODIGIT < 0xa3c1 - 0xa3c6 : 10 > < 0xa3e1 - 0xa3e6 : 10 >
83 PHONOGRAM 0xa4a1 - 0xa4f3 /* Hiragana */
84 PHONOGRAM 0xa5a1 - 0xa5f6 /* Katakana */
85 SWIDTH2 0xa4a1 - 0xa4f3 /* Hiragana */
86 SWIDTH2 0xa5a1 - 0xa5f6 /* Katakana */
88 UPPER 0xa6a1 - 0xa6b8 /* Greek */
89 LOWER 0xa6c1 - 0xa6d8 /* Greek */
90 SWIDTH2 0xa6a1 - 0xa6b8 /* Greek */
91 SWIDTH2 0xa6c1 - 0xa6d8 /* Greek */
92 MAPLOWER < 0xa6a1 - 0xa6b8 : 0xa6c1 > < 0xa6c1 - 0xa6d8 : 0xa6c1 >
93 MAPUPPER < 0xa6a1 - 0xa6b8 : 0xa6a1 > < 0xa6c1 - 0xa6d8 : 0xa6a1 >
95 UPPER 0xa7a1 - 0xa7c1 /* Cyrillic */
96 LOWER 0xa7d1 - 0xa7f1 /* Cyrillic */
97 SWIDTH2 0xa7a1 - 0xa7c1 /* Cyrillic */
98 SWIDTH2 0xa7d1 - 0xa7f1 /* Cyrillic */
99 MAPLOWER < 0xa7a1 - 0xa7c1 : 0xa7d1 > < 0xa7d1 - 0xa7f1 : 0xa7d1 >
100 MAPUPPER < 0xa7a1 - 0xa7c1 : 0xa7a1 > < 0xa7d1 - 0xa7f1 : 0xa7a1 >
102 SPECIAL 0xa8a1 - 0xa8ba
103 SWIDTH2 0xa8a1 - 0xa8ba
104 PHONOGRAM 0xa8c5 - 0xa8e9 /* Pin yin */
105 SWIDTH2 0xa8c5 - 0xa8e9 /* Pin yin */
106 SPECIAL 0xa9a4 - 0xa9ef /* Box drawings */
107 SWIDTH2 0xa9a4 - 0xa9ef /* Box drawings */
109 IDEOGRAM 0xb0a1 - 0xb0fe
110 IDEOGRAM 0xb1a1 - 0xb1fe
111 IDEOGRAM 0xb2a1 - 0xb2fe
112 IDEOGRAM 0xb3a1 - 0xb3fe
113 IDEOGRAM 0xb4a1 - 0xb4fe
114 IDEOGRAM 0xb5a1 - 0xb5fe
115 IDEOGRAM 0xb6a1 - 0xb6fe
116 IDEOGRAM 0xb7a1 - 0xb7fe
117 IDEOGRAM 0xb8a1 - 0xb8fe
118 IDEOGRAM 0xb9a1 - 0xb9fe
119 IDEOGRAM 0xbaa1 - 0xbafe
120 IDEOGRAM 0xbba1 - 0xbbfe
121 IDEOGRAM 0xbca1 - 0xbcfe
122 IDEOGRAM 0xbda1 - 0xbdfe
123 IDEOGRAM 0xbea1 - 0xbefe
124 IDEOGRAM 0xbfa1 - 0xbffe
125 IDEOGRAM 0xc0a1 - 0xc0fe
126 IDEOGRAM 0xc1a1 - 0xc1fe
127 IDEOGRAM 0xc2a1 - 0xc2fe
128 IDEOGRAM 0xc3a1 - 0xc3fe
129 IDEOGRAM 0xc4a1 - 0xc4fe
130 IDEOGRAM 0xc5a1 - 0xc5fe
131 IDEOGRAM 0xc6a1 - 0xc6fe
132 IDEOGRAM 0xc7a1 - 0xc7fe
133 IDEOGRAM 0xc8a1 - 0xc8fe
134 IDEOGRAM 0xc9a1 - 0xc9fe
135 IDEOGRAM 0xcaa1 - 0xcafe
136 IDEOGRAM 0xcba1 - 0xcbfe
137 IDEOGRAM 0xcca1 - 0xccfe
138 IDEOGRAM 0xcda1 - 0xcdfe
139 IDEOGRAM 0xcea1 - 0xcefe
140 IDEOGRAM 0xcfa1 - 0xcfd3
141 IDEOGRAM 0xd0a1 - 0xd0fe
142 IDEOGRAM 0xd1a1 - 0xd1fe
143 IDEOGRAM 0xd2a1 - 0xd2fe
144 IDEOGRAM 0xd3a1 - 0xd3fe
145 IDEOGRAM 0xd4a1 - 0xd4fe
146 IDEOGRAM 0xd5a1 - 0xd5fe
147 IDEOGRAM 0xd6a1 - 0xd6fe
148 IDEOGRAM 0xd7a1 - 0xd7fe
149 IDEOGRAM 0xd8a1 - 0xd8fe
150 IDEOGRAM 0xd9a1 - 0xd9fe
151 IDEOGRAM 0xdaa1 - 0xdafe
152 IDEOGRAM 0xdba1 - 0xdbfe
153 IDEOGRAM 0xdca1 - 0xdcfe
154 IDEOGRAM 0xdda1 - 0xddfe
155 IDEOGRAM 0xdea1 - 0xdefe
156 IDEOGRAM 0xdfa1 - 0xdffe
157 IDEOGRAM 0xe0a1 - 0xe0fe
158 IDEOGRAM 0xe1a1 - 0xe1fe
159 IDEOGRAM 0xe2a1 - 0xe2fe
160 IDEOGRAM 0xe3a1 - 0xe3fe
161 IDEOGRAM 0xe4a1 - 0xe4fe
162 IDEOGRAM 0xe5a1 - 0xe5fe
163 IDEOGRAM 0xe6a1 - 0xe6fe
164 IDEOGRAM 0xe7a1 - 0xe7fe
165 IDEOGRAM 0xe8a1 - 0xe8fe
166 IDEOGRAM 0xe9a1 - 0xe9fe
167 IDEOGRAM 0xeaa1 - 0xeafe
168 IDEOGRAM 0xeba1 - 0xebfe
169 IDEOGRAM 0xeca1 - 0xecfe
170 IDEOGRAM 0xeda1 - 0xedfe
171 IDEOGRAM 0xeea1 - 0xeefe
172 IDEOGRAM 0xefa1 - 0xeffe
173 IDEOGRAM 0xf0a1 - 0xf0fe
174 IDEOGRAM 0xf1a1 - 0xf1fe
175 IDEOGRAM 0xf2a1 - 0xf2fe
176 IDEOGRAM 0xf3a1 - 0xf3fe
177 IDEOGRAM 0xf4a1 - 0xf4fe
178 IDEOGRAM 0xf5a1 - 0xf5fe
179 IDEOGRAM 0xf6a1 - 0xf6fe
180 IDEOGRAM 0xf7a1 - 0xf7fe
182 SWIDTH2 0xb0a1 - 0xb0fe
183 SWIDTH2 0xb1a1 - 0xb1fe
184 SWIDTH2 0xb2a1 - 0xb2fe
185 SWIDTH2 0xb3a1 - 0xb3fe
186 SWIDTH2 0xb4a1 - 0xb4fe
187 SWIDTH2 0xb5a1 - 0xb5fe
188 SWIDTH2 0xb6a1 - 0xb6fe
189 SWIDTH2 0xb7a1 - 0xb7fe
190 SWIDTH2 0xb8a1 - 0xb8fe
191 SWIDTH2 0xb9a1 - 0xb9fe
192 SWIDTH2 0xbaa1 - 0xbafe
193 SWIDTH2 0xbba1 - 0xbbfe
194 SWIDTH2 0xbca1 - 0xbcfe
195 SWIDTH2 0xbda1 - 0xbdfe
196 SWIDTH2 0xbea1 - 0xbefe
197 SWIDTH2 0xbfa1 - 0xbffe
198 SWIDTH2 0xc0a1 - 0xc0fe
199 SWIDTH2 0xc1a1 - 0xc1fe
200 SWIDTH2 0xc2a1 - 0xc2fe
201 SWIDTH2 0xc3a1 - 0xc3fe
202 SWIDTH2 0xc4a1 - 0xc4fe
203 SWIDTH2 0xc5a1 - 0xc5fe
204 SWIDTH2 0xc6a1 - 0xc6fe
205 SWIDTH2 0xc7a1 - 0xc7fe
206 SWIDTH2 0xc8a1 - 0xc8fe
207 SWIDTH2 0xc9a1 - 0xc9fe
208 SWIDTH2 0xcaa1 - 0xcafe
209 SWIDTH2 0xcba1 - 0xcbfe
210 SWIDTH2 0xcca1 - 0xccfe
211 SWIDTH2 0xcda1 - 0xcdfe
212 SWIDTH2 0xcea1 - 0xcefe
213 SWIDTH2 0xcfa1 - 0xcfd3
214 SWIDTH2 0xd0a1 - 0xd0fe
215 SWIDTH2 0xd1a1 - 0xd1fe
216 SWIDTH2 0xd2a1 - 0xd2fe
217 SWIDTH2 0xd3a1 - 0xd3fe
218 SWIDTH2 0xd4a1 - 0xd4fe
219 SWIDTH2 0xd5a1 - 0xd5fe
220 SWIDTH2 0xd6a1 - 0xd6fe
221 SWIDTH2 0xd7a1 - 0xd7fe
222 SWIDTH2 0xd8a1 - 0xd8fe
223 SWIDTH2 0xd9a1 - 0xd9fe
224 SWIDTH2 0xdaa1 - 0xdafe
225 SWIDTH2 0xdba1 - 0xdbfe
226 SWIDTH2 0xdca1 - 0xdcfe
227 SWIDTH2 0xdda1 - 0xddfe
228 SWIDTH2 0xdea1 - 0xdefe
229 SWIDTH2 0xdfa1 - 0xdffe
230 SWIDTH2 0xe0a1 - 0xe0fe
231 SWIDTH2 0xe1a1 - 0xe1fe
232 SWIDTH2 0xe2a1 - 0xe2fe
233 SWIDTH2 0xe3a1 - 0xe3fe
234 SWIDTH2 0xe4a1 - 0xe4fe
235 SWIDTH2 0xe5a1 - 0xe5fe
236 SWIDTH2 0xe6a1 - 0xe6fe
237 SWIDTH2 0xe7a1 - 0xe7fe
238 SWIDTH2 0xe8a1 - 0xe8fe
239 SWIDTH2 0xe9a1 - 0xe9fe
240 SWIDTH2 0xeaa1 - 0xeafe
241 SWIDTH2 0xeba1 - 0xebfe
242 SWIDTH2 0xeca1 - 0xecfe
243 SWIDTH2 0xeda1 - 0xedfe
244 SWIDTH2 0xeea1 - 0xeefe
245 SWIDTH2 0xefa1 - 0xeffe
246 SWIDTH2 0xf0a1 - 0xf0fe
247 SWIDTH2 0xf1a1 - 0xf1fe
248 SWIDTH2 0xf2a1 - 0xf2fe
249 SWIDTH2 0xf3a1 - 0xf3fe
250 SWIDTH2 0xf4a1 - 0xf4fe
251 SWIDTH2 0xf5a1 - 0xf5fe
252 SWIDTH2 0xf6a1 - 0xf6fe
253 SWIDTH2 0xf7a1 - 0xf7fe