예제 #1
0
        /// <summary>
        /// Parses a commandline arguments and returns a new <see cref="ParsedOptionSet" /> with the result.
        /// </summary>
        /// <param name="args">An array of <see cref="string" /> objects with the commandline arguments, excluding the executable filename.</param>
        /// <returns>
        /// A new <see cref="ParsedOptionSet" /> with the parsed commandline.
        /// </returns>
        public ParsedOptionSet Parse(string[] args)
        {
            Check.ArgumentNull(args, nameof(args));
            Check.ArgumentEx.ArrayValuesNotNull(args, nameof(args));

            List <string>       parsedArguments = new List <string>();
            List <ParsedOption> parsedOptions   = new List <ParsedOption>();
            Option        currentOption         = null;
            List <string> currentOptionValues   = new List <string>();

            for (int i = 0; i < args.Length; i++)
            {
                SpecialStringComparisons comparison = OptionPrefixIgnoreCase ? SpecialStringComparisons.IgnoreCase : SpecialStringComparisons.None;
                Option option = Options.FirstOrDefault(o =>
                                                       o.Arguments.Any(a => args[i].Equals(OptionPrefix + a, comparison)) ||
                                                       o.Alternatives.Any(a => args[i].Equals(OptionAlternativePrefix + a, comparison))
                                                       );

                if (option == null)
                {
                    if (currentOption == null)
                    {
                        parsedArguments.Add(args[i]);
                    }
                    else
                    {
                        currentOptionValues.Add(args[i]);
                    }
                }
                else
                {
                    AddToCurrentOption();
                    currentOption = option;
                }
            }

            AddToCurrentOption();
            return(new ParsedOptionSet(parsedArguments, parsedOptions));

            void AddToCurrentOption()
            {
                if (currentOption != null)
                {
                    parsedOptions.Add(new ParsedOption(currentOption, currentOptionValues.ToArray()));
                    currentOptionValues.Clear();
                }
            }
        }
예제 #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SpecialStringComparer" /> class with the specified comparison flags.
 /// </summary>
 /// <param name="comparison">The <see cref="SpecialStringComparisons" /> flags specifying what comparison properties apply.</param>
 public SpecialStringComparer(SpecialStringComparisons comparison)
 {
     Comparison = comparison;
 }