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