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