//
// 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.ewe_pat;
import ewe.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;
}
}
};