1
0
mirror of https://github.com/ret-Phoenix/SmartConfigurator.git synced 2026-06-16 00:57:28 +02:00
Files

95 lines
4.6 KiB
Plaintext
Raw Permalink Normal View History

Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ)
ФайлМанифеста = Новый Файл(ОбъединитьПути(Путь, "lib.config"));
Если ФайлМанифеста.Существует() Тогда
СтандартнаяОбработка = Ложь;
ОбработатьМанифест(ФайлМанифеста.ПолноеИмя, Путь, Отказ);
Иначе
ОбработатьСтруктуруКаталоговПоСоглашению(Путь, СтандартнаяОбработка, Отказ);
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьМанифест(Знач Файл, Знач Путь, Отказ)
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(Файл);
Чтение.ПерейтиКСодержимому();
Если Чтение.ЛокальноеИмя <> "package-def" Тогда
Отказ = Истина;
Чтение.Закрыть();
Возврат;
КонецЕсли;
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.Комментарий Тогда
Продолжить;
КонецЕсли;
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если Чтение.ЛокальноеИмя = "class" Тогда
ФайлКласса = Новый Файл(Путь + "/" + Чтение.ЗначениеАтрибута("file"));
Если ФайлКласса.Существует() и ФайлКласса.ЭтоФайл() Тогда
Идентификатор = Чтение.ЗначениеАтрибута("name");
Если Не ПустаяСтрока(Идентификатор) Тогда
ДобавитьКласс(ФайлКласса.ПолноеИмя, Идентификатор);
КонецЕсли;
Иначе
ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте";
КонецЕсли;
Чтение.Прочитать(); // в конец элемента
КонецЕсли;
Если Чтение.ЛокальноеИмя = "module" Тогда
ФайлКласса = Новый Файл(Путь + "/" + Чтение.ЗначениеАтрибута("file"));
Если ФайлКласса.Существует() и ФайлКласса.ЭтоФайл() Тогда
Идентификатор = Чтение.ЗначениеАтрибута("name");
Если Не ПустаяСтрока(Идентификатор) Тогда
ДобавитьМодуль(ФайлКласса.ПолноеИмя, Идентификатор);
КонецЕсли;
Иначе
ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте";
КонецЕсли;
Чтение.Прочитать(); // в конец элемента
КонецЕсли;
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
КонецПроцедуры
Процедура ОбработатьСтруктуруКаталоговПоСоглашению(Путь, СтандартнаяОбработка, Отказ)
КаталогКлассов = Новый Файл(ОбъединитьПути(Путь, "Классы"));
КаталогМодулей = Новый Файл(ОбъединитьПути(Путь, "Модули"));
Если КаталогКлассов.Существует() Тогда
Файлы = НайтиФайлы(КаталогКлассов.ПолноеИмя, "*.os");
Для Каждого Файл Из Файлы Цикл
СтандартнаяОбработка = Ложь;
ДобавитьКласс(Файл.ПолноеИмя, Файл.ИмяБезРасширения);
КонецЦикла;
КонецЕсли;
Если КаталогМодулей.Существует() Тогда
Файлы = НайтиФайлы(КаталогМодулей.ПолноеИмя, "*.os");
Для Каждого Файл Из Файлы Цикл
СтандартнаяОбработка = Ложь;
ДобавитьМодуль(Файл.ПолноеИмя, Файл.ИмяБезРасширения);
КонецЦикла;
КонецЕсли;
КонецПроцедуры