KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jaxen > saxpath > base > Verifier


1 /*--
2
3  $Id$
4
5  Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
6  All rights reserved.
7  
8  Redistribution and use in source and binary forms, with or without
9  modification, are permitted provided that the following conditions
10  are met:
11  
12  1. Redistributions of source code must retain the above copyright
13     notice, this list of conditions, and the following disclaimer.
14  
15  2. Redistributions in binary form must reproduce the above copyright
16     notice, this list of conditions, and the disclaimer that follows
17     these conditions in the documentation and/or other materials
18     provided with the distribution.
19
20  3. The name "JDOM" must not be used to endorse or promote products
21     derived from this software without prior written permission. For
22     written permission, please contact <request_AT_jdom_DOT_org>.
23  
24  4. Products derived from this software may not be called "JDOM", nor
25     may "JDOM" appear in their name, without prior written permission
26     from the JDOM Project Management <request_AT_jdom_DOT_org>.
27  
28  In addition, we request (but do not require) that you include in the
29  end-user documentation provided with the redistribution and/or in the
30  software itself an acknowledgement equivalent to the following:
31      "This product includes software developed by the
32       JDOM Project (http://www.jdom.org/)."
33  Alternatively, the acknowledgment may be graphical using the logos
34  available at http://www.jdom.org/images/logos.
35
36  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
40  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  SUCH DAMAGE.
48
49  This software consists of voluntary contributions made by many
50  individuals on behalf of the JDOM Project and was originally
51  created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
52  Brett McLaughlin <brett_AT_jdom_DOT_org>. For more information
53  on the JDOM Project, please see <http://www.jdom.org/>.
54  
55  */

56
57 package org.jaxen.saxpath.base;
58
59 /**
60  * A utility class to handle well-formedness checks on names.
61  *
62  * @author Brett McLaughlin
63  * @author Elliotte Rusty Harold
64  * @author Jason Hunter
65  * @author Bradley S. Huffman
66  */

