/
ColdCore-3.0a9.02/
ColdCore-3.0a9.02/src/
new object $has_text: $foundation;

var $has_text text = 0;
var $root created_on = 796268969;
var $root defined_settings = #[["plaintext", #[['parse, ['is_boolean]], ['format, ['format_boolean]]]]];
var $root fertile = 1;
var $root flags = ['methods, 'code, 'fertile, 'core, 'variables];
var $root help_node = $help_obj_has_text;
var $root inited = 1;
var $root managed = [$has_text];
var $root manager = $has_text;
var $root settings = #[["plaintext", 1]];

public method ._edit_text_callback() {
    arg t, client_data;
    
    (> .perms(caller(), $editor_reference) <);
    .set_text(t);
    return ['success, ["Text set."]];
};

public method .del_line() {
    arg linestr;
    var t;
    
    // deletes "line" where line is the actual line to delete
    if ((!(.is_writable_by(sender()))) && (sender() != this()))
        throw(~perm, "Permission Denied.");
    t = .get_raw_text();
    t = t.setremove(linestr);
    .set_text(t);
};

public method .del_nline() {
    arg nline;
    var t;
    
    // deletes nline where nline is an integer reference to a list location
    if ((!(.is_writable_by(sender()))) && (sender() != this()))
        throw(~perm, "Permission Denied.");
    t = .get_raw_text();
    t = (> t.delete(nline) <);
    .set_text(t);
};

public method .del_text() {
    // deletes all text
    if ((!(.is_writable_by(sender()))) && (sender() != this()))
        throw(~perm, "Permission Denied.");
    text = [];
};

public method .edit_text() {
    var p;
    
    (> .perms(sender()) <);
    p = .get_raw_text();
    (> sender().invoke_editor(this(), '_edit_text_callback, p, []) <);
};

public method .get_raw_text() {
    // returns text
    if ((!(.is_writable_by(sender()))) && (sender() != this()))
        throw(~perm, "Permission Denied.");
    if (.get_setting("plaintext", $has_text))
        return text;
    else if (type(text) == 'frob)
        return text.uncompile();
    else
        return text;
};

root method .init_has_text() {
    text = [];
};

public method .ins_line() {
    arg txt, @loc;
    var t;
    
    // inserts txt at loc (where loc is an integer)
    if ((!(.is_writable_by(sender()))) && (sender() != this()))
        throw(~perm, "Permission Denied.");
    [(loc ?= 0)] = loc;
    t = .get_raw_text();
    if (!loc)
        t += [txt];
    else
        t = (> t.insert(loc, txt) <);
    .set_text(t);
};

public method .ins_lines() {
    arg lines, loc;
    var line, t;
    
    // inserts txt at loc (where loc is an integer)
    if ((!(.is_writable_by(sender()))) && (sender() != this()))
        throw(~perm, "Permission Denied.");
    t = .get_raw_text();
    if (type(lines) != 'list)
        throw(~type, "Lines should be passed as a list of strings.");
    for line in (lines) {
        t = (> t.insert(loc, line) <);
        ++loc;
    }
    .set_text(t);
};

public method .lines() {
    return listlen((.get_raw_text()) || []);
};

public method .set_text() {
    arg txt;
    
    // resets ,text to the list sent
    if ((!(.is_writable_by(sender()))) && (sender() != this()))
        throw(~perm, "Permission Denied.");
    if (.get_setting("plaintext", $has_text)) {
        if (type(txt) == 'string)
            text = [txt];
        else
            text = txt;
    } else {
        text = $compiler.compile_cml(txt);
    }
};

public method .text() {
    // returns text
    if ((!(.is_writable_by(sender()))) && (sender() != this()))
        throw(~perm, "Permission Denied.");
    return text;
};

root method .uninit_has_text() {
    text = [];
};