needed for applet search
[jalview.git] / src / com / stevesoft / pat / OrMark.java
diff --git a/src/com/stevesoft/pat/OrMark.java b/src/com/stevesoft/pat/OrMark.java
new file mode 100755 (executable)
index 0000000..e9bf0ca
--- /dev/null
@@ -0,0 +1,51 @@
+//\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
+import java.util.Hashtable;\r
+import java.util.Vector;\r
+\r
+/** Implements the parenthesis pattern subelement.*/\r
+class OrMark extends Or {\r
+    SubMark sm = new SubMark();\r
+    int id;\r
+    OrMark(int i) {\r
+        sm.om = this;\r
+        id = i;\r
+    }\r
+    String leftForm() { return "("; }\r
+    public Pattern getNext() {\r
+        return sm;\r
+    }\r
+    public int matchInternal(int pos,Pthings pt) {\r
+        sm.next = super.getNext();\r
+        if(pt.marks == null) {\r
+            int n2 = 2 * pt.nMarks+2;\r
+            pt.marks = new int[n2];\r
+            for(int i=0;i<n2;i++)\r
+                pt.marks[i] = -1;\r
+        }\r
+        pt.marks[id] = pos;\r
+        int ret = super.matchInternal(pos,pt);\r
+        if(ret < 0)\r
+            pt.marks[id] = -1;\r
+        else if(pt.marks[id] > pt.marks[id+pt.nMarks]) {\r
+            int swap = pt.marks[id];\r
+            pt.marks[id] = pt.marks[id+pt.nMarks]+1;\r
+            pt.marks[id+pt.nMarks] = swap+1;\r
+        }\r
+        return ret;\r
+    }\r
+    public Pattern clone1(Hashtable h) {\r
+        OrMark om = new OrMark(id);\r
+        h.put(om,om);\r
+        h.put(this,om);\r
+        for(int i=0;i<v.size();i++)\r
+            om.v.addElement( ((Pattern)v.elementAt(i)).clone(h) );\r
+        return om;\r
+    }\r
+};\r