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