1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-16 11:38:11 +02:00
OpenIntegrations/.github/workflows/os/oint_docs.os

151 lines
6.2 KiB
Plaintext
Raw Normal View History

#Использовать osparser
#Использовать cmdline
Перем СоответствиеМодулейКоманд;
Перем ТекущийМодуль;
Перем МассивРасположенийМодулей;
Перем Парсер;
Перем Расположение;
Перем СПодкаталогами;
Перем КаталогДокументации;
Процедура ПриСозданииОбъекта()
Путь = "./OPI";
СПодкаталогами = Истина;
КаталогДокументации = "./docs";
ПроверитьСоздатьКаталог(КаталогДокументации);
СоздатьФайлыДокументации();
КонецПроцедуры
Процедура ПроверитьСоздатьКаталог(Путь)
Каталог = Новый Файл(Путь);
Если Не Каталог.Существует() Тогда
СоздатьКаталог(Каталог);
КонецЕсли;
КонецПроцедуры
Процедура СоздатьФайлыДокументации()
ОбщийМассивМодулей = Новый Массив;
ФайлыМодулей = НайтиФайлы(Расположение, "*.os", СПодкаталогами);
Для Каждого Модуль Из ФайлыМодулей Цикл
ОбщийМассивМодулей.Добавить(Модуль);
КонецЦикла;
Для Каждого Модуль Из ОбщийМассивМодулей Цикл
ТекущийМодуль = Новый ТекстовыйДокумент(Модуль.ПолноеИмя);
РазобратьМодуль(ТекущийМодуль);
КонецЦикла;
КонецПроцедуры
Процедура РазобратьМодуль(ТекущийМодуль)
ТекстМодуля = ТекущийМодуль.ПолучитьТекст();
СтруктураОбщихДанных = Новый Структура();
ПолучитьДанныеМодуля(СтруктураОбщихДанных, ТекущийМодуль);
Если Не ЗначениеЗаполнено(СтруктураОбщихДанных["Имя"]) Тогда
Возврат;
КонеЦесли;
Парсер = Новый ПарсерВстроенногоЯзыка;
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
Для Каждого Метод Из СтруктураМодуля.Объявления Цикл
Если Метод.Тип = "ОбъявлениеМетода" И Метод.Сигнатура.Экспорт = Истина Тогда
РазобратьМетод(ТекущийМодуль, Метод, СтруктураОбщихДанных);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПолучитьДанныеМодуля(СтруктураОбщихДанных, ТекущийМодуль)
Имя = ТекущийМодуль.ПолучитьСтроку(1);
CLI = ТекущийМодуль.ПолучитьСтроку(2);
Если СтрНайти(Имя, "Библиотека") = 0 Тогда
Имя = "";
Иначе
Имя = СтрЗаменить(Имя, "Библиотека:", "");
Имя = СокрЛП(Имя);
КонецЕсли;
Если СтрНайти(CLI, "Команда CLI") = 0 Тогда
CLI = "none";
Иначе
CLI = СтрЗаменить(CLI, "Команда CLI:", "");
CLI = СокрЛП(CLI);
КонецЕсли;
Каталог = СтрЗаменить(Имя, " ", "_");
СтруктураОбщихДанных.Вставить("Библиотека", Имя);
СтруктураОбщихДанных.Вставить("Команда" , CLI);
СтруктураОбщихДанных.Вставить("Каталог" , Каталог);
КонецПроцедуры
Процедура РазобратьМетод(ТекстовыйДокумент, Метод, СтруктураДанных)
НомерСтроки = Метод.Начало.НомерСтроки;
ИмяМетода = Метод.Сигнатура.Имя;
Объявление = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки);
МассивКомментария = ПарсингКомментария(ТекстовыйДокумент, НомерСтроки, СтруктураДанных);
Если МассивКомментария.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СтруктураДанных.Вставить("Объявление", Объявление);
КонецПроцедуры
Функция ПарсингКомментария(Знач ТекстовыйДокумент, Знач НомерСтроки, СтруктураДанных)
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки - 1);
ТекстКомментария = ТекущаяСтрока;
Счетчик = 1;
Пока СтрНайти(ТекущаяСтрока, "//") > 0 Цикл
Счетчик = Счетчик + 1;
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки - Счетчик);
ТекстКомментария = ТекущаяСтрока + Символы.ПС + ТекстКомментария;
КонецЦикла;
Если СтрНайти(ТекстКомментария, "!NOCLI") > 0 Тогда
СтруктураДанных.Вставить("ЕстьCLI", Ложь);
Иначе
СтруктураДанных.Вставить("ЕстьCLI", Истина);
КонецЕсли;
МассивКомментария = СтрРазделить(ТекстКомментария, "//", Ложь);
Если МассивКомментария.Количество() = 0 Тогда
Возврат Новый Массив;
Иначе
МассивКомментария.Удалить(0);
КонецЕсли;
Возврат МассивКомментария;
КонецФункции
ПриСозданииОбъекта();