// AZJIO, 12.09.2019
// Description(1033): Combine the lines of two lists, one of which is on the clipboard
// Description(1049): Объединить строки двух списков, один из которых в буфере обмена
//
// Usage:
//   Call("Scripts::Main", 1, "Combine_Lists.js")
// Примечание:
// Списки не обязательно должны быть равными по количеству строк. Если ничего не выделено, то используется весь текст.

var sText = AkelPad.GetClipboardText();
if(sText == "") {
	WScript.Echo('Clipboard is empty');
	WScript.Quit();
};
sText = sText.replace(/\r\n|\n\r|\r/g, '\n'); // замена смешанного \r\n на однотипный \n
/*
sText = sText.replace(/\r\n/g, '\n'); // замена \r\n
sText = sText.replace(/\n\r/g, '\n'); // замена \r\n
sText = sText.replace(/\r/g, '\n'); // замена \r\n
*/
var aStr2 = sText.split('\n'); // получаем массив строк
// sText = '' // очищаем переменную
var sText = AkelPad.GetTextRange(0, -1); // получаем текст из AkelPad
var bAllText = false;

sText = AkelPad.GetSelText() // если ничего не выделенно, то получаем весь текст документа
if(sText == "") {
	sText = AkelPad.GetTextRange(0, -1); // получаем текст из AkelPad
	bAllText = true
};

// тут проверить тип переноса строк у исходного текста

sText = sText.replace(/\r\n|\n\r|\r/g, '\n'); // замена смешанного \r\n на однотипный \n
var aStr1 = sText.split('\n'); // получаем массив строк

if(bAllText) {
	AkelPad.SetSel(0, -1);
}
AkelPad.ReplaceSel(CombineLists(aStr1, aStr2))

function CombineLists(aStr1, aStr2) {
	var Max;
	var Str = '';

	if(aStr1.length >= aStr2.length) {
		Max = aStr1.length
		Min = aStr2.length
		for(var i = 0; i <= Min - 1; i++) {
			aStr1[i] += aStr2[i];
		};
	}
	else {
		Max = aStr2.length
		Min = aStr1.length
		aStr1.length = Max
		for(var i = 0; i <= Min - 1; i++) {
			aStr1[i] += aStr2[i];
		};
		for(var i = Min; i <= Max - 1; i++) {
			aStr1[i] = aStr2[i];
		};
	}
	for(var i = 0; i <= Max - 1; i++) {
		Str += aStr1[i] + '\n';
	};

	Str = Str.slice(0, -1);
	return Str;
}