Exemplo n.º 1
0
        private static IEnumerable <ToolOption> ParseAndYield(string[] args, ResponseSettings settings)
        {
            bool isDefault = true;

            List <string> newArgs = new List <string>();

            foreach (string argument in args)
            {
                if (ResponseFile.HasPathSyntax(argument, out _))
                {
                    newArgs.AddRange(ResponseFile.ExpandStrings(argument, settings).SelectMany(ToArgumentList));
                }
                else
                {
                    newArgs.Add(argument);
                }
            }

            for (int i = 0; i < newArgs.Count; i++)
            {
                if (IsOption(newArgs[i]))
                {
                    ToolOption option = CreateOption(newArgs[i]);

                    if (option != null)
                    {
                        option.Values = newArgs.Skip(i + 1).TakeWhile(s => !IsOption(s)).ToArray();

                        i += option.Values.Length;

                        option.Values = option.Values.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();
                    }

                    isDefault = false;

                    yield return(option);
                }
                else if (isDefault)
                {
                    ToolOption option = new ToolOption()
                    {
                        Name      = "",
                        ShortName = "",
                        Values    = newArgs.Skip(i).TakeWhile(s => !IsOption(s)).ToArray()
                    };

                    i += option.Values.Length - 1;

                    option.Values = option.Values.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();

                    isDefault = false;

                    yield return(option);
                }
            }
        }