/
ColdCore-3.0a9.02/
ColdCore-3.0a9.02/src/
new object $command_aliases: $user_interfaces;

var $command_aliases command_aliases = [];
var $root created_on = 796268969;
var $root flags = ['methods, 'code, 'variables, 'core];
var $root inited = 1;
var $root managed = [$command_aliases];
var $root manager = $command_aliases;

public method .add_command_alias() {
    arg alias, actual;
    var relation, a;
    
    (> .perms(sender()) <);
    if ((type(alias) != 'string) || (type(actual) != 'string))
        throw(~type, "alias and actual are not strings.");
    relation = (> $command_lib.parse_relation(alias, actual) <);
    
    // have it 'replace' the old alias (if one exists) by first removing
    // the old one, and adding the new one later.
    for a in (command_aliases) {
        if ((a[1]) == alias)
            command_aliases = command_aliases.setremove(a);
    }
    command_aliases += [[(relation[1])[1], (relation[2])[2]]];
};

public method .all_command_aliases() {
    var user, aliases, userc;
    
    // Collect complete command alias list from ancestors.
    aliases = [];
    for user in (.ancestors()) {
        userc = (| user.command_aliases() |);
        if (userc)
            aliases += userc;
        if (user == definer())
            break;
    }
    return aliases;
};

public method .command_aliases() {
    return command_aliases;
};

public method .del_command_alias() {
    arg alias;
    var ca, rel;
    
    (> .perms(sender()) <);
    if (type(alias) != 'string)
        throw(~type, "alias is not a string.");
    rel = (> $command_lib.parse_relation(alias, alias) <);
    rel = rel[1];
    for ca in (command_aliases) {
        if ((ca[1]) == (rel[1])) {
            command_aliases = command_aliases.setremove(ca);
            return;
        }
    }
    throw(~aliasnf, ("alias `" + alias) + "' is not found");
};

root method .init_command_aliases() {
    command_aliases = [];
};

public method .match_command_aliases() {
    arg str;
    var alias, argf, match, newstr;
    
    // attempts to rebuild the string for an alias.
    if (sender() != this())
        throw(~perm, "Sender is not this.");
    for alias in (.all_command_aliases()) {
        match = str.match_pattern(alias[1]);
        if (match != 0) {
            newstr = alias[2];
            for argf in [1 .. match.length()]
                newstr = newstr.replace("%" + tostr(argf), match[argf]);
            return newstr;
        }
    }
    return str;
};

root method .uninit_command_aliases() {
    command_aliases = [];
};