2 // This software is now distributed according to
\r
3 // the Lesser Gnu Public License. Please see
\r
4 // http://www.gnu.org/copyleft/lesser.txt for
\r
6 // -- Happy Computing!
\r
8 package com.stevesoft.pat;
\r
12 /** A special optimization of multi that is used when the
\r
13 * common subpattern ".*" is encountered.
\r
18 patInt fewestMatches, mostMatches;
\r
19 public patInt minChars()
\r
21 return fewestMatches;
\r
24 public patInt maxChars()
\r
29 public boolean matchFewest = false;
\r
31 StringLike src = null;
\r
33 boolean dotDoesntMatchCR = true;
\r
34 DotMulti(patInt a, patInt b)
\r
40 public String toString()
\r
43 + fewestMatches + "," + mostMatches + "}" +
\r
44 (matchFewest ? "?" : "") + "(?# <= dot multi)" +
\r
48 final int submatchInternal(int pos, Pthings pt)
\r
50 if (pos < srclength)
\r
52 if (dotDoesntMatchCR)
\r
54 if (src.charAt(pos) != '\n')
\r
67 final static int step = 1;
\r
68 static int idcount = 1;
\r
69 public int matchInternal(int pos, Pthings pt)
\r
74 srclength = src.length();
\r
75 dotDoesntMatchCR = pt.dotDoesntMatchCR;
\r
79 while (fewestMatches.intValue() > nMatches)
\r
81 i = submatchInternal(i, pt);
\r
92 int ii = nextMatch(i, pt);
\r
97 if (!mostMatches.finite())
\r
101 i = submatchInternal(i, pt);
\r
106 ii = nextMatch(i, pt);
\r
117 i = submatchInternal(i, pt);
\r
123 if (nMatches > mostMatches.intValue())
\r
127 ii = nextMatch(i, pt);
\r
137 while (fewestMatches.intValue() > nMatches)
\r
139 i = submatchInternal(i, pt);
\r
150 if (mostMatches.finite())
\r
152 while (nMatches < mostMatches.intValue())
\r
154 i = submatchInternal(i, pt);
\r
170 i = submatchInternal(i, pt);
\r
184 int r = nextMatch(m, pt);
\r
191 if (nMatches < fewestMatches.intValue())
\r
199 Pattern clone1(Hashtable h)
\r
201 DotMulti dm = new DotMulti(fewestMatches, mostMatches);
\r
202 dm.matchFewest = matchFewest;
\r