in ui/src/com/jediterm/terminal/SubstringFinder.java [39:81]
public void nextChar(int x, int y, CharBuffer characters, int index) {
if (myTokens.size() == 0 || myTokens.get(myTokens.size() - 1).buf != characters) {
myTokens.add(new TextToken(x, y, characters));
}
if (myCurrentLength == myPattern.length()) {
myCurrentHash -= hashCodeForChar(myTokens.get(0).buf.charAt(myFirstIndex));
if (myFirstIndex + 1 == myTokens.get(0).buf.length()) {
myFirstIndex = 0;
myTokens.remove(0);
} else {
myFirstIndex += 1;
}
} else {
myCurrentLength += 1;
if (myPower == 0) {
myPower = 1;
} else {
myPower *= 31;
}
}
myCurrentHash = 31 * myCurrentHash + charHash(characters.charAt(index));
if (myCurrentLength == myPattern.length() && myCurrentHash == myPatternHash) {
FindResult.FindItem item = new FindResult.FindItem(myTokens, myFirstIndex, index, -1);
String itemText = item.getText();
boolean matched = myPattern.equals(myIgnoreCase ? itemText.toLowerCase() : itemText);
if (matched && accept(item)) {
myResult.patternMatched(myTokens, myFirstIndex, index);
myCurrentHash = 0;
myCurrentLength = 0;
myPower = 0;
myTokens.clear();
if (index + 1 < characters.length()) {
myFirstIndex = index + 1;
myTokens.add(new TextToken(x, y, characters));
} else {
myFirstIndex = 0;
}
}
}
}