67 final class Verifier {
68
69     /**
70      * This is a utility function for determining whether a specified
71      * character is a name character according to production 4 of the
72      * XML 1.0 specification.
73      *
74      * @param c <code>char</code> to check for XML name compliance.
75      * @return <code>boolean</code> true if it's a name character,
76      * false otherwise
77      */

78      static boolean isXMLNCNameCharacter(char c) {
79     
80       return (isXMLLetter(c) || isXMLDigit(c) || c == '.' || c == '-'
81                              || c == '_' || isXMLCombiningChar(c)
82                              || isXMLExtender(c));
83     }
84
85     /**
86      * This is a utility function for determining whether a specified
87      * character is a legal name start character according to production 5
88      * of the XML 1.0 specification. This production does allow names
89      * to begin with colons which the Namespaces in XML Recommendation
90      * disallows.
91      *
92      * @param c <code>char</code> to check for XML name start compliance
93      * @return true if it's a name start character, false otherwise
94      */

95     static boolean isXMLNCNameStartCharacter(char c) {
96     
97       return (isXMLLetter(c) || c == '_');
98     
99     }
100
101     /**
102      * Determine whether a specified character
103      * is a letter according to production 84 of the XML 1.0 specification.
104      *
105      * @param c <code>char</code> to check for XML name compliance
106      * @return <code>String</code> true if it's a letter, false otherwise
107      */

108     static boolean isXMLLetter(char c) {
109         // Note that order is very important here. The search proceeds
110
// from lowest to highest values, so that no searching occurs
111
// above the character's value. BTW, the first line is equivalent to:
112
// if (c >= 0x0041 && c <= 0x005A) return true;
113

114         if (c < 0x0041) return false; if (c <= 0x005a) return true;
115         if (c < 0x0061) return false; if (c <= 0x007A) return true;
116         if (c < 0x00C0) return false; if (c <= 0x00D6) return true;
117         if (c < 0x00D8) return false; if (c <= 0x00F6) return true;
118         if (c < 0x00F8) return false; if (c <= 0x00FF) return true;
119         if (c < 0x0100) return false; if (c <= 0x0131) return true;
120         if (c < 0x0134) return false; if (c <= 0x013E) return true;
121         if (c < 0x0141) return false; if (c <= 0x0148) return true;
122         if (c < 0x014A) return false; if (c <= 0x017E) return true;
123         if (c < 0x0180) return false; if (c <= 0x01C3) return true;
124         if (c < 0x01CD) return false; if (c <= 0x01F0) return true;
125         if (c < 0x01F4) return false; if (c <= 0x01F5) return true;
126         if (c < 0x01FA) return false; if (c <= 0x0217) return true;
127         if (c < 0x0250) return false; if (c <= 0x02A8) return true;
128         if (c < 0x02BB) return false; if (c <= 0x02C1) return true;
129         if (c == 0x0386) return true;
130         if (c < 0x0388) return false; if (c <= 0x038A) return true;
131         if (c == 0x038C) return true;
132         if (c < 0x038E) return false; if (c <= 0x03A1) return true;
133         if (c < 0x03A3) return false; if (c <= 0x03CE) return true;
134         if (c < 0x03D0) return false; if (c <= 0x03D6) return true;
135         if (c == 0x03DA) return true;
136         if (c == 0x03DC) return true;
137         if (c == 0x03DE) return true;
138         if (c == 0x03E0) return true;
139         if (c < 0x03E2) return false; if (c <= 0x03F3) return true;
140         if (c < 0x0401) return false; if (c <= 0x040C) return true;
141         if (c < 0x040E) return false; if (c <= 0x044F) return true;
142         if (c < 0x0451) return false; if (c <= 0x045C) return true;
143         if (c < 0x045E) return false; if (c <= 0x0481) return true;
144         if (c < 0x0490) return false; if (c <= 0x04C4) return true;
145         if (c < 0x04C7) return false; if (c <= 0x04C8) return true;
146         if (c < 0x04CB) return false; if (c <= 0x04CC) return true;
147         if (c < 0x04D0) return false; if (c <= 0x04EB) return true;
148         if (c < 0x04EE) return false; if (c <= 0x04F5) return true;
149         if (c < 0x04F8) return false; if (c <= 0x04F9) return true;
150         if (c < 0x0531) return false; if (c <= 0x0556) return true;
151         if (c == 0x0559) return true;
152         if (c < 0x0561) return false; if (c <= 0x0586) return true;
153         if (c < 0x05D0) return false; if (c <= 0x05EA) return true;
154         if (c < 0x05F0) return false; if (c <= 0x05F2) return true;
155         if (c < 0x0621) return false; if (c <= 0x063A) return true;
156         if (c < 0x0641) return false; if (c <= 0x064A) return true;
157         if (c < 0x0671) return false; if (c <= 0x06B7) return true;
158         if (c < 0x06BA) return false; if (c <= 0x06BE) return true;
159         if (c < 0x06C0) return false; if (c <= 0x06CE) return true;
160         if (c < 0x06D0) return false; if (c <= 0x06D3) return true;
161         if (c == 0x06D5) return true;
162         if (c < 0x06E5) return false; if (c <= 0x06E6) return true;
163         if (c < 0x0905) return false; if (c <= 0x0939) return true;
164         if (c == 0x093D) return true;
165         if (c < 0x0958) return false; if (c <= 0x0961) return true;
166         if (c < 0x0985) return false; if (c <= 0x098C) return true;
167         if (c < 0x098F) return false; if (c <= 0x0990) return true;
168         if (c < 0x0993) return false; if (c <= 0x09A8) return true;
169         if (c < 0x09AA) return false; if (c <= 0x09B0) return true;
170         if (c == 0x09B2) return true;
171         if (c < 0x09B6) return false; if (c <= 0x09B9) return true;
172         if (c < 0x09DC) return false; if (c <= 0x09DD) return true;
173         if (c < 0x09DF) return false; if (c <= 0x09E1) return true;
174         if (c < 0x09F0) return false; if (c <= 0x09F1) return true;
175         if (c < 0x0A05) return false; if (c <= 0x0A0A) return true;
176         if (c < 0x0A0F) return false; if (c <= 0x0A10) return true;
177         if (c < 0x0A13) return false; if (c <= 0x0A28) return true;
178         if (c < 0x0A2A) return false; if (c <= 0x0A30) return true;
179         if (c < 0x0A32) return false; if (c <= 0x0A33) return true;
180         if (c < 0x0A35) return false; if (c <= 0x0A36) return true;
181         if (c < 0x0A38) return false; if (c <= 0x0A39) return true;
182         if (c < 0x0A59) return false; if (c <= 0x0A5C) return true;
183         if (c == 0x0A5E) return true;
184         if (c < 0x0A72) return false; if (c <= 0x0A74) return true;
185         if (c < 0x0A85) return false; if (c <= 0x0A8B) return true;
186         if (c == 0x0A8D) return true;
187         if (c < 0x0A8F) return false; if (c <= 0x0A91) return true;
188         if (c < 0x0A93) return false; if (c <= 0x0AA8) return true;
189         if (c < 0x0AAA) return false; if (c <= 0x0AB0) return true;
190         if (c < 0x0AB2) return false; if (c <= 0x0AB3) return true;
191         if (c < 0x0AB5) return false; if (c <= 0x0AB9) return true;
192         if (c == 0x0ABD) return true;
193         if (c == 0x0AE0) return true;
194         if (c < 0x0B05) return false; if (c <= 0x0B0C) return true;
195         if (c < 0x0B0F) return false; if (c <= 0x0B10) return true;
196         if (c < 0x0B13) return false; if (c <= 0x0B28) return true;
197         if (c < 0x0B2A) return false; if (c <= 0x0B30) return true;
198         if (c < 0x0B32) return false; if (c <= 0x0B33) return true;
199         if (c < 0x0B36) return false; if (c <= 0x0B39) return true;
200         if (c == 0x0B3D) return true;
201         if (c < 0x0B5C) return false; if (c <= 0x0B5D) return true;
202         if (c < 0x0B5F) return false; if (c <= 0x0B61) return true;
203         if (c < 0x0B85) return false; if (c <= 0x0B8A) return true;
204         if (c < 0x0B8E) return false; if (c <= 0x0B90) return true;
205         if (c < 0x0B92) return false; if (c <= 0x0B95) return true;
206         if (c < 0x0B99) return false; if (c <= 0x0B9A) return true;
207         if (c == 0x0B9C) return true;
208         if (c < 0x0B9E) return false; if (c <= 0x0B9F) return true;
209         if (c < 0x0BA3) return false; if (c <= 0x0BA4) return true;
210         if (c < 0x0BA8) return false; if (c <= 0x0BAA) return true;
211         if (c < 0x0BAE) return false; if (c <= 0x0BB5) return true;
212         if (c < 0x0BB7) return false; if (c <= 0x0BB9) return true;
213         if (c < 0x0C05) return false; if (c <= 0x0C0C) return true;
214         if (c < 0x0C0E) return false; if (c <= 0x0C10) return true;
215         if (c < 0x0C12) return false; if (c <= 0x0C28) return true;
216         if (c < 0x0C2A) return false; if (c <= 0x0C33) return true;
217         if (c < 0x0C35) return false; if (c <= 0x0C39) return true;
218         if (c < 0x0C60) return false; if (c <= 0x0C61) return true;
219         if (c < 0x0C85) return false; if (c <= 0x0C8C) return true;
220         if (c < 0x0C8E) return false; if (c <= 0x0C90) return true;
221         if (c < 0x0C92) return false; if (c <= 0x0CA8) return true;
222         if (c < 0x0CAA) return false; if (c <= 0x0CB3) return true;
223         if (c < 0x0CB5) return false; if (c <= 0x0CB9) return true;
224         if (c == 0x0CDE) return true;
225         if (c < 0x0CE0) return false; if (c <= 0x0CE1) return true;
226         if (c < 0x0D05) return false; if (c <= 0x0D0C) return true;
227         if (c < 0x0D0E) return false; if (c <= 0x0D10) return true;
228         if (c < 0x0D12) return false; if (c <= 0x0D28) return true;
229         if (c < 0x0D2A) return false; if (c <= 0x0D39) return true;
230         if (c < 0x0D60) return false; if (c <= 0x0D61) return true;
231         if (c < 0x0E01) return false; if (c <= 0x0E2E) return true;
232         if (c == 0x0E30) return true;
233         if (c < 0x0E32) return false; if (c <= 0x0E33) return true;
234         if (c < 0x0E40) return false; if (c <= 0x0E45) return true;
235         if (c < 0x0E81) return false; if (c <= 0x0E82) return true;
236         if (c == 0x0E84) return true;
237         if (c < 0x0E87) return false; if (c <= 0x0E88) return true;
238         if (c == 0x0E8A) return true;
239         if (c == 0x0E8D) return true;
240         if (c < 0x0E94) return false; if (c <= 0x0E97) return true;
241         if (c < 0x0E99) return false; if (c <= 0x0E9F) return true;
242         if (c < 0x0EA1) return false; if (c <= 0x0EA3) return true;
243         if (c == 0x0EA5) return true;
244         if (c == 0x0EA7) return true;
245         if (c < 0x0EAA) return false; if (c <= 0x0EAB) return true;
246         if (c < 0x0EAD) return false; if (c <= 0x0EAE) return true;
247         if (c == 0x0EB0) return true;
248         if (c < 0x0EB2) return false; if (c <= 0x0EB3) return true;
249         if (c == 0x0EBD) return true;
250         if (c < 0x0EC0) return false; if (c <= 0x0EC4) return true;
251         if (c < 0x0F40) return false; if (c <= 0x0F47) return true;
252         if (c < 0x0F49) return false; if (c <= 0x0F69) return true;
253         if (c < 0x10A0) return false; if (c <= 0x10C5) return true;
254         if (c < 0x10D0) return false; if (c <= 0x10F6) return true;
255         if (c == 0x1100) return true;
256         if (c < 0x1102) return false; if (c <= 0x1103) return true;
257         if (c < 0x1105) return false; if (c <= 0x1107) return true;
258         if (c == 0x1109) return true;
259         if (c < 0x110B) return false; if (c <= 0x110C) return true;
260         if (c < 0x110E) return false; if (c <= 0x1112) return true;
261         if (c == 0x113C) return true;
262         if (c == 0x113E) return true;
263         if (c == 0x1140) return true;
264         if (c == 0x114C) return true;
265         if (c == 0x114E) return true;
266         if (c == 0x1150) return true;
267         if (c < 0x1154) return false; if (c <= 0x1155) return true;
268         if (c == 0x1159) return true;
269         if (c < 0x115F) return false; if (c <= 0x1161) return true;
270         if (c == 0x1163) return true;
271         if (c == 0x1165) return true;
272         if (c == 0x1167) return true;
273         if (c == 0x1169) return true;
274         if (c < 0x116D) return false; if (c <= 0x116E) return true;
275         if (c < 0x1172) return false; if (c <= 0x1173) return true;
276         if (c == 0x1175) return true;
277         if (c == 0x119E) return true;
278         if (c == 0x11A8) return true;
279         if (c == 0x11AB) return true;
280         if (c < 0x11AE) return false; if (c <= 0x11AF) return true;
281         if (c < 0x11B7) return false; if (c <= 0x11B8) return true;
282         if (c == 0x11BA) return true;
283         if (c < 0x11BC) return false; if (c <= 0x11C2) return true;
284         if (c == 0x11EB) return true;
285         if (c == 0x11F0) return true;
286         if (c == 0x11F9) return true;
287         if (c < 0x1E00) return false; if (c <= 0x1E9B) return true;
288         if (c < 0x1EA0) return false; if (c <= 0x1EF9) return true;
289         if (c < 0x1F00) return false; if (c <= 0x1F15) return true;
290         if (c < 0x1F18) return false; if (c <= 0x1F1D) return true;
291         if (c < 0x1F20) return false; if (c <= 0x1F45) return true;
292         if (c < 0x1F48) return false; if (c <= 0x1F4D) return true;
293         if (c < 0x1F50) return false; if (c <= 0x1F57) return true;
294         if (c == 0x1F59) return true;
295         if (c == 0x1F5B) return true;
296         if (c == 0x1F5D) return true;
297         if (c < 0x1F5F) return false; if (c <= 0x1F7D) return true;
298         if (c < 0x1F80) return false; if (c <= 0x1FB4) return true;
299         if (c < 0x1FB6) return false; if (c <= 0x1FBC) return true;
300         if (c == 0x1FBE) return true;
301         if (c < 0x1FC2) return false; if (c <= 0x1FC4) return true;
302         if (c < 0x1FC6) return false; if (c <= 0x1FCC) return true;
303         if (c < 0x1FD0) return false; if (c <= 0x1FD3) return true;
304         if (c < 0x1FD6) return false; if (c <= 0x1FDB) return true;
305         if (c < 0x1FE0) return false; if (c <= 0x1FEC) return true;
306         if (c < 0x1FF2) return false; if (c <= 0x1FF4) return true;
307         if (c < 0x1FF6) return false; if (c <= 0x1FFC) return true;
308         if (c == 0x2126) return true;
309         if (c < 0x212A) return false; if (c <= 0x212B) return true;
310         if (c == 0x212E) return true;
311         if (c < 0x2180) return false; if (c <= 0x2182) return true;
312         if (c == 0x3007) return true;
313         if (c < 0x3021) return false; if (c <= 0x3029) return true;
314         if (c < 0x3041) return false; if (c <= 0x3094) return true;
315         if (c < 0x30A1) return false; if (c <= 0x30FA) return true;
316         if (c < 0x3105) return false; if (c <= 0x312C) return true;
317         if (c < 0x4E00) return false; if (c <= 0x9FA5) return true;
318         if (c < 0xAC00) return false; if (c <= 0xD7A3) return true;
319       
320         return false;
321         
322     }
323
324     /**
325      * Determine whether a specified character
326      * is a combining character according to production 87
327      * of the XML 1.0 specification.
328      *
329      * @param c <code>char</code> to check
330      * @return <code>boolean</code> true if it's a combining character,
331      * false otherwise
332      */

333     static boolean isXMLCombiningChar(char c) {
334         // CombiningChar
335
if (c < 0x0300) return false; if (c <= 0x0345) return true;
336         if (c < 0x0360) return false; if (c <= 0x0361) return true;
337         if (c < 0x0483) return false; if (c <= 0x0486) return true;
338         if (c < 0x0591) return false; if (c <= 0x05A1) return true;
339                                        
340         if (c < 0x05A3) return false; if (c <= 0x05B9) return true;
341         if (c < 0x05BB) return false; if (c <= 0x05BD) return true;
342         if (c == 0x05BF) return true;
343         if (c < 0x05C1) return false; if (c <= 0x05C2) return true;
344                                        
345         if (c == 0x05C4) return true;
346         if (c < 0x064B) return false; if (c <= 0x0652) return true;
347         if (c == 0x0670) return true;
348         if (c < 0x06D6) return false; if (c <= 0x06DC) return true;
349                                        
350         if (c < 0x06DD) return false; if (c <= 0x06DF) return true;
351         if (c < 0x06E0) return false; if (c <= 0x06E4) return true;
352         if (c < 0x06E7) return false; if (c <= 0x06E8) return true;
353                                        
354         if (c < 0x06EA) return false; if (c <= 0x06ED) return true;
355         if (c < 0x0901) return false; if (c <= 0x0903) return true;
356         if (c == 0x093C) return true;
357         if (c < 0x093E) return false; if (c <= 0x094C) return true;
358                                        
359         if (c == 0x094D) return true;
360         if (c < 0x0951) return false; if (c <= 0x0954) return true;
361         if (c < 0x0962) return false; if (c <= 0x0963) return true;
362         if (c < 0x0981) return false; if (c <= 0x0983) return true;
363                                        
364         if (c == 0x09BC) return true;
365         if (c == 0x09BE) return true;
366         if (c == 0x09BF) return true;
367         if (c < 0x09C0) return false; if (c <= 0x09C4) return true;
368         if (c < 0x09C7) return false; if (c <= 0x09C8) return true;
369                                        
370         if (c < 0x09CB) return false; if (c <= 0x09CD) return true;
371         if (c == 0x09D7) return true;
372         if (c < 0x09E2) return false; if (c <= 0x09E3) return true;
373         if (c == 0x0A02) return true;
374         if (c == 0x0A3C) return true;
375                                        
376         if (c == 0x0A3E) return true;
377         if (c == 0x0A3F) return true;
378         if (c < 0x0A40) return false; if (c <= 0x0A42) return true;
379         if (c < 0x0A47) return false; if (c <= 0x0A48) return true;
380                                        
381         if (c < 0x0A4B) return false; if (c <= 0x0A4D) return true;
382         if (c < 0x0A70) return false; if (c <= 0x0A71) return true;
383         if (c < 0x0A81) return false; if (c <= 0x0A83) return true;
384         if (c == 0x0ABC) return true;
385                                        
386         if (c < 0x0ABE) return false; if (c <= 0x0AC5) return true;
387         if (c < 0x0AC7) return false; if (c <= 0x0AC9) return true;
388         if (c < 0x0ACB) return false; if (c <= 0x0ACD) return true;
389                                        
390         if (c < 0x0B01) return false; if (c <= 0x0B03) return true;
391         if (c == 0x0B3C) return true;
392         if (c < 0x0B3E) return false; if (c <= 0x0B43) return true;
393         if (c < 0x0B47) return false; if (c <= 0x0B48) return true;
394                                        
395         if (c < 0x0B4B) return false; if (c <= 0x0B4D) return true;
396         if (c < 0x0B56) return false; if (c <= 0x0B57) return true;
397         if (c < 0x0B82) return false; if (c <= 0x0B83) return true;
398                                        
399         if (c < 0x0BBE) return false; if (c <= 0x0BC2) return true;
400         if (c < 0x0BC6) return false; if (c <= 0x0BC8) return true;
401         if (c < 0x0BCA) return false; if (c <= 0x0BCD) return true;
402         if (c == 0x0BD7) return true;
403                                        
404         if (c < 0x0C01) return false; if (c <= 0x0C03) return true;
405         if (c < 0x0C3E) return false; if (c <= 0x0C44) return true;
406         if (c < 0x0C46) return false; if (c <= 0x0C48) return true;
407                                        
408         if (c < 0x0C4A) return false; if (c <= 0x0C4D) return true;
409         if (c < 0x0C55) return false; if (c <= 0x0C56) return true;
410         if (c < 0x0C82) return false; if (c <= 0x0C83) return true;
411                                        
412         if (c < 0x0CBE) return false; if (c <= 0x0CC4) return true;
413         if (c < 0x0CC6) return false; if (c <= 0x0CC8) return true;
414         if (c < 0x0CCA) return false; if (c <= 0x0CCD) return true;
415                                        
416         if (c < 0x0CD5) return false; if (c <= 0x0CD6) return true;
417         if (c < 0x0D02) return false; if (c <= 0x0D03) return true;
418         if (c < 0x0D3E) return false; if (c <= 0x0D43) return true;
419                                        
420         if (c < 0x0D46) return false; if (c <= 0x0D48) return true;
421         if (c < 0x0D4A) return false; if (c <= 0x0D4D) return true;
422         if (c == 0x0D57) return true;
423         if (c == 0x0E31) return true;
424                                        
425         if (c < 0x0E34) return false; if (c <= 0x0E3A) return true;
426         if (c < 0x0E47) return false; if (c <= 0x0E4E) return true;
427         if (c == 0x0EB1) return true;
428         if (c < 0x0EB4) return false; if (c <= 0x0EB9) return true;
429                                        
430         if (c < 0x0EBB) return false; if (c <= 0x0EBC) return true;
431         if (c < 0x0EC8) return false; if (c <= 0x0ECD) return true;
432         if (c < 0x0F18) return false; if (c <= 0x0F19) return true;
433         if (c == 0x0F35) return true;
434                                        
435         if (c == 0x0F37) return true;
436         if (c == 0x0F39) return true;
437         if (c == 0x0F3E) return true;
438         if (c == 0x0F3F) return true;
439         if (c < 0x0F71) return false; if (c <= 0x0F84) return true;
440                                        
441         if (c < 0x0F86) return false; if (c <= 0x0F8B) return true;
442         if (c < 0x0F90) return false; if (c <= 0x0F95) return true;
443         if (c == 0x0F97) return true;
444         if (c < 0x0F99) return false; if (c <= 0x0FAD) return true;
445                                        
446         if (c < 0x0FB1) return false; if (c <= 0x0FB7) return true;
447         if (c == 0x0FB9) return true;
448         if (c < 0x20D0) return false; if (c <= 0x20DC) return true;
449         if (c == 0x20E1) return true;
450                                        
451         if (c < 0x302A) return false; if (c <= 0x302F) return true;
452         if (c == 0x3099) return true;
453         if (c == 0x309A) return true;
454         
455         return false;
456         
457     }
458     
459     /**
460      * Determine whether a specified
461      * character is an extender according to production 88 of the XML 1.0
462      * specification.
463      *
464      * @param c <code>char</code> to check
465      * @return true if it's an extender, false otherwise
466      */

467     static boolean isXMLExtender(char c) {
468
469         if (c < 0x00B6) return false; // quick short circuit
470

471         // Extenders
472
if (c == 0x00B7) return true;
473         if (c == 0x02D0) return true;
474         if (c == 0x02D1) return true;
475         if (c == 0x0387) return true;
476         if (c == 0x0640) return true;
477         if (c == 0x0E46) return true;
478         if (c == 0x0EC6) return true;
479         if (c == 0x3005) return true;
480                                        
481         if (c < 0x3031) return false; if (c <= 0x3035) return true;
482         if (c < 0x309D) return false; if (c <= 0x309E) return true;
483         if (c < 0x30FC) return false; if (c <= 0x30FE) return true;
484         
485         return false;
486         
487     }
488       
489     /**
490      * Determine whether a specified Unicode character
491      * is a digit according to production 88 of the XML 1.0 specification.
492      *
493      * @param c <code>char</code> to check for XML digit compliance
494      * @return <code>boolean</code> true if it's a digit, false otherwise
495      */

496     static boolean isXMLDigit(char c) {
497       
498         if (c < 0x0030) return false; if (c <= 0x0039) return true;
499         if (c < 0x0660) return false; if (c <= 0x0669) return true;
500         if (c < 0x06F0) return false; if (c <= 0x06F9) return true;
501         if (c < 0x0966) return false; if (c <= 0x096F) return true;
502                                        
503         if (c < 0x09E6) return false; if (c <= 0x09EF) return true;
504         if (c < 0x0A66) return false; if (c <= 0x0A6F) return true;
505         if (c < 0x0AE6) return false; if (c <= 0x0AEF) return true;
506                                        
507         if (c < 0x0B66) return false; if (c <= 0x0B6F) return true;
508         if (c < 0x0BE7) return false; if (c <= 0x0BEF) return true;
509         if (c < 0x0C66) return false; if (c <= 0x0C6F) return true;
510                                        
511         if (c < 0x0CE6) return false; if (c <= 0x0CEF) return true;
512         if (c < 0x0D66) return false; if (c <= 0x0D6F) return true;
513         if (c < 0x0E50) return false; if (c <= 0x0E59) return true;
514                                        
515         if (c < 0x0ED0) return false; if (c <= 0x0ED9) return true;
516         if (c < 0x0F20) return false; if (c <= 0x0F29) return true;
517       
518         return false;
519     }
520     
521 }
522
Popular Tags