toRanges function
Implementation
List<(int, int)> toRanges(List<Object> ranges) {
if (ranges.isEmpty) {
throw ArgumentError.value(ranges, 'ranges', 'Must not be empty');
}
final result = <(int, int)>[];
for (final element in ranges) {
Never error() {
throw ArgumentError.value(element, 'range', ' Invalid range');
}
int toInt(String value) {
final runes = value.runes.toList();
if (runes.length == 1) {
return runes[0];
}
error();
}
var done = false;
if (element is String) {
final runes = element.runes.toList();
if (runes.isNotEmpty) {
done = true;
for (var i = 0; i < runes.length; i++) {
final rune = runes[i];
result.add((rune, rune));
}
}
}
if (!done) {
final range = switch (element) {
final int i => (i, i),
final (String, String) i => (toInt(i.$1), toInt(i.$2)),
final (String, int) i => (toInt(i.$1), i.$2),
final (int, String) i => (i.$1, toInt(i.$2)),
final (int, int) i => (i.$1, i.$2),
_ => error(),
};
result.add(range);
}
}
return normalizeRanges(result);
}