Formatting
[jalview.git] / src / com / stevesoft / pat / Or.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 /** This class implements the (?: ... ) extended Pattern.\r
13  It provides a base class from which we derive the\r
14  [ ... ], ( ... ), (?! ... ), and (?= ... ) patterns. */\r
15 class Or\r
16     extends Pattern\r
17 {\r
18   Vector v;\r
19   Pattern[] pv = null;\r
20   Or()\r
21   {\r
22     v = new Vector();\r
23   }\r
24 \r
25   String leftForm()\r
26   {\r
27     return "(?:";\r
28   }\r
29 \r
30   String rightForm()\r
31   {\r
32     return ")";\r
33   }\r
34 \r
35   String sepForm()\r
36   {\r
37     return "|";\r
38   }\r
39 \r
40   public Or addOr(Pattern p)\r
41   {\r
42     pv = null;\r
43     v.addElement(p);\r
44     p.setParent(this);\r
45     return this;\r
46   }\r
47 \r
48   public String toString()\r
49   {\r
50     int i;\r
51     StringBuffer sb = new StringBuffer();\r
52     sb.append(leftForm());\r
53     if (v.size() > 0)\r
54     {\r
55       sb.append( ( (Pattern) v.elementAt(0)).toString());\r
56     }\r
57     for (i = 1; i < v.size(); i++)\r
58     {\r
59       sb.append(sepForm());\r
60       sb.append( ( (Pattern) v.elementAt(i)).toString());\r
61     }\r
62     sb.append(rightForm());\r
63     sb.append(nextString());\r
64     return sb.toString();\r
65   }\r
66 \r
67   public int matchInternal(int pos, Pthings pt)\r
68   {\r
69     if (pv == null)\r
70     {\r
71       pv = new Pattern[v.size()];\r
72       v.copyInto(pv);\r
73     }\r
74     for (int i = 0; i < v.size(); i++)\r
75     {\r
76       Pattern p = pv[i]; //(Pattern)v.elementAt(i);\r
77       int r = p.matchInternal(pos, pt);\r
78       if (r >= 0)\r
79       {\r
80         return r;\r
81       }\r
82     }\r
83     return -1;\r
84   }\r
85 \r
86   public patInt minChars()\r
87   {\r
88     if (v.size() == 0)\r
89     {\r
90       return new patInt(0);\r
91     }\r
92     patInt m = ( (Pattern) v.elementAt(0)).countMinChars();\r
93     for (int i = 1; i < v.size(); i++)\r
94     {\r
95       Pattern p = (Pattern) v.elementAt(i);\r
96       m.mineq(p.countMinChars());\r
97     }\r
98     return m;\r
99   }\r
100 \r
101   public patInt maxChars()\r
102   {\r
103     if (v.size() == 0)\r
104     {\r
105       return new patInt(0);\r
106     }\r
107     patInt m = ( (Pattern) v.elementAt(0)).countMaxChars();\r
108     for (int i = 1; i < v.size(); i++)\r
109     {\r
110       Pattern p = (Pattern) v.elementAt(i);\r
111       m.maxeq(p.countMaxChars());\r
112     }\r
113     return m;\r
114   }\r
115 \r
116   Pattern clone1(Hashtable h)\r
117   {\r
118     Or o = new Or();\r
119     h.put(this, o);\r
120     h.put(o, o);\r
121     for (int i = 0; i < v.size(); i++)\r
122     {\r
123       o.v.addElement( ( (Pattern) v.elementAt(i)).clone(h));\r
124     }\r
125     return o;\r
126   }\r
127 };\r