CliOptDef constructor

CliOptDef(
  1. String optDefStr,
  2. 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'));
}