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