private ParseOutcome ProcessOption(IEnumerable<IOption> options, string arg, Queue<string> argQueue, IParserResult result) { string[] optionArgs = null; var optionDetails = options as IList<IOption> ?? options.ToList(); var optionNames = optionDetails.Select(o => o.Name); var colonPos = arg.IndexOf(':'); if (colonPos < 0) { var colonOptionName = GetOptionName(optionNames, arg.Substring(1)); var colonOptionDefinition = optionDetails.FirstOrDefault(o => System.String.Compare(o.Name, colonOptionName, System.StringComparison.OrdinalIgnoreCase) == 0); if (colonOptionDefinition != null) { colonOptionName = colonOptionDefinition.Name; optionArgs = ExtractOptionArgs(argQueue, colonOptionDefinition); } return result.OptionExtracted(colonOptionName, optionArgs ?? new string[] { }); } var option = arg.Substring(1, colonPos - 1); var optionDefinition = optionDetails.FirstOrDefault(o => string.Compare(o.Name, option, StringComparison.OrdinalIgnoreCase) == 0); optionArgs = optionDefinition == null || optionDefinition.ParameterCount > 1 ? arg.Substring(colonPos + 1).Split(',') : new[] {arg.Substring(colonPos + 1)}; return result.OptionExtracted(GetOptionName(optionNames, option), optionArgs); }
private ParseOutcome ProcessShortOption(List<IOption> shortOptions, string arg, Queue<string> argQueue, IParserResult result) { var option = shortOptions.FirstOrDefault(o => o.Name == GetShortOptionName(arg)); if (option != null) { if (option.ParameterCount == 0 || option.IsBoolean) { foreach (var optionChar in arg) { if (result.OptionExtracted(optionChar.ToString(CultureInfo.InvariantCulture), new string[] {}) == ParseOutcome.Halt) return ParseOutcome.Halt; } return ParseOutcome.Continue; } if (arg.Length > 1) return result.OptionExtracted(GetShortOptionName(arg), GetShortOptionArg(arg)); if (ParameterAvailable(argQueue)) return result.OptionExtracted(GetShortOptionName(arg), new string[] { }); string[] optionArgs; if (argQueue.Count > 0) optionArgs = argQueue.Dequeue().Split(','); else optionArgs = new string[] {}; return result.OptionExtracted(option.Name, optionArgs); } if (arg.Length > 1) return result.OptionExtracted(GetShortOptionName(arg), GetShortOptionArg(arg)); return result.OptionExtracted(arg, new string[] { }); }
private ParseOutcome GetOption(IParserResult result, Queue<string> argQueue, string arg, IEnumerable<IOption> options, IEnumerable<IPositionalArgument> positionals) { var embeddedOptionName = GetOptionName(arg); var option = options.FirstOrDefault(o => System.String.Compare(o.Name, embeddedOptionName, System.StringComparison.OrdinalIgnoreCase) == 0); string optionName; string[] optionArgs; if (option != null) { optionName = option.Name; optionArgs = ExtractOptionArgs(arg, argQueue, option); } else { var pos = positionals.FirstOrDefault(p => System.String.Compare(p.ParameterName, embeddedOptionName, System.StringComparison.OrdinalIgnoreCase) == 0); if (pos != null) optionName = pos.ParameterName; else optionName = embeddedOptionName; optionArgs = ExtractOptionArgs(arg, argQueue, null); } return result.OptionExtracted(optionName, optionArgs); }
private ParseOutcome ProcessLongOption(List<IOption> longOptions, string arg, Queue<string> argQueue, IParserResult result) { string optionName; var equalPos = arg.IndexOf('='); if (equalPos < 0) { optionName = arg; var noEqualOption = longOptions.FirstOrDefault(o => o.Name == optionName); if (noEqualOption != null && noEqualOption.ParameterCount > 0 && ParameterAvailable(argQueue)) { var args = noEqualOption.ParameterCount == 1 ? new [] { argQueue.Dequeue() } : argQueue.Dequeue().Split(','); return result.OptionExtracted(optionName, args); } return result.OptionExtracted(optionName, new string[] { }); } optionName = arg.Substring(0, equalPos); var option = longOptions.FirstOrDefault(o => o.Name == optionName); var valuePart = arg.Substring(equalPos + 1); var optionArgs = option != null && option.ParameterCount == 1 ? new []{ valuePart } : valuePart.Split(','); return result.OptionExtracted(optionName, optionArgs); }