in lib/src/characters_impl.dart [1041:1064]
int _indexOf(String source, String pattern, int start, int end) {
var patternLength = pattern.length;
if (patternLength == 0) return start;
// Any start position after realEnd won't fit the pattern before end.
var realEnd = end - patternLength;
if (realEnd < start) return -1;
// Use indexOf if what we can overshoot is
// less than twice as much as what we have left to search.
var rest = source.length - realEnd;
if (rest <= (realEnd - start) * 2) {
var index = 0;
while (start < realEnd && (index = source.indexOf(pattern, start)) >= 0) {
if (index > realEnd) return -1;
if (isGraphemeClusterBoundary(source, start, end, index) &&
isGraphemeClusterBoundary(
source, start, end, index + patternLength)) {
return index;
}
start = index + 1;
}
return -1;
}
return _gcIndexOf(source, pattern, start, end);
}