/// <summary> /// Run the command string from the input line /// </summary> private void RunCommand() { var cmd = Input; Input = ""; _inputOffset = 0; _inputHistory.Insert(0, cmd); PrintLine(ConsoleSettings.PreString + cmd); //Run command var ct = new CommandParser(cmd, this); var cmdName = ""; var tokens = new List<CommandToken>(); foreach (CommandToken t in ct.Tokens) { switch (t.Kind) { case CommandTokenKind.Word: if (cmdName == "") { cmdName = t.String; if (!CommandDispatcher.Commands.ContainsKey(cmdName)) goto ErrorNotFound; } else tokens.Add(t); break; case CommandTokenKind.Number: case CommandTokenKind.String: case CommandTokenKind.CodeBlock: tokens.Add(t); break; } } ErrorNotFound: if (cmdName == "" || !CommandDispatcher.Commands.ContainsKey(cmdName)) { PrintError("Command '" + cmdName + "' not found!"); return; } var c = CommandDispatcher.Commands[cmdName]; var i = c.AreTokensValid(tokens); if (i < 0) { PrintError("Provided arguments are not valid for command '" + cmdName + "'"); PrintCommandInfo(c); } else { c.Callback(new CommandDispatcher.CommandEventArgs(c.Name, tokens, i)); } }