#Использовать 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); КонецЕсли; Возврат МассивКомментария; КонецФункции ПриСозданииОбъекта();