--- /dev/null
+//\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
+import java.util.Hashtable;\r
+\r
+/** Matches any number of instances of sub Pattern\r
+ this was the hardest method to write. It implements\r
+ '+', '*', '?', "{0,10}", "{5,}", "{5}", etc.\r
+ @see pat.Multi_stage2\r
+ @see pat.MultiMin\r
+ */\r
+class Multi extends PatternSub {\r
+ patInt a,b;\r
+ public patInt minChars() { return a.mul(p.countMinChars()); }\r
+ public patInt maxChars() { return b.mul(p.countMaxChars()); }\r
+ Pattern p;\r
+ Multi_stage2 st2;\r
+ public boolean matchFewest = false;\r
+ /**\r
+ @param a The fewest number of times the sub pattern can match.\r
+ @param b The maximum number of times the sub pattern can match.\r
+ @param p The sub pattern.\r
+ @see Multi_stage2\r
+ @see MultiMin\r
+ */\r
+ public Multi(patInt a,patInt b,Pattern p) throws RegSyntax {\r
+ this.a = a;\r
+ this.b = b;\r
+ this.p = p;\r
+ st2 = new Multi_stage2(a,b,p);\r
+ st2.parent = this;\r
+ sub = st2.sub;\r
+ }\r
+ public String toString() {\r
+ st2.matchFewest = matchFewest;\r
+ return st2.toString();\r
+ }\r
+ public int matchInternal(int pos,Pthings pt) {\r
+ try {\r
+ st2 = new Multi_stage2(a,b,p);\r
+ } catch(RegSyntax r__) {}\r
+ st2.matchFewest = matchFewest;\r
+ st2.parent = this;\r
+ return st2.matchInternal(pos,pt);\r
+ }\r
+ public Pattern clone1(Hashtable h) {\r
+ try {\r
+ Multi m = new Multi(a,b,((Pattern)p).clone(h));\r
+ m.matchFewest = matchFewest;\r
+ return m;\r
+ } catch(RegSyntax rs) {\r
+ return null;\r
+ }\r
+ }\r
+};\r