parseMultiSelectInput static method
Parses the simple prompt multi-select syntax.
Values are 1-based for users and 0-based in the returned list.
Implementation
static List<int> parseMultiSelectInput(
String input,
int optionCount,
List<int> defaultIndices,
) {
final String normalized = input.trim().toLowerCase();
if (normalized.isEmpty) {
return List<int>.from(defaultIndices);
}
if (normalized == 'all') {
return List<int>.generate(optionCount, (int index) => index);
}
if (normalized == 'none') {
return <int>[];
}
final List<int> selected = <int>[];
final Set<int> seen = <int>{};
final List<String> tokens = normalized
.split(RegExp(r'[\s,]+'))
.where((String token) => token.isNotEmpty)
.toList();
for (final String token in tokens) {
final List<int> parsed = _parseSelectionToken(token, optionCount);
for (final int index in parsed) {
if (seen.add(index)) {
selected.add(index);
}
}
}
return selected;
}