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