/
CDC-1.2b/
CDC-1.2b/src/
parent $foundation
object $named

var $root child_index 0
var $root fertile 1
var $root manager $named
var $root owned [$named]
var $root owners [$core]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $root inited 1
var $root dbref 'named
var $named name ['uniq, "Named Object"]
var $named name_aliases 0

method set_name
    arg new_name, [args];
    var proper;
    
    // .set_name(new_name, ['proper|'unique]) (default proper).
    // ['prop, "Name"] => proper, no indefinite/definite articles.
    // ['uniq, "Name"] => unique, normal indefinite/definite articles.
    (> .perms(sender()) <);
    if (type(new_name) != 'string)
        throw(~type, "New name must be given as a string.");
    
    // this will not catch them all, but we can try.
    // if (" a " in new_name || " the " in new_name)
    //    throw(~bad_name, "Do not include articles in a name");
    //
    proper = [@args, 'prop][1];
    name = [proper, new_name];
.

method name_aliases
    return name_aliases;
.

method add_name_alias
    arg alias;
    
    .perms(sender());
    name_aliases = [@name_aliases, alias];
.

method del_name_alias
    arg alias;
    
    .perms(sender());
    name_aliases = setremove(name_aliases, alias);
.

method init_named
    var dbref;
    
    (> .perms(caller(), $root) <);
    dbref = tostr(.dbref('symbol));
    name = ['uniq, tostr(dbref)];
    name_aliases = [];
.

method match_name
    arg str;
    
    return match_begin(.name('none), str);
.

method name
    arg [article];
    
    article = [@article, 'indef][1];
    if ((name[1]) == 'uniq) {
        switch (article) {
            case 'indef:
                return (($string.a_or_an(name[2])) + " ") + (name[2]);
            case 'def:
                return "the " + (name[2]);
        }
    }
    return name[2];
.

method match_name_aliases
    arg str;
    
    return str in name_aliases;
.

method namef
    arg [args];
    
    if (!args)
        args = [['name, 'def]];
    if ((args[1]) == 'ref) {
        if (.has_ancestor($named))
            args = [['name], " (", ['dbref], ")"];
        else
            args = [['dbref]];
    } else if ((args[1]) == 'xref) {
        if (.has_ancestor($named))
            args = [['dbref], " (", ['name], ")"];
        else
            args = [['dbref]];
    }
    return pass(@args);
.