コード例 #1
0
ファイル: CommandArguments.cs プロジェクト: wvdvegt/narrange
        /// <summary>
        /// Parses a command argument flag from a text string.
        /// </summary>
        /// <param name="flagString">Command argument flag text.</param>
        /// <returns>Command argument flag.</returns>
        private static CommandArgumentFlag ParseFlag(string flagString)
        {
            CommandArgumentFlag flag = CommandArgumentFlag.Unknown;

            string[] enumStrings = Enum.GetNames(typeof(CommandArgumentFlag));
            foreach (string enumString in enumStrings)
            {
                string fullName        = enumString.ToLower();
                char   abbr            = fullName[0];
                string lowerFlagString = flagString.ToLower();

                if (lowerFlagString == abbr.ToString() || lowerFlagString == fullName)
                {
                    flag = (CommandArgumentFlag)Enum.Parse(typeof(CommandArgumentFlag), enumString);
                }
            }

            return(flag);
        }
コード例 #2
0
ファイル: CommandArguments.cs プロジェクト: wvdvegt/narrange
        /// <summary>
        /// Parses command arguments from an array of strings.
        /// </summary>
        /// <param name="args">String array arguments</param>
        /// <returns>A CommandArguments instance</returns>'=
        /// <exception cref="ArgumentException"/>
        public static CommandArguments Parse(params string[] args)
        {
            CommandArguments commandArguments = new CommandArguments();

            if (args == null || args.Length == 0)
            {
                OnParseError();
            }

            List <string> argList = new List <string>(args);

            for (int argIndex = 0; argIndex < argList.Count; argIndex++)
            {
                string arg = argList[argIndex];

                if (string.IsNullOrEmpty(arg))
                {
                    OnParseError();
                }

                if (arg.Length > 0 &&
                    ((!MonoUtilities.IsMonoRuntime && arg[0] == WindowsSwitch) ||
                     arg[0] == UnixSwitch))
                {
                    string argLower = arg.ToLower();
                    if (arg.Length >= 2)
                    {
                        string flagParts      = arg.Substring(1);
                        int    separatorIndex = flagParts.IndexOf(':');
                        string flagString     = flagParts;
                        if (separatorIndex > 0)
                        {
                            flagString = flagParts.Substring(0, separatorIndex);
                        }

                        CommandArgumentFlag flag = ParseFlag(flagString);

                        switch (flag)
                        {
                        case CommandArgumentFlag.Configuration:
                            if (separatorIndex < 0)
                            {
                                OnParseError(arg);
                            }
                            commandArguments._configuration = flagParts.Substring(separatorIndex + 1);
                            if (string.IsNullOrEmpty(commandArguments._configuration))
                            {
                                OnParseError(arg);
                            }
                            break;

                        case CommandArgumentFlag.Backup:
                            commandArguments._backup = true;
                            break;

                        case CommandArgumentFlag.Restore:
                            commandArguments._restore = true;
                            break;

                        case CommandArgumentFlag.Trace:
                            commandArguments._trace = true;
                            break;

                        default:
                            OnParseError();
                            break;
                        }

                        argList.RemoveAt(argIndex);
                        argIndex--;
                    }
                    else
                    {
                        OnParseError(arg);
                    }
                }
                else
                {
                    if (commandArguments._input == null)
                    {
                        commandArguments._input = arg;
                        argList.RemoveAt(argIndex);
                        argIndex--;
                    }
                    else if (commandArguments._output == null)
                    {
                        commandArguments._output = arg;
                        argList.RemoveAt(argIndex);
                        argIndex--;
                    }
                }
            }

            if (argList.Count > 0)
            {
                OnParseError();
            }

            if (commandArguments._backup && commandArguments._restore)
            {
                OnParseError();
            }

            if (commandArguments.Output != null &&
                (commandArguments._backup || commandArguments._restore))
            {
                OnParseError();
            }

            return(commandArguments);
        }