public void Parse(string[] args, IEnumerable<IOption> optionsEnumerable, IEnumerable<IPositionalArgument> positionalArgumentsEnumerable, IParserResult result) { var allowOptions = true; var options = optionsEnumerable.ToList(); var positionals = positionalArgumentsEnumerable.ToList(); var argQueue = new Queue<string>(); foreach (var arg in args) { argQueue.Enqueue(arg); } while (argQueue.Count > 0) { var arg = argQueue.Dequeue(); ParseOutcome outcome; if (allowOptions && arg.StartsWith("-")) { if (arg == "--") { allowOptions = false; continue; } outcome = GetOption(result, argQueue, arg.Substring(1), options, positionals); } else outcome = result.PositionalArgument(arg); if (outcome == ParseOutcome.Halt) return; } }
private ParseOutcome ProcessOption(IEnumerable<IOption> options, string arg, Queue<string> argQueue, IParserResult result) { string[] optionArgs = null; var optionDetails = options as IList<IOption> ?? options.ToList(); var optionNames = optionDetails.Select(o => o.Name); var colonPos = arg.IndexOf(':'); if (colonPos < 0) { var colonOptionName = GetOptionName(optionNames, arg.Substring(1)); var colonOptionDefinition = optionDetails.FirstOrDefault(o => System.String.Compare(o.Name, colonOptionName, System.StringComparison.OrdinalIgnoreCase) == 0); if (colonOptionDefinition != null) { colonOptionName = colonOptionDefinition.Name; optionArgs = ExtractOptionArgs(argQueue, colonOptionDefinition); } return result.OptionExtracted(colonOptionName, optionArgs ?? new string[] { }); } var option = arg.Substring(1, colonPos - 1); var optionDefinition = optionDetails.FirstOrDefault(o => string.Compare(o.Name, option, StringComparison.OrdinalIgnoreCase) == 0); optionArgs = optionDefinition == null || optionDefinition.ParameterCount > 1 ? arg.Substring(colonPos + 1).Split(',') : new[] {arg.Substring(colonPos + 1)}; return result.OptionExtracted(GetOptionName(optionNames, option), optionArgs); }
public void Parse(string[] args, IEnumerable<IOption> options, IEnumerable<IPositionalArgument> positionalArguments, IParserResult result) { var optionList = options as IOption[] ?? options.ToArray(); var argQueue = new Queue<string>(); foreach (var arg in args) { argQueue.Enqueue(arg); } while (argQueue.Count > 0) { var arg = argQueue.Dequeue(); ParseOutcome outcome; if (arg.StartsWith("/")) outcome = ProcessOption(optionList, arg, argQueue, result); else outcome = result.PositionalArgument(arg); if (outcome == ParseOutcome.Halt) return; } }
private ParseOutcome GetOption(IParserResult result, Queue<string> argQueue, string arg, IEnumerable<IOption> options, IEnumerable<IPositionalArgument> positionals) { var embeddedOptionName = GetOptionName(arg); var option = options.FirstOrDefault(o => System.String.Compare(o.Name, embeddedOptionName, System.StringComparison.OrdinalIgnoreCase) == 0); string optionName; string[] optionArgs; if (option != null) { optionName = option.Name; optionArgs = ExtractOptionArgs(arg, argQueue, option); } else { var pos = positionals.FirstOrDefault(p => System.String.Compare(p.ParameterName, embeddedOptionName, System.StringComparison.OrdinalIgnoreCase) == 0); if (pos != null) optionName = pos.ParameterName; else optionName = embeddedOptionName; optionArgs = ExtractOptionArgs(arg, argQueue, null); } return result.OptionExtracted(optionName, optionArgs); }
private ParseOutcome ProcessLongOption(List<IOption> longOptions, string arg, Queue<string> argQueue, IParserResult result) { string optionName; var equalPos = arg.IndexOf('='); if (equalPos < 0) { optionName = arg; var noEqualOption = longOptions.FirstOrDefault(o => o.Name == optionName); if (noEqualOption != null && noEqualOption.ParameterCount > 0 && ParameterAvailable(argQueue)) { var args = noEqualOption.ParameterCount == 1 ? new [] { argQueue.Dequeue() } : argQueue.Dequeue().Split(','); return result.OptionExtracted(optionName, args); } return result.OptionExtracted(optionName, new string[] { }); } optionName = arg.Substring(0, equalPos); var option = longOptions.FirstOrDefault(o => o.Name == optionName); var valuePart = arg.Substring(equalPos + 1); var optionArgs = option != null && option.ParameterCount == 1 ? new []{ valuePart } : valuePart.Split(','); return result.OptionExtracted(optionName, optionArgs); }
public void Parse(string[] args, IEnumerable<IOption> options, IEnumerable<IPositionalArgument> positionalArguments, IParserResult result) { var allowOptions = true; var optionList = options.ToList(); var shortOptions = optionList.Where(o => o.Name.Length == 1).ToList(); //these need "-" var longOptions = optionList.Where(o => o.Name.Length > 1).ToList(); // these need "--" var argQueue = new Queue<string>(); foreach (var arg in args) argQueue.Enqueue(arg); while (argQueue.Count > 0) { ParseOutcome outcome; var arg = argQueue.Dequeue(); if (allowOptions && arg.StartsWith("--")) { var optionName = arg.Substring(2); if (optionName == string.Empty) { allowOptions = false; continue; } outcome = ProcessLongOption(longOptions, optionName, argQueue, result); } else if (allowOptions && arg.StartsWith("-")) outcome = ProcessShortOption(shortOptions, arg.Substring(1), argQueue, result); else outcome = result.PositionalArgument(arg); if (outcome == ParseOutcome.Halt) return; } }
public void Parse(string[] args, IEnumerable<IOption> options, IEnumerable<IPositionalArgument> positionalArguments, IParserResult result) { throw new NotImplementedException(); }
private ParseOutcome ProcessShortOption(List<IOption> shortOptions, string arg, Queue<string> argQueue, IParserResult result) { var option = shortOptions.FirstOrDefault(o => o.Name == GetShortOptionName(arg)); if (option != null) { if (option.ParameterCount == 0 || option.IsBoolean) { foreach (var optionChar in arg) { if (result.OptionExtracted(optionChar.ToString(CultureInfo.InvariantCulture), new string[] {}) == ParseOutcome.Halt) return ParseOutcome.Halt; } return ParseOutcome.Continue; } if (arg.Length > 1) return result.OptionExtracted(GetShortOptionName(arg), GetShortOptionArg(arg)); if (ParameterAvailable(argQueue)) return result.OptionExtracted(GetShortOptionName(arg), new string[] { }); string[] optionArgs; if (argQueue.Count > 0) optionArgs = argQueue.Dequeue().Split(','); else optionArgs = new string[] {}; return result.OptionExtracted(option.Name, optionArgs); } if (arg.Length > 1) return result.OptionExtracted(GetShortOptionName(arg), GetShortOptionArg(arg)); return result.OptionExtracted(arg, new string[] { }); }
public bool ChangesSubject(IParserResult subject) { return(true); }