]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/markdown/internal/CharacterSet.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / markdown / internal / CharacterSet.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/markdown/internal/CharacterSet.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/markdown/internal/CharacterSet.java
new file mode 100644 (file)
index 0000000..e332138
--- /dev/null
@@ -0,0 +1,44 @@
+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