Пример #1
0
        public CommandLookup Find(string[] tokens, char paramPrefix = '@')
        {
            if (tokens == null)
            {
                throw new ArgumentNullException(nameof(tokens));
            }

            if (tokens.Length == 0)
            {
                return(null);
            }

            if (tokens[0].StartsWith(paramPrefix.ToString()))
            {
                tokens[0] = tokens[0].Substring(1);
                return(null);
            }
            else if (!KeywordMatches(tokens[0]))
            {
                return(null);
            }

            tokens = tokens.Skip(1).ToArray();

            foreach (Command child in Children)
            {
                CommandLookup result = child.Find(tokens);
                if (result != null)
                {
                    return(result);
                }
            }

            return(new CommandLookup(this, tokens));
        }
Пример #2
0
        public virtual bool Process(string[] tokens)
        {
            if (tokens == null || tokens.Length == 0)
            {
                return(false);
            }

            CommandLookup lookup = Find(tokens);

            if (lookup != null)
            {
                Command command = lookup.Command;

                if (lookup.Tokens.Length > 0 && lookup.Tokens[0] == DetailedHelpToken.ToString())
                {
                    HelpProvider.GenerateDetailedHelp(Printer, MessageProvider, command);
                    return(true);
                }
                else
                {
                    CommandData data = command.Execute(lookup.Tokens, Printer);
                    if (data == null) // TODO: allow specific command error messages.
                    {
                        HelpProvider.GenerateDetailedHelp(Printer, MessageProvider, command);
                    }

                    return(data != null);
                }
            }
            else
            {
                string msg = MessageProvider.GetFormatted(StandardMessages.NoCommand, string.Join(" ", tokens));
                Printer.WriteLine(Level.None, msg);
            }

            return(false);
        }