-//\r
-// This software is now distributed according to\r
-// the Lesser Gnu Public License. Please see\r
-// http://www.gnu.org/copyleft/lesser.txt for\r
-// the details.\r
-// -- Happy Computing!\r
-//\r
-package com.stevesoft.pat;\r
-\r
-import java.util.*;\r
-\r
-/** This class implements the (?: ... ) extended Pattern.\r
- It provides a base class from which we derive the\r
- [ ... ], ( ... ), (?! ... ), and (?= ... ) patterns. */\r
-class Or\r
- extends Pattern\r
-{\r
- Vector v;\r
- Pattern[] pv = null;\r
- Or()\r
- {\r
- v = new Vector();\r
- }\r
-\r
- String leftForm()\r
- {\r
- return "(?:";\r
- }\r
-\r
- String rightForm()\r
- {\r
- return ")";\r
- }\r
-\r
- String sepForm()\r
- {\r
- return "|";\r
- }\r
-\r
- public Or addOr(Pattern p)\r
- {\r
- pv = null;\r
- v.addElement(p);\r
- p.setParent(this);\r
- return this;\r
- }\r
-\r
- public String toString()\r
- {\r
- int i;\r
- StringBuffer sb = new StringBuffer();\r
- sb.append(leftForm());\r
- if (v.size() > 0)\r
- {\r
- sb.append( ( (Pattern) v.elementAt(0)).toString());\r
- }\r
- for (i = 1; i < v.size(); i++)\r
- {\r
- sb.append(sepForm());\r
- sb.append( ( (Pattern) v.elementAt(i)).toString());\r
- }\r
- sb.append(rightForm());\r
- sb.append(nextString());\r
- return sb.toString();\r
- }\r
-\r
- public int matchInternal(int pos, Pthings pt)\r
- {\r
- if (pv == null)\r
- {\r
- pv = new Pattern[v.size()];\r
- v.copyInto(pv);\r
- }\r
- for (int i = 0; i < v.size(); i++)\r
- {\r
- Pattern p = pv[i]; //(Pattern)v.elementAt(i);\r
- int r = p.matchInternal(pos, pt);\r
- if (r >= 0)\r
- {\r
- return r;\r
- }\r
- }\r
- return -1;\r
- }\r
-\r
- public patInt minChars()\r
- {\r
- if (v.size() == 0)\r
- {\r
- return new patInt(0);\r
- }\r
- patInt m = ( (Pattern) v.elementAt(0)).countMinChars();\r
- for (int i = 1; i < v.size(); i++)\r
- {\r
- Pattern p = (Pattern) v.elementAt(i);\r
- m.mineq(p.countMinChars());\r
- }\r
- return m;\r
- }\r
-\r
- public patInt maxChars()\r
- {\r
- if (v.size() == 0)\r
- {\r
- return new patInt(0);\r
- }\r
- patInt m = ( (Pattern) v.elementAt(0)).countMaxChars();\r
- for (int i = 1; i < v.size(); i++)\r
- {\r
- Pattern p = (Pattern) v.elementAt(i);\r
- m.maxeq(p.countMaxChars());\r
- }\r
- return m;\r
- }\r
-\r
- Pattern clone1(Hashtable h)\r
- {\r
- Or o = new Or();\r
- h.put(this, o);\r
- h.put(o, o);\r
- for (int i = 0; i < v.size(); i++)\r
- {\r
- o.v.addElement( ( (Pattern) v.elementAt(i)).clone(h));\r
- }\r
- return o;\r
- }\r
-};\r
+//
+// This software is now distributed according to
+// the Lesser Gnu Public License. Please see
+// http://www.gnu.org/copyleft/lesser.txt for
+// the details.
+// -- Happy Computing!
+//
+package com.stevesoft.pat;
+
+import java.util.Hashtable;
+import java.util.Vector;
+
+/**
+ * This class implements the (?: ... ) extended Pattern. It provides a base
+ * class from which we derive the [ ... ], ( ... ), (?! ... ), and (?= ... )
+ * patterns.
+ */
+class Or extends Pattern
+{
+ Vector v;
+
+ Pattern[] pv = null;
+
+ Or()
+ {
+ v = new Vector();
+ }
+
+ String leftForm()
+ {
+ return "(?:";
+ }
+
+ String rightForm()
+ {
+ return ")";
+ }
+
+ String sepForm()
+ {
+ return "|";
+ }
+
+ public Or addOr(Pattern p)
+ {
+ pv = null;
+ v.addElement(p);
+ p.setParent(this);
+ return this;
+ }
+
+ public String toString()
+ {
+ int i;
+ StringBuffer sb = new StringBuffer();
+ sb.append(leftForm());
+ if (v.size() > 0)
+ {
+ sb.append(((Pattern) v.elementAt(0)).toString());
+ }
+ for (i = 1; i < v.size(); i++)
+ {
+ sb.append(sepForm());
+ sb.append(((Pattern) v.elementAt(i)).toString());
+ }
+ sb.append(rightForm());
+ sb.append(nextString());
+ return sb.toString();
+ }
+
+ public int matchInternal(int pos, Pthings pt)
+ {
+ if (pv == null)
+ {
+ pv = new Pattern[v.size()];
+ v.copyInto(pv);
+ }
+ for (int i = 0; i < v.size(); i++)
+ {
+ Pattern p = pv[i]; // (Pattern)v.elementAt(i);
+ int r = p.matchInternal(pos, pt);
+ if (r >= 0)
+ {
+ return r;
+ }
+ }
+ return -1;
+ }
+
+ public patInt minChars()
+ {
+ if (v.size() == 0)
+ {
+ return new patInt(0);
+ }
+ patInt m = ((Pattern) v.elementAt(0)).countMinChars();
+ for (int i = 1; i < v.size(); i++)
+ {
+ Pattern p = (Pattern) v.elementAt(i);
+ m.mineq(p.countMinChars());
+ }
+ return m;
+ }
+
+ public patInt maxChars()
+ {
+ if (v.size() == 0)
+ {
+ return new patInt(0);
+ }
+ patInt m = ((Pattern) v.elementAt(0)).countMaxChars();
+ for (int i = 1; i < v.size(); i++)
+ {
+ Pattern p = (Pattern) v.elementAt(i);
+ m.maxeq(p.countMaxChars());
+ }
+ return m;
+ }
+
+ Pattern clone1(Hashtable h)
+ {
+ Or o = new Or();
+ h.put(this, o);
+ h.put(o, o);
+ for (int i = 0; i < v.size(); i++)
+ {
+ o.v.addElement(((Pattern) v.elementAt(i)).clone(h));
+ }
+ return o;
+ }
+};