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

292 lines
13 KiB
Plaintext

#Использовать osparser
#Использовать cmdline
Перем СоответствиеМодулейКоманд;
Перем ТекущийМодуль;
Перем МассивРасположенийМодулей;
Перем Парсер;
Перем Расположение;
Перем СПодкаталогами;
Перем КаталогДокументации;
Процедура ПриСозданииОбъекта()
Расположение = ТекущийКаталог() + "\OInt";
СПодкаталогами = Истина;
КаталогДокументации = ТекущийКаталог() + "\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);
КонецЕсли;
Возврат МассивКомментария;
КонецФункции
Процедура СформироватьСтруктуруМетода(Знач МассивКомментария, МассивПараметров, СтруктураДанных)
ОписаниеМетода = "";
ЗаписыватьПараметры = Ложь;
ЗаписыватьОписание = Истина;
Счетчик = 0;
Для Каждого СтрокаКомментария Из МассивКомментария Цикл
Счетчик = Счетчик + 1;
Если Не ЗначениеЗаполнено(СокрЛП(СтрокаКомментария)) Тогда
ЗаписыватьОписание = Ложь;
КонецЕсли;
Если ЗаписыватьОписание = Истина И Счетчик > 1 Тогда
ОписаниеМетода = СокрЛП(ОписаниеМетода) + " " + СокрЛП(СтрокаКомментария);
КонецЕсли;
Если СтрНайти(СтрокаКомментария, "Параметры:") > 0 Тогда
ЗаписыватьПараметры = Истина;
ЗаписыватьОписание = Ложь;
ИначеЕсли СтрНайти(СтрокаКомментария, "Возвращаемое значение:") > 0 Тогда
Прервать;
ИначеЕсли ЗаписыватьПараметры = Истина
И ЗначениеЗаполнено(СокрЛП(СтрокаКомментария))
И Не СтрНачинаетсяС(СокрЛП(СтрокаКомментария), "*") = 0 Тогда
МассивПараметров.Добавить(СтрокаКомментария);
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
СтруктураДанных.Вставить("Описание" , ОписаниеМетода);
СтруктураДанных.Вставить("Заголовок", СокрЛП(МассивКомментария[0]));
КонецПроцедуры
Процедура СформироватьМассивОписанийПараметров(Знач МассивПараметров, Знач Метод, МассивОписанийПараметров)
Разделитель = "-";
Для Каждого ПараметрМетода Из МассивПараметров Цикл
МассивЭлементовПараметра = СтрРазделить(ПараметрМетода, Разделитель, Ложь);
КоличествоЭлементов = МассивЭлементовПараметра.Количество();
Для Н = 0 По МассивЭлементовПараметра.ВГраница() Цикл
МассивЭлементовПараметра[Н] = СокрЛП(МассивЭлементовПараметра[Н]);
КонецЦикла;
Если КоличествоЭлементов < 4 Тогда
Возврат;
КонецЕсли;
Имя1С = МассивЭлементовПараметра[0];
Имя = "--" + МассивЭлементовПараметра[3];
Типы = МассивЭлементовПараметра[1];
Описание = ?(КоличествоЭлементов >= 5, МассивЭлементовПараметра[4], МассивЭлементовПараметра[2]);
СтруктураПараметра = Новый Структура;
СтруктураПараметра.Вставить("Имя" , Имя1С);
СтруктураПараметра.Вставить("Опция" , Имя);
СтруктураПараметра.Вставить("Типы" , Типы);
СтруктураПараметра.Вставить("Описание" , Описание);
СтруктураПараметра.Вставить("ЗначениеПоУмолчанию", ПолучитьЗначениеПараметраПоУмолчанию(Имя1С, Метод));
МассивОписанийПараметров.Добавить(СтруктураПараметра);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Инструменты
Процедура ПроверитьСоздатьКаталог(Путь)
Каталог = Новый Файл(Путь);
Если Не Каталог.Существует() Тогда
СоздатьКаталог(Каталог);
КонецЕсли;
КонецПроцедуры
Функция ПолучитьЗначениеПараметраПоУмолчанию(Знач Имя, Знач Метод)
Значение = "";
Для Каждого ПараметрМетода Из Метод.Сигнатура.Параметры Цикл
Если ПараметрМетода.Имя = Имя Тогда
ЗначениеПараметра = ПараметрМетода.Значение;
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
Попытка
Значение = ЗначениеПараметра["Элементы"][0]["Значение"];
Исключение
Значение = ЗначениеПараметра.Значение;
КонецПопытки;
Значение = ?(ЗначениеЗаполнено(Значение), Значение, "Пустое значение");
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Значение;
КонецФункции
#КонецОбласти
#КонецОбласти
ПриСозданииОбъекта();