parent $generic_editor
object $code_editor
var $root child_index 0
var $root owners [$code_editor]
var $root owned [$code_editor]
var $root fertile 0
var $has_commands commands [["compile", 'compile_cmd], ["refresh", 'refresh_cmd]]
var $has_commands shortcuts []
var $root inited 1
var $command_aliases command_aliases []
var $root manager $code_editor
var $root writable [$code_editor]
var $root readable ['parameters, 'methods, 'code]
var $root dbref 'code_editor
var $old_command_environment verb_cache #[]
var $old_command_environment command_cache [["compile", 'compile_cmd], ["refresh", 'refresh_cmd], ["@abort|abort", 'abort_cmd], ["quit|@quit", 'quit_cmd], ["list|nlist *", 'list_cmd], ["ins?ert *", 'insert_cmd], ["del?ete *", 'del_line_cmd], ["join *", 'join_cmd], ["enter", 'enter_cmd], ["help", 'help_screen]]
var $old_command_environment shortcuts_cache [["\"*", 'add_line_cmd, [1]], ["s/*/*", 'sub_cmd, ["", 1, 2]], ["fill * @*", 'fill_cmd, ["", 1, 2]], ["fill *", 'fill_cmd, ["", 1, ""]]]
method start_editing
arg what;
var ref, obj, method, code;
// called by $user_input.edit_cmd
ref = $parse.reference(what);
obj = (| sender().match_environment(ref[1]) |);
if (!obj) {
sender().tell(what + " does not describe an editable method.");
return 0;
}
method = tosym(ref[2]);
catch any {
code = sender().run_with_users_perms(obj, 'list_method, method, 2);
} with handler {
if (error() == ~methodnf) {
code = [];
} else {
sender().tell(("You cannot edit " + what) + ".");
sender().tell("Error: " + ((traceback()[1])[2]));
return 0;
}
}
sender().tell(("Now editing " + what) + ".");
code = $generic_editor.adjust(code, 'spaces);
// user doing editing, obj to be programmed, method to be programmed, code, current line
// number, changes made
return #[['user, sender()], ['obj, obj], ['method, method], ['text, code], ['cur_line, 1], ['changed, 0]];
.
method compile_cmd
arg editing, cmd;
var errors, last_edit;
.perms(sender(), 'parser);
catch any {
last_edit = (" // Edited: " + ($time.ldate('mdy, 'dash))) + "/";
last_edit = (last_edit + ($time.ltime('12hr, '_ampm))) + " ";
last_edit = (last_edit + "by: ") + ((editing['user]).namef('ref));
errors = (editing['user]).run_with_users_perms(editing['obj], 'compile, (editing['text]) + [last_edit], editing['method]);
if (errors) {
(editing['user]).tell(errors);
} else {
(editing['user]).tell("Method compiled.");
// clear modified flag
editing = editing.replace('changed, 0);
}
} with handler {
(editing['user]).tell("An error occurred attempting to compile.");
(editing['user]).tell("The error was " + ((traceback()[1])[2]));
}
return editing;
.
method refresh_cmd
arg editing, com;
var code;
// re-loads method if not changed
.perms(sender(), 'parser);
if (editing['changed]) {
(editing['user]).tell("Changes have been made. Compile first to refresh.");
} else {
catch any {
code = (editing['user]).run_with_users_perms(editing['obj], 'list_method, editing['method], 2);
} with handler {
(editing['user]).tell("Unable to list method into buffer, error was " + ((traceback()[1])[2]));
return editing;
}
editing = editing.replace('text, code);
(editing['user]).tell("Done.");
}
return editing;
.
method help_msg
var msg;
msg = [];
msg = msg + ["The code editor allows you to modify and re-compile methods."];
msg = msg + ["It includes these commands it inherits from the generic editor:"];
msg = msg + pass();
msg = msg + [""];
msg = msg + ["And adds the following:"];
msg = msg + [" compile compile and store current text"];
msg = msg + [" refresh re-load compiled method"];
msg = msg + [""];
return msg;
.