KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > xam > dom > Utils


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.xml.xam.dom;
21
22 import java.util.HashSet JavaDoc;
23
24 /**
25  * @author Nam Nguyen
26  * @author ads
27  */

28 public final class Utils {
29
30     public static boolean isValidNCName( String JavaDoc str ) {
31         if (str == null || str.length() == 0) {
32             return false;
33         }
34         char ch = str.charAt(0);
35         if (! isNCNameStart(ch)) {
36             return false;
37         }
38         for (int i = 1; i < str.length(); i++) {
39             ch = str.charAt(i);
40             if (! isNCNameChar(ch)) {
41                 return false;
42             }
43         }
44         return true;
45     }
46     
47     private static boolean isNCNameStart( int ch ) {
48         return isBasechar(ch) || isIdeographic(ch) || ch == '_';
49     }
50
51     private static boolean isNCNameChar( int ch ) {
52         return isNCNameStart(ch) || Character.isDigit(ch) || ch == '.' ||
53                ch == '-' || isCombiningChar(ch) || isExtender(ch);
54     }
55
56     private static boolean isBasechar(int c) {
57         return BASECHARS.contains(c);
58     }
59
60     private static boolean isIdeographic(int c) {
61         return IDEOGHAPHICS.contains(c);
62     }
63     
64     private static boolean isCombiningChar( int ch ) {
65         return COMBININGS.contains(ch);
66     }
67
68     private static boolean isExtender( int ch ) {
69         return EXTENDERS.contains(ch);
70     }
71
72     private static final HashSet JavaDoc<Integer JavaDoc> BASECHARS = new HashSet JavaDoc<Integer JavaDoc>();
73     private static final int[] BASECHARS_VALUES = new int[] {
74         0x0386 , 0x038C , 0x03DA , 0x03DC , 0x03DE , 0x03E0 , 0x0559 , 0x06D5 ,
75         0x093D , 0x09B2 , 0x0A5E , 0x0A8D , 0x0ABD , 0x0AE0 , 0x0B3D , 0x0B9C ,
76         0x0CDE , 0x0E30 , 0x0E84 , 0x0E8A , 0x0E8D , 0x0EA5 , 0x0EA7 , 0x0EB0 ,
77         0x0EBD , 0x1100 , 0x1109 , 0x113C , 0x113E , 0x1140 , 0x114C ,0x114E ,
78         0x1150 , 0x1159 , 0x1163 , 0x1165 , 0x1167 , 0x1169 , 0x1175 , 0x119E ,
79         0x11A8 , 0x11AB , 0x11BA , 0x11EB , 0x11F0 , 0x11F9 , 0x1F59 , 0x1F5B ,
80         0x1F5D , 0x1FBE , 0x2126 , 0x212E
81     };
82     private static final int[][] BASECHARS_RANGES = new int[][] {
83         { 0x0041 , 0x005A } , { 0x0061 , 0x007A } , { 0x00C0 , 0x00D6 } , { 0x00D8 , 0x00F6 } ,
84         { 0x00F8 , 0x00FF } , { 0x0100 , 0x0131 } , { 0x0134 , 0x013E } , { 0x0141 , 0x0148 } ,
85         { 0x014A , 0x017E } , { 0x0180 , 0x01C3 } , { 0x01CD , 0x01F0 } , { 0x01F4 , 0x01F5 } ,
86         { 0x01FA , 0x0217 } , { 0x0250 , 0x02A8 } , { 0x02BB , 0x02C1 } , { 0x0388 , 0x038A } ,
87         { 0x038E , 0x03A1 } , { 0x03A3 , 0x03CE } , { 0x03D0 , 0x03D6 } , { 0x03E2 , 0x03F3 } ,
88         { 0x0401 , 0x040C } , { 0x040E , 0x044F } , { 0x0451 , 0x045C } , { 0x045E , 0x0481 } ,
89         { 0x0490 , 0x04C4 } , { 0x04C7 , 0x04C8 } , { 0x04CB , 0x04CC } , { 0x04D0 , 0x04EB } ,
90         { 0x04EE , 0x04F5 } , { 0x04F8 , 0x04F9 } , { 0x0531 , 0x0556 } , { 0x0561 , 0x0586 } ,
91         { 0x05D0 , 0x05EA } , { 0x05F0 , 0x05F2 } , { 0x0621 , 0x063A } , { 0x0641 , 0x064A } ,
92         { 0x0671 , 0x06B7 } , { 0x06BA , 0x06BE } , { 0x06C0 , 0x06CE } , { 0x06D0 , 0x06D3 } ,
93         { 0x06E5 , 0x06E6 } , { 0x0905 , 0x0939 } , { 0x0958 , 0x0961 } , { 0x0985 , 0x098C } ,
94         { 0x098F , 0x0990 } , { 0x0993 , 0x09A8 } , { 0x09AA , 0x09B0 } , { 0x09B6 , 0x09B9 } ,
95         { 0x09DC , 0x09DD } , { 0x09DF , 0x09E1 } , { 0x09F0 , 0x09F1 } , { 0x0A05 , 0x0A0A } ,
96         { 0x0A0F , 0x0A10 } , { 0x0A13 , 0x0A28 } , { 0x0A2A , 0x0A30 } , { 0x0A32 , 0x0A33 } ,
97         { 0x0A35 , 0x0A36 } , { 0x0A38 , 0x0A39 } , { 0x0A59 , 0x0A5C } , { 0x0A72 , 0x0A74 } ,
98         { 0x0A85 , 0x0A8B } , { 0x0A8F , 0x0A91 } , { 0x0A93 , 0x0AA8 } , { 0x0AAA , 0x0AB0 } ,
99         { 0x0AB2 , 0x0AB3 } , { 0x0AB5 , 0x0AB9 } , { 0x0B05 , 0x0B0C } , { 0x0B0F , 0x0B10 } ,
100         { 0x0B13 , 0x0B28 } , { 0x0B2A , 0x0B30 } , { 0x0B32 , 0x0B33 } , { 0x0B36 , 0x0B39 } ,
101         { 0x0B5C , 0x0B5D } , { 0x0B5F , 0x0B61 } , { 0x0B85 , 0x0B8A } , { 0x0B8E , 0x0B90 } ,
102         { 0x0B92 , 0x0B95 } , { 0x0B99 , 0x0B9A } , { 0x0B9E , 0x0B9F } , { 0x0BA3 , 0x0BA4 } ,
103         { 0x0BA8 , 0x0BAA } , { 0x0BAE , 0x0BB5 } , { 0x0BB7 , 0x0BB9 } , { 0x0C05 , 0x0C0C } ,
104         { 0x0C0E , 0x0C10 } , { 0x0C12 , 0x0C28 } , { 0x0C2A , 0x0C33 } , { 0x0C35 , 0x0C39 } ,
105         { 0x0C60 , 0x0C61 } , { 0x0C85 , 0x0C8C } , { 0x0C8E , 0x0C90 } , { 0x0C92 , 0x0CA8 } ,
106         { 0x0CAA , 0x0CB3 } , { 0x0CB5 , 0x0CB9 } , { 0x0CE0 , 0x0CE1 } , { 0x0D05 , 0x0D0C } ,
107         { 0x0D0E , 0x0D10 } , { 0x0D12 , 0x0D28 } , { 0x0D2A , 0x0D39 } , { 0x0D60 , 0x0D61 } ,
108         { 0x0E01 , 0x0E2E } , { 0x0E32 , 0x0E33 } , { 0x0E40 , 0x0E45 } , { 0x0E81 , 0x0E82 } ,
109         { 0x0E87 , 0x0E88 } , { 0x0E94 , 0x0E97 } , { 0x0E99 , 0x0E9F } , { 0x0EA1 , 0x0EA3 } ,
110         { 0x0EAA , 0x0EAB } , { 0x0EAD , 0x0EAE } , { 0x0EB2 , 0x0EB3 } , { 0x0EC0 , 0x0EC4 } ,
111         { 0x0F40 , 0x0F47 } , { 0x0F49 , 0x0F69 } , { 0x10A0 , 0x10C5 } , { 0x10D0 , 0x10F6 } ,
112         { 0x1102 , 0x1103 } , { 0x1105 , 0x1107 } , { 0x110B , 0x110C } , { 0x110E , 0x1112 } ,
113         { 0x1154 , 0x1155 } , { 0x115F , 0x1161 } , { 0x116D , 0x116E } , { 0x1172 , 0x1173 } ,
114         { 0x11AE , 0x11AF } , { 0x11B7 , 0x11B8 } , { 0x11BC , 0x11C2 } , { 0x1E00 , 0x1E9B } ,
115         { 0x1EA0 , 0x1EF9 } , { 0x1F00 , 0x1F15 } , { 0x1F18 , 0x1F1D } , { 0x1F20 , 0x1F45 } ,
116         { 0x1F48 , 0x1F4D } , { 0x1F50 , 0x1F57 } , { 0x1F5F , 0x1F7D } , { 0x1F80 , 0x1FB4 } ,
117         { 0x1FB6 , 0x1FBC } , { 0x1FC2 , 0x1FC4 } , { 0x1FC6 , 0x1FCC } , { 0x1FD0 , 0x1FD3 } ,
118         { 0x1FD6 , 0x1FDB } , { 0x1FE0 , 0x1FEC } , { 0x1FF2 , 0x1FF4 } , { 0x1FF6 , 0x1FFC } ,
119         { 0x212A , 0x212B } , { 0x2180 , 0x2182 } , { 0x3041 , 0x3094 } , { 0x30A1 , 0x30FA } ,
120         { 0x3105 , 0x312C } , { 0xAC00 , 0xD7A3 }
121     };
122     static {
123         for (int c : BASECHARS_VALUES) {
124             BASECHARS.add(c);
125         }
126         for (int[] range : BASECHARS_RANGES) {
127             for (int c = range[0] ; c <= range[1]; c++ ) {
128                 BASECHARS.add(c);
129             }
130         }
131     }
132     
133     private static final HashSet JavaDoc<Integer JavaDoc> COMBININGS = new HashSet JavaDoc<Integer JavaDoc>();
134     private static final int[] COMBININGS_VALUES = new int [] {
135          0x05BF , 0x05C4 , 0x0670 , 0x093C , 0x094D , 0x09BC , 0x09BE , 0x09BF ,
136          0x09D7 , 0x0A02 , 0x0A3C , 0x0A3E , 0x0A3F , 0x0ABC , 0x0B3C , 0x0BD7 ,
137          0x0D57 , 0x0E31 , 0x0EB1 , 0x0F35 , 0x0F37 , 0x0F39 , 0x0F3E , 0x0F3F ,
138          0x0F97 , 0x0FB9 , 0x20E1 , 0x3099 , 0x309A
139     };
140     private static final int[][] COMBININGS_RANGES = new int[][] {
141         { 0x0300, 0x0345 }, { 0x0360, 0x0361 }, { 0x0483, 0x0486 }, { 0x0591, 0x05A1 },
142         { 0x05A3, 0x05B9 }, { 0x05BB, 0x05BD }, { 0x05C1, 0x05C2 }, { 0x064B, 0x0652 },
143         { 0x06D6, 0x06DC }, { 0x06DD, 0x06DF }, { 0x06E0, 0x06E4 }, { 0x06E7, 0x06E8 },
144         { 0x06EA, 0x06ED }, { 0x0901, 0x0903 }, { 0x093E, 0x094C}, { 0x0951, 0x0954 },
145         { 0x0962, 0x0963 }, { 0x0981, 0x0983}, { 0x09C0, 0x09C4 }, { 0x09C7, 0x09C8 },
146         { 0x09CB, 0x09CD}, { 0x09E2, 0x09E3}, { 0x0A40, 0x0A42 }, { 0x0A47, 0x0A48 },
147         { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A83 }, { 0x0ABE, 0x0AC5 },
148         { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0B01, 0x0B03 }, { 0x0B3E, 0x0B43 },
149         { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B56, 0x0B57 }, { 0x0B82, 0x0B83 },
150         { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD}, { 0x0C01, 0x0C03 },
151         { 0x0C3E, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 },
152         { 0x0C82, 0x0C83 }, { 0x0CBE, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD },
153         { 0x0CD5, 0x0CD6 }, { 0x0D02, 0x0D03 }, { 0x0D3E, 0x0D43 }, { 0x0D46, 0x0D48 },
154         { 0x0D4A, 0x0D4D }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB4, 0x0EB9 },
155         { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F71, 0x0F84 },
156         { 0x0F86, 0x0F8B }, { 0x0F90, 0x0F95 }, { 0x0F99, 0x0FAD }, { 0x0FB1, 0x0FB7 },
157         { 0x20D0, 0x20DC }, { 0x302A, 0x302F }
158     };
159     static {
160         for (int c : COMBININGS_VALUES) {
161             COMBININGS.add(c);
162         }
163         for (int[] range : COMBININGS_RANGES) {
164             for (int c = range[0] ; c <= range[1]; c++ ) {
165                 COMBININGS.add(c);
166             }
167         }
168     }
169     
170     static HashSet JavaDoc<Integer JavaDoc> EXTENDERS = new HashSet JavaDoc<Integer JavaDoc>();
171     static {
172         EXTENDERS.add(0x00B7);
173         EXTENDERS.add(0x02D0);
174         EXTENDERS.add(0x02D1);
175         EXTENDERS.add(0x0387);
176         EXTENDERS.add(0x0640);
177         EXTENDERS.add(0x0E46);
178         EXTENDERS.add(0x0EC6);
179         EXTENDERS.add(0x3005);
180         addRange(EXTENDERS, 0x3031, 0x3035);
181         addRange(EXTENDERS, 0x309D, 0x309E);
182         addRange(EXTENDERS, 0x30FC, 0x30FE);
183     }
184     
185     static HashSet JavaDoc<Integer JavaDoc> IDEOGHAPHICS = new HashSet JavaDoc<Integer JavaDoc>();
186     static {
187         addRange(IDEOGHAPHICS, 0x4E00, 0x9FA5);
188         IDEOGHAPHICS.add(0x3007);
189         addRange(IDEOGHAPHICS, 0x3021, 0x3029);
190     };
191
192     static void addRange(HashSet JavaDoc<Integer JavaDoc> set, int start, int end) {
193         for (int c = start; c <=end; c++) {
194             set.add(c);
195         }
196     }
197 }
198
Popular Tags