C++ glimmerout g++ -g %2 -o %3 2>&1 %term% gdb %3 %term% %1/%3 1 0 4 H hpp hxx hh HH C cpp cxx cc CC defs_full ^#\ *\t*\(include\|pragma\) \(\n\) cpp-comment // \n c-comment /\* \*/ string " \("\|\n\) define_comment ^#if 0 ^#endif chars '\\?[a-zA-Z0-9_\\()#@!$%^&*-=+"{}<>]' defs ^#\ *\t*\(if\|ifdef\|ifndef\|else\|elif\|define\|endif\|undef\)\b typedefs \b\(bool\|char\|float\|double\|short\|int\|long\|signed\|unsigned\|register\|void\)\b keywords \b\(asm\|auto\|break\|case\|const\|continue\|default\|do\|else\|enum\|extern\|for\|goto\|if\|return\|sizeof\|static\|struct\|switch\|typedef\|union\|volotile\|while\)\b cpp \b\(and\|and_eq\|bitend\|bitor\|catch\|class\|compl\|const_cast\|delete\|dynamic_cast\|explicit\|export\|false\|friend\|inline\|mutable\|namespace\|new\|not\|not_eq\|operator\|or\|or_eq\|private\|protected\|public\|reinterpret_cast\|static_cast\|template\|this\|throw\|true\|try\|typeid\|typename\|using\|virtual\|volatile\|wchar_t\|xor\|xor_eq\)\b glib \b\(gint\|gfloat\|gdouble\|gboolean\|gchar\|gpointer\|guint\|guchar\|GList\|GSList\|GHash\|GString\|GModule\|GTable\|GTree\)\b macros \b[A-Z_][A-Z0-9_\-]+\b gnu-types \b\(Gtk\|Gds\|Gdk\|Gnome\)[a-zA-Z0-9_]+ gnu-funcs \b\(gtk\|gdk\|g\|gnome\|gds\)_[a-zA-Z0-9_]+ class-members ^[a-zA-Z_][a-zA-Z0-9_]*:: labels ^[a-zA-Z_][a-zA-Z_]*: whole_numbers1 \b[0-9]\b whole_numbers2 \b[1-9][0-9]*\b float_numbers1 \.\b[0-9]+\b float_numbers2 \b[0-9]*\.\W hex_numbers \b0x[0-9a-fA-F]+\b oct_numbers \b0[0-7]+\b bin_numbers \b0[01]+\b operators \(\*\|\*\*\|->\|::\|>>\|<<\|>\|<\|=\|==\|!=\|<=\|>=\|++\|--\|%\|+\|-\|||\|&&\|!\|+=\|-=\|\*=\|/=\|%=\|~\) punctuation \((\|)\|;\|:\|{\|}\|,\|\[\|\]\|\.\) import glimmer import string def cpp_enter_callback(): insert = "\n" extralen = 0 slen = 0 file = glimmer.get_file_number() tstart = glimmer.line_start() tend = glimmer.current_position() if (tend-tstart) > 0: chars = glimmer.get_text(tstart, tend) slen = len(chars) if slen > 0: index = 0 while index < slen: c = chars[index] if c == '\t' or c == ' ': insert = insert + chars[index] index = index+1 else: break c = chars[slen-1] if c == '{': extralen = glimmer.get_file_tab_width(file) if glimmer.get_file_use_spaces(file): while extralen > 0: insert = insert + " " extralen = extralen-1 else: insert = insert + '\t' glimmer.insert(insert) glimmer.register_signal_hook("enter-pressed", cpp_enter_callback) def cpp_tab_callback(): tablen = 0 insertchars = "" file = glimmer.get_file_number() if glimmer.get_file_use_spaces(file): tablen = glimmer.get_file_tab_width(file) pos = glimmer.current_position() lstart = glimmer.line_start() if pos - lstart > 0: str1 = glimmer.get_text(lstart, pos) else: str1 = "" if glimmer.get_tab_stops(): str1 = string.expandtabs(str1, tablen) len1 = len(str1) del str1 tablen = tablen - (len1 % tablen) while tablen > 0: insertchars = insertchars + " " tablen = tablen-1 else: insertchars = insertchars + "\t" glimmer.insert(insertchars) glimmer.register_signal_hook("tab-pressed", cpp_tab_callback) def insert_c_comment(): glimmer.freeze() if glimmer.has_selection(): start = glimmer.selection_start() end = glimmer.selection_end() file = glimmer.get_file_number() glimmer.move(0) glimmer.insert_in(file, start, "/* ") glimmer.insert_in(file, end+3, " */") glimmer.move_to(end+6) else: glimmer.insert("/*\n *\n*/") glimmer.move(-3) glimmer.thaw() def insert_cpp_comment(): glimmer.freeze() if glimmer.has_selection(): start = glimmer.selection_start() end = glimmer.selection_end() file = glimmer.get_file_number() glimmer.move(0) line1 = glimmer.line_by_pos(start) line2 = glimmer.line_by_pos(end) cur = line1 print start print end while cur <= line2: glimmer.move_to_col(0) glimmer.move_to_line(cur) glimmer.insert("//") cur = cur+1 glimmer.move_to(end+((line2-line1)+1)*2) else: glimmer.insert("//") glimmer.thaw() def open_cpp_header(): import string file = 0 fname = "" file = glimmer.get_file_number() fname = glimmer.get_filename(file) path = "" noext = "" fullfile = "" openfile = 0 if string.count(fname, ".C"): openfile = 1 path = glimmer.get_path(file) noext = glimmer.get_file(file) fullfile = path + "/" + noext + ".H" elif string.count(fname, ".h"): openfile = 1 path = glimmer.get_path(file) noext = glimmer.get_file(file) fullfile = path + "/" + noext + ".cxx" elif string.count(fname, ".H"): openfile = 1 path = glimmer.get_path(file) noext = glimmer.get_file(file) fullfile = path + "/" + noext + ".C" elif string.count(fname, ".cxx"): openfile = 1 path = glimmer.get_path(file) noext = glimmer.get_file(file) fullfile = path + "/" + noext + ".h" if openfile: openedfile = open(fullfile) if openedfile: del openedfile glimmer.open_file(fullfile) glimmer.add_sub_to_menu("_Insert/", "C++", -1) glimmer.add_item_to_menu("_Insert/C++/", "Comment (C)", "", "", -1, insert_c_comment) glimmer.add_item_to_menu("_Insert/C++/", "Comment (C++)", "", "", -1, insert_cpp_comment) glimmer.add_item_to_popup_menu("Open Reverse", -1, open_cpp_header) glimmer.add_item_to_popup_menu("Comment (C)", -1, insert_c_comment) glimmer.add_item_to_popup_menu("Comment (C++)", -1, insert_cpp_comment)