needed for applet search
[jalview.git] / src / com / stevesoft / pat / OrMark.java
1 //\r
2 // This software is now distributed according to\r
3 // the Lesser Gnu Public License.  Please see\r
4 // http://www.gnu.org/copyleft/lesser.txt for\r
5 // the details.\r
6 //    -- Happy Computing!\r
7 //\r
8 package com.stevesoft.pat;\r
9 import java.util.Hashtable;\r
10 import java.util.Vector;\r
11 \r
12 /** Implements the parenthesis pattern subelement.*/\r
13 class OrMark extends Or {\r
14     SubMark sm = new SubMark();\r
15     int id;\r
16     OrMark(int i) {\r
17         sm.om = this;\r
18         id = i;\r
19     }\r
20     String leftForm() { return "("; }\r
21     public Pattern getNext() {\r
22         return sm;\r
23     }\r
24     public int matchInternal(int pos,Pthings pt) {\r
25         sm.next = super.getNext();\r
26         if(pt.marks == null) {\r
27             int n2 = 2 * pt.nMarks+2;\r
28             pt.marks = new int[n2];\r
29             for(int i=0;i<n2;i++)\r
30                 pt.marks[i] = -1;\r
31         }\r
32         pt.marks[id] = pos;\r
33         int ret = super.matchInternal(pos,pt);\r
34         if(ret < 0)\r
35             pt.marks[id] = -1;\r
36         else if(pt.marks[id] > pt.marks[id+pt.nMarks]) {\r
37             int swap = pt.marks[id];\r
38             pt.marks[id] = pt.marks[id+pt.nMarks]+1;\r
39             pt.marks[id+pt.nMarks] = swap+1;\r
40         }\r
41         return ret;\r
42     }\r
43     public Pattern clone1(Hashtable h) {\r
44         OrMark om = new OrMark(id);\r
45         h.put(om,om);\r
46         h.put(this,om);\r
47         for(int i=0;i<v.size();i++)\r
48             om.v.addElement( ((Pattern)v.elementAt(i)).clone(h) );\r
49         return om;\r
50     }\r
51 };\r