Пример #1
0
        /// <summary>
        /// Parses the given arguments into a filled option object.
        /// </summary>
        /// <param name="args">the arguments to parse</param>
        /// <returns>The parsed result</returns>
        /// <see cref="ParseResult"/>
        public ParseResult Parse(params string[] args)
        {
            if (args == null)
            {
                throw new ArgumentNullException(nameof(args));
            }

            var queue = new Queue <string>(args);

            var result = new ParseResult {
                Parser = this
            };

            var optionType = OptionType;

            if (OptionTypes.Count > 1)
            {
                if (queue.Count == 0)
                {
                    result.SetState(State.MissingVerb, "no verb given");
                }
                else
                {
                    var verb = queue.Dequeue();

                    if (verb == "")
                    {
                        result.SetState(State.MissingVerb, "empty verb");
                    }
                    else if (IsHelp(verb))
                    {
                        result.SetState(State.RequestHelp);
                    }
                    else
                    {
                        if (!OptionTypes.TryGetValue(verb, out optionType))
                        {
                            result.SetState(State.MissingVerb, $"verb '{args[0]}' not defined");
                        }

                        result.Verb = verb;
                    }
                }
            }

            if (result.State == State.Succeeded)
            {
                optionType.Parse(result, queue);
            }

            return(result);
        }