1 58 59 package com.sun.imageio.metadata; 60 61 62 70 public class XmlChars 71 { 72 private XmlChars () { } 74 75 92 static public boolean isChar (int ucs4char) 93 { 94 return ((ucs4char >= 0x0020 && ucs4char <= 0xD7FF) 100 || ucs4char == 0x000A || ucs4char == 0x0009 101 || ucs4char == 0x000D 102 || (ucs4char >= 0xE000 && ucs4char <= 0xFFFD) 103 || (ucs4char >= 0x10000 && ucs4char <= 0x10ffff)); 104 } 105 106 112 public static boolean isNameChar (char c) 113 { 114 117 if (isLetter2 (c)) 118 return true; 119 else if (c == '>') 120 return false; 121 else if (c == '.' || c == '-' || c == '_' || c == ':' 122 || isExtender (c)) 123 return true; 124 else 125 return false; 126 } 127 128 137 public static boolean isNCNameChar (char c) 138 { 139 return c != ':' && isNameChar (c); 142 } 143 144 148 public static boolean isSpace (char c) 149 { 150 return c == ' ' || c == '\t' || c == '\n' || c == '\r'; 151 } 152 153 154 188 189 197 public static boolean isLetter (char c) 198 { 199 203 if (c >= 'a' && c <= 'z') 207 return true; 208 if (c == '/') 209 return false; 210 if (c >= 'A' && c <= 'Z') 211 return true; 212 213 switch (Character.getType (c)) { 218 case Character.LOWERCASE_LETTER: case Character.UPPERCASE_LETTER: case Character.OTHER_LETTER: case Character.TITLECASE_LETTER: case Character.LETTER_NUMBER: 226 return !isCompatibilityChar (c) 228 && !(c >= 0x20dd && c <= 0x20e0); 230 231 default: 232 return ((c >= 0x02bb && c <= 0x02c1) 234 || c == 0x0559 || c == 0x06e5 || c == 0x06e6); 235 } 236 } 237 238 private static boolean isCompatibilityChar (char c) 245 { 246 250 switch ((c >> 8) & 0x0ff) { 251 case 0x00: 252 return c == 0x00aa || c == 0x00b5 || c == 0x00ba; 254 255 case 0x01: 256 return (c >= 0x0132 && c <= 0x0133) 258 || (c >= 0x013f && c <= 0x0140) 259 || c == 0x0149 260 || c == 0x017f 261 || (c >= 0x01c4 && c <= 0x01cc) 262 || (c >= 0x01f1 && c <= 0x01f3) ; 263 264 case 0x02: 265 return (c >= 0x02b0 && c <= 0x02b8) 267 || (c >= 0x02e0 && c <= 0x02e4); 268 269 case 0x03: 270 return c == 0x037a; 272 case 0x05: 273 return c == 0x0587; 275 case 0x0e: 276 return c >= 0x0edc && c <= 0x0edd; 278 case 0x11: 279 return c == 0x1101 281 || c == 0x1104 282 || c == 0x1108 283 || c == 0x110a 284 || c == 0x110d 285 || (c >= 0x1113 && c <= 0x113b) 286 || c == 0x113d 287 || c == 0x113f 288 || (c >= 0x1141 && c <= 0x114b) 289 || c == 0x114d 290 || c == 0x114f 291 || (c >= 0x1151 && c <= 0x1153) 292 || (c >= 0x1156 && c <= 0x1158) 293 || c == 0x1162 294 || c == 0x1164 295 || c == 0x1166 296 || c == 0x1168 297 || (c >= 0x116a && c <= 0x116c) 298 || (c >= 0x116f && c <= 0x1171) 299 || c == 0x1174 300 || (c >= 0x1176 && c <= 0x119d) 301 || (c >= 0x119f && c <= 0x11a2) 302 || (c >= 0x11a9 && c <= 0x11aa) 303 || (c >= 0x11ac && c <= 0x11ad) 304 || (c >= 0x11b0 && c <= 0x11b6) 305 || c == 0x11b9 306 || c == 0x11bb 307 || (c >= 0x11c3 && c <= 0x11ea) 308 || (c >= 0x11ec && c <= 0x11ef) 309 || (c >= 0x11f1 && c <= 0x11f8) 310 ; 311 312 case 0x20: 313 return c == 0x207f; 315 case 0x21: 316 return 317 c == 0x2102 319 || c == 0x2107 320 || (c >= 0x210a && c <= 0x2113) 321 || c == 0x2115 322 || (c >= 0x2118 && c <= 0x211d) 323 || c == 0x2124 324 || c == 0x2128 325 || (c >= 0x212c && c <= 0x212d) 326 || (c >= 0x212f && c <= 0x2138) 327 328 || (c >= 0x2160 && c <= 0x217f) 330 ; 331 332 case 0x30: 333 return c >= 0x309b && c <= 0x309c; 335 336 case 0x31: 337 return c >= 0x3131 && c <= 0x318e; 339 340 case 0xf9: 341 case 0xfa: 342 case 0xfb: 343 case 0xfc: 344 case 0xfd: 345 case 0xfe: 346 case 0xff: 347 return true; 349 350 default: 351 return false; 353 } 354 } 355 356 private static boolean isLetter2 (char c) 358 { 359 364 if (c >= 'a' && c <= 'z') 368 return true; 369 if (c == '>') 370 return false; 371 if (c >= 'A' && c <= 'Z') 372 return true; 373 374 switch (Character.getType (c)) { 379 case Character.LOWERCASE_LETTER: case Character.UPPERCASE_LETTER: case Character.OTHER_LETTER: case Character.TITLECASE_LETTER: case Character.LETTER_NUMBER: case Character.COMBINING_SPACING_MARK: case Character.ENCLOSING_MARK: case Character.NON_SPACING_MARK: case Character.MODIFIER_LETTER: case Character.DECIMAL_DIGIT_NUMBER: 394 return !isCompatibilityChar (c) 396 && !(c >= 0x20dd && c <= 0x20e0); 398 399 default: 400 return c == 0x0387; 402 } 403 } 404 405 private static boolean isDigit (char c) 406 { 407 409 return Character.isDigit (c) 414 && ! ( (c >= 0xff10) && (c <= 0xff19)); 415 } 416 417 private static boolean isExtender (char c) 418 { 419 return c == 0x00b7 || c == 0x02d0 || c == 0x02d1 || c == 0x0387 421 || c == 0x0640 || c == 0x0e46 || c == 0x0ec6 422 || c == 0x3005 || (c >= 0x3031 && c <= 0x3035) 423 || (c >= 0x309d && c <= 0x309e) 424 || (c >= 0x30fc && c <= 0x30fe) 425 ; 426 } 427 } 428 | Popular Tags |