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