/*
Recode
Version: 1.1
Author: mozers
------------------------------------------------
Сохраняет файл win1251 в указанной кодировке
или преобразует кодировку открытого файла к win1251
Пример подключения:
   command.name.21.*=Сохранить файл WIN-1251 в кодировке KOI-8
   command.21.*=WSCRIPT "$(SciteDefaultHome)\tools\Recode.js" koi8 save
   command.mode.21.*=subsystem:windows,savebefore:no,quiet:yes

   command.name.25.*=Преобразовать открытый файл из кодировки DOS866 в WIN-1251
   command.25.*=WSCRIPT "$(SciteDefaultHome)\tools\Recode.js" cp866
   command.mode.25.*=subsystem:windows,savebefore:no,quiet:yes

Доступные для данной ОС кодировки перечислены в системном реестре HKEY_CLASSES_ROOT\MIME\Database\Charset
*/

var WshShell = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var stream = new ActiveXObject("ADODB.Stream");

try {
	var SciTE=new ActiveXObject("SciTE.Helper");
} catch(e) {
	WScript.Echo("Please install SciTE Helper before!");
	WScript.Quit(1);
}

function Recode(text_in, charset_in, charset_out){
	stream.Open();
	stream.Type = 2;
	stream.Charset = charset_out;
	stream.WriteText(text_in);
	stream.Flush();
	stream.Position = 0;
	stream.Charset = charset_in;
	var text_out = stream.ReadText(-1);
	stream.Close();
	return (text_out);
}

function WriteFile( filename, text){
	var f = fso.OpenTextFile(filename, 2, true);
	f.Write(text);
	f.Close();
	return (true);
}

var Args = WScript.Arguments;
var encode = Args(0);
var all_text = SciTE.GetText;
var filename = SciTE.Props ("FilePath");
var out;
if (Args.length > 1){
	var src_code = SciTE.Props ("code.page.name");
	if (src_code != "WIN-1251") {
		WScript.Echo("Исходная кодировка текста отлична от windows-1251.\nПерекодировка невозможна!");
		WScript.Quit(1);
	}
	out = Recode(all_text, "windows-1251", encode);
	WriteFile(filename, out);
}else{
	out = Recode(all_text, encode, "windows-1251");
	SciTE.Send("menucommand:207"); //IDM_SELECTALL
	SciTE.ReplaceSel(out);
}
