parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Re: HomeSite comments

Никита Козин 01.02.2006 14:16 / 01.02.2006 14:21

Немного громозко и неудобно, но зато читабельно :)
^if(...){
	^rem{ *** комментарий ***}
	^if(...){
		^rem{ *** комментарий ***}
	}{
		^rem{ *** комментарий ***}
		^if(...){
			^rem{ *** комментарий ***}
		}{
			^rem{ *** комментарий ***}
		}
	}
}{
	^rem{ *** комментарий ***}
}
Кстати, для пользователей HomeSite (каковым и я тоже являюсь) будет интересны следующие два скрипта (оригинал упоминался в форуме, но в нем были баги и неточности, я его изменил немного «под себя»:

comment.js
var document = Application.ActiveDocument;


function Main () {
	var selection_lines = document.SelText.split(String.fromCharCode(13) + String.fromCharCode(10));
	var selection_start = document.SelStart;
	var selection_stop = document.SelStart + document.SelLength;
	var comment_str = get_comment_type(document.Filename);

	var line_start = get_line_number(document.Text, selection_start);
	var line_stop = get_line_number(document.Text, selection_stop - selection_lines.length + 1);

	var empty_string = new RegExp("^\\s*$");
	if (line_start != line_stop && empty_string.test(document.Lines(line_stop))) {
		line_stop--;
	}

	for (n = line_start; n <= line_stop; n++) {
		document.Lines(n) = comment_str + document.Lines(n);
	}

}


function get_offset (sText, iLine) {
	var iPos = iOffset = 0;
	while (iPos < iLine) {
		if (sText.substr(iOffset, 2) == "\r\n") {
			iLine++;
			iOffset++;
			iPos++;
		}
		iOffset++;
	}
	return iOffset;
}


function get_line_number (sText, iOffset) {
	var iPos = iLine= 0;
	while (iPos < iOffset) {
		if (sText.substr(iPos, 2) == "\r\n") {
			iLine++;
			iOffset++;
			iPos++;
		}
		iPos++;
	}
	return iLine;
}


function get_comment_type (filename) {
	var ext = filename.substring(filename.lastIndexOf('.'));
	var result = "#";
	if (ext == ".pl" || ext == ".pm" || ext == ".cgi" || ext == ".p" || ext == ".cfg" || ext == ".html") {
		result = "#";
	} else if (document.Lines(0).charAt(0) == "#" || document.Lines(0).charAt(0) == "@") {
		result = "#";
	} else if (ext == ".js" || ext == ".java" || ext == ".cpp" || ext == ".h" || ext == ".sc") {
		result = "//";
	} else if (ext == ".asp" || ext == ".vbs") {
		result = "\' ";
	} else if (ext == ".inf" || ext == ".ini") {
		result = ";";
	}
	return result;
}
uncomment.js
var document = Application.ActiveDocument;


function Main () {
	var cursorY = document.CaretPosY - 1;
	var cursorX = document.CaretPosX;
	var SelArr = document.SelText.split(String.fromCharCode(13) + String.fromCharCode(10));
	var lines = SelArr.length;

	var commentStr = get_comment_type(document.Filename);
	var regexp = new RegExp("(^\\s*)" + commentStr + "(.*)");
	var regexp_match_start = new RegExp("\\$");
	var regexp_match_stop = new RegExp("\\[dollar\\]");

	if(!document.SelText) {
		if (regexp.test(document.Lines(cursorY))) {
			var line = document.Lines(cursorY).replace(regexp_match_start, "[dollar]")
			if (regexp.test(line)) {
				line = line.replace(regexp, RegExp.$1 + RegExp.$2)
			}
			document.Lines(cursorY) = line.replace(regexp_match_stop, String.fromCharCode(36))
		}
	} else {
		for (n = cursorY; n < (cursorY + lines); n++) {
			var line = document.Lines(n).replace(regexp_match_start, "[dollar]")
			if (regexp.test(line)) {
				line = line.replace(regexp, RegExp.$1 + RegExp.$2)
			}
			document.Lines(n) = line.replace(regexp_match_stop, String.fromCharCode(36))
		}
	}
}


function get_comment_type (filename) {
	var ext = filename.substring(filename.lastIndexOf('.'));
	var result = "#";
	if (ext == ".pl" || ext == ".pm" || ext == ".cgi" || ext == ".p" || ext == ".cfg" || ext == ".html") {
		result = "#";
	} else if (document.Lines(0).charAt(0) == "#" || document.Lines(0).charAt(0) == "@") {
		result = "#";
	} else if (ext == ".js" || ext == ".java" || ext == ".cpp" || ext == ".h" || ext == ".sc") {
		result = "//";
	} else if (ext == ".asp" || ext == ".vbs") {
		result = "\' ";
	} else if (ext == ".inf" || ext == ".ini") {
		result = ";";
	}
	return result;
}
Инструкция по установке
1. Сохранить эти два файла в папку с ../HomeSite/Scripts/
2. Зайти в меню Options › Customize › Script Shortcuts
3. Добавить эти два файла

P.S.
Очень удобно назначить им «горячки» Ctrl + ` для комментирования и Ctrl + Shift + ` для обратного действия.
Если не выделен никакой текст — комментируется текущая строка.