/// <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); }
/// <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); }