diff --git a/.github/workflows/os/oint_docs.os b/.github/workflows/os/oint_docs.os index cb0ccdae5..06d0c2f50 100644 --- a/.github/workflows/os/oint_docs.os +++ b/.github/workflows/os/oint_docs.os @@ -20,15 +20,9 @@ КонецПроцедуры -Процедура ПроверитьСоздатьКаталог(Путь) +#Область СлужебныеПроцедурыИФункции - Каталог = Новый Файл(Путь); - - Если Не Каталог.Существует() Тогда - СоздатьКаталог(Каталог); - КонецЕсли; - -КонецПроцедуры +#Область ФормированиеДокументации Процедура СоздатьФайлыДокументации() @@ -49,6 +43,17 @@ КонецПроцедуры +Процедура СоздатьСтраницуДокументации(СтруктураМетода) + + ПроверитьСоздатьКаталог(КаталогДокументации + "\" + КаталогДокументации); + Сообщить(СтруктураМетода); + +КонецПроцедуры + +#КонецОбласти + +#Область РазборМодуля + Процедура РазобратьМодуль(ТекущийМодуль) ТекстМодуля = ТекущийМодуль.ПолучитьТекст(); @@ -100,19 +105,31 @@ КонецПроцедуры +#КонецОбласти + +#Область РазборМетода + Процедура РазобратьМетод(ТекстовыйДокумент, Метод, СтруктураДанных) НомерСтроки = Метод.Начало.НомерСтроки; ИмяМетода = Метод.Сигнатура.Имя; Объявление = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки); - МассивКомментария = ПарсингКомментария(ТекстовыйДокумент, НомерСтроки, СтруктураДанных); + МассивКомментария = ПарсингКомментария(ТекстовыйДокумент, НомерСтроки, СтруктураДанных); + МассивПараметров = Новый Массив; + МассивОписанийПараметров = Новый Массив; Если МассивКомментария.Количество() = 0 Тогда Возврат; КонецЕсли; + СформироватьСтруктуруМетода(МассивКомментария, МассивПараметров, СтруктураДанных); + СформироватьМассивОписанийПараметров(МассивПараметров, Метод, МассивОписанийПараметров); + СтруктураДанных.Вставить("Объявление", Объявление); + СтруктураДанных.Вставить("Параметры" , МассивОписанийПараметров); + + СоздатьСтраницуДокументации(СтруктураДанных); КонецПроцедуры @@ -149,4 +166,127 @@ КонецФункции +Процедура СформироватьСтруктуруМетода(Знач МассивКомментария, МассивПараметров, СтруктураДанных) + + ОписаниеМетода = ""; + ЗаписыватьПараметры = Ложь; + ЗаписыватьОписание = Истина; + + Счетчик = 0; + Для Каждого СтрокаКомментария Из МассивКомментария Цикл + + Счетчик = Счетчик + 1; + + Если Не ЗначениеЗаполнено(СокрЛП(СтрокаКомментария)) Тогда + ЗаписыватьОписание = Ложь; + КонецЕсли; + + Если ЗаписыватьОписание = Истина И Счетчик > 1 Тогда + ОписаниеМетода = СокрЛП(ОписаниеМетода) + " " + СокрЛП(СтрокаКомментария); + КонецЕсли; + + Если СтрНайти(СтрокаКомментария, "Параметры:") > 0 Тогда + ЗаписыватьПараметры = Истина; + ЗаписыватьОписание = Ложь; + + ИначеЕсли СтрНайти(СтрокаКомментария, "Возвращаемое значение:") > 0 Тогда + Прервать; + + ИначеЕсли ЗаписыватьПараметры = Истина + И ЗначениеЗаполнено(СокрЛП(СтрокаКомментария)) + И Не СтрНачинаетсяС(СокрЛП(СтрокаКомментария), "*") = 0 Тогда + + МассивПараметров.Добавить(СтрокаКомментария); + + Иначе + Продолжить; + КонецЕсли; + + КонецЦикла; + + СтруктураДанных.Вставить("Описание" , ОписаниеМетода); + СтруктураДанных.Вставить("Заголовок", СокрЛП(МассивКомментария[0])); + +КонецПроцедуры + +Процедура СформироватьМассивОписанийПараметров(Знач МассивПараметров, Знач Метод, МассивОписанийПараметров) + + Разделитель = "-"; + + Для Каждого ПараметрМетода Из МассивПараметров Цикл + + МассивЭлементовПараметра = СтрРазделить(ПараметрМетода, Разделитель, Ложь); + КоличествоЭлементов = МассивЭлементовПараметра.Количество(); + + Для Н = 0 По МассивЭлементовПараметра.ВГраница() Цикл + МассивЭлементовПараметра[Н] = СокрЛП(МассивЭлементовПараметра[Н]); + КонецЦикла; + + Если КоличествоЭлементов < 4 Тогда + Возврат; + КонецЕсли; + + Имя1С = МассивЭлементовПараметра[0]; + Имя = "--" + МассивЭлементовПараметра[3]; + Типы = МассивЭлементовПараметра[1]; + Описание = ?(КоличествоЭлементов >= 5, МассивЭлементовПараметра[4], МассивЭлементовПараметра[2]); + + + СтруктураПараметра = Новый Структура; + СтруктураПараметра.Вставить("Имя" , Имя1С); + СтруктураПараметра.Вставить("Опция" , Имя); + СтруктураПараметра.Вставить("Типы" , Типы); + СтруктураПараметра.Вставить("Описание" , Описание); + СтруктураПараметра.Вставить("ЗначениеПоУмолчанию", ПолучитьЗначениеПараметраПоУмолчанию(Имя1С, Метод)); + + МассивОписанийПараметров.Добавить(СтруктураПараметра); + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область Инструменты + +Процедура ПроверитьСоздатьКаталог(Путь) + + Каталог = Новый Файл(Путь); + + Если Не Каталог.Существует() Тогда + СоздатьКаталог(Каталог); + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьЗначениеПараметраПоУмолчанию(Знач Имя, Знач Метод) + + Значение = ""; + + Для Каждого ПараметрМетода Из Метод.Сигнатура.Параметры Цикл + + Если ПараметрМетода.Имя = Имя Тогда + + ЗначениеПараметра = ПараметрМетода.Значение; + Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда + Попытка + Значение = ЗначениеПараметра["Элементы"][0]["Значение"]; + Исключение + Значение = ЗначениеПараметра.Значение; + КонецПопытки; + Значение = ?(ЗначениеЗаполнено(Значение), Значение, "Пустое значение"); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат Значение; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + ПриСозданииОбъекта(); \ No newline at end of file diff --git a/.github/workflows/os/template.md b/.github/workflows/os/template.md new file mode 100644 index 000000000..f21ee6071 --- /dev/null +++ b/.github/workflows/os/template.md @@ -0,0 +1,35 @@ +--- +sidebar_position: @Позиция +--- + +# @Заголовок +@Описание + + +*@Объявление* + + | Параметр | CLI опция | Тип | Назначение | + |-|-|-|-| + @ТаблицаПараметров + + Вовзращаемое значение: @ВозвращаемоеЗначение + +```bsl title="Пример кода" + + + Ответ = @Вызов1С //Соответствие + Ответ = OPI_Инструменты.JSONСтрокой(Ответ);//JSON строка + +``` + +```sh title="Пример команд CLI" + + @ВызовCLI + +``` + + +```json title="Результат" + + +```