
#Область СлужебныйПрограммныйИнтерфейс

Процедура ПортироватьНабор(Знач Набор, Знач СоответствиеЗамен) Экспорт

	Для Каждого Элемент Из Набор Цикл
		ПортироватьФайл(Элемент.Ключ, Элемент.Значение, СоответствиеЗамен);
	КонецЦикла;
	
КонецПроцедуры

Процедура ПортироватьФайл(Знач Файл1С, Знач ФайлОС, Знач СоответствиеЗамен) Экспорт
	
	ФайлМодуля = Новый Файл(Файл1С);

	Если Не ФайлМодуля.Существует() Тогда
		Возврат;
	КонецЕсли;

	Модуль = ПрочитатьМодуль(Файл1С);

	Если СтрДлина(Модуль) = 0 Тогда
		Возврат;
	КонецЕсли;

	ОбработатьЗаменыМодуля(Модуль, СоответствиеЗамен);
	ЗаписатьМодуль(ФайлОС, Модуль);
	
КонецПроцедуры

Функция ПолучитьСопоставлениеФайлов(Знач ОсновнойПутьИсходников) Экспорт

	Сопоставление = Новый Соответствие();
	ФайлыМодулей  = НайтиФайлы(ОсновнойПутьИсходников, "*.bsl", Истина);
	Признак       = "// OneScript: ";

	Для Каждого Файл Из ФайлыМодулей Цикл

		ТекущийФайл = Файл.ПолноеИмя;
		ТекстФайла  = Новый ТекстовыйДокумент();
		ТекстФайла.Прочитать(ТекущийФайл, "UTF-8");

		Для Н = 1 По ТекстФайла.КоличествоСтрок() Цикл

			ТекущаяСтрока = СокрЛП(ТекстФайла.ПолучитьСтроку(Н));

			Если Не ЗначениеЗаполнено(ТекущаяСтрока) Тогда
				Прервать;
			КонецЕсли;

			Если СтрНайти(ТекущаяСтрока, Признак) > 0 Тогда

				ПутьOS = СтрЗаменить(ТекущаяСтрока, Признак, "");
				ПутьOS = СокрЛП(ПутьOS);
				ПутьOS = СтрЗаменить(ПутьOS, "./", ОсновнойПутьИсходников);
				Сопоставление.Вставить(ТекущийФайл, ПутьOS);

			КонецЕсли;

		КонецЦикла;

	КонецЦикла;

 	Возврат Сопоставление;

КонецФункции 

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ПрочитатьМодуль(Знач ФайлМодуля)

	ЧтениеТекста = Новый ЧтениеТекста(ФайлМодуля, "UTF-8");
	Модуль       = ЧтениеТекста.Прочитать();
	ЧтениеТекста.Закрыть();
	
	Возврат Модуль;

КонецФункции

Процедура ЗаписатьМодуль(Знач ФайлМодуля, Знач Модуль)

	ТекстовыйДокумент = Новый ТекстовыйДокумент();
	ТекстовыйДокумент.УстановитьТекст(Модуль);
	ТекстовыйДокумент.Записать(ФайлМодуля);

КонецПроцедуры

Процедура ОбработатьЗаменыМодуля(Модуль, СоответствиеЗамен)

	Для Каждого Замена Из СоответствиеЗамен Цикл
		Модуль = СтрЗаменить(Модуль, Замена.Ключ, Замена.Значение);
	КонецЦикла;

КонецПроцедуры

#КонецОбласти

