// // 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; /** Thrown when one encounters things like [z-a] */ class BadRangeArgs extends RegSyntax { }; /** * Implments a subelement (ranges) of the [] pattern element. For example, * [a-z023] is implemented using a range and tree oneChar classes. * * @see Bracket * @see oneChar */ class Range extends Pattern { char lo, hi, altlo, althi; boolean printBrackets = false; public String toString() { String s = protect("" + lo, PROTECT_THESE, ESC) + "-" + protect("" + hi, PROTECT_THESE, ESC); if (!printBrackets) { return s; } return "[" + s + "]"; } Range(char loi, char hii) throws RegSyntax { lo = loi; hi = hii; oneChar o = null; if (lo >= hi) { // throw new BadRangeArgs(); RegSyntaxError.endItAll("Badly formed []'s : " + lo + " >= " + hi); } o = new oneChar(lo); altlo = o.altc; o = new oneChar(hi); althi = o.altc; } public int matchInternal(int pos, Pthings pt) { if (pos >= pt.src.length()) { return -1; } if (Masked(pos, pt)) { return -1; } char c = pt.src.charAt(pos); if (lo <= c && c <= hi || (pt.ignoreCase && (altlo <= c && c <= althi))) { return nextMatch(pos + 1, pt); } return -1; } public patInt minChars() { return new patInt(1); } public patInt maxChars() { return new patInt(1); } public Pattern clone1(Hashtable h) { try { Range r = new Range(lo, hi); r.printBrackets = printBrackets; return r; } catch (RegSyntax rs) { return null; } } };