public virtual ActionAP AddAction(ActionAP action) { if (ReferenceEquals(action, null)) { throw new ArgumentNullException("action"); } // resolve any conflicts CheckConflict(action); // add to actions list Actions.Add(action); action.Container = this; // index the action by any option strings it has foreach (string optionString in action.OptionStrings) { OptionStringActions[optionString] = action; } // set the flag if any option strings look like negative numbers if (!HasNegativeNumberOptionals.IsTrue() && action.OptionStrings.Any(optionString => NegativeNumberMatcher.IsMatch(optionString))) { HasNegativeNumberOptionals.Add(true); } return(action); }
public ActionAP AddArgument(Argument argument) { // если позиционные аргументы не заданы или задан только один, и он не похож на строку параметров, то анализируем позиционный аргумент Argument preparedArgument = !IsOptionalArgument(argument) ? PreparePositionalArgument(argument) : PrepareOptionalArgument(argument); ActionAP argumentAction = CreateAction(preparedArgument); if (ReferenceEquals(argumentAction, null)) { throw new ParserException("Unregistered action exception"); } return(AddAction(argumentAction)); }
private static string GetArgumentName(ActionAP action) { if (action == null) { return(null); } if (action.OptionStrings.IsTrue()) { return(string.Format("({0})", string.Join("/", action.OptionStrings))); } if (!string.IsNullOrWhiteSpace(action.MetaVariable)) { return(action.MetaVariable); } if (action.HasDestination && action.HasValidDestination) { return(action.Destination); } return(null); }
public void CheckConflict(ActionAP action) { var conflOptionals = new List <KeyValuePair <string, ActionAP> >(); foreach (string optionString in action.OptionStrings) { ActionAP conflOptional; if (OptionStringActions.TryGetValue(optionString, out conflOptional)) { conflOptionals.Add(new KeyValuePair <string, ActionAP>(optionString, conflOptional)); } } if (!conflOptionals.Any()) { return; } Action <ActionAP, IEnumerable <KeyValuePair <string, ActionAP> > > confictHandler = GetHandler(); confictHandler(action, conflOptionals); }
public ArgumentException(ActionAP action, string message, Exception innerException = null) : base(message, innerException) { ActionAP = action; }