From c41b575849cafb2e70c9443127965a48cc101eb2 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Mon, 16 Jul 2018 18:47:47 +0300 Subject: [PATCH 1/9] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D1=83=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D1=80=D0=BE=D0=B1=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BE?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os" | 2 -- 1 file changed, 2 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os" index afd2d83..d540993 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os" @@ -140,8 +140,6 @@ // Подробное описание - строка - вызывает у класса значения параметра функцию "ПодробноеОписание" Функция ПолучитьПодробноеОписание() Экспорт - ПодробноеОписаниеПараметра = ""; - ВстроенныеТипы = ВстроенныеТипЗначенийПараметров(); ОпределенныйТип = ВстроенныеТипы[Строка(ТипЗнч(ТипЗначенияПараметра))]; Если ОпределенныйТип = Неопределено From 2c6f254e98e912c82b7319f704ff673bc0535a82 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Mon, 16 Jul 2018 18:48:03 +0300 Subject: [PATCH 2/9] =?UTF-8?q?=D0=9E=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B2=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d75b0e1..466e0bb 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ ``` Класс `КомандаGenerate` -Для добавления подкоманды в любую команду используется методы `ДобавитьПодкоманду` или `ДобавитьКоманду` +Для добавления подкоманды в любую команду используются методы `ДобавитьПодкоманду` или `ДобавитьКоманду` ```bsl From ce367037a8aef54b7b8d03248d3a11ea62426180 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Mon, 16 Jul 2018 18:50:48 +0300 Subject: [PATCH 3/9] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=BD=D1=83=D0=B6=D0=BD=D1=8B=D0=B9=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-loader.os | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 package-loader.os diff --git a/package-loader.os b/package-loader.os deleted file mode 100644 index 61781d7..0000000 --- a/package-loader.os +++ /dev/null @@ -1,8 +0,0 @@ - -#Использовать "src/core" - -Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ) - - СтандартнаяОбработка = Ложь; - -КонецПроцедуры \ No newline at end of file From 24273b555b6cea93dcadafb2a16e47406698df97 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Mon, 16 Jul 2018 18:51:12 +0300 Subject: [PATCH 4/9] =?UTF-8?q?=D0=92=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D1=8F=D1=82=D1=8C=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= =?UTF-8?q?.=20=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=BE=20=D1=87=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D1=87=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 5 +- ...20\266\320\265\320\275\320\270\321\217.os" | 309 +++++++++++------- 2 files changed, 189 insertions(+), 125 deletions(-) diff --git a/packagedef b/packagedef index a4a589a..bc8bf36 100644 --- a/packagedef +++ b/packagedef @@ -12,10 +12,11 @@ .ВключитьФайл("src") .ВключитьФайл("docs") //.ВключитьФайл("tests") - .ВключитьФайл("package-loader.os") - .ВключитьФайл("packagedef") + //.ВключитьФайл("package-loader.os") + //.ВключитьФайл("packagedef") .ЗависитОт("logos") .ЗависитОт("delegate", "0.2.0") + .ЗависитОт("reflector", "0.5.1") //.ЗависитОт("fluent", "0.2.2") .ЗависитОт("asserts") //.ЗависитОт("1bdd") // Необходимо установил для тестирования diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" index 5000c08..6727425 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" @@ -1,10 +1,11 @@ -#Использовать delegate -#Использовать logos #Использовать "./internal/lexer" #Использовать "./internal/parser" #Использовать "./internal/types" #Использовать "./internal/tools" #Использовать "./internal/path" +#Использовать delegate +#Использовать logos +#Использовать reflector // Пользовательская строка использования текущей команды Перем Спек Экспорт; // Строка @@ -30,11 +31,9 @@ Перем КлассРеализации; // Объект Перем НачальноеСостояние; // Класс Совпадение -Перем РефлекторПроверкиКоманд; // Класс Рефлектор +Перем РасширенныйРефлектор; // Класс Рефлектор -Перем ДействиеВыполнения; // Класс Делегат -Перем ДействиеПередВыполнением; // Класс Делегат -Перем ДействиеПослеВыполнения; // Класс Делегат +Перем ИндексДействийКоманды; // Соответствие; Перем Лог; @@ -52,8 +51,8 @@ Подкоманда = Новый КомандаПриложения(ИмяПодкоманды, ОписаниеПодкоманды, КлассРеализацииПодкоманды, Приложение); - Подкоманда = ВыполнитьОписаниеКоманды(КлассРеализацииПодкоманды, Подкоманда); ВложенныеКоманды.Добавить(Подкоманда); + Возврат Подкоманда; КонецФункции @@ -262,28 +261,15 @@ КонецФункции -// Предопределенная процедура ПередВыполнениемКоманды команды, если не задана процедура в классе. -// Содержит код определение необходимости вывода версии приложения -// -// Параметры: -// Команда - Объект - Класс "КомандаПриложения" -// -Процедура ПередВыполнениемКоманды(Знач Команда) Экспорт - Лог.Отладка("Выполнена стандартная обработка <ПередВыполнениемКоманды> для команды %1", Команда.ПолучитьИмяКоманды()); -КонецПроцедуры - -// Предопределенная процедура ПослеВыполненияКоманды команды, если не задана процедура в классе. -// -// Параметры: -// Команда - Объект - Класс "КомандаПриложения" -// -Процедура ПослеВыполненияКоманды(Знач Команда) Экспорт - Лог.Отладка("Выполнена стандартная обработка <ПослеВыполненияКоманды> для команды %1", Команда.ПолучитьИмяКоманды()); -КонецПроцедуры - // Процедура выводит справку по команде в консоль Процедура ВывестиСправку() Экспорт + СправкаВыведена = ВыполнитьДействиеКоманды("ВывестиСправку"); + + Если СправкаВыведена Тогда + Возврат; + КонецЕсли; + Представление = ?(КомандыРодители.Количество() > 0, "Команда", "Приложение"); Сообщить(СтрШаблон("%1: %2 @@ -431,12 +417,12 @@ Возврат; КонецЕсли; - ДействиеПередВыполнением.Исполнить(ЭтотОбъект); + ВыполнитьДействиеКоманды("ПередВыполнениемКоманды"); Если КонечныйИндексКоманды = АргументыCLI.ВГраница() Тогда Лог.Отладка("Выполняю полезную работу %1", Имя); - ДействиеВыполнения.Исполнить(ЭтотОбъект); + ВыполнитьДействиеКоманды("ВыполнитьКоманду"); Возврат; КонецЕсли; @@ -463,7 +449,7 @@ ВложеннаяКоманда.НачалоЗапуска(); ВложеннаяКоманда.Запуск(АргументыПодкоманды); - ДействиеПослеВыполнения.Исполнить(ЭтотОбъект); + ВыполнитьДействиеКоманды("ПослеВыполненияКоманды"); Возврат; @@ -471,7 +457,7 @@ КонецЦикла; - ДействиеПослеВыполнения.Исполнить(ЭтотОбъект); + ВыполнитьДействиеКоманды("ПослеВыполненияКоманды"); Если СтрНачинаетсяС(ПервыйАргумент, "-") Тогда ВывестиСправку(); @@ -656,16 +642,20 @@ // Процедура устанавливает процедуру "ВыполнитьКоманду" выполнения для команды // // Параметры: -// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ОбъектРеализации - объект - класс, объект реализующий процедуру выполнения команды. // ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ВыполнитьКоманду" // -Процедура УстановитьДействиеВыполнения(КлассРеализации, ИмяПроцедуры = "ВыполнитьКоманду") Экспорт +Процедура УстановитьДействиеВыполнения(ОбъектРеализации, ИмяПроцедуры = "ВыполнитьКоманду") Экспорт + + РефлекторПроверки = ПолучитьРефлекторКласса(ОбъектРеализации); + ЕстьМетод = РефлекторПроверки.ЕстьПроцедура(ИмяПроцедуры, 1); - Если ПроверитьМетодВыполнитьКоманду(КлассРеализации, ИмяПроцедуры) Тогда - ВызватьИсключение СтрШаблон("У класса <%1> не задан обязательный метод <%2>", КлассРеализации, ИмяПроцедуры); + Если Не ЕстьМетод Тогда + ВызватьИсключение НоваяИнформацияОбОшибке("Ошибка установки действия <ВыполнитьКоманду>. Объект <%1> не содержит требуемого метода <%2>", ОбъектРеализации, ИмяПроцедуры); КонецЕсли; - ДействиеВыполнения = Делегаты.Создать(КлассРеализации, ИмяПроцедуры); + ДелегатДействия = Делегаты.Создать(ОбъектРеализации, ИмяПроцедуры); + ДобавитьВИндексДействиеКоманды("ВыполнитьКоманду", ДелегатДействия); КонецПроцедуры @@ -673,23 +663,24 @@ // запускаемую перед выполнением "ВыполнитьКоманду" // // Параметры: -// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ОбъектРеализации - объект - класс, объект реализующий процедуру выполнения команды. // ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПередВыполнениемКоманды" // -Процедура УстановитьДействиеПередВыполнением(КлассРеализации, ИмяПроцедуры = "ПередВыполнениемКоманды") Экспорт +Процедура УстановитьДействиеПередВыполнением(ОбъектРеализации, ИмяПроцедуры = "ПередВыполнениемКоманды") Экспорт - Лог.Отладка("Установка метода: перед выполнением класс <%1> имя процедуры <%2>", КлассРеализации, ИмяПроцедуры); + Лог.Отладка("Установка метода: перед выполнением класс <%1> имя процедуры <%2>", ОбъектРеализации, ИмяПроцедуры); - Если НЕ ПроверитьМетодПередВыполнениемКоманды(КлассРеализации, ИмяПроцедуры) Тогда - Лог.Отладка(" >> метод %2 у класс <%1> найден", КлассРеализации, ИмяПроцедуры); + РефлекторПроверки = ПолучитьРефлекторКласса(ОбъектРеализации); + ЕстьМетод = РефлекторПроверки.ЕстьПроцедура(ИмяПроцедуры, 1); - ДействиеПередВыполнением = Делегаты.Создать(КлассРеализации, ИмяПроцедуры); + Если Не ЕстьМетод Тогда + ВызватьИсключение НоваяИнформацияОбОшибке("Ошибка установки действия <ПередВыполнениемКоманды>. Объект <%1> не содержит требуемого метода <%2>", ОбъектРеализации, ИмяПроцедуры); + КонецЕсли; - ИначеЕсли ДействиеПередВыполнением = Неопределено Тогда + Лог.Отладка(" >> метод %2 у класс <%1> найден", ОбъектРеализации, ИмяПроцедуры); - Лог.Отладка("Установлен метод перед выполнением в текущий класс"); - ДействиеПередВыполнением = Делегаты.Создать(ЭтотОбъект, ИмяПроцедуры); - КонецЕсли; + ДелегатДействия = Делегаты.Создать(ОбъектРеализации, ИмяПроцедуры); + ДобавитьВИндексДействиеКоманды("ПередВыполнениемКоманды", ДелегатДействия); КонецПроцедуры @@ -697,26 +688,50 @@ // запускаемую после выполнением "ВыполнитьКоманду" // // Параметры: -// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ОбъектРеализации - объект - класс, объект реализующий процедуру выполнения команды. // ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПослеВыполненияКоманды" // -Процедура УстановитьДействиеПослеВыполнения(КлассРеализации, ИмяПроцедуры = "ПослеВыполненияКоманды") Экспорт +Процедура УстановитьДействиеПослеВыполнения(ОбъектРеализации, ИмяПроцедуры = "ПослеВыполненияКоманды") Экспорт - Лог.Отладка("Установка метода: после выполнением класс <%1> имя процедуры <%2>", КлассРеализации, ИмяПроцедуры); + Лог.Отладка("Установка метода: после выполнением класс <%1> имя процедуры <%2>", ОбъектРеализации, ИмяПроцедуры); - Если НЕ ПроверитьМетодПослеВыполнениемКоманды(КлассРеализации, ИмяПроцедуры) Тогда + РефлекторПроверки = ПолучитьРефлекторКласса(ОбъектРеализации); + ЕстьМетод = РефлекторПроверки.ЕстьПроцедура(ИмяПроцедуры, 1); - Лог.Отладка(" >> метод %2 у класс <%1> найден", КлассРеализации, ИмяПроцедуры); + Если Не ЕстьМетод Тогда + ВызватьИсключение НоваяИнформацияОбОшибке("Ошибка установки действия <ПослеВыполненияКоманды>. Объект <%1> не содержит требуемого метода <%2>", ОбъектРеализации, ИмяПроцедуры); + КонецЕсли; - ДействиеПослеВыполнения = Делегаты.Создать(КлассРеализации, ИмяПроцедуры); + Лог.Отладка(" >> метод %2 у класс <%1> найден", ОбъектРеализации, ИмяПроцедуры); - ИначеЕсли ДействиеПослеВыполнения = Неопределено Тогда + ДелегатДействия = Делегаты.Создать(ОбъектРеализации, ИмяПроцедуры); + ДобавитьВИндексДействиеКоманды("ПослеВыполненияКоманды", ДелегатДействия); + +КонецПроцедуры - Лог.Отладка("Установлен метод после выполнением в текущий класс"); - ДействиеПослеВыполнения = Делегаты.Создать(ЭтотОбъект, ИмяПроцедуры); +// Процедура устанавливает процедуру "ВывестиСправку" для текущей команды +// +// Параметры: +// ОбъектРеализации - объект - класс, объект реализующий процедуру вывода справки. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ВывестиСправку" +// +Процедура УстановитьДействиеВывестиСправку(ОбъектРеализации, ИмяПроцедуры = "ВывестиСправку") Экспорт + Лог.Отладка("Установка метода: после выполнением класс <%1> имя процедуры <%2>", ОбъектРеализации, ИмяПроцедуры); + + РефлекторПроверки = ПолучитьРефлекторКласса(ОбъектРеализации); + ЕстьМетод = РефлекторПроверки.ЕстьПроцедура(ИмяПроцедуры, 1); + + Если Не ЕстьМетод Тогда + ВызватьИсключение НоваяИнформацияОбОшибке("Ошибка установки действия <ВывестиСправку>. Объект <%1> не содержит требуемого метода <%2>", ОбъектРеализации, ИмяПроцедуры); КонецЕсли; + Лог.Отладка(" >> метод %2 у класс <%1> найден", ОбъектРеализации, ИмяПроцедуры); + + ДелегатДействия = Делегаты.Создать(ОбъектРеализации, ИмяПроцедуры); + + ДобавитьВИндексДействиеКоманды("ВывестиСправку", ДелегатДействия); + КонецПроцедуры #Область Работа_с_входящими_аргументами @@ -812,81 +827,37 @@ КонецПроцедуры -#КонецОбласти +Функция ВыполнитьДействиеКоманды(ИмяДействия) -#Область Работа_с_рефлектором_объектов - -Функция ВыполнитьОписаниеКоманды(КлассКоманды, Подкоманда) - - Если ПроверитьМетодОписаниеКоманды(КлассКоманды) Тогда - Возврат Подкоманда; + ДелегатДействия = ИндексДействийКоманды[ИмяДействия]; + + Если ДелегатДействия = Неопределено Тогда + Возврат Ложь; КонецЕсли; - ПараметрыВыполнения = Новый Массив; - ПараметрыВыполнения.Добавить(Подкоманда); - - ОписаниеКоманды = Делегаты.Создать(КлассКоманды, "ОписаниеКоманды"); - ОписаниеКоманды.Исполнить(ПараметрыВыполнения); - - Возврат ПараметрыВыполнения[0]; - -КонецФункции - -Функция ПроверитьМетодВыполнитьКоманду(ПроверяемыйКласс, ИмяПроцедуры) - - Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры , 1, Ложь); - -КонецФункции - -Функция ПроверитьМетодПередВыполнениемКоманды(ПроверяемыйКласс, ИмяПроцедуры) - - Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры, 1, Ложь); - -КонецФункции - -Функция ПроверитьМетодПослеВыполнениемКоманды(ПроверяемыйКласс, ИмяПроцедуры) - - Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры, 1, Ложь); + ДелегатДействия.Исполнить(ЭтотОбъект); + Возврат Истина; + КонецФункции -Функция ПроверитьМетодОписаниеКоманды(ПроверяемыйКласс) - - Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, "ОписаниеКоманды", 1, Ложь); +#КонецОбласти -КонецФункции +#Область Работа_с_рефлектором_объектов -Функция ПроверитьМетодКласса(Знач ПроверяемыйКласс, - Знач ИмяМетода, - Знач ТребуемоеКоличествоПараметров = 0, - Знач ЭтоФункция = Ложь) +Функция ПолучитьРефлекторКласса(КлассПроверки) + + Если Не КлассПроверки = КлассРеализации Тогда + + Возврат Новый РефлекторОбъекта(КлассРеализации); - ЕстьМетод = РефлекторПроверкиКоманд.МетодСуществует(ПроверяемыйКласс, ИмяМетода); - Лог.Отладка("Проверяемый метод <%1> найден: %2", ИмяМетода, ЕстьМетод); - Если Не ЕстьМетод Тогда - Возврат Ложь; - КонецЕсли; + Иначе - ТаблицаМетодов = РефлекторПроверкиКоманд.ПолучитьТаблицуМетодов(ПроверяемыйКласс); + Возврат РасширенныйРефлектор; - СтрокаМетода = ТаблицаМетодов.Найти(ИмяМетода, "Имя"); - Лог.Отладка("Поиск строки в таблице методов класса <%1> найдена: %2, общее количество методов класса: %3", - ПроверяемыйКласс, - НЕ СтрокаМетода = Неопределено, - ТаблицаМетодов.Количество()); - - Если СтрокаМетода = Неопределено Тогда - Возврат Ложь; КонецЕсли; - ПроверкаНаФункцию = ЭтоФункция = СтрокаМетода.ЭтоФункция; - ПроверкаНаКоличествоПараметров = ТребуемоеКоличествоПараметров = СтрокаМетода.КоличествоПараметров; - - Лог.Отладка("Проверяемый метод <%1> корректен: %2", ИмяМетода, ПроверкаНаФункцию И ПроверкаНаКоличествоПараметров); - Возврат ПроверкаНаФункцию - И ПроверкаНаКоличествоПараметров; - -КонецФункции // ПроверитьМетодУКласса() +КонецФункции #КонецОбласти @@ -1147,6 +1118,92 @@ КонецПроцедуры +Процедура ДобавитьВИндексДействиеКоманды(ИмяДействия, ДелегатДействия) + + ИндексДействийКоманды.Вставить(ИмяДействия, ДелегатДействия); + +КонецПроцедуры + +Процедура УстановитьСтандартныеОбработчики(РеализованныеМетодыКоманды) + + Если РеализованныеМетодыКоманды.ОписаниеКоманды Тогда + КлассРеализации.ОписаниеКоманды(ЭтотОбъект); + КонецЕсли; + + Если РеализованныеМетодыКоманды.ПередВыполнениемКоманды Тогда + ДелегатДействия = Делегаты.Создать(КлассРеализации, "ПередВыполнениемКоманды"); + ДобавитьВИндексДействиеКоманды("ПередВыполнениемКоманды", ДелегатДействия); + КонецЕсли; + + Если РеализованныеМетодыКоманды.ВыполнитьКоманду Тогда + ДелегатДействия = Делегаты.Создать(КлассРеализации, "ВыполнитьКоманду"); + ДобавитьВИндексДействиеКоманды("ВыполнитьКоманду", ДелегатДействия); + КонецЕсли; + + Если РеализованныеМетодыКоманды.ПослеВыполненияКоманды Тогда + ДелегатДействия = Делегаты.Создать(КлассРеализации, "ПослеВыполненияКоманды"); + ДобавитьВИндексДействиеКоманды("ПослеВыполненияКоманды", ДелегатДействия); + КонецЕсли; + + Если РеализованныеМетодыКоманды.ВывестиСправку Тогда + ДелегатДействия = Делегаты.Создать(КлассРеализации, "ВывестиСправку"); + ДобавитьВИндексДействиеКоманды("ВывестиСправку", ДелегатДействия); + КонецЕсли; + +КонецПроцедуры + +Функция НоваяИнформацияОбОшибке(Знач ТекстСообщения, + Знач Параметр1 = Неопределено, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) + + Если Параметр1 <> Неопределено Тогда + ТекстСообщения = СтрШаблон(ТекстСообщения, Параметр1, + Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9); + КонецЕсли; + + ИнфИсключение = Новый ИнформацияОбОшибке(ТекстСообщения, ЭтотОбъект); + + Возврат ИнфИсключение; + +КонецФункции + +Функция ПолучитьТаблицуОпций() Экспорт + + Возврат ПолучитьТаблицуПараметров(Опции); + +КонецФункции + +Функция ПолучитьТаблицуАргументов() Экспорт + + Возврат ПолучитьТаблицуПараметров(Аргументы); + +КонецФункции + +Функция ПолучитьТаблицуПараметров(ИндексПараметров) + + ТаблицаДанных = ПолучитьТаблицуДанныхДляСправки(); + + Для каждого КлючЗначение Из Опции Цикл + + ОпцияСправки = КлючЗначение.Ключ; + + НоваяЗапись = Таблица.Добавить(); + + НоваяЗапись.Наименование = ОпцияСправки.Имя; + НоваяЗапись.Описание = ОпцияСправки.Описание; + НоваяЗапись.ПодробноеОписание = ОпцияСправки.ПолучитьПодробноеОписание(); + НоваяЗапись.ПеременнаяОкружения = ОпцияСправки.ПеременнаяОкружения; + НоваяЗапись.СкрытьЗначение = ОпцияСправки.СкрытьЗначение; + НоваяЗапись.НаименованияПараметров = ОпцияСправки.НаименованияПараметров; + НоваяЗапись.Значение = ОпцияСправки.ЗначениеВСтроку(); + + КонецЦикла; + + Возврат ТаблицаДанных; + +КонецФункции + #КонецОбласти Процедура ПриСозданииОбъекта(ИмяКоманды, ОписаниеКоманды, КлассРеализацииКоманды, ПриложениеКоманды = Неопределено) @@ -1164,19 +1221,25 @@ ОпцииИндекс = Новый Соответствие; АргументыИндекс = Новый Соответствие; + ИндексДействийКоманды = Новый Соответствие; + Приложение = ПриложениеКоманды; Спек = ""; ПодробноеОписание = ""; - РефлекторПроверкиКоманд = Новый Рефлектор; - - ДействиеПередВыполнением = Неопределено; - ДействиеПослеВыполнения = Неопределено; + РасширенныйРефлектор = Новый РефлекторОбъекта(КлассРеализации); - УстановитьДействиеВыполнения(КлассРеализацииКоманды); - УстановитьДействиеПередВыполнением(КлассРеализацииКоманды); - УстановитьДействиеПослеВыполнения(КлассРеализацииКоманды); + ИнтерфейсКоманды = Новый ИнтерфейсОбъекта(); + ИнтерфейсКоманды.П("ОписаниеКоманды", 1) + .П("ПередВыполнениемКоманды", 1) + .П("ВыполнитьКоманду", 1) + .П("ПослеВыполненияКоманды", 1) + .П("ВывестиСправку", 1) + ; + + РеализованныеМетодыКоманды = РасширенныйРефлектор.РеализованныеМетодыИнтерфейса(ИнтерфейсКоманды); + УстановитьСтандартныеОбработчики(РеализованныеМетодыКоманды); КонецПроцедуры From 9d8feec2166f68718753752bd34b3dce670a691c Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 17 Jul 2018 08:42:18 +0300 Subject: [PATCH 5/9] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D1=8F=D1=82=D1=8C=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 +- ...20\266\320\265\320\275\320\270\321\217.os" | 235 ++++++++---------- 2 files changed, 111 insertions(+), 126 deletions(-) diff --git a/packagedef b/packagedef index bc8bf36..7602fd3 100644 --- a/packagedef +++ b/packagedef @@ -17,7 +17,7 @@ .ЗависитОт("logos") .ЗависитОт("delegate", "0.2.0") .ЗависитОт("reflector", "0.5.1") - //.ЗависитОт("fluent", "0.2.2") + .ЗависитОт("fluent", "0.3.1") .ЗависитОт("asserts") //.ЗависитОт("1bdd") // Необходимо установил для тестирования //.ЗависитОт("1testrunner") // Необходимо установил для тестирования diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" index 6727425..5eb3ac3 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" @@ -6,6 +6,7 @@ #Использовать delegate #Использовать logos #Использовать reflector +#Использовать fluent // Пользовательская строка использования текущей команды Перем Спек Экспорт; // Строка @@ -293,9 +294,9 @@ ШаблонСтрокиИспользования = "Строка запуска: %1 %2 %3"; Сообщить(СтрШаблон(ШаблонСтрокиИспользования, - ПутьИспользования, - СокрЛП(Спек), - СуффиксВложенныхКоманды)); + ПутьИспользования, + СокрЛП(Спек), + СуффиксВложенныхКоманды)); Сообщить(""); @@ -351,36 +352,6 @@ КонецПроцедуры -Процедура ВывестиТаблицуСправки(ТаблицаДанных) - - ДобавочнаяДлинаДополнения = 3; - - ШаблонНаименования = " %1"+ Символы.Таб + "%2"; - - Для каждого СтрокаТаблицы Из ТаблицаДанных Цикл - - Сообщить(СтрШаблон(ШаблонНаименования, СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание)); - - Если Не ПустаяСтрока(СтрокаТаблицы.ДополнительноеОписание) Тогда - - СтрокаНаименования = СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование); - - ДлинаДополнения = СтрДлина(СтрокаНаименования) + ДобавочнаяДлинаДополнения; - МассивСтрок = СтрРазделить(СтрокаТаблицы.ДополнительноеОписание, Символы.ПС, Ложь); - - Для каждого СтрокаОписания Из МассивСтрок Цикл - ДопОписаниеСтроки = ДополнитьСтрокуПробеламиДо(СтрокаОписания, ДлинаДополнения); - Сообщить(ДопОписаниеСтроки); - КонецЦикла; - - КонецЕсли; - - КонецЦикла; - - Сообщить(""); - -КонецПроцедуры - // Основная процедура запуска команды приложения // // Параметры: @@ -879,89 +850,86 @@ Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("Наименование"); Таблица.Колонки.Добавить("Описание"); - Таблица.Колонки.Добавить("ДлинаНаименования"); - Таблица.Колонки.Добавить("ДополнительноеОписание"); + Таблица.Колонки.Добавить("ПодробноеОписание"); + Таблица.Колонки.Добавить("ПеременнаяОкружения"); + Таблица.Колонки.Добавить("СкрытьЗначение"); + Таблица.Колонки.Добавить("НаименованияПараметров"); + Таблица.Колонки.Добавить("Значение"); Возврат Таблица; КонецФункции Функция ТаблицаАргументовДляСправки() - - Таблица = ПолучитьТаблицуДанныхДляСправки(); Если Аргументы.Количество() = 0 Тогда - Возврат Таблица; + Возврат ПолучитьТаблицуДанныхДляСправки(); КонецЕсли; - Для каждого КлючЗначение Из Аргументы Цикл + ТаблицаАргументов = ПолучитьТаблицуАргументов(); - АргументСправки = КлючЗначение.Ключ; + ОбработатьТаблицуПараметровДляСправки(ТаблицаАргументов); - НоваяЗапись = Таблица.Добавить(); + Возврат ТаблицаАргументов; +КонецФункции - ИмяОпции = АргументСправки.Имя; - ПеременныеОкружения = ФорматироватьПеременнуюОкруженияОпцииДляСправки(АргументСправки); - ЗначениеОпции = ФорматироватьЗначениеОпцииДляСправки(АргументСправки); - ОписаниеОпции = АргументСправки.Описание + " " + ПеременныеОкружения + " " + ЗначениеОпции; +Функция ТаблицаОпцийДляСправки() - НоваяЗапись.Наименование = ИмяОпции; - НоваяЗапись.Описание = ОписаниеОпции; - НоваяЗапись.ДополнительноеОписание = АргументСправки.ПолучитьПодробноеОписание(); - НоваяЗапись.ДлинаНаименования = СтрДлина(ИмяОпции) + 1; + Если Опции.Количество() = 0 Тогда + Возврат ПолучитьТаблицуДанныхДляСправки(); + КонецЕсли; - КонецЦикла; + ТаблицаОпций = ПолучитьТаблицуОпций(); + + ОбработатьТаблицуПараметровДляСправки(ТаблицаОпций); - ТаблицаДляСортировки = Таблица.Скопировать(, "ДлинаНаименования"); - ТаблицаДляСортировки.Сортировать("ДлинаНаименования УБЫВ"); + Возврат ТаблицаОпций; - МаксимальнаяДлина = ТаблицаДляСортировки[0].ДлинаНаименования; +КонецФункции - Для каждого СтрокаТаблицы Из Таблица Цикл +Процедура ВывестиТаблицуСправки(ТаблицаДанных) + + ДобавочнаяДлинаДополнения = 3; - ТекущаяДлина = СтрДлина(СтрокаТаблицы.Наименование); - Если ТекущаяДлина = МаксимальнаяДлина Тогда - Продолжить; - КонецЕсли; + ШаблонНаименования = " %1"+ Символы.Таб + "%2"; + + Для каждого СтрокаТаблицы Из ТаблицаДанных Цикл - СтрокаТаблицы.Наименование = ДополнитьСтрокуПробелами(СтрокаТаблицы.Наименование, МаксимальнаяДлина - ТекущаяДлина); + Сообщить(СтрШаблон(ШаблонНаименования, СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание)); - КонецЦикла; + Если Не ПустаяСтрока(СтрокаТаблицы.ПодробноеОписание) Тогда + + СтрокаНаименования = СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование); - Возврат Таблица; -КонецФункции + ДлинаДополнения = СтрДлина(СтрокаНаименования) + ДобавочнаяДлинаДополнения; + МассивСтрок = СтрРазделить(СтрокаТаблицы.ПодробноеОписание, Символы.ПС, Ложь); -Функция ТаблицаОпцийДляСправки() + Для каждого СтрокаОписания Из МассивСтрок Цикл + ДопОписаниеСтроки = ДополнитьСтрокуПробеламиДо(СтрокаОписания, ДлинаДополнения); + Сообщить(ДопОписаниеСтроки); + КонецЦикла; - Таблица = ПолучитьТаблицуДанныхДляСправки(); - - Если Опции.Количество() = 0 Тогда - Возврат Таблица; - КонецЕсли; + КонецЕсли; - Для каждого КлючЗначение Из Опции Цикл + КонецЦикла; - ОпцияСправки = КлючЗначение.Ключ; + Сообщить(""); - НоваяЗапись = Таблица.Добавить(); +КонецПроцедуры - ИмяОпции = ФорматироватьИмяОпцииДляСправки(ОпцияСправки); - ПеременныеОкружения = ФорматироватьПеременнуюОкруженияОпцииДляСправки(ОпцияСправки); - ЗначениеОпции = ФорматироватьЗначениеОпцииДляСправки(ОпцияСправки); - ОписаниеОпции = ОпцияСправки.Описание + " " + ПеременныеОкружения + " " + ЗначениеОпции; - - НоваяЗапись.Наименование = ИмяОпции; - НоваяЗапись.Описание = ОписаниеОпции; - НоваяЗапись.ДополнительноеОписание = ОпцияСправки.ПолучитьПодробноеОписание(); - НоваяЗапись.ДлинаНаименования = СтрДлина(ИмяОпции) + 1; +Процедура ОбработатьТаблицуПараметровДляСправки(ТаблицаПараметров) + + МаксимальнаяДлина = 9; - КонецЦикла; + Для каждого СтрокаТаблицы Из ТаблицаПараметров Цикл + + СтрокаТаблицы.Наименование = ФорматироватьНаименованиеПараметраДляСправки(СтрокаТаблицы.НаименованияПараметров); + СтрокаТаблицы.Описание = СформироватьОписаниеДляСправки(СтрокаТаблицы); + МаксимальнаяДлина = Макс(МаксимальнаяДлина, СтрДлина(СтрокаТаблицы.Наименование) + 1); - ТаблицаДляСортировки = Таблица.Скопировать(, "ДлинаНаименования"); - ТаблицаДляСортировки.Сортировать("ДлинаНаименования УБЫВ"); - МаксимальнаяДлина = ТаблицаДляСортировки[0].ДлинаНаименования; + КонецЦикла; - Для каждого СтрокаТаблицы Из Таблица Цикл + Для каждого СтрокаТаблицы Из ТаблицаПараметров Цикл ТекущаяДлина = СтрДлина(СтрокаТаблицы.Наименование); Если ТекущаяДлина = МаксимальнаяДлина Тогда @@ -972,8 +940,26 @@ КонецЦикла; - Возврат Таблица; +КонецПроцедуры + +Функция СформироватьОписаниеДляСправки(СтрокаТаблицы) + + ПеременныеОкружения = ФорматироватьПеременнуюОкруженияОпцииДляСправки(СтрокаТаблицы.ПеременнаяОкружения); + ЗначениеОпции = ФорматироватьЗначениеОпцииДляСправки(СтрокаТаблицы.Значение, СтрокаТаблицы.СкрытьЗначение); + + МассивСоединения = Новый Массив; + МассивСоединения.Добавить(СтрокаТаблицы.Описание); + Если Не ПустаяСтрока(ПеременныеОкружения) Тогда + МассивСоединения.Добавить(ПеременныеОкружения); + КонецЕсли; + Если Не ПустаяСтрока(ЗначениеОпции) Тогда + МассивСоединения.Добавить(ЗначениеОпции); + КонецЕсли; + + ОписаниеДляСправки = СтрСоединить(МассивСоединения, " "); + Возврат ОписаниеДляСправки + КонецФункции Функция ДополнитьСтрокуПробелами(Знач НачальнаяСтрока, КоличествоПробелов) @@ -998,58 +984,57 @@ КонецФункции -Функция ФорматироватьИмяОпцииДляСправки(Знач КлассОпции) - - КороткоеНаименование = ""; - ДлинноеНаименование = ""; +Функция ФорматироватьНаименованиеПараметраДляСправки(Знач НаименованияПараметров) ОграничениеДлины = 2; - Для каждого НаименованиеОпции Из КлассОпции.НаименованияПараметров Цикл + Если НаименованияПараметров.Количество() = 1 Тогда + + НаименованиеПараметра = НаименованияПараметров[0]; - Если СтрДлина(НаименованиеОпции) = ОграничениеДлины - И ПустаяСтрока(КороткоеНаименование) Тогда - КороткоеНаименование = НаименованиеОпции; + Если Не СтрНачинаетсяС(НаименованиеПараметра, "-") Тогда + Возврат НаименованиеПараметра; КонецЕсли; - Если СтрДлина(НаименованиеОпции) > ОграничениеДлины - И ПустаяСтрока(ДлинноеНаименование) Тогда - ДлинноеНаименование = НаименованиеОпции; - КонецЕсли; + Если СтрДлина(НаименованиеПараметра) = ОграничениеДлины Тогда + Возврат НаименованиеПараметра; + Иначе + Возврат СтрШаблон(" %1", НаименованиеПараметра); + КонецЕсли; + + КонецЕсли; - КонецЦикла; + ПроцессорКоллекций = Новый ПроцессорКоллекций; + ПроцессорКоллекций.УстановитьКоллекцию(НаименованияПараметров); + СортированныеНаименования = ПроцессорКоллекций + .Сортировать("Результат = СтрДлина(Элемент1) > СтрДлина(Элемент2)") + .Получить(Тип("Массив")); - Если Не ПустаяСтрока(КороткоеНаименование) - И Не ПустаяСтрока(ДлинноеНаименование) Тогда - Возврат СтрШаблон("%1, %2", КороткоеНаименование, ДлинноеНаименование); - ИначеЕсли ЗначениеЗаполнено(КороткоеНаименование) И ПустаяСтрока(ДлинноеНаименование) Тогда - Возврат СтрШаблон("%1", КороткоеНаименование); - ИначеЕсли ЗначениеЗаполнено(ДлинноеНаименование) И ПустаяСтрока(КороткоеНаименование) Тогда - Возврат СтрШаблон(" %1", ДлинноеНаименование); - КонецЕсли; + НаименованиеПараметра = СтрСоединить(СортированныеНаименования, ", "); - Возврат ""; + Лог.Отладка("Наименование опции для справки <%1>", НаименованиеПараметра); + + Возврат НаименованиеПараметра; КонецФункции -Функция ФорматироватьЗначениеОпцииДляСправки(Знач КлассОпции) +Функция ФорматироватьЗначениеОпцииДляСправки(Знач ЗначениеОпции, Знач СкрытьЗначение) - Если КлассОпции.СкрытьЗначение - ИЛИ НЕ ЗначениеЗаполнено(КлассОпции.ЗначениеВСтроку()) Тогда + Если СкрытьЗначение Тогда Возврат ""; КонецЕсли; - Возврат СтрШаблон("(по умолчанию %1)", КлассОпции.ЗначениеВСтроку()); + Возврат СтрШаблон("(по умолчанию %1)", ЗначениеОпции); КонецФункции -Функция ФорматироватьПеременнуюОкруженияОпцииДляСправки(Знач КлассОпции) +Функция ФорматироватьПеременнуюОкруженияОпцииДляСправки(Знач ПеременнаяОкружения) - Если ПустаяСтрока(СокрЛП(КлассОпции.ПеременнаяОкружения)) Тогда + Если ПустаяСтрока(СокрЛП(ПеременнаяОкружения)) Тогда Возврат ""; КонецЕсли; - СтрокаПеременнойОкружения = КлассОпции.ПеременнаяОкружения; + СтрокаПеременнойОкружения = ПеременнаяОкружения; МассивПО = СтрРазделить(СтрокаПеременнойОкружения, " ", Ложь); Результат = "(env"; @@ -1184,19 +1169,19 @@ ТаблицаДанных = ПолучитьТаблицуДанныхДляСправки(); - Для каждого КлючЗначение Из Опции Цикл + Для каждого КлючЗначение Из ИндексПараметров Цикл - ОпцияСправки = КлючЗначение.Ключ; + ПараметрСправки = КлючЗначение.Ключ; - НоваяЗапись = Таблица.Добавить(); + НоваяЗапись = ТаблицаДанных.Добавить(); - НоваяЗапись.Наименование = ОпцияСправки.Имя; - НоваяЗапись.Описание = ОпцияСправки.Описание; - НоваяЗапись.ПодробноеОписание = ОпцияСправки.ПолучитьПодробноеОписание(); - НоваяЗапись.ПеременнаяОкружения = ОпцияСправки.ПеременнаяОкружения; - НоваяЗапись.СкрытьЗначение = ОпцияСправки.СкрытьЗначение; - НоваяЗапись.НаименованияПараметров = ОпцияСправки.НаименованияПараметров; - НоваяЗапись.Значение = ОпцияСправки.ЗначениеВСтроку(); + НоваяЗапись.Наименование = ПараметрСправки.Имя; + НоваяЗапись.Описание = ПараметрСправки.Описание; + НоваяЗапись.ПодробноеОписание = ПараметрСправки.ПолучитьПодробноеОписание(); + НоваяЗапись.ПеременнаяОкружения = ПараметрСправки.ПеременнаяОкружения; + НоваяЗапись.СкрытьЗначение = ПараметрСправки.СкрытьЗначение; + НоваяЗапись.НаименованияПараметров = ПараметрСправки.НаименованияПараметров; + НоваяЗапись.Значение = ПараметрСправки.ЗначениеВСтроку(); КонецЦикла; From a25dc44750c195256e8f01c38e96765cac12f07d Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 17 Jul 2018 08:42:28 +0300 Subject: [PATCH 6/9] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D1=81=D1=82=D0=BE=D0=B9?= =?UTF-8?q?=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0=20=D0=B2=D1=8B=D0=B2?= =?UTF-8?q?=D0=BE=D0=B4=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6\320\265\320\275\320\270\321\217_test.os" | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git "a/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" "b/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" index 06c526e..55d6bf1 100644 --- "a/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" +++ "b/tests/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217_test.os" @@ -42,7 +42,7 @@ // ИменаТестов.Добавить("ТестДолжен_СложныеСлучаиФормированияСтрокиИспользования"); - // ИменаТестов.Добавить("ТестДолжен_ПроверитьВыводСправки"); + ИменаТестов.Добавить("ТестДолжен_ПроверитьВыводСправки"); // ИменаТестов.Добавить("ТестДолжен_ПроверитьВыводВерсии"); // ИменаТестов.Добавить("ТестДолжен_ПроверитьВыполнениеОбработчикаПередВыполнениемКоманды"); @@ -354,6 +354,23 @@ КонецПроцедуры +Процедура ТестДолжен_ПроверитьВыводСправки() Экспорт + + Спек = ""; + Команда = ПодготовитьТестовуюКоманду(Спек); + ОпцияМассив = Команда.Опция("env", Новый Массив, "Тестовый массив опций").ТМассивСтрок(); + АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь); + АргументСтрока2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").Обязательный(); + ОпцияПеречисление = Команда.Опция("enum e em", "yellow", "Опция перечисление").ТПеречисление() + .Перечисление("yellow", "yellow", "Это желтый цвет") + .Перечисление("red", "red" , "Это красный цвет") + .Перечисление("blue", "blue", "Это синий цвет") + ; + + Команда.ВывестиСправку(); + +КонецПроцедуры + Функция ПодготовитьТестовуюКоманду(Спек = "") Команда = Новый КомандаПриложения("testapp", "", ЭтотОбъект); From e9fcb6288aec1e756d73a9d4b260cc12ba1bddbe Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 17 Jul 2018 08:51:07 +0300 Subject: [PATCH 7/9] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20fs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tasks/coverage.os | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/coverage.os b/tasks/coverage.os index d58dc9d..41f8364 100644 --- a/tasks/coverage.os +++ b/tasks/coverage.os @@ -1,5 +1,6 @@ #Использовать coverage #Использовать 1commands +#Использовать fs ФС.ОбеспечитьПустойКаталог("coverage"); ПутьКСтат = "coverage/stat.json"; From 521b1b04f40ad17e69e6ccddc14f55e9dfd587d0 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 17 Jul 2018 08:51:27 +0300 Subject: [PATCH 8/9] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=BB=D0=B8=D0=B1=D1=83=20datetime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + ...20\222\321\200\320\265\320\274\321\217.os" | 5 ++- ...20\270\320\262\320\224\320\260\321\202.os" | 5 ++- ...20\224\320\260\321\202\320\276\320\271.os" | 41 ------------------- 4 files changed, 9 insertions(+), 43 deletions(-) delete mode 100644 "src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\224\320\260\321\202\320\276\320\271.os" diff --git a/packagedef b/packagedef index 7602fd3..927f73d 100644 --- a/packagedef +++ b/packagedef @@ -18,6 +18,7 @@ .ЗависитОт("delegate", "0.2.0") .ЗависитОт("reflector", "0.5.1") .ЗависитОт("fluent", "0.3.1") + .ЗависитОт("datetime", "0.1.0") .ЗависитОт("asserts") //.ЗависитОт("1bdd") // Необходимо установил для тестирования //.ЗависитОт("1testrunner") // Необходимо установил для тестирования diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\270\320\277\320\224\320\260\321\202\320\260\320\222\321\200\320\265\320\274\321\217.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\270\320\277\320\224\320\260\321\202\320\260\320\222\321\200\320\265\320\274\321\217.os" index 130362e..d1fa3c2 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\270\320\277\320\224\320\260\321\202\320\260\320\222\321\200\320\265\320\274\321\217.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\270\320\277\320\224\320\260\321\202\320\260\320\222\321\200\320\265\320\274\321\217.os" @@ -1,3 +1,4 @@ +#Использовать datetime Перем ОписаниеОшибкиКласса; Перем ФорматДаты; @@ -34,7 +35,9 @@ Функция УстановитьЗначение(Знач ВходящаяСтрока, Значение) Экспорт Попытка - Значение = РаботаСДатой.СтрокаВДату(ВходящаяСтрока, ФорматДаты); + ПроцессорДаты = Новый ДатаВремя(); + + Значение = ПроцессорДаты.СтрокаВДату(ВходящаяСтрока, ФорматДаты); Исключение Значение = Дата("20010101"); ОписаниеОшибкиКласса = ОписаниеОшибки(); diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\224\320\260\321\202.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\224\320\260\321\202.os" index b4a56f6..80a87eb 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\224\320\260\321\202.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\224\320\260\321\202.os" @@ -1,3 +1,4 @@ +#Использовать datetime Перем ОписаниеОшибкиКласса; Перем ФорматДаты; @@ -34,7 +35,9 @@ Функция УстановитьЗначение(Знач ВходящееЗначение, Значение) Экспорт Попытка - ВходящееЗначение = РаботаСДатой.СтрокаВДату(ВходящееЗначение, ФорматДаты); + ПроцессорДаты = Новый ДатаВремя(); + + ВходящееЗначение = ПроцессорДаты.СтрокаВДату(ВходящееЗначение, ФорматДаты); Значение.Добавить(ВходящееЗначение); Исключение Значение = Дата("20010101"); diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\224\320\260\321\202\320\276\320\271.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\224\320\260\321\202\320\276\320\271.os" deleted file mode 100644 index d775e81..0000000 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\224\320\260\321\202\320\276\320\271.os" +++ /dev/null @@ -1,41 +0,0 @@ - -// Процедура СтрокаВДату преобразует строку в дату по шаблону форматной строки -// -// Параметры -// Строка - строка, содержащая дату, -// ФорматДаты - форматная строка вида: -// [dd MM yy] -// [yy-MM-dd HH:mm] -// [dd MM yy HH mm ss] -// [dd MM yyyy] -// [MM dd, yyyy, HH:mm] -// [dd.MM.yy] -// [MM, dd, yyyy] -// [yyyyMMdd] -// [HH-mm-ss, dd-MM-yy] -// [dd] -// [dd MM HH:mm:ss yyyy] -// [HH:mm:ss] -// [HH:mm] -// [yyyy-MM-dd HH:mm:ss] -// [yyyy-MM-dd] -// [yyyy/MM/dd] -// [dd/MM/yy] -// [MM dd yyyy] -// [yyyy-MM] -// [yyyy] -// [MM, dd, yyyy] -// [dd-MM-yyyy] -// [ddMMyyyy] -// -Функция СтрокаВДату(Знач Строка, ФорматДаты) Экспорт - Ч = Новый Соответствие; - Для ё = 1 По СтрДлина(ФорматДаты) + 6 Цикл - Ч[Сред(ФорматДаты + "dMyHms", ё, 1)] = 0 - КонецЦикла; - Для ё = 1 По СтрДлина(ФорматДаты) Цикл - Ч[Сред(ФорматДаты, ё, 1)] = 10 * Ч[Сред(ФорматДаты, ё, 1)] + Найти("123456789", Сред(Строка, ё, 1)); - КонецЦикла; - Ч["y"] = Ч["y"] + ?(0 < Ч["y"] И Ч["y"] < 50, 2000, ?(0 < Ч["y"] И Ч["y"] < 100, 1900, 0)); - Возврат Дата(Макс(Ч["y"], 1), Макс(Ч["M"],1), Макс(Ч["d"],1), Ч["H"], Ч["m"], Ч["s"]); -КонецФункции \ No newline at end of file From 242805e542c05b94552224fde6b8696b597a3479 Mon Sep 17 00:00:00 2001 From: khorevaa Date: Tue, 17 Jul 2018 09:07:46 +0300 Subject: [PATCH 9/9] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20=D0=B0=D0=BF=D0=B8=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\266\320\265\320\275\320\270\321\217.os" | 222 ++++++++++-------- 1 file changed, 129 insertions(+), 93 deletions(-) diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" index 5eb3ac3..f1c118d 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" @@ -38,6 +38,8 @@ Перем Лог; +#Область Публичное_API_класса + // Функция добавляет вложенную команду в текущую и возвращает экземпляр данной команды // // Параметры: @@ -47,7 +49,8 @@ // Так же используется, для автоматической настройки опций и параметров команды // // Возвращаемое значение: -// Команда - объект - класс КомандаПриложения +// объект - класс КомандаПриложения +// Функция ДобавитьПодкоманду(ИмяПодкоманды, ОписаниеПодкоманды, КлассРеализацииПодкоманды) Экспорт Подкоманда = Новый КомандаПриложения(ИмяПодкоманды, ОписаниеПодкоманды, КлассРеализацииПодкоманды, Приложение); @@ -68,7 +71,8 @@ // Так же используется, для автоматической настройки опций и параметров команды // // Возвращаемое значение: -// Команда - объект - класс КомандаПриложения +// объект - класс КомандаПриложения +// Функция ДобавитьКоманду(ИмяПодкоманды, ОписаниеПодкоманды, КлассРеализацииПодкоманды) Экспорт Возврат ДобавитьПодкоманду(ИмяПодкоманды, ОписаниеПодкоманды, КлассРеализацииПодкоманды); @@ -78,7 +82,8 @@ // Функция массив вложенных команд, текущей команды // // Возвращаемое значение: -// ВложенныеКоманды - массив - элементы класс КомандаПриложения +// Массив - элементы класс КомандаПриложения +// Функция ПолучитьПодкоманды() Экспорт Возврат ВложенныеКоманды; @@ -88,7 +93,8 @@ // Функция возвращает текущее имя команды // // Возвращаемое значение: -// Имя - строка - имя текущей команды +// Строка - имя текущей команды +// Функция ПолучитьИмяКоманды() Экспорт Возврат Имя; КонецФункции @@ -96,7 +102,8 @@ // Функция массив синонимов команды // // Возвращаемое значение: -// Синонимы - массив - элементы строка +// Массив - элементы строка +// Функция ПолучитьСинонимы() Экспорт Возврат Синонимы; КонецФункции @@ -104,7 +111,8 @@ // Функция возвращает описание команды // // Возвращаемое значение: -// Описание - строка - описание текущей команды +// Cтрока - описание текущей команды +// Функция ПолучитьОписание() Экспорт Возврат Описание; КонецФункции @@ -112,16 +120,17 @@ // Функция возвращает значение опции по переданному имени/синониму опции // // Параметры: -// ИмяОпции - строка - имя или синоним опции +// ИмяОпции - Строка - имя или синоним опции // // Возвращаемое значение: -// Значение - Произвольный - полученное значение в результате чтения строки использования или переменных окружения +// Произвольный - полученное значение в результате чтения строки использования или переменных окружения +// Функция ЗначениеОпции(Знач ИмяОпции) Экспорт ОпцияИндекса = ОпцияИзИндекса(ИмяОпции); - + Если ОпцияИндекса = Неопределено Тогда - + ЗначениеОпцииРодителя = ЗначениеОпцииКомандыРодителя(ИмяОпции); Если Не ЗначениеОпцииРодителя = Неопределено Тогда @@ -129,10 +138,10 @@ КонецЕсли; КонецЕсли; - + Если ОпцияИндекса = Неопределено Тогда - - ВызватьИсключение СтрШаблон("Ошибка получение значения опции <%1>. + + ВызватьИсключение СтрШаблон("Ошибка получение значения опции <%1>. |Опция не найдена в индексе опций команды", ИмяОпции); КонецЕсли; @@ -147,7 +156,8 @@ // ИмяАргумента - строка - имя аргумента // // Возвращаемое значение: -// Значение - Произвольный - полученное значение в результате чтения строки использования или переменных окружения +// Произвольный - полученное значение в результате чтения строки использования или переменных окружения +// Функция ЗначениеАргумента(Знач ИмяАргумента) Экспорт АргументИндекса = АргументИзИндекса(ИмяАргумента); @@ -170,25 +180,25 @@ КонецФункции -// Функция возвращает значение опции команды родителя по переданному имени/синониму опции +// Функция возвращает значение опции команды родителя по переданному имени/синониму опции // Возвращает первое из совпадений или неопределенно в случае отсутствия опции // // Параметры: // ИмяОпции - строка - имя или синоним опции // // Возвращаемое значение: -// Значение - Произвольный, Неопределенно - полученное значение в результате чтения строки использования или переменных окружения +// Произвольный, Неопределенно - полученное значение в результате чтения строки использования или переменных окружения // или неопределенно в случае отсутствия в индексе указанной опции Функция ЗначениеОпцииКомандыРодителя(Знач ИмяОпции) Экспорт Лог.Отладка("Ищю опцию <%1> для родителей", ИмяОпции); - + Для каждого РодительКоманды Из КомандыРодители Цикл - + Лог.Отладка(" --> Проверяю родителя <%1>", РодительКоманды.ПолучитьИмяКоманды()); - + ОпцияРодителя = РодительКоманды.ОпцияИзИндекса(ИмяОпции); - + Если НЕ ОпцияРодителя = Неопределено Тогда Возврат ОпцияРодителя.Значение; КонецЕсли; @@ -212,7 +222,7 @@ // ИмяАргумента - строка - имя аргумента // // Возвращаемое значение: -// Значение - Произвольный, Неопределенно - полученное значение в результате чтения строки использования или переменных окружения +// Произвольный, Неопределенно - полученное значение в результате чтения строки использования или переменных окружения // или неопределенно в случае отсутствия в индексе указанного аргумента Функция ЗначениеАргументаКомандыРодителя(Знач ИмяАргумента) Экспорт @@ -244,7 +254,7 @@ // // Возвращаемое значение: // Параметры - Соответствие - содержит Соответствие -// * Ключ - строка - имя или синоним опции/аргумента команды +// * Ключ - Строка - имя или синоним опции/аргумента команды // * Значение - Произвольный - полученное значение в результате чтения строки использования или переменных окружения Функция ПараметрыКоманды() Экспорт @@ -337,7 +347,7 @@ ПредставлениеВлКоманды = СтрСоединить(ВложеннаяКоманда.ПолучитьСинонимы(), ", "); ТекущаяДлина = СтрДлина(ПредставлениеВлКоманды); - + НаименованиеДляСправки = ДополнитьСтрокуПробелами(ПредставлениеВлКоманды, МаксимальнаяДлинаКоманд - ТекущаяДлина); ОписаниеДляСправки = ВложеннаяКоманда.ПолучитьОписание(); Сообщить(СтрШаблон(ШаблонВложеннойКоманды, НаименованиеДляСправки, ОписаниеДляСправки)); @@ -445,7 +455,7 @@ // Функция проверяет строку, что она является ли синонимом текущей команды // // Параметры: -// СтрокаПроверки - строка - имя команды, для проверки +// СтрокаПроверки - Строка - имя команды, для проверки // // Возвращаемое значение: // булево - истина. если это синоним или имя текущей команды, иначе ложь @@ -482,27 +492,27 @@ Если Опции.Количество() > 0 Тогда Спек = "[ОПЦИИ] "; КонецЕсли; - + Если Аргументы.Количество() > 0 Тогда Спек = Спек + "-- "; КонецЕсли; Лог.Отладка("Количество аргументы строки: %1", Аргументы.Количество()); Для каждого арг Из Аргументы Цикл - + ИмяАргумента = арг.Ключ.Имя; КлассАргумента = арг.Ключ; ДополнитьИмяАргументаМассива(ИмяАргумента, КлассАргумента); ДополнитьИмяАргументаНеобязательного(ИмяАргумента, КлассАргумента); - + Лог.Отладка("Добавляю аргумет <%1> в спек <%2>", ИмяАргумента, Спек); Спек = Спек + ИмяАргумента + " "; - + КонецЦикла; КонецЕсли; - + Лог.Отладка("Разбираю строку использования с помощью лексера"); Лексер = Новый Лексер(Спек).Прочитать(); @@ -550,9 +560,9 @@ // Функция добавляет аргумент команды и возвращает экземпляр данной аргумента // // Параметры: -// Имя - строка - имя аргумента, в строке допустимо использование только из БОЛЬШИХ латинских букв, например "ARG" -// Значение - строка - значение аргумента по умолчанию -// Описание - объект - описание аргумента для справки. +// Имя - Строка - имя аргумента, в строке допустимо использование только из БОЛЬШИХ латинских букв, например "ARG" +// Значение - Строка - значение аргумента по умолчанию +// Описание - Объект - описание аргумента для справки. // // Возвращаемое значение: // ПараметрКоманды - Созданный параметр команды @@ -570,13 +580,13 @@ // Функция возвращает значение опции по переданному имени/синониму опции // // Параметры: -// ИмяОпции - строка - имя или синоним опции +// ИмяОпции - Строка - имя или синоним опции // // Возвращаемое значение: // ПараметраКоманды, Неопределенно - класс опции, находящийся в индексе Опций команды -// Неопределенно, в случае отсутствия в индексе опций с запрошенным именем +// Неопределенно, в случае отсутствия в индексе опций с запрошенным именем Функция ОпцияИзИндекса(Знач ИмяОпции) Экспорт - + Если СтрНачинаетсяС(ИмяОпции, "-") Или СтрНачинаетсяС(ИмяОпции, "--") Тогда // Ничего не делаем переданы уже нормализированные опции @@ -597,13 +607,13 @@ // Функция возвращает параметры команды для аргумента по переданному имени аргумента // // Параметры: -// ИмяАргумента - строка - имя аргумента +// ИмяАргумента - Строка - имя аргумента // // Возвращаемое значение: // ПараметраКоманды, Неопределенно - класс аргумента, находящийся в индексе Аргументов команды -// Неопределенно, в случае отсутствия в индексе аргумента с запрошенным именем +// Неопределенно, в случае отсутствия в индексе аргумента с запрошенным именем Функция АргументИзИндекса(Знач ИмяАргумента) Экспорт - + АргументИндекса = АргументыИндекс[ВРег(ИмяАргумента)]; Возврат АргументИндекса; @@ -613,8 +623,8 @@ // Процедура устанавливает процедуру "ВыполнитьКоманду" выполнения для команды // // Параметры: -// ОбъектРеализации - объект - класс, объект реализующий процедуру выполнения команды. -// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ВыполнитьКоманду" +// ОбъектРеализации - Объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - Строка - имя процедуры, отличное от стандартного "ВыполнитьКоманду" // Процедура УстановитьДействиеВыполнения(ОбъектРеализации, ИмяПроцедуры = "ВыполнитьКоманду") Экспорт @@ -634,8 +644,8 @@ // запускаемую перед выполнением "ВыполнитьКоманду" // // Параметры: -// ОбъектРеализации - объект - класс, объект реализующий процедуру выполнения команды. -// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПередВыполнениемКоманды" +// ОбъектРеализации - Объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - Строка - имя процедуры, отличное от стандартного "ПередВыполнениемКоманды" // Процедура УстановитьДействиеПередВыполнением(ОбъектРеализации, ИмяПроцедуры = "ПередВыполнениемКоманды") Экспорт @@ -659,8 +669,8 @@ // запускаемую после выполнением "ВыполнитьКоманду" // // Параметры: -// ОбъектРеализации - объект - класс, объект реализующий процедуру выполнения команды. -// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПослеВыполненияКоманды" +// ОбъектРеализации - Объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - Строка - имя процедуры, отличное от стандартного "ПослеВыполненияКоманды" // Процедура УстановитьДействиеПослеВыполнения(ОбъектРеализации, ИмяПроцедуры = "ПослеВыполненияКоманды") Экспорт @@ -677,14 +687,14 @@ ДелегатДействия = Делегаты.Создать(ОбъектРеализации, ИмяПроцедуры); ДобавитьВИндексДействиеКоманды("ПослеВыполненияКоманды", ДелегатДействия); - + КонецПроцедуры // Процедура устанавливает процедуру "ВывестиСправку" для текущей команды // // Параметры: -// ОбъектРеализации - объект - класс, объект реализующий процедуру вывода справки. -// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ВывестиСправку" +// ОбъектРеализации - Объект - класс, объект реализующий процедуру вывода справки. +// ИмяПроцедуры - Строка - имя процедуры, отличное от стандартного "ВывестиСправку" // Процедура УстановитьДействиеВывестиСправку(ОбъектРеализации, ИмяПроцедуры = "ВывестиСправку") Экспорт @@ -702,9 +712,47 @@ ДелегатДействия = Делегаты.Создать(ОбъектРеализации, ИмяПроцедуры); ДобавитьВИндексДействиеКоманды("ВывестиСправку", ДелегатДействия); - + КонецПроцедуры +// Возвращает таблицу опций команды +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица с колонками: +// * Наименование - Строка - наименование +// * НаименованияПараметров - Массив - массив строк, с полными наименованиями опции (например, [-f, --force]) +// * Описание - Строка - краткое описание +// * ПодробноеОписание - Строка - подробное описание +// * ПеременнаяОкружения - Строка - переменная окружения, возможно несколько через пробел +// * СкрытьЗначение - Булево - признак скрытия значения по умолчанию +// * Значение - Произвольный - строковое представление значения по умолчанию +// +Функция ПолучитьТаблицуОпций() Экспорт + + Возврат ПолучитьТаблицуПараметров(Опции); + +КонецФункции + +// Возвращает таблицу аргуметов команды +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица с колонками: +// * Наименование - Строка - наименование +// * НаименованияПараметров - Массив - массив строк, с полными наименованиями аргументов (например, [ARG, АРГУМЕНТ1]) +// * Описание - Строка - краткое описание +// * ПодробноеОписание - Строка - подробное описание +// * ПеременнаяОкружения - Строка - переменная окружения, возможно несколько через пробел +// * СкрытьЗначение - Булево - признак скрытия значения по умолчанию +// * Значение - Произвольный - строковое представление значения по умолчанию +// +Функция ПолучитьТаблицуАргументов() Экспорт + + Возврат ПолучитьТаблицуПараметров(Аргументы); + +КонецФункции + +#КонецОбласти + #Область Работа_с_входящими_аргументами Процедура ОчиститьАргументы(АргументыCLI) @@ -801,7 +849,7 @@ Функция ВыполнитьДействиеКоманды(ИмяДействия) ДелегатДействия = ИндексДействийКоманды[ИмяДействия]; - + Если ДелегатДействия = Неопределено Тогда Возврат Ложь; КонецЕсли; @@ -809,7 +857,7 @@ ДелегатДействия.Исполнить(ЭтотОбъект); Возврат Истина; - + КонецФункции #КонецОбласти @@ -817,9 +865,9 @@ #Область Работа_с_рефлектором_объектов Функция ПолучитьРефлекторКласса(КлассПроверки) - + Если Не КлассПроверки = КлассРеализации Тогда - + Возврат Новый РефлекторОбъекта(КлассРеализации); Иначе @@ -846,7 +894,7 @@ КонецФункции Функция ПолучитьТаблицуДанныхДляСправки() - + Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("Наименование"); Таблица.Колонки.Добавить("Описание"); @@ -861,7 +909,7 @@ КонецФункции Функция ТаблицаАргументовДляСправки() - + Если Аргументы.Количество() = 0 Тогда Возврат ПолучитьТаблицуДанныхДляСправки(); КонецЕсли; @@ -880,7 +928,7 @@ КонецЕсли; ТаблицаОпций = ПолучитьТаблицуОпций(); - + ОбработатьТаблицуПараметровДляСправки(ТаблицаОпций); Возврат ТаблицаОпций; @@ -888,17 +936,17 @@ КонецФункции Процедура ВывестиТаблицуСправки(ТаблицаДанных) - + ДобавочнаяДлинаДополнения = 3; ШаблонНаименования = " %1"+ Символы.Таб + "%2"; - + Для каждого СтрокаТаблицы Из ТаблицаДанных Цикл Сообщить(СтрШаблон(ШаблонНаименования, СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание)); Если Не ПустаяСтрока(СтрокаТаблицы.ПодробноеОписание) Тогда - + СтрокаНаименования = СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование); ДлинаДополнения = СтрДлина(СтрокаНаименования) + ДобавочнаяДлинаДополнения; @@ -918,7 +966,7 @@ КонецПроцедуры Процедура ОбработатьТаблицуПараметровДляСправки(ТаблицаПараметров) - + МаксимальнаяДлина = 9; Для каждого СтрокаТаблицы Из ТаблицаПараметров Цикл @@ -946,20 +994,20 @@ ПеременныеОкружения = ФорматироватьПеременнуюОкруженияОпцииДляСправки(СтрокаТаблицы.ПеременнаяОкружения); ЗначениеОпции = ФорматироватьЗначениеОпцииДляСправки(СтрокаТаблицы.Значение, СтрокаТаблицы.СкрытьЗначение); - + МассивСоединения = Новый Массив; МассивСоединения.Добавить(СтрокаТаблицы.Описание); Если Не ПустаяСтрока(ПеременныеОкружения) Тогда - МассивСоединения.Добавить(ПеременныеОкружения); + МассивСоединения.Добавить(ПеременныеОкружения); КонецЕсли; Если Не ПустаяСтрока(ЗначениеОпции) Тогда МассивСоединения.Добавить(ЗначениеОпции); КонецЕсли; - + ОписаниеДляСправки = СтрСоединить(МассивСоединения, " "); Возврат ОписаниеДляСправки - + КонецФункции Функция ДополнитьСтрокуПробелами(Знач НачальнаяСтрока, КоличествоПробелов) @@ -989,7 +1037,7 @@ ОграничениеДлины = 2; Если НаименованияПараметров.Количество() = 1 Тогда - + НаименованиеПараметра = НаименованияПараметров[0]; Если Не СтрНачинаетсяС(НаименованиеПараметра, "-") Тогда @@ -998,10 +1046,10 @@ Если СтрДлина(НаименованиеПараметра) = ОграничениеДлины Тогда Возврат НаименованиеПараметра; - Иначе + Иначе Возврат СтрШаблон(" %1", НаименованиеПараметра); - КонецЕсли; - + КонецЕсли; + КонецЕсли; ПроцессорКоллекций = Новый ПроцессорКоллекций; @@ -1062,13 +1110,13 @@ Процедура ВывестиПутьПарсераВОтладке() Если Лог.Уровень() = УровниЛога.Отладка Тогда - + ОбработчикВыборкиПути = Новый ВыборСовпадений(); Лог.Отладка("Вывожу текущий путь парсинга: "); Лог.Отладка(ОбработчикВыборкиПути.СгенеритьСтрокуПути(НачальноеСостояние)); КонецЕсли; - + КонецПроцедуры // Дополняет признаком "[]" необязательности для аргумента @@ -1078,13 +1126,13 @@ // КлассАргумента - Класс - класс аргумента // Процедура ДополнитьИмяАргументаНеобязательного(ИмяАргумента, КлассАргумента) - + Если НЕ КлассАргумента.ПолучитьОбязательностьВвода() Тогда - + ИмяАргумента = СтрШаблон("[%1]", ИмяАргумента); КонецЕсли; - + КонецПроцедуры // Дополняет признаком "..." для аргумента массива @@ -1093,24 +1141,24 @@ // ИмяАргумента - Строка - Имя аргумента // КлассАргумента - Класс - класс аргумента // -Процедура ДополнитьИмяАргументаМассива(ИмяАргумента, КлассАргумента) - +Процедура ДополнитьИмяАргументаМассива(ИмяАргумента, КлассАргумента) + Если КлассАргумента.ЭтоМассив() Тогда - + ИмяАргумента = СтрШаблон("%1...", ИмяАргумента); КонецЕсли; - + КонецПроцедуры Процедура ДобавитьВИндексДействиеКоманды(ИмяДействия, ДелегатДействия) - + ИндексДействийКоманды.Вставить(ИмяДействия, ДелегатДействия); КонецПроцедуры -Процедура УстановитьСтандартныеОбработчики(РеализованныеМетодыКоманды) - +Процедура УстановитьСтандартныеОбработчики(РеализованныеМетодыКоманды) + Если РеализованныеМетодыКоманды.ОписаниеКоманды Тогда КлассРеализации.ОписаниеКоманды(ЭтотОбъект); КонецЕсли; @@ -1153,20 +1201,8 @@ КонецФункции -Функция ПолучитьТаблицуОпций() Экспорт - - Возврат ПолучитьТаблицуПараметров(Опции); - -КонецФункции - -Функция ПолучитьТаблицуАргументов() Экспорт - - Возврат ПолучитьТаблицуПараметров(Аргументы); - -КонецФункции - Функция ПолучитьТаблицуПараметров(ИндексПараметров) - + ТаблицаДанных = ПолучитьТаблицуДанныхДляСправки(); Для каждого КлючЗначение Из ИндексПараметров Цикл @@ -1222,7 +1258,7 @@ .П("ПослеВыполненияКоманды", 1) .П("ВывестиСправку", 1) ; - + РеализованныеМетодыКоманды = РасширенныйРефлектор.РеализованныеМетодыИнтерфейса(ИнтерфейсКоманды); УстановитьСтандартныеОбработчики(РеализованныеМетодыКоманды);