// http://akelpad.sourceforge.net/forum/viewtopic.php?p=20315#20315
// Description(1033): Formation paragraph by previous line indented
// Description(1049): Формирование отступа по предыдущей строке
// Version: 1.1 (2012.11.05)
// Author: VladSh

if (AkelPad.IsAkelEdit()) {
	if (! AkelPad.Include("selCompleteLine.js")) WScript.Quit();
	var paragraph = "";
	var nPos = AkelPad.GetSelStart();
	var oRange = getRangeCompleteLine(nPos, nPos);
	var sLine = getTextbyRange(oRange);
	var oValues = separateRow(sLine);
	if (oValues.right) {
		// находимся на строке с текстом
		paragraph = pBreak + oValues.left + addedShiftBlock(oValues.right);
		nPos = oRange[1];
	}
	else {
		// находимся на пустой строке или это первая строка файла
		if (oValues.left || oRange[0] == 0) {
			// начальный отступ уже имеется - проставляем обычный отступ, беря из настроек
			paragraph = getShift();
		}
		else {
			// начальный отступ отсутствует - пытаемся взять его с предыдущей строки, как это делает Eclipse
			nPos = oRange[0] - 1;
			oRange = getRangeCompleteLine(nPos, nPos);
			sLine = getTextbyRange(oRange);
			oValues = separateRow(sLine);
			if (oValues.left)
				paragraph = oValues.left + addedShiftBlock(oValues.right);
			else
				paragraph = getShift();
			nPos = oRange[1] + 1;
		}
	}
	AkelPad.SetSel(nPos, nPos);
	AkelPad.ReplaceSel(paragraph);
}

// Определяем, необходим ли дополнительный отступ;
// необходим когда предыдущая строка является началом блока
function addedShiftBlock(lineValuePrev) {
	var sh = "";
	if (lineValuePrev.charAt(lineValuePrev.length - 1) == "{")
			sh = getShift();
	return sh;
}