diff --git "a/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" "b/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" index 4838944..18ad110 100644 --- "a/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" +++ "b/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" @@ -14,7 +14,7 @@ Сценарий: Получение версии продукта Когда Я выполняю команду "oscript" c параметрами "src/main.os version" Тогда Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "1.0" + И Вывод команды "oscript" содержит "1.0.4" И Вывод команды "oscript" не содержит "AutodocGen v" И Код возврата команды "oscript" равен 0 @@ -22,7 +22,7 @@ Когда Я выполняю команду "oscript" c параметрами "src/main.os help" Тогда Вывод команды "oscript" содержит """ - AutodocGen v1.0 + AutodocGen v1.0.4 Возможные команды: help - Выводит справку по командам version - Выводит версию приложения @@ -34,7 +34,7 @@ Когда Я выполняю команду "oscript" c параметрами "src/main.os" Тогда Вывод команды "oscript" содержит """ - AutodocGen v1.0 + AutodocGen v1.0.4 Возможные команды: help - Выводит справку по командам version - Выводит версию приложения diff --git a/installlocalhost.bat b/installlocalhost.bat index 8aab7ff..a42f111 100644 --- a/installlocalhost.bat +++ b/installlocalhost.bat @@ -1,6 +1,4 @@ @ECHO OFF del "*.ospx" -opm build . -mf ./packagedef -out . -opm install -f autodocgen-1.0.ospx - -pause \ No newline at end of file +call opm build . -mf ./packagedef -out . +call opm install -f ./autodocgen-1.0.4.ospx diff --git a/packagedef b/packagedef index f89fd08..4d40265 100644 --- a/packagedef +++ b/packagedef @@ -15,5 +15,4 @@ .ЗависитОт("1commands", "1.3.2") .ВключитьФайл("src") .ВключитьФайл("features") - .ВключитьФайл("src/package-loader.os") .ИсполняемыйФайл("src/main.os", ИмяПродукта); diff --git a/pict/confluence1.png b/pict/confluence1.png new file mode 100644 index 0000000..fefc6cc Binary files /dev/null and b/pict/confluence1.png differ diff --git a/pict/confluence2.png b/pict/confluence2.png new file mode 100644 index 0000000..1979cf5 Binary files /dev/null and b/pict/confluence2.png differ diff --git a/pict/confluence3.png b/pict/confluence3.png new file mode 100644 index 0000000..b487538 Binary files /dev/null and b/pict/confluence3.png differ diff --git a/pict/html1.PNG b/pict/html1.PNG new file mode 100644 index 0000000..6b359d1 Binary files /dev/null and b/pict/html1.PNG differ diff --git a/pict/html2.PNG b/pict/html2.PNG new file mode 100644 index 0000000..dca563b Binary files /dev/null and b/pict/html2.PNG differ diff --git a/readme.md b/readme.md index 380a869..43b5fe0 100644 --- a/readme.md +++ b/readme.md @@ -1,21 +1,21 @@ # AutodocGen -Инструмент генерации документации на основании информации файлов исходных кодов конфигурации 1С:Предприятие. +Инструмент генерации документации на основании файлов исходных кодов конфигурации 1С:Предприятие. ## Об инструменте Инструмент позволяет -- автоматически сформировать документацию на основании исходных файлов конфигурации 1С:Предприяти +- автоматически сформировать документацию на основании исходных файлов конфигурации 1С:Предприятие - выполнить проверку на возможность корректного разбора информации, выступающей исходными данными для документации -- опубликовать сгенерированную документациию +- опубликовать сгенерированную документацию ## Установка -Процесс установки стандартен +Процесс установки стандартен: - либо `opm install autodocgen` -- либо, если в opm приложения почему-то нет, то скачать архив, распаковать и выполнить (для windows) `installlocalhost.bat` +- либо, если по разным причинам первый способ не подходит, то скачать архив из релизов, распаковать и выполнить (для windows) `installlocalhost.bat` ## Использование @@ -23,10 +23,11 @@ Конфигурационный файл соответствует структуре единого конфигурационного файла, ниже приведен пример +```json { "GLOBAL": { "КаталогИсходныхФайлов": "src\\configuration", - "version": "1.0" + "version": "1.0.4" }, "AutodocGen":{ "НастройкиConluence": { @@ -46,36 +47,55 @@ "ПоследнийОбработанныйКоммит": "" } } +``` -Располагать конфигурационный файл стоит в корне репозитория под именем `v8config.json` +Располагать конфигурационный файл нужно в корне репозитория под именем `v8config.json`. ## Поддерживаемые варианты генерации автодокументации Как видно из пример конфигурационного файла, поддерживаются 2 формата (ключ `-format`) -- `confluence` - генерирование страниц в указанном пространстве [confluence](https://ru.atlassian.com/software/confluence) +- `confluence` - генерация страниц в указанном пространстве [confluence](https://ru.atlassian.com/software/confluence) - `html` - генерация структуры каталогов в соответствии с подсистемами и файлов-страниц в каталогах. Для добавления новых стоит воспользоваться шаблоном [src/Классы/ШаблонГенераторДокументации.os-template](src/Классы/ШаблонГенераторДокументации.os-template) ## Подготовка конфигурации -Для генерирования документации, конфигурация должна соответствовать требованиям +Для генерации документации конфигурация должна соответствовать требованиям: - Все модули должны иметь определенную структуру областей (в соответствии с требованиями 1С) - В документацию добавляются только экспортные методы, находящиеся в разделе `ПрограммныйИнтерфейс` - Описание методов должно соответствовать требованиям оформления кода - Поддерживаются общие модуи и модули менеджеров объектов -- Все модули / объекты, которые попадают под правила автодокументирования должны располагаться в соответствующих подсистемах. Принятая структура: +- Все модули / объекты, которые попадают под правила автодокументирования, должны располагаться в соответствующих подсистемах. Принятая структура: ``` Подсистемы конфигурации | - +-- КорневаяПодсистема (не выводится в интерфейс пользователя) + +-- МояКорневаяПодсистема (не выводится в интерфейс пользователя) | +-- Раздел | +-- Подсистема + | + +-- ОбъектМетаданных + +``` + +## Примеры + +### В формате Confluence + +![confluence](pict/confluence1.png) + +![confluence](pict/confluence2.png) + +![confluence](pict/confluence3.png) + +### В Формате HTML + +![html](pict/html1.PNG) -``` \ No newline at end of file +![html](pict/html2.PNG) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\320\270_confluence.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\320\270_confluence.os" index 1ab9fdc..cd601a1 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\320\270_confluence.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\320\270_confluence.os" @@ -558,6 +558,11 @@ Для Каждого ОписаниеКонстанты Из МассивОписанийКонстант Цикл РазборПодсистемы = СтрРазделить(ОписаниеКонстанты.Подсистема, "."); + Если РазборПодсистемы.Количество() < 2 Тогда + + Продолжить; + + КонецЕсли; МассивПодсистем.Добавить(ОписаниеКонстанты.Подсистема); @@ -619,6 +624,7 @@ СимволыЗамены.Добавить(Символ(8211), "–"); СимволыЗамены.Добавить(Символ(8212), "—"); СимволыЗамены.Добавить(Символы.ПС, "\n"); + СимволыЗамены.Добавить(Символ(13), "\n"); СимволыЗамены.Добавить(Символы.Таб, " "); Если ДляCDATA Тогда @@ -719,4 +725,4 @@ Возврат Шаблоны; -КонецФункции \ No newline at end of file +КонецФункции diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\320\270_html.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\320\270_html.os" index 38e8419..766d804 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\320\270_html.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\320\270_html.os" @@ -38,91 +38,119 @@ СоздаваемыеРазделы.Колонки.Удалить("Содержимое"); ОшибкиГенерации = ""; ПарсерКонфигурации = ОбщегоНазначения.ПолучитьПарсерКонфигурации(); - - Для Каждого Модуль Из НастройкиГенератора.ОписаниеКонфигурации.МодулиКонфигурации Цикл - - Если НЕ НастройкиГенератора.НастройкиАнализаИзменений.Анализировать - ИЛИ НастройкиГенератора.НастройкиАнализаИзменений.ИзмененныеФайлы.Найти(НРЕГ(Модуль.ПутьКФайлу)) <> Неопределено Тогда - - ОбщегоНазначения.ПолучитьПарсерКонфигурации(ПарсерКонфигурации).ПрочитатьСодержимоеМодуля(Модуль); - - ТекстОшибок = ""; - СодержимоеСтраницы = СформироватьТекстСтраницыПоОписанию(Модуль, ТекстОшибок, Шаблоны); + СодержимоеСтраницыКонстант = ""; + + Если НастройкиГенератора.Свойство("ОписаниеКонфигурации") Тогда + + Для Каждого Модуль Из НастройкиГенератора.ОписаниеКонфигурации.МодулиКонфигурации Цикл - Если НЕ ПустаяСтрока(ТекстОшибок) Тогда - - ОшибкиГенерации = ОшибкиГенерации + ?(ПустаяСтрока(ОшибкиГенерации), "", Символы.ПС) - + Модуль.ПутьКФайлу + ": " + ТекстОшибок; - - Продолжить; - - ИначеЕсли ПустаяСтрока(СодержимоеСтраницы) Тогда + Если НЕ НастройкиГенератора.НастройкиАнализаИзменений.Анализировать + ИЛИ НастройкиГенератора.НастройкиАнализаИзменений.ИзмененныеФайлы.Найти(НРЕГ(Модуль.ПутьКФайлу)) <> Неопределено Тогда - // Нет никто - Продолжить; + ОбщегоНазначения.ПолучитьПарсерКонфигурации(ПарсерКонфигурации).ПрочитатьСодержимоеМодуля(Модуль); - Иначе + ТекстОшибок = ""; + СодержимоеСтраницы = СформироватьТекстСтраницыПоОписанию(Модуль, ТекстОшибок, Шаблоны); - ИмяСтраницы = ОбщегоНазначения.ПолучитьПарсерКонфигурации(ПарсерКонфигурации).ПолноеИмяОбъекта(Модуль, ЛОЖЬ); - Если Модуль.Родитель.Подсистемы = Неопределено Тогда + Если НЕ ПустаяСтрока(ТекстОшибок) Тогда ОшибкиГенерации = ОшибкиГенерации + ?(ПустаяСтрока(ОшибкиГенерации), "", Символы.ПС) - + Модуль.ПутьКФайлу + ": не включен в состав подсистем"; + + Модуль.ПутьКФайлу + ": " + ТекстОшибок; + Продолжить; - КонецЕсли; - - СтруктураПодсистем = ПолучитьСтруктуруПодсистем(Модуль.Родитель.Подсистемы); - Если ПустаяСтрока(СтруктураПодсистем.ИмяРаздела) Тогда + ИначеЕсли ПустаяСтрока(СодержимоеСтраницы) Тогда - ОшибкиГенерации = ОшибкиГенерации + ?(ПустаяСтрока(ОшибкиГенерации), "", Символы.ПС) - + Модуль.ПутьКФайлу + ": ошибочная структура подсистем"; + // Нет никто Продолжить; - КонецЕсли; - - Раздел = СоздаваемыеРазделы.Найти(СтруктураПодсистем.ИмяРаздела, "ИмяСтраницы"); - Если Раздел = Неопределено Тогда + Иначе - Раздел = СоздаваемыеРазделы.Добавить(); - Раздел.ИмяСтраницы = СтруктураПодсистем.ИмяРаздела; + ИмяСтраницы = ОбщегоНазначения.ПолучитьПарсерКонфигурации(ПарсерКонфигурации).ПолноеИмяОбъекта(Модуль, ЛОЖЬ); + Если Модуль.Родитель.Подсистемы = Неопределено Тогда + + ОшибкиГенерации = ОшибкиГенерации + ?(ПустаяСтрока(ОшибкиГенерации), "", Символы.ПС) + + Модуль.ПутьКФайлу + ": не включен в состав подсистем"; + Продолжить; + + КонецЕсли; - КонецЕсли; - - ИмяПодсистемы = "Подсистема " + СтруктураПодсистем.ИмяПодсистемы; - Если СтруктураПодсистем.ИмяПодсистемы = "Общего назначения" Тогда + СтруктураПодсистем = ПолучитьСтруктуруПодсистем(Модуль.Родитель.Подсистемы); + Если ПустаяСтрока(СтруктураПодсистем.ИмяРаздела) Тогда + + ОшибкиГенерации = ОшибкиГенерации + ?(ПустаяСтрока(ОшибкиГенерации), "", Символы.ПС) + + Модуль.ПутьКФайлу + ": ошибочная структура подсистем"; + Продолжить; + + КонецЕсли; - ИмяПодсистемы = ИмяПодсистемы + " (" + НРег(СтруктураПодсистем.ИмяРаздела) + ")"; + Раздел = СоздаваемыеРазделы.Найти(СтруктураПодсистем.ИмяРаздела, "ИмяСтраницы"); + Если Раздел = Неопределено Тогда + + Раздел = СоздаваемыеРазделы.Добавить(); + Раздел.ИмяСтраницы = СтруктураПодсистем.ИмяРаздела; + + КонецЕсли; - КонецЕсли; - - Подсистема = СоздаваемыеРазделы.Найти(ИмяПодсистемы, "ИмяСтраницы"); - Если Подсистема = Неопределено Тогда + ИмяПодсистемы = "Подсистема " + СтруктураПодсистем.ИмяПодсистемы; + Если СтруктураПодсистем.ИмяПодсистемы = "Общего назначения" Тогда + + ИмяПодсистемы = ИмяПодсистемы + " (" + НРег(СтруктураПодсистем.ИмяРаздела) + ")"; + + КонецЕсли; + + Подсистема = СоздаваемыеРазделы.Найти(ИмяПодсистемы, "ИмяСтраницы"); + Если Подсистема = Неопределено Тогда + + Подсистема = СоздаваемыеРазделы.Добавить(); + Подсистема.ИмяСтраницы = ИмяПодсистемы; + Подсистема.Родитель = Раздел; + + КонецЕсли; - Подсистема = СоздаваемыеРазделы.Добавить(); - Подсистема.ИмяСтраницы = ИмяПодсистемы; - Подсистема.Родитель = Раздел; + Страница = СоздаваемыеСтраницы.Добавить(); + Страница.ИмяСтраницы = "Программный интерфейс. " + ИмяСтраницы; + Страница.Родитель = Подсистема; + Страница.Содержимое = СодержимоеСтраницы; - КонецЕсли; - - Страница = СоздаваемыеСтраницы.Добавить(); - Страница.ИмяСтраницы = "Программный интерфейс. " + ИмяСтраницы; - Страница.Родитель = Подсистема; - Страница.Содержимое = СодержимоеСтраницы; + КонецЕсли; КонецЕсли; + КонецЦикла; + + ОшибкиГенерацииКонстант = ""; + СодержимоеСтраницыКонстант = СформироватьТекстСтраницыКонстант(НастройкиГенератора.ОписаниеКонстант, ОшибкиГенерацииКонстант, НастройкиГенератора.ПодсистемыКонфигурации); + Если НЕ ПустаяСтрока(ОшибкиГенерацииКонстант) Тогда + + ОшибкиГенерации = ОшибкиГенерации + ?(ПустаяСтрока(ОшибкиГенерации), "", Символы.ПС) + ОшибкиГенерацииКонстант; + СодержимоеСтраницыКонстант = ""; + КонецЕсли; - КонецЦикла; - - ОшибкиГенерацииКонстант = ""; - СодержимоеСтраницыКонстант = СформироватьТекстСтраницыКонстант(НастройкиГенератора.ОписаниеКонстант, ОшибкиГенерацииКонстант, НастройкиГенератора.ПодсистемыКонфигурации); - Если НЕ ПустаяСтрока(ОшибкиГенерацииКонстант) Тогда + Иначе + + Модуль = НастройкиГенератора.ОписаниеМодуля; + ОбщегоНазначения.ПолучитьПарсерКонфигурации(ПарсерКонфигурации).ПрочитатьСодержимоеМодуля(Модуль); + ТекстОшибок = ""; + СодержимоеСтраницы = СформироватьТекстСтраницыПоОписанию(Модуль, ТекстОшибок, Шаблоны); + + Если НЕ ПустаяСтрока(ТекстОшибок) Тогда + + ОшибкиГенерации = ОшибкиГенерации + ?(ПустаяСтрока(ОшибкиГенерации), "", Символы.ПС) + + Модуль.ПутьКФайлу + ": " + ТекстОшибок; + + ИначеЕсли НЕ ПустаяСтрока(СодержимоеСтраницы) Тогда + + Страница = СоздаваемыеСтраницы.Добавить(); + Страница.ИмяСтраницы = Строка(Новый УникальныйИдентификатор); + ОписаниеРодителя = СоздаваемыеРазделы.Добавить(); + ОписаниеРодителя.ИмяСтраницы = "autodoc"; + Страница.Родитель = ОписаниеРодителя; + Страница.Содержимое = СодержимоеСтраницы; + + КонецЕсли; - ОшибкиГенерации = ОшибкиГенерации + ?(ПустаяСтрока(ОшибкиГенерации), "", Символы.ПС) + ОшибкиГенерацииКонстант; - СодержимоеСтраницыКонстант = ""; - КонецЕсли; Возврат Новый Структура("СоздаваемыеСтраницы, СоздаваемыеРазделы, СодержимоеСтраницыКонстант, ОшибкиГенерации", СоздаваемыеСтраницы, СоздаваемыеРазделы, СодержимоеСтраницыКонстант, ОшибкиГенерации); @@ -201,8 +229,7 @@ КонецЦикла; - ТекстОшибок = ""; - + ТекстОшибок = ""; Если НЕ ПустаяСтрока(РезультатГенерации.СодержимоеСтраницыКонстант) Тогда @@ -589,6 +616,7 @@ СимволыЗамены.Добавить(Символ(8211), "–"); СимволыЗамены.Добавить(Символ(8212), "—"); СимволыЗамены.Добавить(Символы.ПС, "
"); + СимволыЗамены.Добавить(Символ(13), "
"); СимволыЗамены.Добавить(Символы.Таб, " "); Если ДляCDATA Тогда @@ -618,6 +646,11 @@ Для Каждого ОписаниеКонстанты Из МассивОписанийКонстант Цикл РазборПодсистемы = СтрРазделить(ОписаниеКонстанты.Подсистема, "."); + Если РазборПодсистемы.Количество() < 2 Тогда + + Продолжить; + + КонецЕсли; МассивПодсистем.Добавить(ОписаниеКонстанты.Подсистема); @@ -667,4 +700,4 @@ Возврат МассивИменПодсистем; -КонецФункции \ No newline at end of file +КонецФункции diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\261\320\276\321\200\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\2701\320\241.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\261\320\276\321\200\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\2701\320\241.os" index 684c26c..ca918fc 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\261\320\276\321\200\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\2701\320\241.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\261\320\276\321\200\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\2701\320\241.os" @@ -83,11 +83,25 @@ СтрокиКонстант = ОписаниеКонфигурации.ОбъектыКонфигурации.НайтиСтроки(Фильтр); МассивОписанийКонстант = Новый Массив; - Для каждого Объект Из СтрокиКонстант Цикл + Для Каждого Объект Из СтрокиКонстант Цикл + Имя = Объект[0]; ОписаниеИзXML = ПолучитьОписаниеКонстанты(Объект[2]); + Подсистема = ""; + ПодсистемаПредставление = ""; + Если ТипЗнч(Объект[4]) = Тип("Массив") Тогда + + Подсистема = Объект[4][0][1]; + ПодсистемаПредставление = Объект[4][0][6]; + + КонецЕсли; + ОписаниеКонстанты = Новый Структура("Имя, Тип, Описание, Подсистема, ПодсистемаПредставление", - Объект[0], ПреобразоватьТип(ОписаниеИзXML.ТипКонстанты), ОписаниеИзXML.ТекстОписания, Объект[4][0][1], Объект[4][0][6]); + Имя, + ПреобразоватьТип(ОписаниеИзXML.ТипКонстанты), + ОписаниеИзXML.ТекстОписания, + Подсистема, + ПодсистемаПредставление); МассивОписанийКонстант.Добавить(ОписаниеКонстанты); КонецЦикла; @@ -429,6 +443,7 @@ Функция ПолучитьОписаниеКонстанты(ПутьКФайлу) ТекстОписания = ""; + ТипКонстанты = ""; ФайлXML = Новый ЧтениеXML(); ФайлXML.ОткрытьФайл(ПутьКФайлу); @@ -463,7 +478,7 @@ КонецЦикла; - РезультатПоиска = Новый Структура("ТипКонстанты, ТекстОписания", ТипКонстанты ,ТекстОписания ); + РезультатПоиска = Новый Структура("ТипКонстанты, ТекстОписания", ТипКонстанты, ТекстОписания); Возврат РезультатПоиска; @@ -498,7 +513,6 @@ ПреобразованныйТип = ТипИзXML; КонецЕсли; - Возврат ПреобразованныйТип; КонецФункции @@ -550,7 +564,6 @@ КлючСвойства = ЧтениеXML.Имя; ЧтениеXML.Прочитать(); - Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда // вложенный элемент Если ЧтениеXML.Имя = "v8:item" Тогда // надо найти элемент с именем v8:content @@ -572,8 +585,9 @@ КонецЕсли; + СвойстваКонфигурации.Вставить(КлючСвойства, ЧтениеXML.Значение); + КонецЕсли; - СвойстваКонфигурации.Вставить(КлючСвойства, ЧтениеXML.Значение); КонецЕсли; diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Version.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Version.os" index 1a131c0..54b3071 100644 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Version.os" +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Version.os" @@ -4,6 +4,20 @@ // /////////////////////////////////////////////////////////////////////////////// +// Возвращает имя команды приложения +Функция ИмяКоманды() Экспорт + + Возврат "version"; + +КонецФункции // ИмяКоманды + +// Возвращает описание исполняемой команды +Функция ОписаниеКоманды() Экспорт + + Возврат "Выводит версию приложения"; + +КонецФункции // ОписаниеКоманды + Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт КонецПроцедуры // НастроитьКоманду diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\321\205\320\241\321\202\321\200\320\260\320\275\320\270\321\206.os-" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\321\205\320\241\321\202\321\200\320\260\320\275\320\270\321\206.os-" deleted file mode 100644 index 32b2793..0000000 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\241\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\321\205\320\241\321\202\321\200\320\260\320\275\320\270\321\206.os-" +++ /dev/null @@ -1,297 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -// Служебный модуль с реализацией работы команды -// -/////////////////////////////////////////////////////////////////////////////// - -Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт - - // Создание описания команды - ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, "Проверяет наличие страниц в confluence и соответствующих им модулей конфигурации"); - - // Добавление параметров команды - Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ЛокальныйКаталогГит", "Файловый путь к локальному репозиторию GIT."); - Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "-delete", "Удаление ненужных страниц"); - - // Добавление команды парсеру - Парсер.ДобавитьКоманду(ОписаниеКоманды); - -КонецПроцедуры // ЗарегистрироватьКоманду - -// Выполняет логику команды -// -// Параметры: -// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений -// ДополнительныеПараметры (необязательно) - Соответствие - дополнительные параметры -// -Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт - - КаталогРепозитория = ci41cОбщегоНазначения.КаталогРепозитория(ПараметрыКоманды, ДополнительныеПараметры); - Если КаталогРепозитория = Неопределено Тогда - - Возврат МенеджерКомандПриложения.РезультатыКоманд().НеверныеПараметры; - - КонецЕсли; - - НастройкиСтенда = ci41cОбщегоНазначения.ПрочитатьНастройкиСтенда(КаталогРепозитория, ДополнительныеПараметры); - Если НастройкиСтенда = Неопределено Тогда - - Возврат МенеджерКомандПриложения.РезультатыКоманд().НеверныеПараметры; - - КонецЕсли; - - Если НастройкиСтенда.Настройка("АвтоДокументирование\Выполнять") <> ИСТИНА Тогда - - ДополнительныеПараметры.Лог.Информация("Автодокументирование не используется"); - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; - - КонецЕсли; - - Пространство = НастройкиСтенда.Настройка("АвтоДокументирование\КодПространстваConfluence"); - Если НЕ ЗначениеЗаполнено(Пространство) Тогда - - ДополнительныеПараметры.Лог.Ошибка("Анализ документации невозможен, т.к. не указан код пространства confluence"); - Возврат МенеджерКомандПриложения.РезультатыКоманд().ОшибкаВремениВыполнения; - - КонецЕсли; - - Генератор = Новый ГенераторДокументации(); - - КомандаGit = Новый КомандныйФайл(); - КомандаGit.ДобавитьКоманду(СтрШаблон("cd /d ""%1""", КаталогРепозитория)); - КомандаGit.ДобавитьКоманду("git pull origin"); - - КодВозврата = КомандаGit.Исполнить(); - ВыводКоманды = КомандаGit.ПолучитьВывод(); - - Если КодВозврата <> 0 Тогда - - ДополнительныеПараметры.Лог.Ошибка("git вернул код ошибки %1%2Вывод%3", КодВозврата, Символы.ПС, ВыводКоманды); - Возврат МенеджерКомандПриложения.РезультатыКоманд().ОшибкаВремениВыполнения; - - КонецЕсли; - - КаталогИсходников = ОбъединитьПути(КаталогРепозитория, НастройкиСтенда.Настройка("КаталогИсходныхФайлов")); - - ОписаниеКонфигурации = Генератор.ПолучитьПарсерКонфигурации().ПрочитатьДеревоКонфигурации(КаталогИсходников); - ОписаниеКонфигурации = Генератор.ПолучитьПарсерКонфигурации().ПрочитатьМодулиКонфигурации(КаталогИсходников, ОписаниеКонфигурации); - - СоздаваемыеСтраницы = Новый ТаблицаЗначений; - СоздаваемыеСтраницы.Колонки.Добавить("ИмяСтраницы"); - СоздаваемыеСтраницы.Колонки.Добавить("Родитель"); - СоздаваемыеСтраницы.Колонки.Добавить("Идентификатор"); - - СоздаваемыеРазделы = СоздаваемыеСтраницы.Скопировать(); - СоздаваемыеПодсистемы = СоздаваемыеСтраницы.Скопировать(); - - УдаляемыеСтраницы = Новый ТаблицаЗначений; - УдаляемыеСтраницы.Колонки.Добавить("ИмяСтраницы"); - УдаляемыеСтраницы.Колонки.Добавить("Идентификатор"); - - ОшибкиОбновленияСтраниц = ""; - - Для Каждого Модуль Из ОписаниеКонфигурации.МодулиКонфигурации Цикл - - Генератор.ПолучитьПарсерКонфигурации().ПрочитатьСодержимоеМодуля(Модуль); - - ТекстОшибок = ""; - СодержимоеСтраницы = Генератор.СформироватьТекстСтраницыПоОписанию(Модуль, ТекстОшибок, Генератор.ЗагрузитьШаблоны(НастройкиСтенда, ЛОЖЬ)); - - Если НЕ ПустаяСтрока(ТекстОшибок) ИЛИ ПустаяСтрока(СодержимоеСтраницы) Тогда - - // Нет никто - Продолжить; - - Иначе - - ИмяСтраницы = Генератор.ПолучитьПарсерКонфигурации().ПолноеИмяОбъекта(Модуль, ЛОЖЬ); - - СтруктураПодсистем = Генератор.ПолучитьСтруктуруПодсистем(Модуль.Родитель.Подсистемы); - Если ПустаяСтрока(СтруктураПодсистем.ИмяРаздела) Тогда - - Продолжить; - - КонецЕсли; - - Раздел = СоздаваемыеРазделы.Найти(СтруктураПодсистем.ИмяРаздела, "ИмяСтраницы"); - Если Раздел = Неопределено Тогда - - Раздел = СоздаваемыеРазделы.Добавить(); - Раздел.ИмяСтраницы = СтруктураПодсистем.ИмяРаздела; - - КонецЕсли; - - ИмяПодсистемыБСП = "Подсистема " + СтруктураПодсистем.ИмяПодсистемы; - Если СтруктураПодсистем.ИмяПодсистемы = "Общего назначения" Тогда - - ИмяПодсистемыБСП = ИмяПодсистемыБСП + " (" + НРег(СтруктураПодсистем.ИмяРаздела) + ")"; - - КонецЕсли; - - Подсистема = СоздаваемыеПодсистемы.Найти(ИмяПодсистемыБСП, "ИмяСтраницы"); - Если Подсистема = Неопределено Тогда - - Подсистема = СоздаваемыеПодсистемы.Добавить(); - Подсистема.ИмяСтраницы = ИмяПодсистемыБСП; - Подсистема.Родитель = Раздел; - - КонецЕсли; - - Страница = СоздаваемыеСтраницы.Добавить(); - Страница.ИмяСтраницы = "Программный интерфейс: " + ИмяСтраницы; - Страница.Родитель = Подсистема; - - КонецЕсли; - - КонецЦикла; - - ПодключениеConfluence = Генератор.СоздатьПодключениеConfluence(); - ИдентификаторСтраницы = Confluence.НайтиСтраницуПоИмени(ПодключениеConfluence, Пространство, "Состав подсистем"); - Если ПустаяСтрока(ИдентификаторСтраницы) Тогда - - ОшибкиОбновленияСтраниц = ОшибкиОбновленияСтраниц + ?(ПустаяСтрока(ОшибкиОбновленияСтраниц), "", Символы.ПС) + - "В пространстве отсутствует корневая страница документации 'Состав подсистем'"; - - Иначе - - ДочерниеСтраницы = Confluence.ПодчиненныеСтраницыПоИдентификатору(ПодключениеConfluence, ИдентификаторСтраницы); - Для Каждого ИмеющийсяРаздел Из ДочерниеСтраницы Цикл - - НайденныйРаздел = СоздаваемыеРазделы.Найти(ИмеющийсяРаздел.Наименование, "ИмяСтраницы"); - Если НайденныйРаздел = Неопределено Тогда - - ОшибкиОбновленияСтраниц = ОшибкиОбновленияСтраниц + ?(ПустаяСтрока(ОшибкиОбновленияСтраниц), "", Символы.ПС) - + "Нужно удалить раздел '" + ИмеющийсяРаздел.Наименование + "' (" + ИмеющийсяРаздел.Идентификатор + ") и все подчиненные"; - - УдаляемаяСтраница = УдаляемыеСтраницы.Добавить(); - УдаляемаяСтраница.ИмяСтраницы = ИмеющийсяРаздел.Наименование; - УдаляемаяСтраница.Идентификатор = ИмеющийсяРаздел.Идентификатор; - - Иначе - - ДочерниеСтраницыРаздела = Confluence.ПодчиненныеСтраницыПоИдентификатору( - ПодключениеConfluence, - Confluence.НайтиСтраницуПоИмени(ПодключениеConfluence, Пространство, ИмеющийсяРаздел.Наименование)); - Для Каждого ИмеющаясяПодсистема Из ДочерниеСтраницыРаздела Цикл - - УдалитьПодсистему = ЛОЖЬ; - ДочерниеСтраницыПодсистемы = Неопределено; - НайденныеПодсистемыРаздела = СоздаваемыеПодсистемы.НайтиСтроки(Новый Структура("Родитель, ИмяСтраницы", НайденныйРаздел, ИмеющаясяПодсистема.Наименование)); - Если НайденныеПодсистемыРаздела.Количество() <> 1 Тогда - - ДочерниеСтраницыПодсистемы = Confluence.ПодчиненныеСтраницыПоИдентификатору( - ПодключениеConfluence, - Confluence.НайтиСтраницуПоИмени(ПодключениеConfluence, Пространство, ИмеющаясяПодсистема.Наименование)); - - УдалитьПодсистему = ИСТИНА; - Для Каждого ИмеющаясяСтраница Из ДочерниеСтраницыПодсистемы Цикл - - Если СтрНайти(ИмеющаясяСтраница.Наименование, "Программный интерфейс:") = 0 Тогда - - УдалитьПодсистему = ЛОЖЬ; - Прервать; - - КонецЕсли; - - КонецЦикла; - - Если УдалитьПодсистему Тогда - - ОшибкиОбновленияСтраниц = ОшибкиОбновленияСтраниц + ?(ПустаяСтрока(ОшибкиОбновленияСтраниц), "", Символы.ПС) - + "Нужно удалить подсистему '" + ИмеющаясяПодсистема.Наименование + "' (" + ИмеющаясяПодсистема.Идентификатор + ") и все подчиненные"; - - УдаляемаяСтраница = УдаляемыеСтраницы.Добавить(); - УдаляемаяСтраница.ИмяСтраницы = ИмеющаясяПодсистема.Наименование; - УдаляемаяСтраница.Идентификатор = ИмеющаясяПодсистема.Идентификатор; - - КонецЕсли; - - КонецЕсли; - - Если НЕ УдалитьПодсистему Тогда - - Если ДочерниеСтраницыПодсистемы = Неопределено Тогда - - ДочерниеСтраницыПодсистемы = Confluence.ПодчиненныеСтраницыПоИдентификатору( - ПодключениеConfluence, - Confluence.НайтиСтраницуПоИмени(ПодключениеConfluence, Пространство, ИмеющаясяПодсистема.Наименование)); - КонецЕсли; - - Для Каждого ИмеющаясяСтраница Из ДочерниеСтраницыПодсистемы Цикл - - Если НайденныеПодсистемыРаздела.Количество() Тогда - - НайденныеСтраницыПодсистемы = СоздаваемыеСтраницы.НайтиСтроки(Новый Структура("Родитель, ИмяСтраницы", НайденныеПодсистемыРаздела[0], ИмеющаясяСтраница.Наименование)); - - Иначе - - НайденныеСтраницыПодсистемы = Новый Массив; - - КонецЕсли; - - Если НайденныеСтраницыПодсистемы.Количество() <> 1 Тогда - - Если СтрНайти(ИмеющаясяСтраница.Наименование, "Программный интерфейс:") > 0 Тогда - - ОшибкиОбновленияСтраниц = ОшибкиОбновленияСтраниц + ?(ПустаяСтрока(ОшибкиОбновленияСтраниц), "", Символы.ПС) - + "Нужно удалить страницу '" + ИмеющаясяСтраница.Наименование + "' (" + ИмеющаясяСтраница.Идентификатор + ")"; - - УдаляемаяСтраница = УдаляемыеСтраницы.Добавить(); - УдаляемаяСтраница.ИмяСтраницы = ИмеющаясяСтраница.Наименование; - УдаляемаяСтраница.Идентификатор = ИмеющаясяСтраница.Идентификатор; - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - Если Не ПустаяСтрока(ОшибкиОбновленияСтраниц) Тогда - - Если ПараметрыКоманды["-delete"] Тогда - - ОшибкиОбновленияСтраниц = ""; - - Для Каждого Страница Из УдаляемыеСтраницы Цикл - - Попытка - - Confluence.УдалитьСтраницу(ПодключениеConfluence, Пространство, Страница.ИмяСтраницы, Страница.Идентификатор, ИСТИНА); - ДополнительныеПараметры.Лог.Информация("Удалена страница '" + Страница.ИмяСтраницы + "' (" + Страница.Идентификатор + ") и подчиненные (при наличии)"); - - Исключение - - ОшибкиОбновленияСтраниц = ОшибкиОбновленияСтраниц + ?(ПустаяСтрока(ОшибкиОбновленияСтраниц), "", Символы.ПС) - + "Ошибка удаления страницы '" + Страница.ИмяСтраницы + "' (" + Страница.Идентификатор + "): " + ОписаниеОшибки(); - - КонецПопытки; - - КонецЦикла; - - КонецЕсли; - - КонецЕсли; - - // При успешном выполнении возвращает код успеха - Если ПустаяСтрока(ОшибкиОбновленияСтраниц) Тогда - - Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; - - Иначе - - ДополнительныеПараметры.Лог.Ошибка("Имеются ненужные страницы: " + Символы.ПС + ОшибкиОбновленияСтраниц); - Возврат МенеджерКомандПриложения.РезультатыКоманд().ОшибкаВремениВыполнения; - - КонецЕсли; - -КонецФункции // ВыполнитьКоманду diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\277\321\200\320\260\320\262\320\272\320\260\320\237\320\276\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\277\321\200\320\260\320\262\320\272\320\260\320\237\320\276\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274.os" index e00d787..2fcfde8 100644 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\277\321\200\320\260\320\262\320\272\320\260\320\237\320\276\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274.os" +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\277\321\200\320\260\320\262\320\272\320\260\320\237\320\276\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274.os" @@ -4,6 +4,20 @@ // /////////////////////////////////////////////////////////////////////////////// +// Возвращает имя команды приложения +Функция ИмяКоманды() Экспорт + + Возврат "help"; + +КонецФункции // ИмяКоманды + +// Возвращает описание исполняемой команды +Функция ОписаниеКоманды() Экспорт + + Возврат "Выводит справку по командам"; + +КонецФункции // ОписаниеКоманды + Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Команда"); diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\241\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\321\216.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\241\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\321\216.os" index c60dd4d..6ca8e7f 100644 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\241\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\321\216.os" +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\241\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\321\216.os" @@ -25,6 +25,7 @@ Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-format", "Формат генерации документации. Поддерживается confluence и html. Используется confluence по умолчанию"); Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-config", "Путь к конфигурационному файлу. По умолчанию ищет в каталоге исходных файлов"); Парсер.ДобавитьПараметрФлагКоманды(Команда, "-git", "Включает режим обработки изменений репозитория git"); + Парсер.ДобавитьПараметрФлагКоманды(Команда, "-errno", "Выполняет публикацию документации даже при наличии ошибок"); КонецПроцедуры // НастроитьКоманду @@ -43,9 +44,9 @@ НастройкиАнализаИзменений = ОбщегоНазначения.ПрочитатьНастройкиАнализаИзменений(НастройкиСтенда, КаталогИсходныхФайлов, ПараметрыКоманды, Приложение); ПарсерКонфигурации = ОбщегоНазначения.ПолучитьПарсерКонфигурации(); - - ТекущийКаталогИсходныхФайлов = ?(НастройкиАнализаИзменений.Анализировать, НастройкиАнализаИзменений.КаталогИсходныхФайлов, КаталогИсходныхФайлов); - + ТекущийКаталогИсходныхФайлов = ОбъединитьПути(КаталогИсходныхФайлов, НастройкиСтенда.Настройка("КаталогИсходныхФайлов")); + Файл = Новый Файл(ТекущийКаталогИсходныхФайлов); + ТекущийКаталогИсходныхФайлов = Файл.ПолноеИмя; ОписаниеКонфигурации = ОбщегоНазначения.ПолучитьПарсерКонфигурации(ПарсерКонфигурации).ПрочитатьДеревоКонфигурации(ТекущийКаталогИсходныхФайлов); ОписаниеКонфигурации = ОбщегоНазначения.ПолучитьПарсерКонфигурации(ПарсерКонфигурации).ПрочитатьМодулиКонфигурации(ТекущийКаталогИсходныхФайлов, ОписаниеКонфигурации); @@ -57,23 +58,32 @@ ГенераторДокументации = ОбщегоНазначения.ПолучитьГенераторДокументации(НастройкиСтенда, ПараметрыКоманды, Приложение); РезультатГенерации = ГенераторДокументации.Сгенерировать(НастройкиГенератора); - Если Не ПустаяСтрока(РезультатГенерации.ОшибкиГенерации) Тогда + ЕстьОшибкиГенерации = Не ПустаяСтрока(РезультатГенерации.ОшибкиГенерации); + ТекстОшибки = ""; + + Если ПараметрыКоманды["-errno"] ИЛИ НЕ ЕстьОшибкиГенерации Тогда + + ОшибкиПубликации = ГенераторДокументации.Опубликовать(РезультатГенерации, НастройкиГенератора); + Если Не ПустаяСтрока(ОшибкиПубликации) Тогда + + ТекстОшибки = СтрШаблон("Публикация документациии завершилась ошибкой: %1", ОшибкиПубликации); + + КонецЕсли; + + КонецЕсли; + + Если ЕстьОшибкиГенерации Тогда - ТекстОшибки = СтрШаблон("Генерация документациии завершилась ошибкой: %1", РезультатГенерации.ОшибкиГенерации); - Приложение.ЗавершитьРаботуПриложенияСОшибкой(ТекстОшибки); - Возврат Приложение.РезультатыКоманд().ОшибкаВремениВыполнения; + ТекстОшибки = СтрШаблон("Генерация документациии завершилась ошибкой: %1", РезультатГенерации.ОшибкиГенерации) + Символы.ПС + ТекстОшибки; КонецЕсли; + + Если НЕ ПустаяСтрока(ТекстОшибки) Тогда - ОшибкиПубликации = ГенераторДокументации.Опубликовать(РезультатГенерации, НастройкиГенератора); - Если Не ПустаяСтрока(ОшибкиПубликации) Тогда - - ТекстОшибки = СтрШаблон("Публикация документациии завершилась ошибкой: %1", ОшибкиПубликации); Приложение.ЗавершитьРаботуПриложенияСОшибкой(ТекстОшибки); - Возврат Приложение.РезультатыКоманд().ОшибкаВремениВыполнения; КонецЕсли; - + // При успешном выполнении возвращает код успеха Возврат Приложение.РезультатыКоманд().Успех; diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\241\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\321\216\320\237\320\276\320\244\320\260\320\271\320\273\321\203.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\241\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\321\216\320\237\320\276\320\244\320\260\320\271\320\273\321\203.os" new file mode 100644 index 0000000..800b5e3 --- /dev/null +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\321\213/\320\241\320\263\320\265\320\275\320\265\321\200\320\270\321\200\320\276\320\262\320\260\321\202\321\214\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\321\206\320\270\321\216\320\237\320\276\320\244\320\260\320\271\320\273\321\203.os" @@ -0,0 +1,107 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Служебный модуль с реализацией работы команды +// +/////////////////////////////////////////////////////////////////////////////// + +// Возвращает имя команды приложения +Функция ИмяКоманды() Экспорт + + Возврат "alone"; + +КонецФункции // ИмяКоманды + +// Возвращает описание исполняемой команды +Функция ОписаниеКоманды() Экспорт + + Возврат "Выполняет генерацию документации указанного файла"; + +КонецФункции // ОписаниеКоманды + +Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт + + // Добавление параметров команды + Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ИсходныйФайл", "Исходный файл, для которого необходимо сгенерировать документацию"); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-format", "Формат генерации документации. Поддерживается ТОЛЬКО html."); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-config", "Путь к конфигурационному файлу. По умолчанию ищет в каталоге с исходным файлом"); + Парсер.ДобавитьПараметрФлагКоманды(Команда, "-errno", "Выполняет публикацию документации даже при наличии ошибок"); + +КонецПроцедуры // НастроитьКоманду + +// Выполняет логику команды +// +// Параметры: +// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений +// Приложение - Модуль - Модуль менеджера приложения +// +Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт + + НастройкиГенератора = Новый Структура; + ПараметрыКоманды["-format"] = "html"; + + ИсходныйФайл = ПараметрыКоманды["ИсходныйФайл"]; + Если НЕ ЗначениеЗаполнено(ИсходныйФайл) Тогда + + Приложение.ЗавершитьРаботуПриложенияСОшибкой("Не указан каталог исходных файлов"); + Возврат Неопределено; + + Иначе + + Файл = Новый Файл(ИсходныйФайл); + Если Не Файл.Существует() ИЛИ Файл.ЭтоКаталог() Тогда + + Приложение.ЗавершитьРаботуПриложенияСОшибкой(СтрШаблон("Исходный файл '%1' не существует или это каталог", ИсходныйФайл)); + Возврат Неопределено; + + КонецЕсли; + + ИсходныйФайл = Файл.ПолноеИмя; + + КонецЕсли; + + Файл = Новый Файл(ИсходныйФайл); + КаталогИсходныхФайлов = Файл.Путь; + + НастройкиСтенда = ОбщегоНазначения.ПрочитатьНастройкиСтенда(КаталогИсходныхФайлов, ПараметрыКоманды, Приложение); + НастройкиАнализаИзменений = ОбщегоНазначения.ПрочитатьНастройкиАнализаИзменений(НастройкиСтенда, КаталогИсходныхФайлов, ПараметрыКоманды, Приложение); + + ПарсерКонфигурации = ОбщегоНазначения.ПолучитьПарсерКонфигурации(); + + ОписаниеМодуля = ОбщегоНазначения.ПолучитьПарсерКонфигурации(ПарсерКонфигурации).ПолучитьОписаниеМодуляПоИмениФайла(Файл); + + НастройкиГенератора.Вставить("ОписаниеМодуля", ОписаниеМодуля); + НастройкиГенератора.Вставить("НастройкиАнализаИзменений", НастройкиАнализаИзменений); + + ГенераторДокументации = ОбщегоНазначения.ПолучитьГенераторДокументации(НастройкиСтенда, ПараметрыКоманды, Приложение); + РезультатГенерации = ГенераторДокументации.Сгенерировать(НастройкиГенератора); + + ЕстьОшибкиГенерации = Не ПустаяСтрока(РезультатГенерации.ОшибкиГенерации); + ТекстОшибки = ""; + + Если ПараметрыКоманды["-errno"] ИЛИ НЕ ЕстьОшибкиГенерации Тогда + + ОшибкиПубликации = ГенераторДокументации.Опубликовать(РезультатГенерации, НастройкиГенератора); + Если Не ПустаяСтрока(ОшибкиПубликации) Тогда + + ТекстОшибки = СтрШаблон("Публикация документациии завершилась ошибкой: %1", ОшибкиПубликации); + + КонецЕсли; + + КонецЕсли; + + Если ЕстьОшибкиГенерации Тогда + + ТекстОшибки = СтрШаблон("Генерация документациии завершилась ошибкой: %1", РезультатГенерации.ОшибкиГенерации) + Символы.ПС + ТекстОшибки; + + КонецЕсли; + + Если НЕ ПустаяСтрока(ТекстОшибки) Тогда + + Приложение.ЗавершитьРаботуПриложенияСОшибкой(ТекстОшибки); + + КонецЕсли; + + // При успешном выполнении возвращает код успеха + Возврат Приложение.РезультатыКоманд().Успех; + +КонецФункции // ВыполнитьКоманду diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.os" index 315426c..a575422 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.os" @@ -58,6 +58,12 @@ НастройкиАнализаИзменений = Новый Структура(); НастройкиАнализаИзменений.Вставить("Анализировать", ПараметрыКоманды["-git"]); + Если НастройкиАнализаИзменений.Анализировать = Неопределено Тогда + + НастройкиАнализаИзменений.Анализировать = Ложь; + + КонецЕсли; + Если НЕ НастройкиАнализаИзменений.Анализировать Тогда Возврат НастройкиАнализаИзменений; @@ -95,8 +101,7 @@ НастройкиАнализаИзменений.Вставить("ИзмененныеФайлы", СоставЛога.ИзмененныеФайлы); НастройкиАнализаИзменений.Вставить("ИдентификаторКоммита", СоставЛога.ИдентификаторКоммита); - НастройкиАнализаИзменений.Вставить("КаталогИсходныхФайлов", ОбъединитьПути(КаталогИсходныхФайлов, НастройкиСтенда.Настройка("КаталогИсходныхФайлов"))); - + Возврат НастройкиАнализаИзменений; КонецФункции diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" index 75b4022..6d2612c 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" @@ -21,7 +21,7 @@ // Функция ВерсияПродукта() Экспорт - Возврат "1.0"; + Возврат "1.0.4"; КонецФункции // ВерсияПродукта @@ -44,11 +44,11 @@ // См. описание метода "УстановитьРаскладку" библиотеки logos // Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт - + Возврат СтрШаблон("%1: %2 - %3", ТекущаяДата(), УровниЛога.НаименованиеУровня(Уровень), Сообщение); - -КонецФункции +КонецФункции + // ИмяЛогаСистемы // Возвращает идентификатор лога приложения // @@ -72,7 +72,7 @@ Функция ИмяКомандыВерсия() Экспорт Возврат "version"; - + КонецФункции // ИмяКомандыВерсия @@ -82,7 +82,7 @@ // Строка - имя команды // Функция ИмяКомандыПомощь() Экспорт - + Возврат "help"; КонецФункции // ИмяКомандыПомощь() @@ -107,21 +107,9 @@ // Приложение - Модуль - Модуль менеджера приложения Процедура НастроитьКомандыПриложения(Знач Приложение) Экспорт - Приложение.ДобавитьКоманду(ИмяКомандыПомощь(), "КомандаСправкаПоПараметрам", "Выводит справку по командам"); - Приложение.ДобавитьКоманду(ИмяКомандыВерсия(), "КомандаVersion", "Выводит версию приложения"); - ФайлыКоманд = НайтиФайлы(ОбъединитьПути(ТекущийКаталог(), "src", "Команды"), "*.os"); + ФайлыКоманд = НайтиФайлы(ОбъединитьПути(СтартовыйСценарий().Каталог, "Команды"), "*.os"); Для Каждого ФайлКоманды Из ФайлыКоманд Цикл - - // именовать команды "Команда" в соответствующем каталоге - тавтология - // оставим для стандартных команд пока - Если СтрНачинаетсяС(ФайлКоманды.ИмяБезРасширения, "Команда") Тогда - - Продолжить; - - КонецЕсли; - - Приложение.ДобавитьКомандуПриложения(ФайлКоманды.ИмяБезРасширения); - + Приложение.ДобавитьКомандуПриложения(ФайлКоманды.ИмяБезРасширения); КонецЦикла; - + КонецПроцедуры // ПриРегистрацииКомандПриложения