JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / unused / com / stevesoft / pat / OrMark.java
1 //
2 // This software is now distributed according to
3 // the Lesser Gnu Public License.  Please see
4 // http://www.gnu.org/copyleft/lesser.txt for
5 // the details.
6 //    -- Happy Computing!
7 //
8 package com.stevesoft.pat;
9
10 import java.util.*;
11
12 /** Implements the parenthesis pattern subelement. */
13 class OrMark extends Or
14 {
15   SubMark sm = new SubMark();
16
17   int id;
18
19   OrMark(int i)
20   {
21     sm.om = this;
22     id = i;
23   }
24
25   String leftForm()
26   {
27     return "(";
28   }
29
30   public Pattern getNext()
31   {
32     return sm;
33   }
34
35   public int matchInternal(int pos, Pthings pt)
36   {
37     sm.next = super.getNext();
38     if (pt.marks == null)
39     {
40       int n2 = 2 * pt.nMarks + 2;
41       pt.marks = new int[n2];
42       for (int i = 0; i < n2; i++)
43       {
44         pt.marks[i] = -1;
45       }
46     }
47     pt.marks[id] = pos;
48     int ret = super.matchInternal(pos, pt);
49     if (ret < 0)
50     {
51       pt.marks[id] = -1;
52     }
53     else if (pt.marks[id] > pt.marks[id + pt.nMarks])
54     {
55       int swap = pt.marks[id];
56       pt.marks[id] = pt.marks[id + pt.nMarks] + 1;
57       pt.marks[id + pt.nMarks] = swap + 1;
58     }
59     return ret;
60   }
61
62   public Pattern clone1(Hashtable h)
63   {
64     OrMark om = new OrMark(id);
65     h.put(om, om);
66     h.put(this, om);
67     for (int i = 0; i < v.size(); i++)
68     {
69       om.v.addElement(((Pattern) v.elementAt(i)).clone(h));
70     }
71     return om;
72   }
73 };