You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2026-06-20 09:19:27 +02:00
Переработка генерации CLI
This commit is contained in:
@@ -15,17 +15,17 @@
|
||||
Перем СписокГласных;
|
||||
|
||||
Процедура ПриСозданииОбъекта(Знач ДанныеПроекта_ = Неопределено)
|
||||
|
||||
Если ДанныеПроекта_ = Неопределено Тогда
|
||||
ДанныеПроекта = Новый ProjectData;
|
||||
Иначе
|
||||
ДанныеПроекта = ДанныеПроекта_;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Если ДанныеПроекта_ = Неопределено Тогда
|
||||
ДанныеПроекта = Новый ProjectData;
|
||||
Иначе
|
||||
ДанныеПроекта = ДанныеПроекта_;
|
||||
КонецЕсли;
|
||||
|
||||
Корень = ДанныеПроекта.ПолучитьЗначениеНастройки("paths.root");
|
||||
Языки = ДанныеПроекта.ПолучитьЗначениеНастройки("localization.langs");
|
||||
КаталогДополнений = ДанныеПроекта.ПолучитьЗначениеНастройки("paths.paramsExamplesSrc");
|
||||
|
||||
|
||||
CommonTools.СообщитьПроцесс("Generating CLI version from Oint");
|
||||
|
||||
ЗаполнитьСоответствиеСлужебныхКлючей();
|
||||
@@ -38,19 +38,21 @@
|
||||
СоздатьОснову(Язык, Корень);
|
||||
КонецЕсли;
|
||||
|
||||
ОпределитьСоответствиеМодулейКоманд(Язык);
|
||||
|
||||
МодульСоставаОПИ = Новый ТекстовыйДокумент();
|
||||
КаталогСписковСостава = Корень + Язык + "/cli/data/Classes/internal/Classes/";
|
||||
КаталогИндекса = Корень + Язык + "/cli/data/Classes/index";
|
||||
КаталогДополненийОпций = КаталогДополнений;
|
||||
|
||||
|
||||
ОбъектИндекса = Новый Файл(КаталогИндекса);
|
||||
|
||||
|
||||
Если Не ОбъектИндекса.Существует() Тогда
|
||||
СоздатьКаталог(КаталогИндекса);
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
СоздатьФайлОсновныхДанных(Язык, КаталогИндекса);
|
||||
ЗаполнитьТаблицыСостава();
|
||||
ЗаполнитьТаблицыСостава(КаталогИндекса);
|
||||
ВыполнитьДополнительныйПеревод(Язык);
|
||||
|
||||
КонецЦикла;
|
||||
@@ -73,51 +75,63 @@
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СоздатьФайлОсновныхДанных(Язык, КаталогИндекса)
|
||||
|
||||
|
||||
ОсновныеДанные = Новый Соответствие();
|
||||
ОсновныеДанные.Вставить("version", ПолучитьВерсиюПакета());
|
||||
|
||||
ОпределитьСоответствиеМодулейКоманд(Язык);
|
||||
|
||||
|
||||
СоответствиеМодулей = Новый Соответствие();
|
||||
|
||||
|
||||
Для Каждого КомандаМодуля Из СоответствиеМодулейКоманд Цикл
|
||||
СоответствиеМодулей.Вставить(КомандаМодуля.Значение, КомандаМодуля.Ключ);
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
ОсновныеДанные.Вставить("modules", СоответствиеМодулей);
|
||||
|
||||
|
||||
Путь = ОбъединитьПути(КаталогИндекса, "lib.json");
|
||||
|
||||
|
||||
CommonTools.ЗаписатьФайлJSON(Путь, ОсновныеДанные);
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаполнитьТаблицыСостава()
|
||||
Процедура ЗаполнитьТаблицыСостава(КаталогИндекса)
|
||||
|
||||
Для Каждого Модуль Из ОбщийМассивМодулей Цикл
|
||||
|
||||
ТекущийМодуль = Модуль.ИмяБезРасширения;
|
||||
|
||||
Если Не СоответствиеМодулейКоманд[ТекущийМодуль] = Неопределено Тогда
|
||||
РазобратьМодуль(Модуль);
|
||||
ИмяКоманды = СоответствиеМодулейКоманд[Модуль.ИмяБезРасширения];
|
||||
|
||||
Если Не ИмяКоманды = Неопределено Тогда
|
||||
|
||||
ТекущийМодуль = РазобратьМодуль(Модуль);
|
||||
ПутьФайла = ОбъединитьПути(КаталогИндекса, ИмяКоманды);
|
||||
|
||||
CommonTools.ЗаписатьФайлJSON(ПутьФайла, ТекущийМодуль);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РазобратьМодуль(Модуль)
|
||||
Функция РазобратьМодуль(Модуль)
|
||||
|
||||
ЗаписатьНачалоСоставаБиблиотеки();
|
||||
ТекущийМодуль = Модуль.ИмяБезРасширения;
|
||||
ТекущаяОбласть = "Основные методы";
|
||||
ТекущаяБиблиотека = СоответствиеМодулейКоманд.Получить(ТекущийМодуль);
|
||||
|
||||
Парсер = Новый ПарсерВстроенногоЯзыка;
|
||||
ДокументМодуля = Новый ТекстовыйДокумент;
|
||||
ДокументМодуля.Прочитать(Модуль.ПолноеИмя);
|
||||
ТекстМодуля = ДокументМодуля.ПолучитьТекст();
|
||||
|
||||
ТекстМодуля = ДокументМодуля.ПолучитьТекст();
|
||||
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
|
||||
ТекущаяОбласть = "Основные методы";
|
||||
|
||||
|
||||
ТекущийИндекс = Новый Соответствие;
|
||||
ТекущийИндекс.Вставить("module" , ТекущаяБиблиотека);
|
||||
ТекущийИндекс.Вставить("library", ТекущаяБиблиотека);
|
||||
|
||||
МассивМетодов = Новый Массив;
|
||||
|
||||
Для Каждого Метод Из СтруктураМодуля.Объявления Цикл
|
||||
|
||||
Если Метод.Тип = "ИнструкцияПрепроцессораОбласть" Тогда
|
||||
@@ -125,233 +139,55 @@
|
||||
КонецЕсли;
|
||||
|
||||
Если Метод.Тип = "ОбъявлениеМетода" И Метод.Сигнатура.Экспорт = Истина Тогда
|
||||
ТаблицаОписанийПараметров.Очистить();
|
||||
РазобратьКомментарийМетода(ДокументМодуля, Метод, Модуль, ТекущаяОбласть);
|
||||
|
||||
ТекущийМетод = РазобратьКомментарийМетода(ДокументМодуля, Метод, Модуль);
|
||||
ТекущийМетод.Вставить("region", ТекущаяОбласть);
|
||||
|
||||
МассивМетодов.Добавить(ТекущийМетод);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
СписокЗависимостей = ОпределитьСписокЗависимостей(ТекстМодуля);
|
||||
ТекущийМетод.Вставить("depends", СписокЗависимостей);
|
||||
|
||||
Возврат ТекущийМодуль;
|
||||
|
||||
ЗаписатьОкончаниеСоставаБиблиотеки();
|
||||
|
||||
Команда = СоответствиеМодулейКоманд[Модуль.ИмяБезРасширения];
|
||||
СпсиокЗависимостей = Новый Структура;
|
||||
ОсновнойМодуль = Новый Структура;
|
||||
|
||||
ОпределитьСписокЗависимостей(ТекстМодуля, Модуль.ИмяБезРасширения, СпсиокЗависимостей, ОсновнойМодуль);
|
||||
ЗаписатьФункциюПолученияСтрокиПодключения(СпсиокЗависимостей, Команда, ОсновнойМодуль);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОпределитьСписокЗависимостей(ТекстМодуля, ИмяМодуля, СтруктураЗависимостей, ОсновнойМодуль = Неопределено)
|
||||
КонецФункции
|
||||
|
||||
Функция РазобратьКомментарийМетода(ТекстовыйДокумент, Метод, Модуль)
|
||||
|
||||
Для Каждого Модуль Из ОбщийМассивМодулей Цикл
|
||||
|
||||
ИскомаяЗависимость = Модуль.ИмяБезРасширения;
|
||||
|
||||
ЭтоДополнительнаяЗависимость = СтрЧислоВхождений(ТекстМодуля, ИскомаяЗависимость) > 1;
|
||||
ЭтоОсновнойМодуль = ИскомаяЗависимость = ИмяМодуля;
|
||||
|
||||
Если Не ЭтоДополнительнаяЗависимость И Не ЭтоОсновнойМодуль Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
АбсолютныйПуть = Модуль.ПолноеИмя;
|
||||
АбсолютныйПуть = СтрЗаменить(АбсолютныйПуть, "\", "/");
|
||||
ЧастиПути = СтрРазделить(АбсолютныйПуть, "/");
|
||||
ЧислоЧастей = ЧастиПути.ВГраница();
|
||||
|
||||
НовыйПуть = Новый Массив;
|
||||
|
||||
Для Н = 0 По ЧислоЧастей Цикл
|
||||
|
||||
ОбратныйИндекс = ЧислоЧастей - Н;
|
||||
ТекущийЭлемент = ЧастиПути[ОбратныйИндекс];
|
||||
|
||||
Если нРег(ТекущийЭлемент) = "oint" Тогда
|
||||
НовыйПуть.Вставить(0, "oint");
|
||||
НовыйПуть.Вставить(0, "%1");
|
||||
Прервать;
|
||||
Иначе
|
||||
НовыйПуть.Вставить(0, ТекущийЭлемент);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
НовыйПуть = СтрСоединить(НовыйПуть, "/");
|
||||
|
||||
Если ЭтоОсновнойМодуль И Не ОсновнойМодуль = Неопределено Тогда
|
||||
ОсновнойМодуль.Вставить(ИскомаяЗависимость, НовыйПуть);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЭтоДополнительнаяЗависимость Тогда
|
||||
|
||||
Если СтруктураЗависимостей.Свойство(ИскомаяЗависимость) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураЗависимостей.Вставить(ИскомаяЗависимость, НовыйПуть);
|
||||
|
||||
ТекстЗависимости = ПолучитьСтрокуИзДвоичныхДанных(Новый ДвоичныеДанные(Модуль.ПолноеИмя));
|
||||
ОпределитьСписокЗависимостей(ТекстЗависимости, "", СтруктураЗависимостей);
|
||||
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьНачалоСоставаБиблиотеки()
|
||||
СписокЗанятыхБукв = Новый СписокЗначений();
|
||||
|
||||
ТекущийФайлСостава = Новый ТекстовыйДокумент();
|
||||
|
||||
ТекущийФайлСостава.ДобавитьСтроку("
|
||||
|
|
||||
|Перем ТаблицаСостава;
|
||||
|
|
||||
|Функция ПолучитьСостав() Экспорт
|
||||
|
|
||||
| Если ТаблицаСостава <> Неопределено Тогда
|
||||
| Возврат ТаблицаСостава;
|
||||
| КонецЕсли;
|
||||
|
|
||||
| ТаблицаСостава = Новый ТаблицаЗначений();
|
||||
| ТаблицаСостава.Колонки.Добавить(""Библиотека"");
|
||||
| ТаблицаСостава.Колонки.Добавить(""Модуль"");
|
||||
| ТаблицаСостава.Колонки.Добавить(""Метод"");
|
||||
| ТаблицаСостава.Колонки.Добавить(""МетодПоиска"");
|
||||
| ТаблицаСостава.Колонки.Добавить(""Параметр"");
|
||||
| ТаблицаСостава.Колонки.Добавить(""ПараметрСокр"");
|
||||
| ТаблицаСостава.Колонки.Добавить(""Описание"");
|
||||
| ТаблицаСостава.Колонки.Добавить(""ОписаниеМетода"");
|
||||
| ТаблицаСостава.Колонки.Добавить(""Область"");
|
||||
|");
|
||||
|
||||
ТаблицаОписанийПараметров = Новый ТаблицаЗначений;
|
||||
ТаблицаОписанийПараметров.Колонки.Добавить("Имя");
|
||||
ТаблицаОписанийПараметров.Колонки.Добавить("ИмяСокр");
|
||||
ТаблицаОписанийПараметров.Колонки.Добавить("Типы");
|
||||
ТаблицаОписанийПараметров.Колонки.Добавить("Описание");
|
||||
ТаблицаОписанийПараметров.Колонки.Добавить("ЗначениеПоУмолчанию");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьОкончаниеСоставаБиблиотеки()
|
||||
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" Возврат ТаблицаСостава;");
|
||||
ТекущийФайлСостава.ДобавитьСтроку("КонецФункции");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьФункциюПолученияСтрокиПодключения(СпсиокЗависимостей, Библиотека, ОсновнойМодуль)
|
||||
|
||||
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
|
||||
ТекущийФайлСостава.ДобавитьСтроку("Функция ПолучитьСтрокуПодключения() Экспорт");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
|
||||
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" Возврат """);
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" |Контекст = Новый Структура;");
|
||||
|
||||
ШаблонКонтекста = " |Контекст.Вставить(""""%1"""", Неопределено);";
|
||||
ШаблонОсновного = " |%1 = ЗагрузитьСценарий(""""%2"""", Контекст);";
|
||||
ШаблонПодключения = " |%1 = ЗагрузитьСценарий(""""%2"""", Контекст);
|
||||
| |Контекст.Вставить(""""%1"""", %1);";
|
||||
|
||||
МассивКонтекста = Новый Массив;
|
||||
МассивПодключений = Новый Массив;
|
||||
ТекстОсновного = "";
|
||||
|
||||
Для Каждого Зависимость Из СпсиокЗависимостей Цикл
|
||||
МассивКонтекста.Добавить(СтрШаблон(ШаблонКонтекста, Зависимость.Ключ));
|
||||
МассивПодключений.Добавить(СтрШаблон(ШаблонПодключения, Зависимость.Ключ, Зависимость.Значение));
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Информация Из ОсновнойМодуль Цикл
|
||||
ТекстОсновного = СтрШаблон(ШаблонОсновного, Информация.Ключ, Информация.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
ТекстКонтекста = СтрСоединить(МассивКонтекста, Символы.ПС);
|
||||
ТекстПодключения = СтрСоединить(МассивПодключений, Символы.ПС);
|
||||
|
||||
ТекущийФайлСостава.ДобавитьСтроку(ТекстКонтекста);
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" |");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(ТекстПодключения);
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" |");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(ТекстОсновного);
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" |"" + Символы.ПС;");
|
||||
|
||||
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
|
||||
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
|
||||
ТекущийФайлСостава.ДобавитьСтроку("КонецФункции ");
|
||||
|
||||
CommonTools.ЗаписатьТекст(ТекущийФайлСостава, КаталогСписковСостава + Библиотека + ".os");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РазобратьКомментарийМетода(ТекстовыйДокумент, Метод, Модуль, Область)
|
||||
ТекущийМетод = Новый Соответствие();
|
||||
|
||||
НомерСтроки = Метод.Начало.НомерСтроки;
|
||||
ИмяМетода = Метод.Сигнатура.Имя;
|
||||
|
||||
МассивКомментария = ПарсингКомментария(ТекстовыйДокумент, НомерСтроки);
|
||||
|
||||
Если МассивКомментария.Количество() = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
МассивПараметров = Новый Массив;
|
||||
ОписаниеМетода = "";
|
||||
|
||||
СформироватьСтруктуруМетода(МассивКомментария, МассивПараметров, ОписаниеМетода);
|
||||
СформироватьТаблицуОписанийПараметров(МассивПараметров, Метод, Модуль);
|
||||
|
||||
ДопОписание = "";
|
||||
ОпределитьДопОписание(ДопОписание, Модуль);
|
||||
|
||||
ДопОписание = ОпределитьДопОписание(Модуль);
|
||||
ОписаниеМетода = СформироватьСтруктуруМетода(МассивКомментария, МассивПараметров);
|
||||
ОписаниеМетода = СокрЛП(ОписаниеМетода) + ДопОписание;
|
||||
МассивОписаний = Новый Массив;
|
||||
|
||||
Для Каждого СтрокаПараметра Из ТаблицаОписанийПараметров Цикл
|
||||
|
||||
ЗаписатьСозданиеПараметраСостава(СтрокаПараметра, ИмяМетода, Область, СокрЛП(ОписаниеМетода));
|
||||
ОписаниеМетода = "";
|
||||
|
||||
Для Каждого СтрокаПараметра Из МассивПараметров Цикл
|
||||
ТекущееОписание = СформироватьСтруктуруОписанияПараметра(Метод, СтрокаПараметра, СписокЗанятыхБукв);
|
||||
МассивОписаний.Добавить(ТекущееОписание);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПарсингКомментария(Знач ТекстовыйДокумент, Знач НомерСтроки)
|
||||
ТекущийМетод.Вставить("description", ОписаниеМетода);
|
||||
ТекущийМетод.Вставить("params" , МассивОписаний);
|
||||
|
||||
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки - 1);
|
||||
ТекстКомментария = ТекущаяСтрока;
|
||||
|
||||
Счетчик = 1;
|
||||
Пока СтрНайти(ТекущаяСтрока, "//") > 0 Цикл
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
|
||||
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки - Счетчик);
|
||||
ТекстКомментария = ТекущаяСтрока + Символы.ПС + ТекстКомментария;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если СтрНайти(ТекстКомментария, "!NOCLI") > 0 Тогда
|
||||
Возврат Новый Массив;
|
||||
КонецЕсли;
|
||||
|
||||
МассивКомментария = СтрРазделить(ТекстКомментария, "//", Ложь);
|
||||
|
||||
Если МассивКомментария.Количество() = 0 Тогда
|
||||
Возврат Новый Массив;
|
||||
Иначе
|
||||
МассивКомментария.Удалить(0);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат МассивКомментария;
|
||||
Возврат ТекущийМетод;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура СформироватьСтруктуруМетода(Знач МассивКомментария, МассивПараметров, ОписаниеМетода)
|
||||
Функция СформироватьСтруктуруМетода(Знач МассивКомментария, МассивПараметров)
|
||||
|
||||
ОписаниеМетода = "";
|
||||
|
||||
ЗаписыватьПараметры = Ложь;
|
||||
ЗаписыватьОписание = Истина;
|
||||
@@ -389,151 +225,186 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СформироватьТаблицуОписанийПараметров(Знач МассивПараметров, Знач Метод, Знач Модуль = "")
|
||||
Возврат ОписаниеМетода;
|
||||
|
||||
СписокСокращенийИмен = Новый СписокЗначений();
|
||||
СписокЗанятыхБукв = Новый СписокЗначений();
|
||||
ТекущийМассивСтрок = Новый Массив;
|
||||
КонецФункции
|
||||
|
||||
Функция ОпределитьСписокЗависимостей(ТекстМодуля)
|
||||
|
||||
СтруктураЗависимостей = Новый Соответствие();
|
||||
|
||||
Для Каждого Модуль Из ОбщийМассивМодулей Цикл
|
||||
|
||||
ИскомаяЗависимость = Модуль.ИмяБезРасширения;
|
||||
|
||||
АбсолютныйПуть = Модуль.ПолноеИмя;
|
||||
АбсолютныйПуть = СтрЗаменить(АбсолютныйПуть, "\", "/");
|
||||
ЧастиПути = СтрРазделить(АбсолютныйПуть, "/");
|
||||
ЧислоЧастей = ЧастиПути.ВГраница();
|
||||
|
||||
НовыйПуть = Новый Массив;
|
||||
|
||||
Для Н = 0 По ЧислоЧастей Цикл
|
||||
|
||||
ОбратныйИндекс = ЧислоЧастей - Н;
|
||||
ТекущийЭлемент = ЧастиПути[ОбратныйИндекс];
|
||||
|
||||
Если нРег(ТекущийЭлемент) = "oint" Тогда
|
||||
НовыйПуть.Вставить(0, "oint");
|
||||
НовыйПуть.Вставить(0, "%1");
|
||||
Прервать;
|
||||
Иначе
|
||||
НовыйПуть.Вставить(0, ТекущийЭлемент);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
НовыйПуть = СтрСоединить(НовыйПуть, "/");
|
||||
|
||||
Если СтруктураЗависимостей.Свойство(ИскомаяЗависимость) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураЗависимостей.Вставить(ИскомаяЗависимость, НовыйПуть);
|
||||
|
||||
ТекстЗависимости = ПолучитьСтрокуИзДвоичныхДанных(Новый ДвоичныеДанные(Модуль.ПолноеИмя));
|
||||
Для Каждого ВнутренняяЗависимость Из ОпределитьСписокЗависимостей(ТекстЗависимости) Цикл
|
||||
СтруктураЗависимостей.Вставить(ВнутренняяЗависимость.Ключ, ВнутренняяЗависимость.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СтруктураЗависимостей;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПарсингКомментария(Знач ТекстовыйДокумент, Знач НомерСтроки)
|
||||
|
||||
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки - 1);
|
||||
ТекстКомментария = ТекущаяСтрока;
|
||||
|
||||
Счетчик = 1;
|
||||
Пока СтрНайти(ТекущаяСтрока, "//") > 0 Цикл
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
|
||||
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки - Счетчик);
|
||||
ТекстКомментария = ТекущаяСтрока + Символы.ПС + ТекстКомментария;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если СтрНайти(ТекстКомментария, "!NOCLI") > 0 Тогда
|
||||
Возврат Новый Массив;
|
||||
КонецЕсли;
|
||||
|
||||
МассивКомментария = СтрРазделить(ТекстКомментария, "//", Ложь);
|
||||
|
||||
Если МассивКомментария.Количество() = 0 Тогда
|
||||
Возврат Новый Массив;
|
||||
Иначе
|
||||
МассивКомментария.Удалить(0);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат МассивКомментария;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьСтруктуруОписанияПараметра(Знач Метод, Знач ПараметрМетода, СписокЗанятыхБукв)
|
||||
|
||||
ТекущееОписание = Новый Соответствие();
|
||||
|
||||
Разделитель = "-";
|
||||
|
||||
Для Каждого ПараметрМетода Из МассивПараметров Цикл
|
||||
|
||||
МассивЭлементовПараметра = СтрРазделить(ПараметрМетода, Разделитель, Ложь);
|
||||
КоличествоЭлементов = МассивЭлементовПараметра.Количество();
|
||||
|
||||
Для Н = 0 По МассивЭлементовПараметра.ВГраница() Цикл
|
||||
МассивЭлементовПараметра[Н] = СокрЛП(МассивЭлементовПараметра[Н]);
|
||||
КонецЦикла;
|
||||
|
||||
Если КоличествоЭлементов < 4 Тогда
|
||||
Сообщить("Недостаточный набор данных в док. комментарии: " + Модуль.ИмяБезРасширения + " - " + Метод.Сигнатура.Имя);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Имя1С = МассивЭлементовПараметра[0];
|
||||
Имя = "--" + МассивЭлементовПараметра[3];
|
||||
Буква = Лев(МассивЭлементовПараметра[3], 1);
|
||||
ИмяСокр = "-" + Буква;
|
||||
Типы = МассивЭлементовПараметра[1];
|
||||
Описание = ?(КоличествоЭлементов >= 5, МассивЭлементовПараметра[4], МассивЭлементовПараметра[2]);
|
||||
|
||||
Если КоличествоЭлементов > 5 Или СтрНайти(Имя, " ") > 0 Тогда
|
||||
ВызватьИсключение("Некоррентный документирующий комментарий в методе: " + Модуль.ИмяБезРасширения + " - " + Метод.Сигнатура.Имя);
|
||||
КонецЕсли;
|
||||
|
||||
НоваяСтрокаТаблицы = ТаблицаОписанийПараметров.Добавить();
|
||||
НоваяСтрокаТаблицы.Имя = Имя;
|
||||
НоваяСтрокаТаблицы.Типы = Типы;
|
||||
НоваяСтрокаТаблицы.Описание = Описание;
|
||||
|
||||
Если СписокСокращенийИмен.НайтиПоЗначению(ИмяСокр) = Неопределено Тогда
|
||||
|
||||
СписокСокращенийИмен.Добавить(ИмяСокр);
|
||||
СписокЗанятыхБукв.Добавить(Буква);
|
||||
НоваяСтрокаТаблицы.ИмяСокр = ИмяСокр;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
НоваяСтрокаТаблицы.ЗначениеПоУмолчанию = ПолучитьЗначениеПараметраПоУмолчанию(Имя1С, Метод);
|
||||
|
||||
ТекущийМассивСтрок.Добавить(НоваяСтрокаТаблицы);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого СуществующаяСтрока Из ТекущийМассивСтрок Цикл
|
||||
|
||||
Если ЗначениеЗаполнено(СуществующаяСтрока.ИмяСокр) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Имя = СуществующаяСтрока.Имя;
|
||||
|
||||
Для Н = 3 По СтрДлина(Имя) Цикл
|
||||
|
||||
ТекущаяБуква = Сред(Имя, Н, 1);
|
||||
|
||||
ЭтоСогласная = СписокСогласных.НайтиПоЗначению(ТекущаяБуква) <> Неопределено;
|
||||
ЭтоНезанятая = СписокЗанятыхБукв.НайтиПоЗначению(ТекущаяБуква) = Неопределено;
|
||||
|
||||
Если ЭтоСогласная И ЭтоНезанятая Тогда
|
||||
|
||||
ИмяСокр = "-" + ТекущаяБуква;
|
||||
СуществующаяСтрока.ИмяСокр = ИмяСокр;
|
||||
СписокСокращенийИмен.Добавить(ИмяСокр);
|
||||
СписокЗанятыхБукв.Добавить(ТекущаяБуква);
|
||||
Прервать;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ЗначениеЗаполнено(СуществующаяСтрока.ИмяСокр) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Для Н = 3 По СтрДлина(Имя) Цикл
|
||||
|
||||
ТекущаяБуква = Сред(Имя, Н, 1);
|
||||
|
||||
ЭтоГласная = СписокГласных.НайтиПоЗначению(ТекущаяБуква) <> Неопределено;
|
||||
ЭтоНезанятая = СписокЗанятыхБукв.НайтиПоЗначению(ТекущаяБуква) = Неопределено;
|
||||
|
||||
Если ЭтоГласная И ЭтоНезанятая Тогда
|
||||
|
||||
ИмяСокр = "-" + ТекущаяБуква;
|
||||
СуществующаяСтрока.ИмяСокр = ИмяСокр;
|
||||
СписокСокращенийИмен.Добавить(ИмяСокр);
|
||||
СписокЗанятыхБукв.Добавить(ТекущаяБуква);
|
||||
Прервать;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ЗначениеЗаполнено(СуществующаяСтрока.ИмяСокр) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого СогласнаяБуква Из СписокСогласных Цикл
|
||||
|
||||
ТекущаяБуква = СогласнаяБуква.Значение;
|
||||
ЭтоНезанятая = СписокЗанятыхБукв.НайтиПоЗначению(ТекущаяБуква) = Неопределено;
|
||||
|
||||
Если ЭтоНезанятая Тогда
|
||||
ИмяСокр = "-" + ТекущаяБуква;
|
||||
СуществующаяСтрока.ИмяСокр = ИмяСокр;
|
||||
СписокСокращенийИмен.Добавить(ИмяСокр);
|
||||
СписокЗанятыхБукв.Добавить(ТекущаяБуква);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
СписокПроверки = Новый СписокЗначений();
|
||||
|
||||
Для Каждого СуществующаяСтрока Из ТекущийМассивСтрок Цикл
|
||||
|
||||
ИмяСокр = СуществующаяСтрока.ИмяСокр;
|
||||
|
||||
Если Не ЗначениеЗаполнено(ИмяСокр) Тогда
|
||||
ВызватьИсключение "Не заполнено ИмяСокр в " + Метод.Сигнатура.Имя;
|
||||
КонецЕсли;
|
||||
|
||||
Если СписокПроверки.НайтиПоЗначению(ИмяСокр) <> Неопределено Тогда
|
||||
ВызватьИсключение СтрШаблон("Дублирующий ИмяСокр %1 в %2", ИмяСокр, Метод.Сигнатура.Имя);
|
||||
Иначе
|
||||
СписокПроверки.Добавить(ИмяСокр);
|
||||
КонецЕсли;
|
||||
|
||||
МассивЭлементовПараметра = СтрРазделить(ПараметрМетода, Разделитель, Ложь);
|
||||
КоличествоЭлементов = МассивЭлементовПараметра.Количество();
|
||||
|
||||
Для Н = 0 По МассивЭлементовПараметра.ВГраница() Цикл
|
||||
МассивЭлементовПараметра[Н] = СокрЛП(МассивЭлементовПараметра[Н]);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
Если КоличествоЭлементов < 4 Тогда
|
||||
ВызватьИсключение("Недостаточный набор данных в док. комментарии: " + Метод.Сигнатура.Имя);
|
||||
КонецЕсли;
|
||||
|
||||
Имя1С = МассивЭлементовПараметра[0];
|
||||
Имя = "--" + МассивЭлементовПараметра[3];
|
||||
Буква = Лев(МассивЭлементовПараметра[3], 1);
|
||||
Типы = МассивЭлементовПараметра[1];
|
||||
Описание = ?(КоличествоЭлементов >= 5, МассивЭлементовПараметра[4], МассивЭлементовПараметра[2]);
|
||||
ЗначениеУМ = ПолучитьЗначениеПараметраПоУмолчанию(Имя1С, Метод);
|
||||
|
||||
Если КоличествоЭлементов > 5 Или СтрНайти(Имя, " ") > 0 Тогда
|
||||
ВызватьИсключение("Некорректный документирующий комментарий в методе: " + Метод.Сигнатура.Имя);
|
||||
КонецЕсли;
|
||||
|
||||
ТекущееОписание.Вставить("name" , Имя);
|
||||
ТекущееОписание.Вставить("types" , Типы);
|
||||
ТекущееОписание.Вставить("description", Описание);
|
||||
ТекущееОписание.Вставить("default" , ЗначениеУМ);
|
||||
|
||||
Если СписокЗанятыхБукв.НайтиПоЗначению(Буква) = Неопределено Тогда
|
||||
|
||||
СписокЗанятыхБукв.Добавить(Буква);
|
||||
ТекущееОписание.Вставить("short", "-" + Буква);
|
||||
|
||||
Иначе
|
||||
|
||||
Для Н = 3 По СтрДлина(Имя) Цикл
|
||||
|
||||
ТекущаяБуква = Сред(Имя, Н, 1);
|
||||
|
||||
ЭтоСогласная = СписокСогласных.НайтиПоЗначению(ТекущаяБуква) <> Неопределено;
|
||||
ЭтоНезанятая = СписокЗанятыхБукв.НайтиПоЗначению(ТекущаяБуква) = Неопределено;
|
||||
|
||||
Если ЭтоСогласная И ЭтоНезанятая Тогда
|
||||
ТекущееОписание.Вставить("short", "-" + Буква);
|
||||
СписокЗанятыхБукв.Добавить(ТекущаяБуква);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ЗначениеЗаполнено(ТекущееОписание["short"]) Тогда
|
||||
Возврат ТекущееОписание;
|
||||
КонецЕсли;
|
||||
|
||||
Для Н = 3 По СтрДлина(Имя) Цикл
|
||||
|
||||
ТекущаяБуква = Сред(Имя, Н, 1);
|
||||
|
||||
ЭтоГласная = СписокГласных.НайтиПоЗначению(ТекущаяБуква) <> Неопределено;
|
||||
ЭтоНезанятая = СписокЗанятыхБукв.НайтиПоЗначению(ТекущаяБуква) = Неопределено;
|
||||
|
||||
Если ЭтоГласная И ЭтоНезанятая Тогда
|
||||
ТекущееОписание.Вставить("short", "-" + Буква);
|
||||
СписокЗанятыхБукв.Добавить(ТекущаяБуква);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ЗначениеЗаполнено(ТекущееОписание["short"]) Тогда
|
||||
Возврат ТекущееОписание;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого СогласнаяБуква Из СписокСогласных Цикл
|
||||
|
||||
ТекущаяБуква = СогласнаяБуква.Значение;
|
||||
ЭтоНезанятая = СписокЗанятыхБукв.НайтиПоЗначению(ТекущаяБуква) = Неопределено;
|
||||
|
||||
Если ЭтоНезанятая Тогда
|
||||
ТекущееОписание.Вставить("short", "-" + Буква);
|
||||
СписокЗанятыхБукв.Добавить(ТекущаяБуква);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ТекущееОписание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьЗначениеПараметраПоУмолчанию(Знач Имя, Знач Метод)
|
||||
|
||||
@@ -561,8 +432,9 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОпределитьДопОписание(ДопОписание, Модуль)
|
||||
Функция ОпределитьДопОписание(Модуль)
|
||||
|
||||
ДопОписание = "";
|
||||
ЕстьМассив = Ложь;
|
||||
ЕстьДата = Ложь;
|
||||
ТекстДополнения = "";
|
||||
@@ -581,8 +453,6 @@
|
||||
ЕстьДата = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
ОпределитьДопОписаниеПоПараметру(ТекстДополнения, ИмяМодуля, Имя)
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ЕстьМассив Тогда
|
||||
@@ -606,93 +476,12 @@
|
||||
|" + ТекстДополнения;
|
||||
КонецЕсли;
|
||||
|
||||
ТекстДополнения = СтрЗаменить(ТекстДополнения, Символы.ПС, Символы.ПС + " |");
|
||||
ДопОписание = ДопОписание + СтрЗаменить(ТекстДополнения, """", """""");
|
||||
ДопОписание = ДопОписание + ТекстДополнения;
|
||||
|
||||
КонецПроцедуры
|
||||
Возврат ДопОписание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОпределитьДопОписаниеПоПараметру(ТекстДополнения, ИмяМодуля, ИмяПараметра)
|
||||
|
||||
ИмяФайлаДополнения = КаталогДополненийОпций
|
||||
+ СтрЗаменить(ИмяМодуля, "OPI_", "")
|
||||
+ "/"
|
||||
+ СтрЗаменить(ИмяПараметра, "--", "")
|
||||
+ ".txt";
|
||||
|
||||
ОбъектФайлаДополнения = Новый Файл(ИмяФайлаДополнения);
|
||||
|
||||
Если Не ОбъектФайлаДополнения.Существует() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ТекстовыйДокумент = Новый ТекстовыйДокумент();
|
||||
ТекстовыйДокумент.Прочитать(ИмяФайлаДополнения, "UTF-8");
|
||||
ТекстДополненияФайла = СокрЛП(ТекстовыйДокумент.ПолучитьТекст());
|
||||
|
||||
Если Не ЗначениеЗаполнено(ТекстДополненияФайла) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ЧислоСтрок = СтрЧислоСтрок(ТекстДополненияФайла);
|
||||
ВставленоПримечание = Ложь;
|
||||
ТекстДополнения = ТекстДополнения + Символы.ПС;
|
||||
|
||||
Для Н = 1 По ЧислоСтрок Цикл
|
||||
|
||||
ТекущаяСтрока = СтрПолучитьСтроку(ТекстДополненияФайла, Н);
|
||||
|
||||
Если СтрНачинаетсяС(СокрЛ(ТекущаяСтрока), "{")
|
||||
И Не ВставленоПримечание Тогда
|
||||
|
||||
ВставленоПримечание = Истина;
|
||||
ТекстДополнения = ТекстДополнения
|
||||
+ " Структура заполнения опции "
|
||||
+ ИмяПараметра
|
||||
+ ":"
|
||||
+ Символы.ПС;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ТекстДополнения = ТекстДополнения
|
||||
+ " "
|
||||
+ ТекущаяСтрока
|
||||
+ Символы.ПС;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьСозданиеПараметраСостава(СтрокаПараметра, ИмяМетода, Область, ОписаниеМетода = "")
|
||||
|
||||
Имя = СтрокаПараметра["Имя"];
|
||||
ИмяСокр = СтрокаПараметра["ИмяСокр"];
|
||||
Описание = СтрокаПараметра["Описание"];
|
||||
Значение = СтрокаПараметра["ЗначениеПоУмолчанию"];
|
||||
Библиотека = СоответствиеМодулейКоманд.Получить(ТекущийМодуль);
|
||||
|
||||
Если ЗначениеЗаполнено(Значение) Тогда
|
||||
Описание = Описание + " (необяз. по ум. - " + Значение + ")";
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
|
||||
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока = ТаблицаСостава.Добавить();");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Библиотека = """ + Библиотека + """;");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Модуль = """ + ТекущийМодуль + """;");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Метод = """ + ИмяМетода + """;");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.МетодПоиска = """ + вРег(ИмяМетода) + """;");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Параметр = """ + Имя + """;");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.ПараметрСокр = """ + ИмяСокр + """;");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Описание = """ + Описание + """;");
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Область = """ + Область + """;");
|
||||
|
||||
Если ЗначениеЗаполнено(ОписаниеМетода) Тогда
|
||||
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.ОписаниеМетода = """ + ОписаниеМетода + """;");
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОпределитьСоответствиеМодулейКоманд(ТекущийЯзык)
|
||||
|
||||
@@ -706,7 +495,7 @@
|
||||
|
||||
КомандаCLI = ОпределитьКомандуCLI(Модуль.ПолноеИмя);
|
||||
НазваниеМодуля = Модуль.ИмяБезРасширения;
|
||||
|
||||
|
||||
Если Не ЗначениеЗаполнено(КомандаCLI) Или СокрЛП(Строка(КомандаCLI)) = "none" Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
@@ -861,35 +650,35 @@
|
||||
Для Каждого Элемент Из ТЗСловаря Цикл
|
||||
ТекстМодуля = СтрЗаменить(ТекстМодуля, Элемент.Ключ, Элемент.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
Для Каждого СлужебныйКлюч Из СоответствиеСлужебныхКлючей Цикл
|
||||
ТекстМодуля = СтрЗаменить(ТекстМодуля, "." + СлужебныйКлюч.Ключ, "." + СлужебныйКлюч.Значение);
|
||||
ТекстМодуля = СтрЗаменить(ТекстМодуля, "(""" + СлужебныйКлюч.Ключ + """)", "(""" + СлужебныйКлюч.Значение + """)");
|
||||
ТекстМодуля = СтрЗаменить(ТекстМодуля, СлужебныйКлюч.Ключ + "(", СлужебныйКлюч.Значение + "(");
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
ТекстМодуля = СтрЗаменить(ТекстМодуля, "Console.", "Консоль.");
|
||||
|
||||
ТекстовыйДокумент.УстановитьТекст(ТекстМодуля);
|
||||
CommonTools.ЗаписатьТекст(ТекстовыйДокумент, ПереводимыйМодуль.ПолноеИмя);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаполнитьСоответствиеСлужебныхКлючей()
|
||||
|
||||
СоответствиеСлужебныхКлючей = Новый Соответствие();
|
||||
|
||||
СоответствиеСлужебныхКлючей.Вставить("FileCopy" , "CopyFile"); // Вопрос разных имен в 8.15 и более новых версиях
|
||||
СоответствиеСлужебныхКлючей.Вставить("WeekDay" , "DayOfWeek"); // Не исправлено
|
||||
СоответствиеСлужебныхКлючей.Вставить("PositionInStream" , "StreamPosition");
|
||||
|
||||
СоответствиеСлужебныхКлючей.Вставить("FileCopy" , "CopyFile"); // Вопрос разных имен в 8.15 и более новых версиях
|
||||
СоответствиеСлужебныхКлючей.Вставить("WeekDay" , "DayOfWeek"); // Не исправлено
|
||||
СоответствиеСлужебныхКлючей.Вставить("PositionInStream" , "StreamPosition");
|
||||
СоответствиеСлужебныхКлючей.Вставить("ThisObject" , "ЭтотОбъект");
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаполнитьСписокСогласных()
|
||||
|
||||
|
||||
СписокСогласных = Новый СписокЗначений();
|
||||
СписокСогласных.Добавить("b");
|
||||
СписокСогласных.Добавить("c");
|
||||
@@ -911,11 +700,11 @@
|
||||
СписокСогласных.Добавить("w");
|
||||
СписокСогласных.Добавить("x");
|
||||
СписокСогласных.Добавить("z");
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаполнитьСписокГласных()
|
||||
|
||||
|
||||
СписокГласных = Новый СписокЗначений();
|
||||
СписокГласных.Добавить("a");
|
||||
СписокГласных.Добавить("e");
|
||||
@@ -923,5 +712,5 @@
|
||||
СписокГласных.Добавить("o");
|
||||
СписокГласных.Добавить("u");
|
||||
СписокГласных.Добавить("y");
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Reference in New Issue
Block a user