]> gitweb.factorcode.org Git - factor.git/blob - libs/xml/char-class.factor
235b4e291befa6b491ce388eea17c8c919fe33d9
[factor.git] / libs / xml / char-class.factor
1 IN: char-classes
2 USING: kernel sequences math ;
3
4 : in-range-seq? ( number seq -- ? )
5     #! seq: { { min max } { min max }* }
6     [ first2 between? ] contains-with? ;
7
8 PREDICATE: integer 1.1name-start-char
9     {
10         { CHAR: _    CHAR: _    }
11         { CHAR: A    CHAR: Z    }
12         { CHAR: a    CHAR: z    }
13         { HEX: C0    HEX: D6    }
14         { HEX: D8    HEX: F6    }
15         { HEX: F8    HEX: 2FF   }
16         { HEX: 370   HEX: 37D   }
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 }
25     } in-range-seq? ;
26
27 PREDICATE: integer 1.1name-char
28     dup 1.1name-start-char? swap {
29         { CHAR: -   CHAR: -   }
30         { CHAR: .   CHAR: .   }
31         { CHAR: 0   CHAR: 9   }
32         { HEX: b7   HEX: b7   }
33         { HEX: 300  HEX: 36F  }
34         { HEX: 203F HEX: 2040 }
35     } in-range-seq? or ;
36
37 ! The following 335 lines were automatically generated
38 ! from Appendix B of the XML 1.0 standard, version 3
39
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? ;
243
244 PREDICATE: integer ideographic {
245     { HEX: 4E00 HEX: 9FA5 } 
246     { HEX: 3007 HEX: 3007 } 
247     { HEX: 3021 HEX: 3029 } } in-range-seq? ;
248
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? ;
345
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? ;
362
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? ;
375
376 ! end automatically generated code
377
378 UNION: 1.0letter base-char ideographic ;
379
380 PREDICATE: integer 1.0name-start-char
381     dup 1.0letter? swap CHAR: _ = or ;
382
383 PREDICATE: integer 1.0other-name-chars
384     { CHAR: . CHAR: - CHAR: _ } member? ;
385 UNION: 1.0name-char
386     1.0letter unicode-digit 1.0other-name-chars
387     combining-char extender ;