anchor.diff:      } else if (!first.isFlag) {
         // The first character is a non-flag option, so the rest must be the
         // value.
  -      var value = '${abbrOpt[1].substring(1)}${abbrOpt[2]}';
  +      var value = '${lettersAndDigits.substring(1)}$rest';
         setOption(results, first, value);
       } else {
         // If we got some non-flag characters, then it must be a value, but
         // if we got here, it's a flag, which is wrong.
         validate(
  -          abbrOpt[2] == '',
  +          rest == '',
             'Option "-$c" is a flag and cannot handle value '
  -          '"${abbrOpt[1].substring(1)}${abbrOpt[2]}".');
  +          '"${lettersAndDigits.substring(1)}$rest".');
   
         // Not an option, so all characters should be flags.
         // We use "innermostCommand" here so that if a parent command parses the
         // *first* letter, subcommands can still be found to parse the other
         // letters.
  -      for (var i = 0; i < abbrOpt[1].length; i++) {
  -        var c = abbrOpt[1].substring(i, i + 1);
  +      for (var i = 0; i < lettersAndDigits.length; i++) {
  +        var c = lettersAndDigits.substring(i, i + 1);
           innermostCommand.parseShortFlag(c);
         }
       }
  
positive.code:         '"$value" is not an allowed value for option "${option.name}".');
    }
  }
  
negative.code:   /// (like "-abc") or a single abbreviation with the value directly attached
    /// to it (like "-mrelease").
    bool parseAbbreviation(Parser innermostCommand) {
      // Hand coded regexp: r'^-([a-zA-Z0-9]+)(.*)$'
      // Hyphen then at least one letter/digit then zero or more
      // anything-but-newlines.
      if (current.length < 2) return false;
      if (!current.startsWith('-')) return false;
  
      // Find where we go from letters/digits to rest.
      var index = 1;
      while (
          index < current.length && _isLetterOrDigit(current.codeUnitAt(index))) {
        ++index;
      }
      // Must be at least one letter/digit.
      if (index == 1) return false;
  
      // If the first character is the abbreviation for a non-flag option, then
      // the rest is the value.
      var lettersAndDigits = current.substring(1, index);
      var rest = current.substring(index);
      if (rest.contains('\n') || rest.contains('\r')) return false;
  
      var c = lettersAndDigits.substring(0, 1);
      var first = grammar.findByAbbreviation(c);
      if (first == null) {
        // Walk up to the parent command if possible.
  