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));
        }
Example #3
0
 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;
 }