Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.thaiopensource.datatype.xsd.regex.test;
  
  
 
 public class CategoryTest {
   static private final String categories = "LMNPZSC";
   static private final String subCategories = "LuLlLtLmLoMnMcMeNdNlNoPcPdPsPePiPfPoZsZlZpSmScSkSoCcCfCoCn";
 
   private final Regex[] categoryPosRegexes = new Regex[.length()];
   private final Regex[] categoryNegRegexes = new Regex[.length()];
   private final Regex[] subCategoryPosRegexes = new Regex[.length()/2];
   private final Regex[] subCategoryNegRegexes = new Regex[.length()/2];
 
   static public void main(String[] argsthrows IOExceptionRegexSyntaxException {
     if (args.length != 2) {
       ..println("usage: " + CategoryTest.class.getName() + " engineClass UnicodeData");
       System.exit(2);
     }
     BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(args[1])));
     Enumeration e = new Service(RegexEngine.class).getProviders();
     RegexEngine engine;
     for (;;) {
       if (!e.hasMoreElements()) {
         ..println("couldn't find regex engine");
         System.exit(2);
       }
       engine = (RegexEngine)e.nextElement();
       if (engine.getClass().getName().equals(args[0]))
         break;
     }
     int nFail = new CategoryTest(engine).testAll(r);
     ..println(nFail + " tests failed");
     System.exit(nFail > 0 ? 1 : 0);
   }
 
     for (int i = 0, len = .length(); i < leni++) {
       String ch = .substring(ii + 1);
       [i] = engine.compile("\\p{" + ch + "}");
       [i] = engine.compile("\\P{" + ch + "}");
     }
     for (int i = 0, len = .length(); i < leni += 2) {
       String name = .substring(ii + 2);
       [i/2] = engine.compile("\\p{" + name + "}");
       [i/2] = engine.compile("\\P{" + name + "}");
     }
   }
 
   int testAll(BufferedReader rthrows IOException {
     int lastCode = -1;
     for (;;) {
       String line = r.readLine();
       if (line == null)
         break;
       int semi = line.indexOf(';');
       if (semi < 0)
         continue;
       int code = Integer.parseInt(line.substring(0, semi), 16);
       int semi2 = line.indexOf(';'semi + 1);
       String name = line.substring(semisemi2);
       String category = line.substring(semi2 + 1, semi2 + 3);
       if (lastCode + 1 != code) {
         String missingCategory = name.endsWith(", Last>") ? category : "Cn";
         for (int i = lastCode + 1; i < codei++)
           test(imissingCategory);
       }
       test(codecategory);
       lastCode = code;
     }
     for (++lastCodelastCode < 0x110000; lastCode++)
       test(lastCode"Cn");
     return ;
   }
 
   void test(int chString category) {
     if (!isXmlChar(ch))
       return;
     if (.indexOf(category) < 0) {
       ..println("Missing category: " + category);
       System.exit(2);
     }
     for (int i = 0, len = .length(); i < leni++)
       check(ch[i], [i],
             category.charAt(0) == .charAt(i),
             .substring(ii + 1));
     for (int i = 0, len = .length(); i < leni += 2)
       check(ch[i/2], [i/2],
             category.equals(.substring(ii + 2)),
             .substring(ii + 2));
  }
  void check(int chRegex posRegex negboolean inPosString cat) {
    String str;
    if (ch > 0xFFFF)
      str = new String(new char[]{ Utf16.surrogate1(ch), Utf16.surrogate2(ch) });
    else
      str = new String(new char[]{ (char)ch });
    if (pos.matches(str) != inPos )
      fail(chcat);
    if (neg.matches(str) != !inPos)
      fail(ch"-" + cat);
  }
  int nFail = 0;
  void fail(int chString cat) {
    ++;
    ..println("Failed: " + Integer.toHexString(ch) + "/" + cat);
  }
  static boolean isXmlChar(int code) {
    switch (code) {
    case '\r'case '\n'case '\t':
      return true;
    case 0xFFFE: case 0xFFFF:
      return false;
    default:
      if (code < 0x20)
        return false;
      if (code >= 0xD800 && code < 0xE000)
        return false;
      return true;
    }
  }
New to GrepCode? Check out our FAQ X