--- /dev/null
+package org.simantics.scl.compiler.markdown.internal;\r
+\r
+public class CharacterSet {\r
+ private int minChar;\r
+ private int maxChar;\r
+ boolean[] table;\r
+ \r
+ public CharacterSet(String chars) {\r
+ if(chars.isEmpty())\r
+ throw new IllegalArgumentException();\r
+ minChar = Integer.MAX_VALUE;\r
+ maxChar = Integer.MIN_VALUE;\r
+ for(int i=0;i<chars.length();++i) {\r
+ int c = (int)chars.charAt(i);\r
+ if(c == '-' && i > 0 && i < chars.length()-1)\r
+ continue;\r
+ minChar = Math.min(minChar, c);\r
+ maxChar = Math.max(maxChar, c);\r
+ }\r
+ \r
+ table = new boolean[maxChar-minChar+1];\r
+ for(int i=0;i<chars.length();++i) {\r
+ int c = (int)chars.charAt(i);\r
+ if(i < chars.length()-2 && chars.charAt(i+1)=='-') {\r
+ int c2 = (int)chars.charAt(i+2);\r
+ if(c > c2) {\r
+ int temp = c;\r
+ c = c2;\r
+ c2 = temp;\r
+ }\r
+ for(int j=c;j<=c2;++j)\r
+ table[j - minChar] = true;\r
+ i+=2;\r
+ }\r
+ else \r
+ table[c - minChar] = true;\r
+ }\r
+ }\r
+ \r
+ public boolean contains(char c_) {\r
+ int c = (int)c_;\r
+ return c >= minChar && c <= maxChar && table[c - minChar];\r
+ }\r
+}\r