% TurboPascal Mode for the jed editor % jed097b9 and later % % Version: minimal % Update : 06 apr 1995 % Author : Carsten Tinggaard Nielsen, tinggard@iesd.auc.dk % variable tpas_objname = "*UnDef ObjectName*"; variable tpas_indent = 2; variable tpas_tab_save = 0; define tpas_is_comment() { return 0; } define tpas_getname(tellstring) { variable gname = read_mini(tellstring, Null_String, Null_String); return gname; } % -------------------------------------------------------------- % Utility routines define ins_snlp (pos, str) { % insert str, newline and indent to pos % note that str must be formatted with Sprintf insert(str); insert("\n"); if (pos > 0) loop(pos) insert_single_space(); } define tpas_pos() { return what_column() - 1;} define tpas_paspf(p, name) { ins_snlp(p, "(* "); ins_snlp(p, " * "); ins_snlp(p, " *)"); ins_snlp(p, "BEGIN"); insert("END; (* "); insert(name); ins_snlp(p, " *)"); } define tpas_delim_string() { return "--------------------------------------------------"; } define tpas_prog_unit_start() { variable s = tpas_delim_string(); vinsert("(* %s\n", s); insert(" * Author : Carsten Tinggaard Nielsen\n"); insert(" * Project: \n"); insert(" * Module : \n * \n"); insert(" * $Revision$ $Date$\n"); insert(" * $Locker$ $Source$\n"); vinsert(" * %s *)\n", s); insert("(*$I-,V-,B+*)\n"); } define tpas_prog_unit_end() { insert("\n USES\n DOS;\n\n"); insert("BEGIN\n"); insert("END.\n"); insert("(* History:\n * --------\n * $Log$\n *)\n"); } define tpas_main() { variable progname = tpas_getname("Name of program:"); bob(); vinsert ("PROGRAM %s;\n", progname); tpas_prog_unit_start(); insert("(*$M 16000, 128000, 512000 *)\n"); tpas_prog_unit_end(); bob(); } define tpas_unit() { variable unitname = tpas_getname("Name of unit:"); bob(); vinsert ("UNIT %s;\n", unitname); insert("INTERFACE\n\n USES\n DOS;\n\n"); insert("IMPLEMENTATION\n"); tpas_prog_unit_start(); tpas_prog_unit_end(); bob(); } define tpas_proc() { variable p = tpas_pos(); variable name = tpas_getname("Procedure:"); ins_snlp(p, sprintf("PROCEDURE %s();", name)); tpas_paspf(p, name); bsearch(");"); } define tpas_func() { variable p = tpas_pos(); variable name = tpas_getname("Function:"); ins_snlp(p, sprintf("FUNCTION %s() : ;", name)); tpas_paspf(p, name); bsearch(") :"); } define tpas_wrap_hook() { variable p; push_spot(); go_up_1 (); bol_skip_white(); p = _get_point (); if (looking_at("BEGIN")) { go_down_1 (); skip_white (); p = what_column (); bol_trim (); whitespace (p + tpas_indent); } pop_spot(); } % -------------------------------------------------------------- % keymap definiiton % !if (keymap_p("TPas")) { make_keymap("TPas"); %undefinekey ("^C"); definekey_reserved ("tpas_main", "m", "TPas"); definekey_reserved ("tpas_unit", "u", "TPas"); definekey_reserved ("tpas_proc", "p", "TPas"); definekey_reserved ("tpas_func", "f", "TPas"); definekey ("self_insert_cmd", "\t", "TPas"); } create_syntax_table("TPas"); define_syntax("(*", "*)", '%', "TPas"); define_syntax ("([", ")]", '(', "TPas"); define_syntax ('\'', '\'', "TPas"); define_syntax ("0-9a-zA-Z_", 'w', "TPas"); % words define_syntax ("-+0-9a-FA-F.", '0', "TPas"); % Numbers define_syntax (",;.?:", ',', "TPas"); define_syntax ("@$()[]%-+/*=<>^", '+', "TPas"); set_syntax_flags ("TPas", 5); % case insensitive + C-mode #ifdef HAS_DFA_SYNTAX %%% DFA_CACHE_BEGIN %%% private define setup_dfa_callback (name) { dfa_enable_highlight_cache("tpascal.dfa", name); dfa_define_highlight_rule("\\(\\*.*\\*\\)", "Qcomment", name); dfa_define_highlight_rule("^([^\\(]|\\([^\\*])*\\*\\)", "Qcomment", name); dfa_define_highlight_rule("\\(\\*.*", "comment", name); dfa_define_highlight_rule("{.*}", "Qcomment", name); dfa_define_highlight_rule("^[^{]*}", "Qcomment", name); dfa_define_highlight_rule("{.*", "comment", name); dfa_define_highlight_rule("^[ \t]*\\*+([ \t].*)?$", "comment", name); dfa_define_highlight_rule("[A-Za-z_][A-Za-z_0-9]*", "Knormal", name); dfa_define_highlight_rule("[0-9]+(\\.[0-9]+)?([Ee][\\+\\-]?[0-9]*)?", "number", name); dfa_define_highlight_rule("\\$[0-9A-Fa-f]*", "number", name); dfa_define_highlight_rule("'[^']*'", "string", name); dfa_define_highlight_rule("'[^']*$", "string", name); dfa_define_highlight_rule("#($[0-9A-Fa-f]+|[0-9]+)", "string", name); dfa_define_highlight_rule("[ \t]+", "normal", name); dfa_define_highlight_rule("[\\(\\[\\]\\),;\\.\\?:]", "delimiter", name); dfa_define_highlight_rule("[@\\-\\+/\\*=<>\\^]", "operator", name); dfa_build_highlight_table(name); } dfa_set_init_callback (&setup_dfa_callback, "TPas"); %%% DFA_CACHE_END %%% #endif () = define_keywords ("TPas", "doifofto", 2); () = define_keywords ("TPas", "endfornewnilsetvar", 3); () = define_keywords ("TPas", "bytecasecharelseexitfilehaltrealtextthentypeunituseswithword", 4); () = define_keywords ("TPas", "arraybeginconstuntilwhile", 5); () = define_keywords ("TPas", "downtoinlineobjectrecordrepeatstring", 6); () = define_keywords ("TPas", "booleanintegerlongintpointerprogram", 7); () = define_keywords ("TPas", "functionshortint", 8); () = define_keywords ("TPas", "interfaceotherwiseprocedure", 9); () = define_keywords ("TPas", "implementation", 14); define tpas_par_sep_hook() { variable p; push_spot(); pop_spot(); } % -------------------------------------------------------------- % Main entry % define tpas_mode () { set_mode("TPas", 2); use_keymap("TPas"); use_syntax_table("TPas"); set_buffer_hook("wrap_hook", "tpas_wrap_hook"); set_buffer_hook("par_sep", "tpas_par_sep_hook"); %tpas_set_localkeys(); run_mode_hooks("tpas_mode_hook"); }