mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-12-16 11:38:11 +02:00
431 lines
21 KiB
Plaintext
431 lines
21 KiB
Plaintext
#Использовать osparser
|
|
#Использовать cmdline
|
|
|
|
Перем ТекущийМодуль;
|
|
Перем Парсер;
|
|
Перем Расположение;
|
|
Перем СПодкаталогами;
|
|
Перем КаталогДокументации;
|
|
Перем СписокОбластей;
|
|
|
|
Процедура ПриСозданииОбъекта()
|
|
|
|
Расположение = ".\OInt";
|
|
СПодкаталогами = Истина;
|
|
КаталогДокументации = ".\docs";
|
|
СписокОбластей = Новый СписокЗначений();
|
|
|
|
ПроверитьСоздатьКаталог(КаталогДокументации);
|
|
СоздатьФайлыДокументации();
|
|
|
|
КонецПроцедуры
|
|
|
|
#Область СлужебныеПроцедурыИФункции
|
|
|
|
#Область ФормированиеДокументации
|
|
|
|
Процедура СоздатьФайлыДокументации()
|
|
|
|
ОбщийМассивМодулей = Новый Массив;
|
|
ФайлыМодулей = НайтиФайлы(Расположение, "*.os", СПодкаталогами);
|
|
|
|
Для Каждого Модуль Из ФайлыМодулей Цикл
|
|
ОбщийМассивМодулей.Добавить(Модуль);
|
|
КонецЦикла;
|
|
|
|
Для Каждого Модуль Из ОбщийМассивМодулей Цикл
|
|
|
|
ТекущийМодуль = Новый ТекстовыйДокумент();
|
|
ТекущийМодуль.Прочитать(Модуль.ПолноеИмя);
|
|
РазобратьМодуль(ТекущийМодуль, Модуль.ИмяБезРасширения);
|
|
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура СоздатьСтраницуДокументации(СтруктураМетода)
|
|
|
|
ТранслитированноеИмя = ТранслитироватьСтроку(СтруктураМетода["Заголовок"]);
|
|
СинонимОбласти = Синонимайзер(СтруктураМетода["Область"]);
|
|
ТранслитированнаяОбласть = ТранслитироватьСтроку(СинонимОбласти);
|
|
|
|
КаталогБиблиотеки = КаталогДокументации + "\" + СтруктураМетода["Каталог"];
|
|
КаталогОбласти = КаталогБиблиотеки + "\" + ТранслитированнаяОбласть;
|
|
ПроверитьСоздатьКаталог(КаталогБиблиотеки);
|
|
ПроверитьСоздатьКаталог(КаталогОбласти);
|
|
|
|
Макет = Новый ТекстовыйДокумент();
|
|
Макет.Прочитать(".\.github\workflows\os\template.md", "UTF-8");
|
|
|
|
Макет = Макет.ПолучитьТекст();
|
|
|
|
Макет = СтрЗаменить(Макет, "@Заголовок" , СтруктураМетода["Заголовок"]);
|
|
Макет = СтрЗаменить(Макет, "@Описание" , СтруктураМетода["Описание"]);
|
|
Макет = СтрЗаменить(Макет, "@Объявление" , СтруктураМетода["Объявление"]);
|
|
Макет = СтрЗаменить(Макет, "@ВозвращаемоеЗначение", СтруктураМетода["ВозвращаемоеЗначение"]);
|
|
Макет = СтрЗаменить(Макет, "@ВозвращаемоеЗначение", СтруктураМетода["ВозвращаемоеЗначение"]);
|
|
|
|
ТаблицаПараметров = "";
|
|
Вызов1С = СтруктураМетода["ИмяМодуля"] + "." + СтруктураМетода["ИмяМетода"] + "(";
|
|
ВызовCLI = "oint " + СтруктураМетода["Команда"];
|
|
|
|
Для каждого ПараметрМетода Из СтруктураМетода["Параметры"] Цикл
|
|
|
|
ТаблицаПараметров = ТаблицаПараметров + " | "
|
|
+ ПараметрМетода.Имя + " | "
|
|
+ ПараметрМетода.Опция + " | "
|
|
+ ПараметрМетода.Типы + " | "
|
|
+ ПараметрМетода.Описание + " |"
|
|
+ Символы.ПС;
|
|
|
|
Вызов1С = Вызов1С + ПараметрМетода.Имя + ", ";
|
|
ВызовCLI = ВызовCLI + " " + ПараметрМетода.Опция + " ";
|
|
ВызовCLI = ВызовCLI + "%" + СтрЗаменить(ПараметрМетода.Опция, "-", "") + "%";
|
|
|
|
КонецЦикла;
|
|
|
|
Вызов1С = Лев(Вызов1С, СтрДлина(Вызов1С) - 2);
|
|
Вызов1С = Вызов1С + ");";
|
|
|
|
Макет = СтрЗаменить(Макет, "@Вызов1С" , Вызов1С);
|
|
Макет = СтрЗаменить(Макет, "@ВызовCLI" , ВызовCLI);
|
|
Макет = СтрЗаменить(Макет, "@ТаблицаПараметров", ТаблицаПараметров);
|
|
|
|
НовыйДокумент = Новый ТекстовыйДокумент();
|
|
НовыйДокумент.УстановитьТекст(Макет);
|
|
НовыйДокумент.Записать(КаталогОбласти + "\" + ТранслитированноеИмя + ".md");
|
|
|
|
КонецПроцедуры
|
|
|
|
#КонецОбласти
|
|
|
|
#Область РазборМодуля
|
|
|
|
Процедура РазобратьМодуль(ТекущийМодуль, ИмяМодуля)
|
|
|
|
ТекстМодуля = ТекущийМодуль.ПолучитьТекст();
|
|
СтруктураОбщихДанных = Новый Структура();
|
|
СтруктураОбщихДанных.Вставить("ИмяМодуля", ИмяМодуля);
|
|
|
|
ПолучитьДанныеМодуля(СтруктураОбщихДанных, ТекущийМодуль);
|
|
|
|
Если Не ЗначениеЗаполнено(СтруктураОбщихДанных["Библиотека"]) Тогда
|
|
Возврат;
|
|
КонеЦесли;
|
|
|
|
Парсер = Новый ПарсерВстроенногоЯзыка;
|
|
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
|
|
|
|
Для Каждого Метод Из СтруктураМодуля.Объявления Цикл
|
|
|
|
Если Метод.Тип = "ОбъявлениеМетода" И Метод.Сигнатура.Экспорт = Истина Тогда
|
|
РазобратьМетод(ТекущийМодуль, Метод, СтруктураОбщихДанных);
|
|
КонецЕсли;
|
|
|
|
Если Метод.Тип = "ИнструкцияПрепроцессораОбласть" Тогда
|
|
СписокОбластей.Добавить(Метод.Начало.НомерСтроки, Метод.Имя);
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
СписокОбластей.СортироватьПоЗначению();
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПолучитьДанныеМодуля(СтруктураОбщихДанных, ТекущийМодуль)
|
|
|
|
Имя = ТекущийМодуль.ПолучитьСтроку(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]["Значение"];
|
|
Исключение
|
|
Значение = ЗначениеПараметра.Значение;
|
|
КонецПопытки;
|
|
Значение = ?(ЗначениеЗаполнено(Значение), Значение, "Пустое значение");
|
|
КонецЕсли;
|
|
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
Возврат Значение;
|
|
|
|
КонецФункции
|
|
|
|
Функция ТранслитироватьСтроку(Знач Значение)
|
|
|
|
Значение = нРег(Значение);
|
|
Транслитация = Новый Соответствие();
|
|
|
|
Транслитация.Вставить("а", "a");
|
|
Транслитация.Вставить("б", "b");
|
|
Транслитация.Вставить("в", "v");
|
|
Транслитация.Вставить("г", "g");
|
|
Транслитация.Вставить("д", "d");
|
|
Транслитация.Вставить("е", "e");
|
|
Транслитация.Вставить("ё", "e");
|
|
Транслитация.Вставить("ж", "zh");
|
|
Транслитация.Вставить("з", "z");
|
|
Транслитация.Вставить("и", "i");
|
|
Транслитация.Вставить("й", "y");
|
|
Транслитация.Вставить("к", "k");
|
|
Транслитация.Вставить("л", "l");
|
|
Транслитация.Вставить("м", "m");
|
|
Транслитация.Вставить("н", "n");
|
|
Транслитация.Вставить("о", "o");
|
|
Транслитация.Вставить("п", "p");
|
|
Транслитация.Вставить("р", "r");
|
|
Транслитация.Вставить("с", "s");
|
|
Транслитация.Вставить("т", "t");
|
|
Транслитация.Вставить("у", "u");
|
|
Транслитация.Вставить("ф", "f");
|
|
Транслитация.Вставить("х", "h");
|
|
Транслитация.Вставить("ц", "ts");
|
|
Транслитация.Вставить("ч", "ch");
|
|
Транслитация.Вставить("ш", "sh");
|
|
Транслитация.Вставить("щ", "sch");
|
|
Транслитация.Вставить("ъ", "");
|
|
Транслитация.Вставить("ы", "y");
|
|
Транслитация.Вставить("ь", "");
|
|
Транслитация.Вставить("э", "e");
|
|
Транслитация.Вставить("ю", "u");
|
|
Транслитация.Вставить("я", "ya");
|
|
Транслитация.Вставить(" ", "-");
|
|
|
|
Для Каждого ЗаменяемыйСимвол Из Транслитация Цикл
|
|
Значение = СтрЗаменить(Значение, ЗаменяемыйСимвол.Ключ, ЗаменяемыйСимвол.Значение);
|
|
КонецЦикла;
|
|
|
|
Значение = ВРег(Лев(Значение,1)) + Сред(Значение,2);
|
|
Возврат Значение;
|
|
|
|
КонецФункции
|
|
|
|
Функция Синонимайзер(Имя) Экспорт
|
|
|
|
Ответ = "";
|
|
Стэйт = 7;
|
|
б = "";
|
|
|
|
Для ё = 1 По СтрДлина(Имя) Цикл
|
|
а = Сред(Имя, ё, 1);
|
|
Стэйт = (НРег(а) <> а) * 4 + Цел(Стэйт / 2);
|
|
Ответ = Ответ + ?(Стэйт = 2, НРег(б), ?(ё = 2, ВРег(б), б)) + ?(Стэйт = 4 ИЛИ Стэйт = 5, " ", "");
|
|
б = а
|
|
КонецЦикла;
|
|
|
|
Возврат Ответ + б
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#КонецОбласти
|
|
|
|
ПриСозданииОбъекта(); |