// // 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.*; /** 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; } } };