1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-16 11:38:11 +02:00
OpenIntegrations/.github/workflows/os/cli_parse.os
2024-04-06 20:20:36 +03:00

267 lines
14 KiB
Plaintext

#Использовать osparser
Перем КаталогБиблиотеки;
Перем ФайлСоставаОПИ;
Перем МодульСоставаОПИ;
Перем СоответствиеКомандМодулей;
Перем ТекущийМодуль;
Процедура ПриСозданииОбъекта()
СоответствиеКомандМодулей = Новый Соответствие();
СоответствиеКомандМодулей.Вставить("OPI_Telegram" , "telegram");
СоответствиеКомандМодулей.Вставить("OPI_VK" , "vk");
СоответствиеКомандМодулей.Вставить("OPI_Viber" , "viber");
СоответствиеКомандМодулей.Вставить("OPI_Twitter" , "twitter");
СоответствиеКомандМодулей.Вставить("OPI_Notion" , "notion");
СоответствиеКомандМодулей.Вставить("OPI_YandexID" , "yandex");
СоответствиеКомандМодулей.Вставить("OPI_YandexDisk" , "yadisk");
СоответствиеКомандМодулей.Вставить("OPI_GoogleWorkspace", "google");
СоответствиеКомандМодулей.Вставить("OPI_GoogleCalendar" , "gcalendar");
СоответствиеКомандМодулей.Вставить("OPI_GoogleDrive" , "gdrive");
КаталогБиблиотеки = "./OInt/core/Modules";
ФайлСоставаОПИ = "./cli/data/Modules/СоставБиблиотеки.os";
МодульСоставаОПИ = Новый ТекстовыйДокумент();
МодульСоставаОПИ.УстановитьТекст("Функция ПолучитьСостав() Экспорт
|
| ТаблицаСостава = Новый ТаблицаЗначений();
| ТаблицаСостава.Колонки.Добавить(""Библиотека"");
| ТаблицаСостава.Колонки.Добавить(""Модуль"");
| ТаблицаСостава.Колонки.Добавить(""Метод"");
| ТаблицаСостава.Колонки.Добавить(""МетодПоиска"");
| ТаблицаСостава.Колонки.Добавить(""Параметр"");
| ТаблицаСостава.Колонки.Добавить(""Описание"");
| ТаблицаСостава.Колонки.Добавить(""ОписаниеМетода"");
|");
ЗаполнитьТаблицуСостава();
МодульСоставаОПИ.ДобавитьСтроку(" Возврат ТаблицаСостава;");
МодульСоставаОПИ.ДобавитьСтроку("КонецФункции");
МодульСоставаОПИ.ДобавитьСтроку(Символы.ПС);
МодульСоставаОПИ.Записать(ФайлСоставаОПИ);
КонецПроцедуры
Процедура ЗаполнитьТаблицуСостава()
ФайлыМодулей = НайтиФайлы(КаталогБиблиотеки, "*.os");
Для Каждого Модуль Из ФайлыМодулей Цикл
ТекущийМодуль = Модуль.ИмяБезРасширения;
Если Не СоответствиеКомандМодулей[ТекущийМодуль] = Неопределено Тогда
РазобратьМодуль(Модуль);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура РазобратьМодуль(Модуль)
Парсер = Новый ПарсерВстроенногоЯзыка;
ДокументМодуля = Новый ТекстовыйДокумент;
ДокументМодуля.Прочитать(Модуль.ПолноеИмя);
ТекстМодуля = ДокументМодуля.ПолучитьТекст();
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
Для Каждого Метод Из СтруктураМодуля.Объявления Цикл
Если Метод.Тип = "ОбъявлениеМетода" И Метод.Сигнатура.Экспорт = Истина Тогда
РазобратьКомментарийМетода(ДокументМодуля, Метод.Начало.НомерСтроки, Метод.Сигнатура.Имя, Модуль);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура РазобратьКомментарийМетода(ТекстовыйДокумент, НомерСтроки, ИмяМетода, Модуль)
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки - 1);
ТекстКомментария = ТекущаяСтрока;
Счетчик = 1;
ЗаписыватьПараметры = Ложь;
ЗаписыватьОписание = Истина;
МассивПараметров = Новый Массив;
ОписаниеМетода = "";
Пока СтрНайти(ТекущаяСтрока, "//") > 0 Цикл
Счетчик = Счетчик + 1;
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки - Счетчик);
ТекстКомментария = ТекущаяСтрока + Символы.ПС + ТекстКомментария;
КонецЦикла;
Если СтрНайти(ТекстКомментария, "!NOCLI") > 0 Тогда
Возврат;
КонецЕсли;
МассивКомментария = СтрРазделить(ТекстКомментария, "//", Ложь);
Если МассивКомментария.Количество() = 0 Тогда
Сообщить(ТекстКомментария);
Иначе
МассивКомментария.Удалить(0);
КонецЕсли;
ДопОписание = ОпределитьДопОписаниеПоТипамПараметров(МассивКомментария, Модуль);
Счетчик = 0;
Для Каждого СтрокаКомментария Из МассивКомментария Цикл
Счетчик = Счетчик + 1;
Если Не ЗначениеЗаполнено(СокрЛП(СтрокаКомментария)) Тогда
ЗаписыватьОписание = Ложь;
КонецЕсли;
Если ЗаписыватьОписание = Истина И Счетчик > 1 Тогда
ОписаниеМетода = ?(ЗначениеЗаполнено(ОписаниеМетода), ОписаниеМетода + " | ", ОписаниеМетода) + СтрокаКомментария;
КонецЕсли;
Если СтрНайти(СтрокаКомментария, "Параметры:") > 0 Тогда
ЗаписыватьПараметры = Истина;
ЗаписыватьОписание = Ложь;
ИначеЕсли СтрНайти(СтрокаКомментария, "Возвращаемое значение:") > 0 Тогда
Прервать;
ИначеЕсли ЗаписыватьПараметры = Истина
И ЗначениеЗаполнено(СокрЛП(СтрокаКомментария))
И Не СтрНачинаетсяС(СокрЛП(СтрокаКомментария), "*") = 0 Тогда
МассивПараметров.Добавить(СтрокаКомментария);
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
ОписаниеМетода = СокрЛП(ОписаниеМетода) + ДопОписание;
Для Каждого ПараметрМетода Из МассивПараметров Цикл
ЗаписатьСозданиеПараметраСостава(ПараметрМетода, ИмяМетода, СокрЛП(ОписаниеМетода));
ОписаниеМетода = "";
КонецЦикла;
КонецПроцедуры
Процедура ЗаписатьСозданиеПараметраСостава(ПараметрМетода, ИмяМетода, ОписаниеМетода = "")
Разделитель = "-";
МассивЭлементовПараметра = СтрРазделить(ПараметрМетода, Разделитель, Ложь);
КоличествоЭлементов = МассивЭлементовПараметра.Количество();
Для Н = 0 По МассивЭлементовПараметра.ВГраница() Цикл
МассивЭлементовПараметра[Н] = СокрЛП(МассивЭлементовПараметра[Н]);
КонецЦикла;
Если КоличествоЭлементов < 4 Тогда
Возврат;
КонецЕсли;
Имя = "--" + МассивЭлементовПараметра[3];
Описание = ?(КоличествоЭлементов >= 5, МассивЭлементовПараметра[4], МассивЭлементовПараметра[2]);
МодульСоставаОПИ.ДобавитьСтроку(Символы.ПС);
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока = ТаблицаСостава.Добавить();");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.Библиотека = """ + СоответствиеКомандМодулей.Получить(ТекущийМодуль) + """;");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.Модуль = """ + ТекущийМодуль + """;");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.Метод = """ + ИмяМетода + """;");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.МетодПоиска = """ + вРег(ИмяМетода) + """;");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.Параметр = """ + Имя + """;");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.Описание = """ + Описание + """;");
Если ЗначениеЗаполнено(ОписаниеМетода) Тогда
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.ОписаниеМетода = """ + ОписаниеМетода + """;");
КонецЕсли;
МодульСоставаОПИ.ДобавитьСтроку(Символы.ПС);
КонецПроцедуры
Функция ОпределитьДопОписаниеПоТипамПараметров(Знач МассивКомментария, Модуль)
НачалоПараметров = Ложь;
ЕстьМассив = Ложь;
ДопОписание = "";
ДЛя Каждого СтрокаКомментария Из МассивКомментария Цикл
Если СтрНайти(СтрокаКомментария, "Возвращаемое значение:") Тогда
Прервать;
КонецЕсли;
Если СтрНайти(СтрокаКомментария, "Параметры:") > 0 Тогда
НачалоПараметров = Истина;
Продолжить;
КонецЕсли;
Если Не НачалоПараметров Тогда
Продолжить;
КонецЕсли;
Если СтрНайти(СтрокаКомментария, " Массив") > 0
Или СтрНайти(СтрокаКомментария, ",Массив") > 0 Тогда
ЕстьМассив = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
ДопОписание = СформироватьДополненеОписания(Модуль);
Если ЕстьМассив Тогда
ДопОписание = ДопОписание + Символы.ПС + Символы.ПС;
ДопОписание = ДопОписание
+ "
| Пример указания параметра типа массив:
| --param """"['Val1','Val2','Val3']"""""
+ Символы.ПС;
КонецЕсли;
Возврат СтрЗаменить(ДопОписание, Символы.ПС, Символы.ПС + "|");
КонецФункции
Функция СформироватьДополненеОписания(Модуль)
Если Модуль.ИмяБезРасширения = "OPI_VK" Тогда
ТекстДополнения = "
|
| Структура JSON данных авторизации (параметр --auth):
| {
| ""access_token"": """",
| ""from_group"" : ""1"",
| ""owner_id"" : """",
| ""v"" : ""5.131"",
| ""app_id"" : """",
| ""group_id"" : """"
| }
|
|";
Иначе
ТекстДополнения = "";
КонецЕсли;
Возврат СтрЗаменить(ТекстДополнения, """", """""");
КонецФункции
ПриСозданииОбъекта();