CliOptDef constructor
CliOptDef(
- String optDefStr,
- CliOptCaseMode caseMode
The constructor
Implementation
CliOptDef(String optDefStr, CliOptCaseMode caseMode) {
// Filling subNames
//
var parts = optDefStr.split('>');
if (parts.length > 1) {
final list = parts[1].split(',');
subNames.addAll(list.map((x) => x.getCliOptName(caseMode)));
}
// Determining the expectation of values and possible value separator
//
final allNamesStr = parts[0].trim();
final hasNames = allNamesStr.isNotEmpty;
final valueInfoBeg = allNamesStr.indexOf(':');
isFlag = hasNames && (valueInfoBeg < 0);
isNoValueAllowed = allNamesStr.endsWith('?');
var valueInfoLen = 0;
if (!isFlag && hasNames) {
valueInfoLen = (allNamesStr.length - valueInfoBeg);
if (isNoValueAllowed) {
--valueInfoLen;
}
}
hasManyValues = (valueInfoLen >= 2);
final valueSeparator = (hasManyValues
? allNamesStr.substring(valueInfoBeg + 1, valueInfoBeg + 2)
: '');
this.valueSeparator = (valueSeparator == ':' ? '' : valueSeparator);
// Filling all kinds of names
//
names.addAll((isFlag || !hasNames
? allNamesStr
: allNamesStr.substring(0, valueInfoBeg))
.split(',')
.map((x) => x.getCliOptName(caseMode)));
name = (names.isEmpty ? '' : names[names.length - 1]);
longNames.addAll(names.where((x) => x.length > 1));
longSubNames.addAll(subNames.where((x) => x.length > 1));
shortNames.addAll(names.where((x) => x.length == 1));
shortSubNames.addAll(subNames.where((x) => x.length == 1));
if (isFlag && hasNames) {
negLongNames.addAll(longNames.map((x) => 'no$x'));
}
negLongSubNames.addAll(longSubNames.map((x) => 'no$x'));
}