in lib/src/characters_impl.dart [982:1012]
Iterable<CharacterRange> split(Characters pattern, [int maxParts = 0]) sync* {
if (maxParts == 1 || _start == _end) {
yield this;
return;
}
var patternString = pattern.string;
var start = _start;
if (patternString.isNotEmpty) {
do {
var match = _indexOf(_string, patternString, start, _end);
if (match < 0) break;
yield StringCharacterRange._(_string, start, match);
start = match + patternString.length;
maxParts--;
} while (maxParts != 1);
yield StringCharacterRange._(_string, start, _end);
} else {
// Empty pattern. Split on internal boundaries only.
var breaks = Breaks(_string, _start, _end, stateSoTNoBreak);
do {
var match = breaks.nextBreak();
if (match < 0) return;
yield StringCharacterRange._(_string, start, match);
start = match;
maxParts--;
} while (maxParts != 1);
if (start < _end) {
yield StringCharacterRange._(_string, start, _end);
}
}
}