parent $user_parsers
object $command_parser
var $root child_index 0
var $root fertile 0
var $root manager $command_parser
var $root owners [$core]
var $root writable [$core]
var $root readable ['parameters, 'methods, 'code]
var $root trusted []
var $root owned [$command_parser]
var $root inited 1
var $root dbref 'command_parser
method parse
arg user, str, next_parser, [other_parsers];
var loc, cmdstr, cmd, obj;
// Match commands on user/room.
loc = user.location();
// trim the string
cmdstr = str;
while (cmdstr && ((cmdstr[1]) == " "))
cmdstr = substr(cmdstr, 2);
if (str) {
// Check commands on this.
cmd = user.match_command(cmdstr);
if (cmd)
return [user, cmd[1], @cmd[2]];
// Check commands on location.
cmd = loc.match_command(cmdstr);
if (cmd)
return [loc, cmd[1], @cmd[2]];
// Try exit names.
for obj in (loc.exits()) {
if ((obj.match_name(str)) || (obj.match_name_aliases(str)))
return [obj, 'invoke];
}
}
// no luck.
return next_parser.parse(user, str, @other_parsers);
.