1 /*******************************************************************************
2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $(date) The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
20 *******************************************************************************/
22 // This software is now distributed according to
23 // the Lesser Gnu Public License. Please see
24 // http://www.gnu.org/copyleft/lesser.txt for
26 // -- Happy Computing!
28 package com.stevesoft.pat;
30 import java.util.Hashtable;
33 * A special optimization of multi that is used when the common subpattern ".*"
36 class DotMulti extends PatternSub
38 patInt fewestMatches, mostMatches;
40 public patInt minChars()
45 public patInt maxChars()
50 public boolean matchFewest = false;
52 StringLike src = null;
56 boolean dotDoesntMatchCR = true;
58 DotMulti(patInt a, patInt b)
64 public String toString()
66 return ".{" + fewestMatches + "," + mostMatches + "}"
67 + (matchFewest ? "?" : "") + "(?# <= dot multi)" + nextString();
70 final int submatchInternal(int pos, Pthings pt)
76 if (src.charAt(pos) != '\n')
89 final static int step = 1;
91 static int idcount = 1;
93 public int matchInternal(int pos, Pthings pt)
98 srclength = src.length();
99 dotDoesntMatchCR = pt.dotDoesntMatchCR;
103 while (fewestMatches.intValue() > nMatches)
105 i = submatchInternal(i, pt);
116 int ii = nextMatch(i, pt);
121 if (!mostMatches.finite())
125 i = submatchInternal(i, pt);
130 ii = nextMatch(i, pt);
141 i = submatchInternal(i, pt);
147 if (nMatches > mostMatches.intValue())
151 ii = nextMatch(i, pt);
161 while (fewestMatches.intValue() > nMatches)
163 i = submatchInternal(i, pt);
174 if (mostMatches.finite())
176 while (nMatches < mostMatches.intValue())
178 i = submatchInternal(i, pt);
194 i = submatchInternal(i, pt);
208 int r = nextMatch(m, pt);
215 if (nMatches < fewestMatches.intValue())
223 Pattern clone1(Hashtable h)
225 DotMulti dm = new DotMulti(fewestMatches, mostMatches);
226 dm.matchFewest = matchFewest;