Formatting
[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 \r
10 import java.util.*;\r
11 \r
12 /** Implements the parenthesis pattern subelement.*/\r
13 class OrMark\r
14     extends Or\r
15 {\r
16   SubMark sm = new SubMark();\r
17   int id;\r
18   OrMark(int i)\r
19   {\r
20     sm.om = this;\r
21     id = i;\r
22   }\r
23 \r
24   String leftForm()\r
25   {\r
26     return "(";\r
27   }\r
28 \r
29   public Pattern getNext()\r
30   {\r
31     return sm;\r
32   }\r
33 \r
34   public int matchInternal(int pos, Pthings pt)\r
35   {\r
36     sm.next = super.getNext();\r
37     if (pt.marks == null)\r
38     {\r
39       int n2 = 2 * pt.nMarks + 2;\r
40       pt.marks = new int[n2];\r
41       for (int i = 0; i < n2; i++)\r
42       {\r
43         pt.marks[i] = -1;\r
44       }\r
45     }\r
46     pt.marks[id] = pos;\r
47     int ret = super.matchInternal(pos, pt);\r
48     if (ret < 0)\r
49     {\r
50       pt.marks[id] = -1;\r
51     }\r
52     else if (pt.marks[id] > pt.marks[id + pt.nMarks])\r
53     {\r
54       int swap = pt.marks[id];\r
55       pt.marks[id] = pt.marks[id + pt.nMarks] + 1;\r
56       pt.marks[id + pt.nMarks] = swap + 1;\r
57     }\r
58     return ret;\r
59   }\r
60 \r
61   public Pattern clone1(Hashtable h)\r
62   {\r
63     OrMark om = new OrMark(id);\r
64     h.put(om, om);\r
65     h.put(this, om);\r
66     for (int i = 0; i < v.size(); i++)\r
67     {\r
68       om.v.addElement( ( (Pattern) v.elementAt(i)).clone(h));\r
69     }\r
70     return om;\r
71   }\r
72 };\r