needed for applet search
[jalview.git] / src / com / stevesoft / pat / Or.java
diff --git a/src/com/stevesoft/pat/Or.java b/src/com/stevesoft/pat/Or.java
new file mode 100755 (executable)
index 0000000..9791c74
--- /dev/null
@@ -0,0 +1,81 @@
+//\r
+// This software is now distributed according to\r
+// the Lesser Gnu Public License.  Please see\r
+// http://www.gnu.org/copyleft/lesser.txt for\r
+// the details.\r
+//    -- Happy Computing!\r
+//\r
+package com.stevesoft.pat;\r
+\r
+import java.util.*;\r
+\r
+/** This class implements the (?: ... ) extended Pattern.\r
+ It provides a base class from which we derive the\r
+ [ ... ], ( ... ), (?! ... ), and (?= ... ) patterns. */\r
+class Or extends Pattern {\r
+    Vector v;\r
+    Pattern[] pv = null;\r
+    Or() { v = new Vector(); }\r
+    String leftForm() { return "(?:"; }\r
+    String rightForm() { return ")"; }\r
+    String sepForm() { return "|"; }\r
+    public Or addOr(Pattern p) {\r
+        pv = null;\r
+        v.addElement(p);\r
+        p.setParent(this);\r
+        return this;\r
+    }\r
+    public String toString() {\r
+        int i;\r
+        StringBuffer sb = new StringBuffer();\r
+        sb.append(leftForm());\r
+        if(v.size()>0)\r
+            sb.append( ((Pattern)v.elementAt(0)).toString() );\r
+        for(i=1;i<v.size();i++) {\r
+            sb.append(sepForm());\r
+            sb.append( ((Pattern)v.elementAt(i)).toString() );\r
+        }\r
+        sb.append(rightForm());\r
+        sb.append(nextString());\r
+        return sb.toString();\r
+    }\r
+    public int matchInternal(int pos,Pthings pt) {\r
+        if(pv == null) {\r
+            pv = new Pattern[v.size()];\r
+            v.copyInto(pv);\r
+        }\r
+        for(int i=0;i<v.size();i++) {\r
+            Pattern p = pv[i];//(Pattern)v.elementAt(i);\r
+            int r = p.matchInternal(pos,pt);\r
+            if(r >= 0)\r
+                return r;\r
+        }\r
+        return -1;\r
+    }\r
+    public patInt minChars() {\r
+        if(v.size()==0) return new patInt(0);\r
+        patInt m = ((Pattern)v.elementAt(0)).countMinChars();\r
+        for(int i=1;i<v.size();i++) {\r
+            Pattern p = (Pattern)v.elementAt(i);\r
+            m.mineq(p.countMinChars());\r
+        }\r
+        return m;\r
+    }\r
+    public patInt maxChars() {\r
+        if(v.size()==0) return new patInt(0);\r
+        patInt m = ((Pattern)v.elementAt(0)).countMaxChars();\r
+        for(int i=1;i<v.size();i++) {\r
+            Pattern p = (Pattern)v.elementAt(i);\r
+            m.maxeq(p.countMaxChars());\r
+        }\r
+        return m;\r
+    }\r
+    Pattern clone1(Hashtable h) {\r
+        Or o=new Or();\r
+        h.put(this,o);\r
+        h.put(o,o);\r
+        for(int i=0;i<v.size();i++)\r
+            o.v.addElement( ((Pattern)v.elementAt(i)).clone(h) );\r
+        return o;\r
+    }\r
+};\r