private bool DoParseArgumentsVerbs(string[] args, object options, ref object verbInstance) { var verbs = ReflectionHelper.RetrievePropertyList <VerbOptionAttribute>(options); var helpInfo = ReflectionHelper.RetrieveMethod <HelpVerbOptionAttribute>(options); if (args.Length == 0) { if (helpInfo != null || _settings.HelpWriter != null) { DisplayHelpVerbText(options, helpInfo, null); } return(false); } var optionMap = OptionMap.Create(options, verbs, _settings); if (TryParseHelpVerb(args, options, helpInfo, optionMap)) { return(false); } var verbOption = optionMap[args.First()]; // User invoked a bad verb name if (verbOption == null) { if (helpInfo != null) { DisplayHelpVerbText(options, helpInfo, null); } return(false); } verbInstance = verbOption.GetValue(options); if (verbInstance == null) { // Developer has not provided a default value and did not assign an instance verbInstance = verbOption.CreateInstance(options); } var verbResult = DoParseArgumentsCore(args.Skip(1).ToArray(), verbInstance); if (!verbResult && helpInfo != null) { // Particular verb parsing failed, we try to print its help DisplayHelpVerbText(options, helpInfo, args.First()); } return(verbResult); }
private bool DoParseArgumentsCore(string[] args, object options) { var hadError = false; var optionMap = OptionMap.Create(options, _settings); optionMap.SetDefaults(); var valueMapper = new ValueMapper(options, _settings.ParsingCulture); var arguments = new StringArrayEnumerator(args); while (arguments.MoveNext()) { var argument = arguments.Current; if (string.IsNullOrEmpty(argument)) { continue; } var parser = ArgumentParser.Create(argument, _settings.IgnoreUnknownArguments); if (parser != null) { var result = parser.Parse(arguments, optionMap, options); if ((result & PresentParserState.Failure) == PresentParserState.Failure) { SetParserStateIfNeeded(options, parser.PostParsingState); hadError = true; continue; } if ((result & PresentParserState.MoveOnNextElement) == PresentParserState.MoveOnNextElement) { arguments.MoveNext(); } } else if (valueMapper.CanReceiveValues) { if (!valueMapper.MapValueItem(argument)) { hadError = true; } } } hadError |= !optionMap.EnforceRules(); return(!hadError); }