// Name: ChangeLog macros for SlickEdit // Version: 0.1 // Author: Ivan N. Zlatev // License: MIT/X11 // #define NAME "Ivan N. Zlatev" #define EMAIL "" _command void delete_line_or_selection () name_info(',') { if (_select_type () :== 'LINE') { delete_selection (); } else { select_line (); delete_line (); } } _command void changelog_insert_entry () name_info(',') { add_changelog_entry (false); } _command void changelog_append_entry () name_info(',') { add_changelog_entry (true); } _command void changelog_append_file_to_entry() name_info(',') { _str changeLogFileName = find_changelog_file_for (p_buf_name); if (changeLogFileName == null) { message ("No ChangeLog file found!"); return; } _str currentFileName = get_current_buffer_filename (); edit (changeLogFileName); _undo ('S'); push_bookmark (); _GoToROffset (0); _str lineText = null; int fileListEndPos = 0; p_line++; // skip the author line while (fileListEndPos == 0) { // find the line with the list of files "xxx, yyy: " p_line++; get_line (lineText); // first line fileListEndPos = lastpos (": ", lineText); } if (fileListEndPos == 0) { message ("Malformed ChangeLog."); return; } fileListEndPos--; // move before the : while (fileListEndPos != 0) { right (); fileListEndPos--; } _insert_text (", " :+ currentFileName); pop_bookmark (); } _str changeLogFileNames[] = { "Changelog", "ChangeLog", "ChangeLog.txt" }; static _str find_changelog_file_for (_str file) { // TODO: file is a path - use it for searching // _str changeLogFileName = null; for (i=0; i < changeLogFileNames._length (); i++) { if (file_exists (changeLogFileNames[i])) { changeLogFileName = changeLogFileNames[i]; break; } } return changeLogFileName; } static void add_changelog_entry (boolean append = false) { int i = 0; _str changeLogFileName = find_changelog_file_for (p_buf_name); if (changeLogFileName == null) { message ("No ChangeLog file found!"); return; } _str currentFileName = get_current_buffer_filename (); edit (changeLogFileName); _undo ('S'); _GoToROffset (0); _str date = get_changelog_date (); _str lineText = null; get_line (lineText); // first line boolean shouldAppend = append && (pos (date, lineText) != 0); if (shouldAppend) { // no current entry p_line += 2; // skip author line and the blank after while (strip (lineText)._length () != 0) { p_line++; get_line (lineText); } } else { _insert_text (get_changelog_date () :+ " " :+ NAME :+ " " :+ EMAIL); _insert_text (p_newline :+ p_newline); } _insert_text ("\t* " :+ currentFileName :+ ": "); push_bookmark (); _insert_text (p_newline); if (!shouldAppend) _insert_text (p_newline); pop_bookmark (); } static _str get_current_buffer_filename () { return strip_filename (p_buf_name,'DP'); } // formats to yyyy-mm-dd // I wasn't sure if SlickEdit script supports regexp... // static _str get_changelog_date () { _str date = _date ("U"); // mm/dd/yyyy _str month, day, year; int day_pos, year_pos; if (strcmp (substr (date, 2, 1), "/") == 0) { // single digit month month = "0" :+ substr (date, 1, 1); day_pos = 3; } else { month = substr (date, 1, 2); day_pos = 4; } if (strcmp (substr (date, day_pos + 1, 1), "/") == 0) { // single digit day day = "0" :+ substr (date, day_pos, 1); year_pos = day_pos + 2; } else { day = substr (date, day_pos, 2); year_pos = day_pos + 3; } year = substr (date, year_pos, 4); return (year :+ "-" :+ month :+ "-" :+ day); }