2 USING: kernel sequences math ;
4 : in-range-seq? ( number seq -- ? )
5 #! seq: { { min max } { min max }* }
6 [ first2 between? ] contains-with? ;
8 PREDICATE: integer 1.1name-start-char
17 { HEX: 37F HEX: 1FFF }
18 { HEX: 200C HEX: 200D }
19 { HEX: 2070 HEX: 218F }
20 { HEX: 2C00 HEX: 2FEF }
21 { HEX: 3001 HEX: D7FF }
22 { HEX: F900 HEX: FDCF }
23 { HEX: FDF0 HEX: FFFD }
24 { HEX: 10000 HEX: EFFFF }
27 PREDICATE: integer 1.1name-char
28 dup 1.1name-start-char? swap {
34 { HEX: 203F HEX: 2040 }
37 ! The following 335 lines were automatically generated
38 ! from Appendix B of the XML 1.0 standard, version 3
40 PREDICATE: integer base-char {
41 { HEX: 0041 HEX: 005A }
42 { HEX: 0061 HEX: 007A }
43 { HEX: 00C0 HEX: 00D6 }
44 { HEX: 00D8 HEX: 00F6 }
45 { HEX: 00F8 HEX: 00FF }
46 { HEX: 0100 HEX: 0131 }
47 { HEX: 0134 HEX: 013E }
48 { HEX: 0141 HEX: 0148 }
49 { HEX: 014A HEX: 017E }
50 { HEX: 0180 HEX: 01C3 }
51 { HEX: 01CD HEX: 01F0 }
52 { HEX: 01F4 HEX: 01F5 }
53 { HEX: 01FA HEX: 0217 }
54 { HEX: 0250 HEX: 02A8 }
55 { HEX: 02BB HEX: 02C1 }
56 { HEX: 0386 HEX: 0386 }
57 { HEX: 0388 HEX: 038A }
58 { HEX: 038C HEX: 038C }
59 { HEX: 038E HEX: 03A1 }
60 { HEX: 03A3 HEX: 03CE }
61 { HEX: 03D0 HEX: 03D6 }
62 { HEX: 03DA HEX: 03DA }
63 { HEX: 03DC HEX: 03DC }
64 { HEX: 03DE HEX: 03DE }
65 { HEX: 03E0 HEX: 03E0 }
66 { HEX: 03E2 HEX: 03F3 }
67 { HEX: 0401 HEX: 040C }
68 { HEX: 040E HEX: 044F }
69 { HEX: 0451 HEX: 045C }
70 { HEX: 045E HEX: 0481 }
71 { HEX: 0490 HEX: 04C4 }
72 { HEX: 04C7 HEX: 04C8 }
73 { HEX: 04CB HEX: 04CC }
74 { HEX: 04D0 HEX: 04EB }
75 { HEX: 04EE HEX: 04F5 }
76 { HEX: 04F8 HEX: 04F9 }
77 { HEX: 0531 HEX: 0556 }
78 { HEX: 0559 HEX: 0559 }
79 { HEX: 0561 HEX: 0586 }
80 { HEX: 05D0 HEX: 05EA }
81 { HEX: 05F0 HEX: 05F2 }
82 { HEX: 0621 HEX: 063A }
83 { HEX: 0641 HEX: 064A }
84 { HEX: 0671 HEX: 06B7 }
85 { HEX: 06BA HEX: 06BE }
86 { HEX: 06C0 HEX: 06CE }
87 { HEX: 06D0 HEX: 06D3 }
88 { HEX: 06D5 HEX: 06D5 }
89 { HEX: 06E5 HEX: 06E6 }
90 { HEX: 0905 HEX: 0939 }
91 { HEX: 093D HEX: 093D }
92 { HEX: 0958 HEX: 0961 }
93 { HEX: 0985 HEX: 098C }
94 { HEX: 098F HEX: 0990 }
95 { HEX: 0993 HEX: 09A8 }
96 { HEX: 09AA HEX: 09B0 }
97 { HEX: 09B2 HEX: 09B2 }
98 { HEX: 09B6 HEX: 09B9 }
99 { HEX: 09DC HEX: 09DD }
100 { HEX: 09DF HEX: 09E1 }
101 { HEX: 09F0 HEX: 09F1 }
102 { HEX: 0A05 HEX: 0A0A }
103 { HEX: 0A0F HEX: 0A10 }
104 { HEX: 0A13 HEX: 0A28 }
105 { HEX: 0A2A HEX: 0A30 }
106 { HEX: 0A32 HEX: 0A33 }
107 { HEX: 0A35 HEX: 0A36 }
108 { HEX: 0A38 HEX: 0A39 }
109 { HEX: 0A59 HEX: 0A5C }
110 { HEX: 0A5E HEX: 0A5E }
111 { HEX: 0A72 HEX: 0A74 }
112 { HEX: 0A85 HEX: 0A8B }
113 { HEX: 0A8D HEX: 0A8D }
114 { HEX: 0A8F HEX: 0A91 }
115 { HEX: 0A93 HEX: 0AA8 }
116 { HEX: 0AAA HEX: 0AB0 }
117 { HEX: 0AB2 HEX: 0AB3 }
118 { HEX: 0AB5 HEX: 0AB9 }
119 { HEX: 0ABD HEX: 0ABD }
120 { HEX: 0AE0 HEX: 0AE0 }
121 { HEX: 0B05 HEX: 0B0C }
122 { HEX: 0B0F HEX: 0B10 }
123 { HEX: 0B13 HEX: 0B28 }
124 { HEX: 0B2A HEX: 0B30 }
125 { HEX: 0B32 HEX: 0B33 }
126 { HEX: 0B36 HEX: 0B39 }
127 { HEX: 0B3D HEX: 0B3D }
128 { HEX: 0B5C HEX: 0B5D }
129 { HEX: 0B5F HEX: 0B61 }
130 { HEX: 0B85 HEX: 0B8A }
131 { HEX: 0B8E HEX: 0B90 }
132 { HEX: 0B92 HEX: 0B95 }
133 { HEX: 0B99 HEX: 0B9A }
134 { HEX: 0B9C HEX: 0B9C }
135 { HEX: 0B9E HEX: 0B9F }
136 { HEX: 0BA3 HEX: 0BA4 }
137 { HEX: 0BA8 HEX: 0BAA }
138 { HEX: 0BAE HEX: 0BB5 }
139 { HEX: 0BB7 HEX: 0BB9 }
140 { HEX: 0C05 HEX: 0C0C }
141 { HEX: 0C0E HEX: 0C10 }
142 { HEX: 0C12 HEX: 0C28 }
143 { HEX: 0C2A HEX: 0C33 }
144 { HEX: 0C35 HEX: 0C39 }
145 { HEX: 0C60 HEX: 0C61 }
146 { HEX: 0C85 HEX: 0C8C }
147 { HEX: 0C8E HEX: 0C90 }
148 { HEX: 0C92 HEX: 0CA8 }
149 { HEX: 0CAA HEX: 0CB3 }
150 { HEX: 0CB5 HEX: 0CB9 }
151 { HEX: 0CDE HEX: 0CDE }
152 { HEX: 0CE0 HEX: 0CE1 }
153 { HEX: 0D05 HEX: 0D0C }
154 { HEX: 0D0E HEX: 0D10 }
155 { HEX: 0D12 HEX: 0D28 }
156 { HEX: 0D2A HEX: 0D39 }
157 { HEX: 0D60 HEX: 0D61 }
158 { HEX: 0E01 HEX: 0E2E }
159 { HEX: 0E30 HEX: 0E30 }
160 { HEX: 0E32 HEX: 0E33 }
161 { HEX: 0E40 HEX: 0E45 }
162 { HEX: 0E81 HEX: 0E82 }
163 { HEX: 0E84 HEX: 0E84 }
164 { HEX: 0E87 HEX: 0E88 }
165 { HEX: 0E8A HEX: 0E8A }
166 { HEX: 0E8D HEX: 0E8D }
167 { HEX: 0E94 HEX: 0E97 }
168 { HEX: 0E99 HEX: 0E9F }
169 { HEX: 0EA1 HEX: 0EA3 }
170 { HEX: 0EA5 HEX: 0EA5 }
171 { HEX: 0EA7 HEX: 0EA7 }
172 { HEX: 0EAA HEX: 0EAB }
173 { HEX: 0EAD HEX: 0EAE }
174 { HEX: 0EB0 HEX: 0EB0 }
175 { HEX: 0EB2 HEX: 0EB3 }
176 { HEX: 0EBD HEX: 0EBD }
177 { HEX: 0EC0 HEX: 0EC4 }
178 { HEX: 0F40 HEX: 0F47 }
179 { HEX: 0F49 HEX: 0F69 }
180 { HEX: 10A0 HEX: 10C5 }
181 { HEX: 10D0 HEX: 10F6 }
182 { HEX: 1100 HEX: 1100 }
183 { HEX: 1102 HEX: 1103 }
184 { HEX: 1105 HEX: 1107 }
185 { HEX: 1109 HEX: 1109 }
186 { HEX: 110B HEX: 110C }
187 { HEX: 110E HEX: 1112 }
188 { HEX: 113C HEX: 113C }
189 { HEX: 113E HEX: 113E }
190 { HEX: 1140 HEX: 1140 }
191 { HEX: 114C HEX: 114C }
192 { HEX: 114E HEX: 114E }
193 { HEX: 1150 HEX: 1150 }
194 { HEX: 1154 HEX: 1155 }
195 { HEX: 1159 HEX: 1159 }
196 { HEX: 115F HEX: 1161 }
197 { HEX: 1163 HEX: 1163 }
198 { HEX: 1165 HEX: 1165 }
199 { HEX: 1167 HEX: 1167 }
200 { HEX: 1169 HEX: 1169 }
201 { HEX: 116D HEX: 116E }
202 { HEX: 1172 HEX: 1173 }
203 { HEX: 1175 HEX: 1175 }
204 { HEX: 119E HEX: 119E }
205 { HEX: 11A8 HEX: 11A8 }
206 { HEX: 11AB HEX: 11AB }
207 { HEX: 11AE HEX: 11AF }
208 { HEX: 11B7 HEX: 11B8 }
209 { HEX: 11BA HEX: 11BA }
210 { HEX: 11BC HEX: 11C2 }
211 { HEX: 11EB HEX: 11EB }
212 { HEX: 11F0 HEX: 11F0 }
213 { HEX: 11F9 HEX: 11F9 }
214 { HEX: 1E00 HEX: 1E9B }
215 { HEX: 1EA0 HEX: 1EF9 }
216 { HEX: 1F00 HEX: 1F15 }
217 { HEX: 1F18 HEX: 1F1D }
218 { HEX: 1F20 HEX: 1F45 }
219 { HEX: 1F48 HEX: 1F4D }
220 { HEX: 1F50 HEX: 1F57 }
221 { HEX: 1F59 HEX: 1F59 }
222 { HEX: 1F5B HEX: 1F5B }
223 { HEX: 1F5D HEX: 1F5D }
224 { HEX: 1F5F HEX: 1F7D }
225 { HEX: 1F80 HEX: 1FB4 }
226 { HEX: 1FB6 HEX: 1FBC }
227 { HEX: 1FBE HEX: 1FBE }
228 { HEX: 1FC2 HEX: 1FC4 }
229 { HEX: 1FC6 HEX: 1FCC }
230 { HEX: 1FD0 HEX: 1FD3 }
231 { HEX: 1FD6 HEX: 1FDB }
232 { HEX: 1FE0 HEX: 1FEC }
233 { HEX: 1FF2 HEX: 1FF4 }
234 { HEX: 1FF6 HEX: 1FFC }
235 { HEX: 2126 HEX: 2126 }
236 { HEX: 212A HEX: 212B }
237 { HEX: 212E HEX: 212E }
238 { HEX: 2180 HEX: 2182 }
239 { HEX: 3041 HEX: 3094 }
240 { HEX: 30A1 HEX: 30FA }
241 { HEX: 3105 HEX: 312C }
242 { HEX: AC00 HEX: D7A3 } } in-range-seq? ;
244 PREDICATE: integer ideographic {
245 { HEX: 4E00 HEX: 9FA5 }
246 { HEX: 3007 HEX: 3007 }
247 { HEX: 3021 HEX: 3029 } } in-range-seq? ;
249 PREDICATE: integer combining-char {
250 { HEX: 0300 HEX: 0345 }
251 { HEX: 0360 HEX: 0361 }
252 { HEX: 0483 HEX: 0486 }
253 { HEX: 0591 HEX: 05A1 }
254 { HEX: 05A3 HEX: 05B9 }
255 { HEX: 05BB HEX: 05BD }
256 { HEX: 05BF HEX: 05BF }
257 { HEX: 05C1 HEX: 05C2 }
258 { HEX: 05C4 HEX: 05C4 }
259 { HEX: 064B HEX: 0652 }
260 { HEX: 0670 HEX: 0670 }
261 { HEX: 06D6 HEX: 06DC }
262 { HEX: 06DD HEX: 06DF }
263 { HEX: 06E0 HEX: 06E4 }
264 { HEX: 06E7 HEX: 06E8 }
265 { HEX: 06EA HEX: 06ED }
266 { HEX: 0901 HEX: 0903 }
267 { HEX: 093C HEX: 093C }
268 { HEX: 093E HEX: 094C }
269 { HEX: 094D HEX: 094D }
270 { HEX: 0951 HEX: 0954 }
271 { HEX: 0962 HEX: 0963 }
272 { HEX: 0981 HEX: 0983 }
273 { HEX: 09BC HEX: 09BC }
274 { HEX: 09BE HEX: 09BE }
275 { HEX: 09BF HEX: 09BF }
276 { HEX: 09C0 HEX: 09C4 }
277 { HEX: 09C7 HEX: 09C8 }
278 { HEX: 09CB HEX: 09CD }
279 { HEX: 09D7 HEX: 09D7 }
280 { HEX: 09E2 HEX: 09E3 }
281 { HEX: 0A02 HEX: 0A02 }
282 { HEX: 0A3C HEX: 0A3C }
283 { HEX: 0A3E HEX: 0A3E }
284 { HEX: 0A3F HEX: 0A3F }
285 { HEX: 0A40 HEX: 0A42 }
286 { HEX: 0A47 HEX: 0A48 }
287 { HEX: 0A4B HEX: 0A4D }
288 { HEX: 0A70 HEX: 0A71 }
289 { HEX: 0A81 HEX: 0A83 }
290 { HEX: 0ABC HEX: 0ABC }
291 { HEX: 0ABE HEX: 0AC5 }
292 { HEX: 0AC7 HEX: 0AC9 }
293 { HEX: 0ACB HEX: 0ACD }
294 { HEX: 0B01 HEX: 0B03 }
295 { HEX: 0B3C HEX: 0B3C }
296 { HEX: 0B3E HEX: 0B43 }
297 { HEX: 0B47 HEX: 0B48 }
298 { HEX: 0B4B HEX: 0B4D }
299 { HEX: 0B56 HEX: 0B57 }
300 { HEX: 0B82 HEX: 0B83 }
301 { HEX: 0BBE HEX: 0BC2 }
302 { HEX: 0BC6 HEX: 0BC8 }
303 { HEX: 0BCA HEX: 0BCD }
304 { HEX: 0BD7 HEX: 0BD7 }
305 { HEX: 0C01 HEX: 0C03 }
306 { HEX: 0C3E HEX: 0C44 }
307 { HEX: 0C46 HEX: 0C48 }
308 { HEX: 0C4A HEX: 0C4D }
309 { HEX: 0C55 HEX: 0C56 }
310 { HEX: 0C82 HEX: 0C83 }
311 { HEX: 0CBE HEX: 0CC4 }
312 { HEX: 0CC6 HEX: 0CC8 }
313 { HEX: 0CCA HEX: 0CCD }
314 { HEX: 0CD5 HEX: 0CD6 }
315 { HEX: 0D02 HEX: 0D03 }
316 { HEX: 0D3E HEX: 0D43 }
317 { HEX: 0D46 HEX: 0D48 }
318 { HEX: 0D4A HEX: 0D4D }
319 { HEX: 0D57 HEX: 0D57 }
320 { HEX: 0E31 HEX: 0E31 }
321 { HEX: 0E34 HEX: 0E3A }
322 { HEX: 0E47 HEX: 0E4E }
323 { HEX: 0EB1 HEX: 0EB1 }
324 { HEX: 0EB4 HEX: 0EB9 }
325 { HEX: 0EBB HEX: 0EBC }
326 { HEX: 0EC8 HEX: 0ECD }
327 { HEX: 0F18 HEX: 0F19 }
328 { HEX: 0F35 HEX: 0F35 }
329 { HEX: 0F37 HEX: 0F37 }
330 { HEX: 0F39 HEX: 0F39 }
331 { HEX: 0F3E HEX: 0F3E }
332 { HEX: 0F3F HEX: 0F3F }
333 { HEX: 0F71 HEX: 0F84 }
334 { HEX: 0F86 HEX: 0F8B }
335 { HEX: 0F90 HEX: 0F95 }
336 { HEX: 0F97 HEX: 0F97 }
337 { HEX: 0F99 HEX: 0FAD }
338 { HEX: 0FB1 HEX: 0FB7 }
339 { HEX: 0FB9 HEX: 0FB9 }
340 { HEX: 20D0 HEX: 20DC }
341 { HEX: 20E1 HEX: 20E1 }
342 { HEX: 302A HEX: 302F }
343 { HEX: 3099 HEX: 3099 }
344 { HEX: 309A HEX: 309A } } in-range-seq? ;
346 PREDICATE: integer unicode-digit {
347 { HEX: 0030 HEX: 0039 }
348 { HEX: 0660 HEX: 0669 }
349 { HEX: 06F0 HEX: 06F9 }
350 { HEX: 0966 HEX: 096F }
351 { HEX: 09E6 HEX: 09EF }
352 { HEX: 0A66 HEX: 0A6F }
353 { HEX: 0AE6 HEX: 0AEF }
354 { HEX: 0B66 HEX: 0B6F }
355 { HEX: 0BE7 HEX: 0BEF }
356 { HEX: 0C66 HEX: 0C6F }
357 { HEX: 0CE6 HEX: 0CEF }
358 { HEX: 0D66 HEX: 0D6F }
359 { HEX: 0E50 HEX: 0E59 }
360 { HEX: 0ED0 HEX: 0ED9 }
361 { HEX: 0F20 HEX: 0F29 } } in-range-seq? ;
363 PREDICATE: integer extender {
364 { HEX: 00B7 HEX: 00B7 }
365 { HEX: 02D0 HEX: 02D0 }
366 { HEX: 02D1 HEX: 02D1 }
367 { HEX: 0387 HEX: 0387 }
368 { HEX: 0640 HEX: 0640 }
369 { HEX: 0E46 HEX: 0E46 }
370 { HEX: 0EC6 HEX: 0EC6 }
371 { HEX: 3005 HEX: 3005 }
372 { HEX: 3031 HEX: 3035 }
373 { HEX: 309D HEX: 309E }
374 { HEX: 30FC HEX: 30FE } } in-range-seq? ;
376 ! end automatically generated code
378 UNION: 1.0letter base-char ideographic ;
380 PREDICATE: integer 1.0name-start-char
381 dup 1.0letter? swap CHAR: _ = or ;
383 PREDICATE: integer 1.0other-name-chars
384 { CHAR: . CHAR: - CHAR: _ } member? ;
386 1.0letter unicode-digit 1.0other-name-chars
387 combining-char extender ;