1 19 20 package org.netbeans.modules.xml.xam.dom; 21 22 import java.util.HashSet ; 23 24 28 public final class Utils { 29 30 public static boolean isValidNCName( String 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 <Integer > BASECHARS = new HashSet <Integer >(); 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 <Integer > COMBININGS = new HashSet <Integer >(); 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 <Integer > EXTENDERS = new HashSet <Integer >(); 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 <Integer > IDEOGHAPHICS = new HashSet <Integer >(); 186 static { 187 addRange(IDEOGHAPHICS, 0x4E00, 0x9FA5); 188 IDEOGHAPHICS.add(0x3007); 189 addRange(IDEOGHAPHICS, 0x3021, 0x3029); 190 }; 191 192 static void addRange(HashSet <Integer > set, int start, int end) { 193 for (int c = start; c <=end; c++) { 194 set.add(c); 195 } 196 } 197 } 198 | Popular Tags |