diff --git a/README.md b/README.md index 1a9b817..1998d78 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Данная библиотека для языка OScript, позволяет создавать консольные приложения с разбором и проверкой аргументов. +[Документация и описание публичного API](docs/README.md) ## Быстрый старт ### Пример простого приложения diff --git a/docs/readme.md b/docs/readme.md new file mode 100644 index 0000000..f141af4 --- /dev/null +++ b/docs/readme.md @@ -0,0 +1,833 @@ +Описание публичного интерфейса библиотеки +======================== + + + +- [Класс КонсольноеПриложение:](#класс-консольноеприложение) + - [Публичные свойства](#публичные-свойства) + - [ФлагВерсия](#флагверсия) + - [ВерсияПриложения](#версияприложения) + - [Версия](#версия) + - [УстановитьСпек](#установитьспек) + - [ПолучитьКоманду](#получитькоманду) + - [Запустить](#запустить) + - [ДобавитьКоманду](#добавитькоманду) + - [УстановитьОсновноеДействие](#установитьосновноедействие) + - [УстановитьДействиеПередВыполнением](#установитьдействиепередвыполнением) + - [УстановитьДействиеПослеВыполнения](#установитьдействиепослевыполнения) + - [Опция](#опция) + - [Аргумент](#аргумент) + - [ВыполнитьКоманду](#выполнитькоманду) +- [Класс КомандаПриложения:](#класс-командаприложения) + - [Публичные свойства](#публичные-свойства-1) + - [Спек](#спек) + - [ПодробноеОписание](#подробноеописание) + - [Приложение](#приложение) + - [КомандыРодители](#командыродители) + - [ДобавитьПодкоманду](#добавитьподкоманду) + - [ПолучитьПодкоманды](#получитьподкоманды) + - [ПолучитьИмяКоманды](#получитьимякоманды) + - [ПолучитьСинонимы](#получитьсинонимы) + - [ПолучитьОписание](#получитьописание) + - [ЗначениеОпции](#значениеопции) + - [ЗначениеАргумента](#значениеаргумента) + - [ПараметрыКоманды](#параметрыкоманды) + - [ПередВыполнениемКоманды](#передвыполнениемкоманды) + - [ПослеВыполненияКоманды](#послевыполнениякоманды) + - [ВывестиСправку](#вывестисправку) + - [Запуск](#запуск) + - [НачалоЗапуска](#началозапуска) + - [ЭтоСинонимКоманды](#этосинонимкоманды) + - [Опция](#опция-1) + - [Аргумент](#аргумент-1) + - [УстановитьДействиеВыполнения](#установитьдействиевыполнения) + - [УстановитьДействиеПередВыполнением](#установитьдействиепередвыполнением-1) + - [УстановитьДействиеПослеВыполнения](#установитьдействиепослевыполнения-1) +- [Класс ПараметрКоманды:](#класс-параметркоманды) + - [Публичные свойства](#публичные-свойства-2) + - [Имя](#имя) + - [Описание](#описание) + - [ПодробноеОписание](#подробноеописание-1) + - [ПеременнаяОкружения](#переменнаяокружения) + - [Синонимы](#синонимы) + - [НаименованияПараметров](#наименованияпараметров) + - [СкрытьЗначение](#скрытьзначение) + - [УстановленаИзПеременнойОкружения](#установленаизпеременнойокружения) + - [УстановленаПользователем](#установленапользователем) + - [ТребоватьУстановкиПользователем](#требоватьустановкипользователем) + - [Значение](#значение) + - [ТипОпции](#типопции) + - [ЭтоМассив](#этомассив) + - [Очистить](#очистить) + - [ЗначениеВСтроку](#значениевстроку) + - [ПолучитьОбязательностьВвода](#получитьобязательностьввода) + - [УстановитьЗначение](#установитьзначение) + - [ИзПеременнойОкружения](#изпеременнойокружения) + - [Текучие функции](#текучие-функции) + - [ВОкружении](#вокружении) + - [СкрытьВСправке](#скрытьвсправке) + - [ПоУмолчанию](#поумолчанию) + - [Флаговый](#флаговый) + - [Флаг](#флаг) + - [ТБулево](#тбулево) + - [ТДата](#тдата) + - [ТЧисло](#тчисло) + - [ТСтрока](#тстрока) + - [ТМассивДат](#тмассивдат) + - [ТМассивЧисел](#тмассивчисел) + - [ТМассивСтрок](#тмассивстрок) + - [Описание](#описание-1) + - [Псевдоним](#псевдоним) + - [Обязательный](#обязательный) + - [ВФайле](#вфайле) + - [ПроизвольныйТип](#произвольныйтип) + + + +### Класс КонсольноеПриложение: +> Основной класс для реализации консольного приложения + +#### Публичные свойства + +##### ФлагВерсия + +```bsl +// Класс ПараметрКоманды, для доступа к установленному значению из вне +``` +##### ВерсияПриложения + +```bsl +// Строковое представление версии приложения +``` + +#### Версия + +```bsl +// Процедура добавляет версию приложения, +// при вызове данной опции, показывается установленная версия и +// завершается выполнение с кодом (0) +// +// Параметры: +// Наименование - строка - имя опции, в строке допустимо задавать синоним через пробел, например "v version" +// СтрокаВерсии - строка - версия, приложения +``` + +#### УстановитьСпек + +```bsl +// Процедура позволяет переопределить стандартную строку использования приложения +// +// Параметры: +// СтрокаСпек - строка - переопределенная строка использования приложения +``` + +#### ПолучитьКоманду + +```bsl +// Возвращает основную команду приложения +// +// Возвращаемое значение: +// Команда - класс КомандаПриложения +``` + +#### Запустить + +```bsl +// Основная процедура запуска приложения +// +// Параметры: +// АргументыКоманднойСтрокиВходящие - Массив - Элементы <Строка>, необзательный, +// Если, не передано считывает из АргументыКоманднойСтроки +``` + +#### ДобавитьКоманду + +```bsl +// Функция добавляет команду приложение и возвращает экземпляр данной команды +// +// Параметры: +// ИмяКоманды - строка - в строке допустимо задавать синоним через пробел, например "exec e" +// ОписаниеКоманды - строка - описание команды для справки +// КлассРеализацииКоманды - объект - класс, объект реализующий функции выполнения команды. +// Так же используется, для автоматической настройки опций и параметров команды +// +// Возвращаемое значение: +// Команда - класс КомандаПриложения +``` + +#### УстановитьОсновноеДействие + +```bsl +// Процедура устанавливает процедуру "ВыполнитьКоманду" выполнения для приложения +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ВыполнитьКоманду" +// +``` + +#### УстановитьДействиеПередВыполнением + +```bsl +// Процедура устанавливает процедуру "ПередВыполнениемКоманды" выполнения для приложения +// запускаемую перед выполнением "ВыполнитьКоманду" +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПередВыполнениемКоманды" +// +``` + +#### УстановитьДействиеПослеВыполнения + +```bsl +// Процедура устанавливает процедуру "ПослеВыполненияКоманды" выполнения для приложения +// запускаемую после выполнением "ВыполнитьКоманду" +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПослеВыполненияКоманды" +// +``` + +#### Опция + +```bsl +// Функция добавляет опцию приложения и возвращает экземпляр данной опции +// +// Параметры: +// Имя - строка - имя опции, в строке допустимо задавать синоним через пробел, например "s some-opt" +// Значение - строка - значение опции по умолчанию +// Описание - объект - описание опции для справки. +// +// Возвращаемое значение: +// Команда - класс ПараметрКоманды +// +// Дополнительно смотри справку по классу ПараметрКоманды +``` + +#### Аргумент + +```bsl +// Функция добавляет аргумент приложения и возвращает экземпляр данной аргумента +// +// Параметры: +// Имя - строка - имя аргумента, в строке допустимо использование только из БОЛЬШИХ латинских букв, например "ARG" +// Значение - строка - значение аргумента по умолчанию +// Описание - объект - описание аргумента для справки. +// +// Возвращаемое значение: +// Команда - класс ПараметрКоманды +// +// Дополнительно смотри справку по классу ПараметрКоманды +// +``` + +#### ВыполнитьКоманду + +```bsl +// Предопределенная процедура выполнения приложения, если не задана процедура в классе. +// Выводит справку, по работе с приложением и завершает работу с кодом "1" +// Переопределяется, процедурой "УстановитьОсновноеДействие" +// +// Параметры: +// Команда - класс КомандаПриложения - инстанс класс, для доступа к опция и аргументам выполняемой команды +// +``` + +### Класс КомандаПриложения: + +> Основной класс для реализации консольного приложения + +#### Публичные свойства + +##### Спек + +```bsl +// Пользовательская строка использования текущей команды +``` + +##### ПодробноеОписание + +```bsl +// (ЗАГОТОВКА) Содержит дополнительно подробное описания для справки по команде +``` + +##### Приложение + +```bsl +// Содержит экземпляр класс КонсольноеПриложения, для возможности получения экспортных свойств приложения +``` + +##### КомандыРодители + +```bsl +// Содержит входящий массив родителей текущей команды +// Устанавливается при выполнении команд родителей +``` + +#### ДобавитьПодкоманду + +```bsl +// Функция добавляет под команду в текущую и возвращает экземпляр данной команды +// +// Параметры: +// ИмяКоманды - строка - в строке допустимо задавать синоним через пробел, например "exec e" +// ОписаниеКоманды - строка - описание команды для справки +// КлассРеализацииКоманды - объект - класс, объект реализующий функции выполнения команды. +// Так же используется, для автоматической настройки опций и параметров команды +// +// Возвращаемое значение: +// Команда - класс КомандаПриложения +``` + +#### ПолучитьПодкоманды + +```bsl +// Функция массив вложенных команд, текущей команды +// +// Возвращаемое значение: +// массив, элементы класс КомандаПриложения +``` + +#### ПолучитьИмяКоманды + +```bsl +// Функция возвращает текущее имя команды +// +// Возвращаемое значение: +// строка +``` + +#### ПолучитьСинонимы + +```bsl +// Функция массив синонимов команды +// +// Возвращаемое значение: +// массив, элементы класс КомандаПриложения +``` + +#### ПолучитьОписание + +```bsl +// Функция возвращает описание команды +// +// Возвращаемое значение: +// строка +``` + +#### ЗначениеОпции + +```bsl +// Функция возвращает значение опции по переданному имени/синониму опции +// +// Параметры: +// ИмяОпции - строка - имя или синоним опции +// +// Возвращаемое значение: +// Произвольный - Значение - полученное значение в результате чтения строки использования или переменных окружения + +``` + +#### ЗначениеАргумента + +```bsl +// Функция возвращает значение аргумента по переданному имени аргумента +// +// Параметры: +// ИмяАргумента - строка - имя аргумента +// +// Возвращаемое значение: +// Произвольный - Значение - полученное значение в результате чтения строки использования или переменных окружения +``` + +#### ПараметрыКоманды + +```bsl +// Функция возвращает все параметры команды, для доступа к ним по синонимам +// +// Возвращаемое значение: +// Соответствие +// Ключ - имя или синоним опции/аргумента команды +// Значение - полученное значение в результате чтения строки использования или переменных окружения +``` + +#### ПередВыполнениемКоманды + +```bsl +// Предопределенная процедура ПередВыполнениемКоманды команды, если не задана процедура в классе. +// Содержит код определение необходимости вывода версии приложения +``` + +#### ПослеВыполненияКоманды + +```bsl +// Предопределенная процедура ПослеВыполненияКоманды команды, если не задана процедура в классе. +``` + +#### ВывестиСправку + +```bsl +Процедура выводит справку по команде в консоль +``` + +#### Запуск + +```bsl +// Основная процедура запуска команды приложения +// +// Параметры: +// АргументыCLI - Массив - Элементы <Строка> +// +``` + +#### НачалоЗапуска + +```bsl +// Процедура подготавливает команды к запуску +// Формирует строку использования и +// настраивает парсер для выполнения парсинга входящих параметров +// Обязательно вызывается пред выполнением команды +``` + +#### ЭтоСинонимКоманды + +```bsl +// Функция проверяет строку, что она является ли синонимом текущей команды +// +// Параметры: +// СтрокаПроверки - строка - имя команды, для проверки +// +// Возвращаемое значение: +// булево - истина. если это синоним или имя текущей команды, иначе ложь + +``` + +#### Опция + +```bsl +// Функция добавляет опцию команды и возвращает экземпляр данной опции +// +// Параметры: +// Имя - строка - имя опции, в строке допустимо задавать синоним через пробел, например "s some-opt" +// Значение - строка - значение опции по умолчанию +// Описание - объект - описание опции для справки. +// +// Возвращаемое значение: +// Команда - класс ПараметрКоманды +// +// Дополнительно смотри справку по классу ПараметрКоманды +``` + +#### Аргумент + +```bsl +// Функция добавляет аргумент команды и возвращает экземпляр данной аргумента +// +// Параметры: +// Имя - строка - имя аргумента, в строке допустимо использование только из БОЛЬШИХ латинских букв, например "ARG" +// Значение - строка - значение аргумента по умолчанию +// Описание - объект - описание аргумента для справки. +// +// Возвращаемое значение: +// Команда - класс ПараметрКоманды +// +// Дополнительно смотри справку по классу ПараметрКоманды +``` + +#### УстановитьДействиеВыполнения + +```bsl +// Процедура устанавливает процедуру "ВыполнитьКоманду" выполнения для команды +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ВыполнитьКоманду" +// +``` + +#### УстановитьДействиеПередВыполнением + +```bsl +// Процедура устанавливает процедуру "ПередВыполнениемКоманды" выполнения для команды +// запускаемую перед выполнением "ВыполнитьКоманду" +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПередВыполнениемКоманды" +// +``` + +#### УстановитьДействиеПослеВыполнения + +```bsl +// Процедура устанавливает процедуру "ПослеВыполненияКоманды" выполнения для команды +// запускаемую после выполнением "ВыполнитьКоманду" +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПослеВыполненияКоманды" +// +``` + +### Класс ПараметрКоманды: + +> Основной класс для реализации параметров команды опции или аргумента + +#### Публичные свойства + +##### Имя + +```bsl +// Имя параметра команды +// первая строка из массива строк, переданных при создании +``` +##### Описание + +```bsl +// Описание параметра команды +// Используется при выводе справки +``` + +##### ПодробноеОписание + +```bsl +// Подробное описание параметра команды +// Используется при выводе справки (запланировано) +``` + +##### ПеременнаяОкружения + +```bsl +// Содержит имя переменной окружения, откуда получать значение +// допустимо использование нескольких переменных окружения через пробел +// Используется при выводе справки +``` + +##### Синонимы + +```bsl +// Содержит синонимов параметра команды +``` + +##### НаименованияПараметров + +```bsl +// Содержит нормализованные наименования параметров +// для опций ("f force"): +// "-f", "--force" +// для аргументов ("ARG"): +// "ARG" +``` + +##### СкрытьЗначение + +```bsl +// Определяет необходимость показа значения по умолчанию параметра в справке. +// Значение "Истина" скрывает в справке, по умолчанию "Ложь" +``` + +##### УстановленаИзПеременнойОкружения + +```bsl +// Содержит признак истина, если значение получено из переменной окружения +``` + +##### УстановленаПользователем + +```bsl +// Содержит признак истина, если значение установлено пользователем в строке использования +``` + +##### ТребоватьУстановкиПользователем + +```bsl +// Признак обязательности установки значения пользователем в строке использования +// при "истина", если значение не передано явно, будет вызывать исключение +``` + +##### Значение + +```bsl +// Содержит значение параметра +// В том числе установленное значение по умолчанию +``` + +##### ТипОпции + +```bsl +// Содержит тип параметра +``` + +#### ЭтоМассив + +```bsl +// Возвращает истина, если тип параметра Массив +// +// Возвращаемое значение: +// булево +``` + +#### Очистить + +```bsl +// Процедура очищает, Значение параметра, для типа Массив +// +``` + +#### ЗначениеВСтроку + +```bsl +// Возвращает строковое представление значения параметра +// +// Возвращаемое значение: +// строка +``` + +#### ПолучитьОбязательностьВвода + +```bsl +// Возвращает истина, если данный параметр обязателен для указания +// +// Возвращаемое значение: +// булево +``` + +#### УстановитьЗначение + +```bsl +// Процедура устанавливает значение параметра из входящего значения +// приводить к необходимому типу +// +// Параметры: +// ВходящееЗначение - строка - полученная строка при парсинге строки использования +``` + +#### ИзПеременнойОкружения + +```bsl +// Процедура устанавливает значение параметра из переменной окружения +// +``` + +#### Текучие функции + +##### ВОкружении + +```bsl +// Функция устанавливает переменную окружения для параметра команды +// возвращает текущий параметр команды +// +// Параметры: +// СтрокаПеременнаяОкружения - строка - имя переменной окружения, откуда получать значение +// допустимо использование нескольких переменных окружения через пробел +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +``` + +##### СкрытьВСправке + +```bsl +// Функция устанавливает признак скрытости значения по умолчанию в справке +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +``` + +##### ПоУмолчанию + +```bsl +// Функция устанавливает значение по умолчанию +// возвращает текущий параметр команды +// +// Параметры: +// ВходящееЗначение - произвольный - значение параметра по умолчанию +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +``` + +##### Флаговый + +```bsl +// Функция устанавливает тип параметра "Булево" +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию +``` + +##### Флаг + +```bsl +// Функция устанавливает тип параметра "Булево" +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию +``` + +##### ТБулево + +```bsl +// Функция устанавливает тип параметра "Булево" +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию +``` + +##### ТДата + +```bsl +// Функция устанавливает тип параметра "Дата" +// возвращает текущий параметр команды +// +// Параметры: +// ФорматДаты - Строка - формат даты, при приведении к дате из строки параметра по умолчанию (yyyy-MM-dd_HH:mm:ss) +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию +``` + +##### ТЧисло + +```bsl +// Функция устанавливает тип параметра "Число" +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию +``` + +##### ТСтрока + +```bsl +// Функция устанавливает тип параметра "Строка" +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию +``` + +##### ТМассивДат + +```bsl +// Функция устанавливает тип параметра "Массив" элементы "Дата" +// возвращает текущий параметр команды +// +// Параметры: +// ФорматДаты - Строка - формат даты, при приведении к дате из строки параметра по умолчанию (yyyy-MM-dd_HH:mm:ss) +// ВходящийРазделительМассива - символ - используется для разделения параметров при парсинге строки +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +``` + +##### ТМассивЧисел + +```bsl +// Функция устанавливает тип параметра "Массив" элементы "Число" +// возвращает текущий параметр команды +// +// Параметры: +// ВходящийРазделительМассива - символ - используется для разделения параметров при парсинге строки +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +``` + +##### ТМассивСтрок + +```bsl +// Функция устанавливает тип параметра "Массив" элементы "Строки" +// возвращает текущий параметр команды +// +// Параметры: +// ВходящийРазделительМассива - символ - используется для разделения параметров при парсинге строки +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +``` + +##### Описание + +```bsl +// Функция устанавливает описание параметра для справки +// возвращает текущий параметр команды +// +// Параметры: +// НовыеОписание - строка - строка с новым описанием, отличным от переданного в момент создания +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +``` + +##### Псевдоним + +```bsl +// Функция устанавливает дополнительный синоним/псевдоним параметра для справки +// возвращает текущий параметр команды +// +// Параметры: +// СтрокаПсевдонима - строка - строка с новым псевдонимом, отличным от переданного в момент создания +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +``` + +##### Обязательный + +```bsl +// Функция устанавливает признак обязательности указания данного параметра +// возвращает текущий параметр команды +// +// Параметры: +// Признак - булево - признак обязательности указания данного параметра (по умолчанию Истина) +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +``` + +##### ВФайле + +```bsl +// (ЗАГОТОВКА) Функция устанавливает путь и место в файле при получении настроек +// возвращает текущий параметр команды +// +// Параметры: +// ПутьКФайлу - строка - путь к файлу для чтения +// МестоВФайле - строка - путь в файле, в формате "general.force" +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманд +``` + +##### ПроизвольныйТип + +```bsl +// Функция устанавливает произвольный тип параметра +// возвращает текущий параметр команды +// +// Параметры: +// ВходящийКлассЗначенияПараметра - класс - Произвольный класс, реализующий ряд обязательных функций +// ВходящийТипПараметра - тип - тип значения параметра +// ВходящийТипЭлементаПараметра - Тип - тип элементов значения параметра, если тип Массив +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +``` \ No newline at end of file diff --git a/packagedef b/packagedef index e313fd1..097181c 100644 --- a/packagedef +++ b/packagedef @@ -10,7 +10,7 @@ .Описание("Данный пакет облегчает создание консольных приложений на Oscript") .ВерсияСреды("1.0.18") .ВключитьФайл("src") - .ВключитьФайл("doc") + .ВключитьФайл("docs") //.ВключитьФайл("tests") .ВключитьФайл("package-loader.os") .ВключитьФайл("packagedef") diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/cmd/\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/cmd/\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 f61d2c3..d9bf934 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/cmd/\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/cmd/\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,37 +1,48 @@ - #Использовать delegate #Использовать logos -Перем Спек экспорт; -Перем ПодробноеОписание Экспорт; - -Перем ДействиеВыполнения Экспорт; -Перем ДействиеПередВыполнением Экспорт; -Перем ДействиеПослеВыполнения Экспорт; +// Пользовательская строка использования текущей команды +Перем Спек экспорт; // Строка +// (ЗАГОТОВКА) Содержит дополнительно подробное описания для справки по команде +Перем ПодробноеОписание Экспорт; // Строка -Перем Приложение Экспорт; +// Содержит экземпляр класс КонсольноеПриложения, для возможности получения экспортных свойств приложения +Перем Приложение Экспорт; // Класс КонсольноеПриложения +// Содержит входящий массив родителей текущей команды +// Устанавливается при выполнении команд родителей +Перем КомандыРодители Экспорт; // Массив классов КомандаПриложения -Перем Имя; // текст +Перем Имя; // Строка Перем Синонимы; // массив строк -Перем Описание; // текст +Перем Описание; // Строка Перем ВложенныеКоманды; // Массив классов КомандаПриложения -Перем Опции; // Соответствие Ключ - Значение (Структура описание опции) +Перем Опции; // Соответствие Перем Аргументы; // Соответствие Перем ОпцииИндекс; // Соответствие Перем АргументыИндекс; // Соответствие -Перем КлассРеализации; +Перем КлассРеализации; // Объект -Перем КомандыРодители Экспорт; +Перем НачальноеСостояние; // Класс Совпадение +Перем РефлекторПроверкиКоманд; // Класс Рефлектор -Перем fsm; -Перем НачальноеСостояние; - -Перем РефлекторПроверкиКоманд; +Перем ДействиеВыполнения; // Класс Делегат +Перем ДействиеПередВыполнением; // Класс Делегат +Перем ДействиеПослеВыполнения; // Класс Делегат Перем Лог; +// Функция добавляет под команду в текущую и возвращает экземпляр данной команды +// +// Параметры: +// ИмяКоманды - строка - в строке допустимо задавать синоним через пробел, например "exec e" +// ОписаниеКоманды - строка - описание команды для справки +// КлассРеализацииКоманды - объект - класс, объект реализующий функции выполнения команды. +// Так же используется, для автоматической настройки опций и параметров команды +// +// Возвращаемое значение: +// Команда - класс КомандаПриложения Функция ДобавитьПодкоманду(ИмяПодкоманды, ОписаниеПодкоманды, КлассРеализацииПодкоманды) Экспорт Подкоманда = Новый КомандаПриложения(ИмяПодкоманды, ОписаниеПодкоманды, КлассРеализацииПодкоманды, Приложение); @@ -42,69 +53,72 @@ КонецФункции -Процедура ПриСозданииОбъекта(ИмяКоманды, ОписаниеКоманды, КлассРеализацииКоманды, ПриложениеКоманды = Неопределено) - - Синонимы = СтрРазделить(ИмяКоманды, " ", Ложь); - Имя = Синонимы[0]; - Описание = ОписаниеКоманды; - КлассРеализации = КлассРеализацииКоманды; - - ВложенныеКоманды = Новый Массив; - КомандыРодители = Новый Массив; - Опции = Новый Соответствие; - Аргументы = Новый Соответствие; - - ОпцииИндекс = Новый Соответствие; - АргументыИндекс = Новый Соответствие; - - Приложение = ПриложениеКоманды; - - Спек = ""; - ПодробноеОписание = ""; - - РефлекторПроверкиКоманд = Новый Рефлектор; - - ДействиеПередВыполнением = Неопределено; - ДействиеПослеВыполнения = Неопределено; - - УстановитьДействиеВыполнения(КлассРеализацииКоманды); - УстановитьДействиеПередВыполнением(КлассРеализацииКоманды); - УстановитьДействиеПослеВыполнения(КлассРеализацииКоманды); - - fsm = Новый ВыборСовпадений(); - -КонецПроцедуры - +// Функция массив вложенных команд, текущей команды +// +// Возвращаемое значение: +// массив, элементы класс КомандаПриложения Функция ПолучитьПодкоманды() Экспорт Возврат ВложенныеКоманды; - + КонецФункции +// Функция возвращает текущее имя команды +// +// Возвращаемое значение: +// строка Функция ПолучитьИмяКоманды() Экспорт Возврат Имя; КонецФункции +// Функция массив синонимов команды +// +// Возвращаемое значение: +// массив, элементы строка Функция ПолучитьСинонимы() Экспорт Возврат Синонимы; КонецФункции +// Функция возвращает описание команды +// +// Возвращаемое значение: +// строка Функция ПолучитьОписание() Экспорт Возврат Описание; КонецФункции +// Функция возвращает значение опции по переданному имени/синониму опции +// +// Параметры: +// ИмяОпции - строка - имя или синоним опции +// +// Возвращаемое значение: +// Произвольный - Значение - полученное значение в результате чтения строки использования или переменных окружения Функция ЗначениеОпции(Знач ИмяОпции) Экспорт Возврат ОпцииИндекс[ИмяОпции].Значение; КонецФункции +// Функция возвращает значение аргумента по переданному имени аргумента +// +// Параметры: +// ИмяАргумента - строка - имя аргумента +// +// Возвращаемое значение: +// Произвольный - Значение - полученное значение в результате чтения строки использования или переменных окружения Функция ЗначениеАргумента(Знач ИмяАргумента) Экспорт Возврат АргументыИндекс[ИмяАргумента].Значение; КонецФункции +// Функция возвращает все параметры команды, для доступа к ним по синонимам +// +// Возвращаемое значение: +// Соответствие +// Ключ - имя или синоним опции/аргумента команды +// Значение - полученное значение в результате чтения строки использования или переменных окружения Функция ПараметрыКоманды() Экспорт ПКоманды = Новый Соответствие; @@ -112,16 +126,17 @@ Для каждого КлючЗначение Из ОпцииИндекс Цикл ПКоманды.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение.Значение); КонецЦикла; - + Для каждого КлючЗначение Из АргументыИндекс Цикл ПКоманды.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение.Значение); КонецЦикла; - + Возврат ПКоманды; КонецФункции - +// Предопределенная процедура ПередВыполнениемКоманды команды, если не задана процедура в классе. +// Содержит код определение необходимости вывода версии приложения Процедура ПередВыполнениемКоманды(Знач Команда) Экспорт Если Команда.Приложение = Неопределено Тогда @@ -139,16 +154,106 @@ КонецПроцедуры +// Предопределенная процедура ПослеВыполненияКоманды команды, если не задана процедура в классе. Функция ПослеВыполненияКоманды(Знач Команда) Экспорт КонецФункции -Процедура ВывестиВерсию() +// Процедура выводит справку по команде в консоль +Процедура ВывестиСправку() Экспорт - Сообщить(Приложение.ВерсияПриложения); + КонсольВывода = Новый Консоль; + + Представление = ?(КомандыРодители.Количество()>0, "Команда", "Приложение"); + + КонсольВывода.ВывестиСтроку(СтрШаблон("%1: %2 + | %3", Представление, СтрСоединить(Синонимы, ", "), ?(ПустаяСтрока(ПодробноеОписание), Описание, ПодробноеОписание))); + КонсольВывода.ВывестиСтроку(""); + + ПолныйПуть = Новый Массив; + + Для каждого Родитель Из КомандыРодители Цикл + ПолныйПуть.Добавить(Родитель); + КонецЦикла; + ПолныйПуть.Добавить(СокрЛП(Имя)); + + ПутьИспользования = СтрСоединить(ПолныйПуть," "); + СуффиксВложенныхКоманды = ""; + Если ВложенныеКоманды.Количество() > 0 Тогда + + СуффиксВложенныхКоманды = "КОМАНДА [аргументы...]"; + + КонецЕсли; + + КонсольВывода.ВывестиСтроку(СтрШаблон("Строка запуска: %1 %2 %3",ПутьИспользования, СокрЛП(Спек), СуффиксВложенныхКоманды)); + + КонсольВывода.ВывестиСтроку(""); + + Если Аргументы.Количество() > 0 Тогда + + //КонсольВывода.ЦветТекста = ЦветТекстаКонсоли; + КонсольВывода.ВывестиСтроку(СтрШаблон("%2Аргументы:%1%2", Символы.Таб, Символы.ВК)); + ТаблицаОпций = ТаблицаАргументовДляСправки(); + Для каждого СтрокаТаблицы Из ТаблицаОпций Цикл + + КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК,СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание)); + + КонецЦикла; + + КонсольВывода.ВывестиСтроку(""); + + КонецЕсли; + + Если Опции.Количество() > 0 Тогда + + //КонсольВывода.ЦветТекста = ЦветТекстаКонсоли; + КонсольВывода.ВывестиСтроку(СтрШаблон("%Опции:%1%2", Символы.Таб, Символы.ВК)); + ТаблицаОпций = ТаблицаОпцийДляСправки(); + Для каждого СтрокаТаблицы Из ТаблицаОпций Цикл + + КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК,СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание)); + + КонецЦикла; + КонсольВывода.ВывестиСтроку(""); + + КонецЕсли; + + Если ВложенныеКоманды.Количество() > 0 Тогда + + //КонсольВывода.ЦветТекста = ЦветТекстаКонсоли; + КонсольВывода.ВывестиСтроку(СтрШаблон("%2Доступные команды:%1%2", Символы.Таб, Символы.ВК)); + + МаксимальнаяДлинаКоманд = 0; + + Для каждого ВложеннаяКоманда Из ВложенныеКоманды Цикл + НоваяДлина = СтрДлина(СтрСоединить(ВложеннаяКоманда.ПолучитьСинонимы(),", ")); + МаксимальнаяДлинаКоманд = ?(НоваяДлина > МаксимальнаяДлинаКоманд, НоваяДлина,МаксимальнаяДлинаКоманд); + КонецЦикла; + + Для каждого ВложеннаяКоманда Из ВложенныеКоманды Цикл + + ПредставлениеВлКоманды = СтрСоединить(ВложеннаяКоманда.ПолучитьСинонимы(),", "); + ТекущаяДлина = СтрДлина(ПредставлениеВлКоманды); + + КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК, ДополнитьСтрокуПробелами(ПредставлениеВлКоманды, МаксимальнаяДлинаКоманд - ТекущаяДлина) , ВложеннаяКоманда.ПолучитьОписание())); + + КонецЦикла; + + КонсольВывода.ВывестиСтроку(""); + + КонсольВывода.ВывестиСтроку(СтрШаблон("Для вывода справки по доступным командам наберите: %1 КОМАНДА %2", ПутьИспользования, "--help")); + + КонецЕсли; + + КонсольВывода = Неопределено; КонецПроцедуры +// Основная процедура запуска команды приложения +// +// Параметры: +// АргументыCLI - Массив - Элементы <Строка> +// Процедура Запуск(Знач АргументыCLI) Экспорт Если НужноВывестиСправку(АргументыCLI) Тогда @@ -182,12 +287,12 @@ КонецЕсли; ДействиеПередВыполнением.Исполнить(ЭтотОбъект); - + Если КонечныйИндексКоманды = АргументыCLI.ВГраница() Тогда - + Лог.Отладка("Выполняю полезную работу %1", Имя); ДействиеВыполнения.Исполнить(ЭтотОбъект); - + Возврат; КонецЕсли; @@ -222,7 +327,6 @@ ДействиеПослеВыполнения.Исполнить(ЭтотОбъект); - Если СтрНачинаетсяС(ПервыйАргумент,"-") Тогда ВывестиСправку(); @@ -236,6 +340,127 @@ КонецПроцедуры +// Функция проверяет строку, что она является ли синонимом текущей команды +// +// Параметры: +// СтрокаПроверки - строка - имя команды, для проверки +// +// Возвращаемое значение: +// булево - истина. если это синоним или имя текущей команды, иначе ложь +Функция ЭтоСинонимКоманды(СтрокаПроверки) Экспорт + Возврат Не Синонимы.Найти(СтрокаПроверки) = Неопределено; +КонецФункции + +// Процедура подготавливает команды к запуску +// Формирует строку использования и +// настраивает парсер для выполнения парсинга входящих параметров +// Обязательно вызывается пред выполнением команды +Процедура НачалоЗапуска() Экспорт + + КомандыРодителиДляПодчиненной = Новый Массив; + + Для каждого КомандаРодитель Из КомандыРодители Цикл + КомандыРодителиДляПодчиненной.Добавить(КомандаРодитель); + КонецЦикла; + + КомандыРодителиДляПодчиненной.Добавить(Имя); + + Для каждого Подчиненнаякоманда Из ВложенныеКоманды Цикл + Подчиненнаякоманда.КомандыРодители = КомандыРодителиДляПодчиненной; + КонецЦикла; + + ДобавитьОпцииВИндекс(); + ДобавитьАргументыВИндекс(); + + Лог.Отладка("Входящий спек: %1", Спек); + + Если ПустаяСтрока(Спек) Тогда + + Лог.Отладка("Количество опций строки: %1", Опции.Количество()); + Если Опции.Количество() > 0 Тогда + Спек = "[OPTIONS] "; + КонецЕсли; + Лог.Отладка("Количество аргументы строки: %1", Аргументы.Количество()); + Для каждого арг Из Аргументы Цикл + Если НЕ арг.Ключ.ПолучитьОбязательностьВвода() Тогда + Спек = Спек + "["+ арг.Ключ.Имя +"]"+ " "; + Продолжить; + КонецЕсли; + + Лог.Отладка("Добавляю аргумет <%1> в спек <%2>",арг.Ключ.Имя ,Спек); + Спек = Спек + арг.Ключ.Имя + " "; + КонецЦикла; + + КонецЕсли; + //Лог.Отладка("Читаю аргументы строки"); + + Лексер = Новый Лексер(Спек).Прочитать(); + Если Лексер.ЕстьОшибка() Тогда + Лексер.ВывестиИнформациюОбОшибке(); + ВызватьИсключение "Ошибка разбора строки использования"; + КонецЕсли; + + ТокеныПарсера = Лексер.ПолучитьТокены(); + + ПараметрыПарсера = Новый Структура; + ПараметрыПарсера.Вставить("Спек", Спек); + ПараметрыПарсера.Вставить("Опции", Опции); + ПараметрыПарсера.Вставить("Аргументы", Аргументы); + ПараметрыПарсера.Вставить("ОпцииИндекс", ОпцииИндекс); + ПараметрыПарсера.Вставить("АргументыИндекс", АргументыИндекс); + + парсер = Новый Парсер(ТокеныПарсера, ПараметрыПарсера); + НачальноеСостояние = парсер.Прочитать(); + +КонецПроцедуры + +// Функция добавляет опцию команды и возвращает экземпляр данной опции +// +// Параметры: +// Имя - строка - имя опции, в строке допустимо задавать синоним через пробел, например "s some-opt" +// Значение - строка - значение опции по умолчанию +// Описание - объект - описание опции для справки. +// +// Возвращаемое значение: +// Команда - класс ПараметрКоманды +// +// Дополнительно смотри справку по классу ПараметрКоманды +Функция Опция(Имя, Значение = "", Описание = "") Экспорт + + НоваяОпция = Новый ПараметрКоманды("опция", Имя, Значение, Описание); + Опции.Вставить(НоваяОпция, НоваяОпция); + + + Возврат НоваяОпция; + +КонецФункции + +// Функция добавляет аргумент команды и возвращает экземпляр данной аргумента +// +// Параметры: +// Имя - строка - имя аргумента, в строке допустимо использование только из БОЛЬШИХ латинских букв, например "ARG" +// Значение - строка - значение аргумента по умолчанию +// Описание - объект - описание аргумента для справки. +// +// Возвращаемое значение: +// Команда - класс ПараметрКоманды +// +// Дополнительно смотри справку по классу ПараметрКоманды +Функция Аргумент(Имя, Значение = "", Описание = "") Экспорт + + НовыйАргумент = Новый ПараметрКоманды("аргумент", Имя, Значение, Описание); + Аргументы.Вставить(НовыйАргумент, НовыйАргумент); + + Возврат НовыйАргумент; + +КонецФункции + +// Процедура устанавливает процедуру "ВыполнитьКоманду" выполнения для команды +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ВыполнитьКоманду" +// Процедура УстановитьДействиеВыполнения(КлассРеализации, ИмяПроцедуры = "ВыполнитьКоманду") Экспорт Если ПроверитьМетодВыполнитьКоманду(КлассРеализации, ИмяПроцедуры) Тогда @@ -246,13 +471,20 @@ КонецПроцедуры +// Процедура устанавливает процедуру "ПередВыполнениемКоманды" выполнения для команды +// запускаемую перед выполнением "ВыполнитьКоманду" +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПередВыполнениемКоманды" +// Процедура УстановитьДействиеПередВыполнением(КлассРеализации, ИмяПроцедуры = "ПередВыполнениемКоманды") Экспорт Лог.Отладка("Установка метода: перед выполнением класс <%1> имя процедуры <%2>", КлассРеализации, ИмяПроцедуры); - + Если НЕ ПроверитьМетодПередВыполнениемКоманды(КлассРеализации, ИмяПроцедуры) Тогда Лог.Отладка(" >> метод %2 у класс <%1> найден", КлассРеализации, ИмяПроцедуры); - + ДействиеПередВыполнением = Делегаты.Создать(КлассРеализации, ИмяПроцедуры); ИначеЕсли ДействиеПередВыполнением = Неопределено Тогда @@ -263,6 +495,13 @@ КонецПроцедуры +// Процедура устанавливает процедуру "ПослеВыполненияКоманды" выполнения для команды +// запускаемую после выполнением "ВыполнитьКоманду" +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПослеВыполненияКоманды" +// Процедура УстановитьДействиеПослеВыполнения(КлассРеализации, ИмяПроцедуры = "ПослеВыполненияКоманды") Экспорт Лог.Отладка("Установка метода: после выполнением класс <%1> имя процедуры <%2>", КлассРеализации, ИмяПроцедуры); @@ -270,7 +509,7 @@ Если НЕ ПроверитьМетодПослеВыполнениемКоманды(КлассРеализации, ИмяПроцедуры) Тогда Лог.Отладка(" >> метод %2 у класс <%1> найден", КлассРеализации, ИмяПроцедуры); - + ДействиеПослеВыполнения = Делегаты.Создать(КлассРеализации, ИмяПроцедуры); ИначеЕсли ДействиеПослеВыполнения = Неопределено Тогда @@ -282,99 +521,185 @@ КонецПроцедуры -Процедура ВывестиСправку() Экспорт +#Область Работа с входящими аргументами - КонсольВывода = Новый Консоль; +Процедура ОчиститьАргументы(АргументыCLI) - // ЦветТекстаКонсоли = КонсольВывода.ЦветТекста; + НовыйМассивАргументов = Новый Массив; - Представление = ?(КомандыРодители.Количество()>0, "Команда", "Приложение"); + Для каждого арг Из АргументыCLI Цикл - КонсольВывода.ВывестиСтроку(СтрШаблон("%1: %2 - | %3", Представление, СтрСоединить(Синонимы, ", "), ?(ПустаяСтрока(ПодробноеОписание), Описание, ПодробноеОписание))); - КонсольВывода.ВывестиСтроку(""); + Если ПустаяСтрока(арг) Тогда + Продолжить; + КонецЕсли; - ПолныйПуть = Новый Массив; + НовыйМассивАргументов.Добавить(арг); - Для каждого Родитель Из КомандыРодители Цикл - ПолныйПуть.Добавить(Родитель); КонецЦикла; - ПолныйПуть.Добавить(СокрЛП(Имя)); - ПутьИспользования = СтрСоединить(ПолныйПуть," "); - СуффиксВложенныхКоманды = ""; - Если ВложенныеКоманды.Количество() > 0 Тогда + АргументыCLI = Новый ФиксированныйМассив(НовыйМассивАргументов) - СуффиксВложенныхКоманды = "КОМАНДА [аргументы...]"; +КонецПроцедуры +Функция ФлагУстановлен(Знач АргументыCLI, Знач Флаг) + + Если АргументыCLI.Количество() = 0 Тогда + Возврат Ложь; КонецЕсли; - КонсольВывода.ВывестиСтроку(СтрШаблон("Строка запуска: %1 %2 %3",ПутьИспользования, СокрЛП(Спек), СуффиксВложенныхКоманды)); + Возврат АргументыCLI[0] = Флаг; - КонсольВывода.ВывестиСтроку(""); +КонецФункции - Если Аргументы.Количество() > 0 Тогда +Функция ПолучитьОпцииИАргументы(Знач АргументыCLI) - //КонсольВывода.ЦветТекста = ЦветТекстаКонсоли; - КонсольВывода.ВывестиСтроку(СтрШаблон("%2Аргументы:%1%2", Символы.Таб, Символы.ВК)); - ТаблицаОпций = ТаблицаАргументовДляСправки(); - Для каждого СтрокаТаблицы Из ТаблицаОпций Цикл + ПоследнийИндекс = -1; + Лог.Отладка("Приверяю аргументы. Количество %1", АргументыCLI.Количество()); - КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК,СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание)); + Для каждого ТекущийАргумент Из АргументыCLI Цикл - КонецЦикла; + Для каждого ВложеннаяКоманда Из ВложенныеКоманды Цикл - КонсольВывода.ВывестиСтроку(""); + Лог.Отладка("Ищу подчиненную команду %1", ВложеннаяКоманда.ПолучитьИмяКоманды()); + Если ВложеннаяКоманда.ЭтоСинонимКоманды(ТекущийАргумент) Тогда + Лог.Отладка("Подчиненная команда %1 найдена", ВложеннаяКоманда.ПолучитьИмяКоманды()); + Возврат ПоследнийИндекс; + КонецЕсли; - КонецЕсли; + КонецЦикла; + ПоследнийИндекс = ПоследнийИндекс +1; - Если Опции.Количество() > 0 Тогда + КонецЦикла; - //КонсольВывода.ЦветТекста = ЦветТекстаКонсоли; - КонсольВывода.ВывестиСтроку(СтрШаблон("%2Параметры:%1%2", Символы.Таб, Символы.ВК)); - ТаблицаОпций = ТаблицаОпцийДляСправки(); - Для каждого СтрокаТаблицы Из ТаблицаОпций Цикл + Возврат ПоследнийИндекс; - КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК,СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание)); +КонецФункции - КонецЦикла; - КонсольВывода.ВывестиСтроку(""); +#КонецОбласти - КонецЕсли; +#Область Работа с индексом опций и аргументов +Процедура ДобавитьОпцииВИндекс() - Если ВложенныеКоманды.Количество() > 0 Тогда + Для каждого КлючЗначение Из Опции Цикл - //КонсольВывода.ЦветТекста = ЦветТекстаКонсоли; - КонсольВывода.ВывестиСтроку(СтрШаблон("%2Доступные команды:%1%2", Символы.Таб, Символы.ВК)); + КлассОпции = КлючЗначение.Ключ; + КлассОпции.ИзПеременнойОкружения(); - МаксимальнаяДлинаКоманд = 0; + Для каждого ИмяПараметра Из КлассОпции.НаименованияПараметров Цикл + + ОпцииИндекс.Вставить(ИмяПараметра, КлассОпции); - Для каждого ВложеннаяКоманда Из ВложенныеКоманды Цикл - НоваяДлина = СтрДлина(СтрСоединить(ВложеннаяКоманда.ПолучитьСинонимы(),", ")); - МаксимальнаяДлинаКоманд = ?(НоваяДлина > МаксимальнаяДлинаКоманд, НоваяДлина,МаксимальнаяДлинаКоманд); КонецЦикла; - - Для каждого ВложеннаяКоманда Из ВложенныеКоманды Цикл + КонецЦикла; - ПредставлениеВлКоманды = СтрСоединить(ВложеннаяКоманда.ПолучитьСинонимы(),", "); - ТекущаяДлина = СтрДлина(ПредставлениеВлКоманды); +КонецПроцедуры - КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК, ДополнитьСтрокуПробелами(ПредставлениеВлКоманды, МаксимальнаяДлинаКоманд - ТекущаяДлина) , ВложеннаяКоманда.ПолучитьОписание())); +Процедура ДобавитьАргументыВИндекс() + + Для каждого КлючЗначение Из Аргументы Цикл + + КлассАргумента = КлючЗначение.Ключ; + КлассАргумента.ИзПеременнойОкружения(); + + Для каждого ИмяПараметра Из КлассАргумента.НаименованияПараметров Цикл + + АргументыИндекс.Вставить(ИмяПараметра, КлассАргумента); КонецЦикла; - КонсольВывода.ВывестиСтроку(""); + КонецЦикла; - КонсольВывода.ВывестиСтроку(СтрШаблон("Для вывода справки по доступным командам наберите: %1 КОМАНДА %2", ПутьИспользования, "--help")); +КонецПроцедуры +#КонецОбласти + +#Область Работа с рефлектором объектов + +Функция ВыполнитьОписаниеКоманды(КлассКоманды, Подкоманда) + + Если ПроверитьМетодОписаниеКоманды(КлассКоманды) Тогда + Возврат Подкоманда; КонецЕсли; - КонсольВывода = Неопределено; + ПараметрыВыполнения = Новый Массив; + ПараметрыВыполнения.Добавить(Подкоманда); -КонецПроцедуры + ОписаниеКоманды = Делегаты.Создать(КлассКоманды, "ОписаниеКоманды"); + ОписаниеКоманды.Исполнить(ПараметрыВыполнения); + + Возврат ПараметрыВыполнения[0]; + +КонецФункции + +Функция ПроверитьМетодВыполнитьКоманду(ПроверяемыйКласс, ИмяПроцедуры) + + Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры , 1, Ложь); + +КонецФункции + +Функция ПроверитьМетодПередВыполнениемКоманды(ПроверяемыйКласс, ИмяПроцедуры) + + Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры, 1, Ложь); + +КонецФункции + +Функция ПроверитьМетодПослеВыполнениемКоманды(ПроверяемыйКласс, ИмяПроцедуры) + + Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры, 1, Ложь); + +КонецФункции + +Функция ПроверитьМетодОписаниеКоманды(ПроверяемыйКласс) + + Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, "ОписаниеКоманды", 1, Ложь); + +КонецФункции + +Функция ПроверитьМетодКласса(Знач ПроверяемыйКласс, + Знач ИмяМетода, + Знач ТребуемоеКоличествоПараметров = 0, + Знач ЭтоФункция = Ложь) + + ЕстьМетод = РефлекторПроверкиКоманд.МетодСуществует(ПроверяемыйКласс, ИмяМетода); + Лог.Отладка("Проверяемый метод <%1> найден: %2", ИмяМетода, ЕстьМетод); + Если Не ЕстьМетод Тогда + Возврат Ложь; + КонецЕсли; + + ТаблицаМетодов = РефлекторПроверкиКоманд.ПолучитьТаблицуМетодов(ПроверяемыйКласс); + + СтрокаМетода = ТаблицаМетодов.Найти(ИмяМетода, "Имя"); + Лог.Отладка("Поиск строки в таблице методов класса <%1> найдена: %2, общее количество методов класса: %3", ПроверяемыйКласс, НЕ СтрокаМетода = Неопределено, ТаблицаМетодов.Количество()); + Если СтрокаМетода = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + ПроверкаНаФункцию = ЭтоФункция = СтрокаМетода.ЭтоФункция; + ПроверкаНаКоличествоПараметров = ТребуемоеКоличествоПараметров = СтрокаМетода.КоличествоПараметров; + + Лог.Отладка("Проверяемый метод <%1> корректен: %2", ИмяМетода, ПроверкаНаФункцию И ПроверкаНаКоличествоПараметров); + Возврат ПроверкаНаФункцию + И ПроверкаНаКоличествоПараметров; + +КонецФункции // ПроверитьМетодУКласса() + +#КонецОбласти + +#Область Работа со справкой + +Функция НужноВывестиСправку(Знач АргументыCLI) + + Если АргументыCLI.Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; + + Лог.Отладка("Вывожу справку: %1", ФлагУстановлен(АргументыCLI, "--help")); + Возврат ФлагУстановлен(АргументыCLI, "--help"); + +КонецФункции Функция ТаблицаАргументовДляСправки() @@ -484,7 +809,6 @@ КонецФункции - Функция ФорматироватьИмяОпцииДляСправки(Знач КлассОпции) КороткоеНаименование = ""; @@ -553,264 +877,46 @@ КонецФункции -Функция ЭтоСинонимКоманды(СтрокаПроверки) Экспорт - Возврат Не Синонимы.Найти(СтрокаПроверки) = Неопределено; -КонецФункции - -Процедура НачалоЗапуска() Экспорт - - КомандыРодителиДляПодчиненной = Новый Массив; - - Для каждого КомандаРодитель Из КомандыРодители Цикл - КомандыРодителиДляПодчиненной.Добавить(КомандаРодитель); - КонецЦикла; - - КомандыРодителиДляПодчиненной.Добавить(Имя); - - Для каждого Подчиненнаякоманда Из ВложенныеКоманды Цикл - Подчиненнаякоманда.КомандыРодители = КомандыРодителиДляПодчиненной; - КонецЦикла; +#КонецОбласти - ДобавитьОпцииВИндекс(); - ДобавитьАргументыВИндекс(); - - Лог.Отладка("Входящий спек: %1", Спек); +#Область Вспомогательные процедуры и функции - Если ПустаяСтрока(Спек) Тогда - - Лог.Отладка("Количество опций строки: %1", Опции.Количество()); - Если Опции.Количество() > 0 Тогда - Спек = "[OPTIONS] "; - КонецЕсли; - Лог.Отладка("Количество аргументы строки: %1", Аргументы.Количество()); - Для каждого арг Из Аргументы Цикл - Если НЕ арг.Ключ.ПолучитьОбязательностьВвода() Тогда - Спек = Спек + "["+ арг.Ключ.Имя +"]"+ " "; - Продолжить; - КонецЕсли; - - Лог.Отладка("Добавляю аргумет <%1> в спек <%2>",арг.Ключ.Имя ,Спек); - Спек = Спек + арг.Ключ.Имя + " "; - КонецЦикла; - - КонецЕсли; - //Лог.Отладка("Читаю аргументы строки"); - - Лексер = Новый Лексер(Спек).Прочитать(); - Если Лексер.ЕстьОшибка() Тогда - Лексер.ВывестиИнформациюОбОшибке(); - ВызватьИсключение "Ошибка разбора строки использования"; - КонецЕсли; - - ТокеныПарсера = Лексер.ПолучитьТокены(); - - ПараметрыПарсера = Новый Структура; - ПараметрыПарсера.Вставить("Спек", Спек); - ПараметрыПарсера.Вставить("Опции", Опции); - ПараметрыПарсера.Вставить("Аргументы", Аргументы); - ПараметрыПарсера.Вставить("ОпцииИндекс", ОпцииИндекс); - ПараметрыПарсера.Вставить("АргументыИндекс", АргументыИндекс); - - парсер = Новый Парсер(ТокеныПарсера, ПараметрыПарсера); - НачальноеСостояние = парсер.Прочитать(); - -КонецПроцедуры - -Функция Опция(Имя, Значение = "", Описание = "") Экспорт - - НоваяОпция = Новый ПараметрКоманды("опция", Имя, Значение, Описание); - Опции.Вставить(НоваяОпция, НоваяОпция); - - - Возврат НоваяОпция; - -КонецФункции - -Функция Аргумент(Имя, Значение = "", Описание = "") Экспорт - - НовыйАргумент = Новый ПараметрКоманды("аргумент", Имя, Значение, Описание); - Аргументы.Вставить(НовыйАргумент, НовыйАргумент); - - Возврат НовыйАргумент; - -КонецФункции - -Процедура ДобавитьОпцию(КлассОпции) Экспорт - - Опции.Вставить(КлассОпции, КлассОпции); - -КонецПроцедуры - -Процедура ДобавитьАргумент(КлассАргумент) Экспорт - - Аргументы.Вставить(КлассАргумент, КлассАргумент); - -КонецПроцедуры - -Функция ПолучитьОпцииИАргументы(Знач АргументыCLI) - - ПоследнийИндекс = -1; - Лог.Отладка("Приверяю аргументы. Количество %1", АргументыCLI.Количество()); - - Для каждого ТекущийАргумент Из АргументыCLI Цикл - - Для каждого ВложеннаяКоманда Из ВложенныеКоманды Цикл - - Лог.Отладка("Ищу подчиненную команду %1", ВложеннаяКоманда.ПолучитьИмяКоманды()); - Если ВложеннаяКоманда.ЭтоСинонимКоманды(ТекущийАргумент) Тогда - Лог.Отладка("Подчиненная команда %1 найдена", ВложеннаяКоманда.ПолучитьИмяКоманды()); - Возврат ПоследнийИндекс; - КонецЕсли; - - КонецЦикла; - - ПоследнийИндекс = ПоследнийИндекс +1; - - КонецЦикла; - - Возврат ПоследнийИндекс; - -КонецФункции - -Процедура ДобавитьОпцииВИндекс() - - Для каждого КлючЗначение Из Опции Цикл - - КлассОпции = КлючЗначение.Ключ; - КлассОпции.ИзПеременнойОкружения(); - - Для каждого ИмяПараметра Из КлассОпции.НаименованияПараметров Цикл - - ОпцииИндекс.Вставить(ИмяПараметра, КлассОпции); - - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры - -Процедура ДобавитьАргументыВИндекс() - - Для каждого КлючЗначение Из Аргументы Цикл - - КлассАргумента = КлючЗначение.Ключ; - КлассАргумента.ИзПеременнойОкружения(); - - Для каждого ИмяПараметра Из КлассАргумента.НаименованияПараметров Цикл - - АргументыИндекс.Вставить(ИмяПараметра, КлассАргумента); - - КонецЦикла; +Процедура ВывестиВерсию() - КонецЦикла; + Сообщить(Приложение.ВерсияПриложения); КонецПроцедуры -Функция ВыполнитьОписаниеКоманды(КлассКоманды, Подкоманда) - - Если ПроверитьМетодОписаниеКоманды(КлассКоманды) Тогда - Возврат Подкоманда; - КонецЕсли; - - ПараметрыВыполнения = Новый Массив; - ПараметрыВыполнения.Добавить(Подкоманда); - - ОписаниеКоманды = Делегаты.Создать(КлассКоманды, "ОписаниеКоманды"); - ОписаниеКоманды.Исполнить(ПараметрыВыполнения); - - Возврат ПараметрыВыполнения[0]; - -КонецФункции - - -Функция ПроверитьМетодВыполнитьКоманду(ПроверяемыйКласс, ИмяПроцедуры) - - Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры , 1, Ложь); - -КонецФункции - -Функция ПроверитьМетодПередВыполнениемКоманды(ПроверяемыйКласс, ИмяПроцедуры) - - Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры, 1, Ложь); - -КонецФункции - -Функция ПроверитьМетодПослеВыполнениемКоманды(ПроверяемыйКласс, ИмяПроцедуры) - - Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры, 1, Ложь); - -КонецФункции - -Функция ПроверитьМетодОписаниеКоманды(ПроверяемыйКласс) - - Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, "ОписаниеКоманды", 1, Ложь); - -КонецФункции - -Функция НужноВывестиСправку(Знач АргументыCLI) - - Если АргументыCLI.Количество() = 0 Тогда - Возврат Ложь; - КонецЕсли; - - Лог.Отладка("Вывожу справку: %1", ФлагУстановлен(АргументыCLI, "--help")); - Возврат ФлагУстановлен(АргументыCLI, "--help"); - -КонецФункции - -Функция ФлагУстановлен(Знач АргументыCLI, Знач Флаг) - - Если АргументыCLI.Количество() = 0 Тогда - Возврат Ложь; - КонецЕсли; - - Возврат АргументыCLI[0] = Флаг; - -КонецФункции - -Функция ПроверитьМетодКласса(Знач ПроверяемыйКласс, - Знач ИмяМетода, - Знач ТребуемоеКоличествоПараметров = 0, - Знач ЭтоФункция = Ложь) +#КонецОбласти - ЕстьМетод = РефлекторПроверкиКоманд.МетодСуществует(ПроверяемыйКласс, ИмяМетода); - Лог.Отладка("Проверяемый метод <%1> найден: %2", ИмяМетода, ЕстьМетод); - Если Не ЕстьМетод Тогда - Возврат Ложь; - КонецЕсли; - - ТаблицаМетодов = РефлекторПроверкиКоманд.ПолучитьТаблицуМетодов(ПроверяемыйКласс); - - СтрокаМетода = ТаблицаМетодов.Найти(ИмяМетода, "Имя"); - Лог.Отладка("Поиск строки в таблице методов класса <%1> найдена: %2, общее количество методов класса: %3", ПроверяемыйКласс, НЕ СтрокаМетода = Неопределено, ТаблицаМетодов.Количество()); - Если СтрокаМетода = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - ПроверкаНаФункцию = ЭтоФункция = СтрокаМетода.ЭтоФункция; - ПроверкаНаКоличествоПараметров = ТребуемоеКоличествоПараметров = СтрокаМетода.КоличествоПараметров; - - Лог.Отладка("Проверяемый метод <%1> корректен: %2", ИмяМетода, ПроверкаНаФункцию И ПроверкаНаКоличествоПараметров); - Возврат ПроверкаНаФункцию - И ПроверкаНаКоличествоПараметров; +Процедура ПриСозданииОбъекта(ИмяКоманды, ОписаниеКоманды, КлассРеализацииКоманды, ПриложениеКоманды = Неопределено) -КонецФункции // ПроверитьМетодУКласса() + Синонимы = СтрРазделить(ИмяКоманды, " ", Ложь); + Имя = Синонимы[0]; + Описание = ОписаниеКоманды; + КлассРеализации = КлассРеализацииКоманды; -Процедура ОчиститьАргументы(АргументыCLI) + ВложенныеКоманды = Новый Массив; + КомандыРодители = Новый Массив; + Опции = Новый Соответствие; + Аргументы = Новый Соответствие; - НовыйМассивАргументов = Новый Массив; + ОпцииИндекс = Новый Соответствие; + АргументыИндекс = Новый Соответствие; - Для каждого арг Из АргументыCLI Цикл + Приложение = ПриложениеКоманды; - Если ПустаяСтрока(арг) Тогда - Продолжить; - КонецЕсли; + Спек = ""; + ПодробноеОписание = ""; - НовыйМассивАргументов.Добавить(арг); + РефлекторПроверкиКоманд = Новый Рефлектор; - КонецЦикла; + ДействиеПередВыполнением = Неопределено; + ДействиеПослеВыполнения = Неопределено; - АргументыCLI = Новый ФиксированныйМассив(НовыйМассивАргументов) + УстановитьДействиеВыполнения(КлассРеализацииКоманды); + УстановитьДействиеПередВыполнением(КлассРеализацииКоманды); + УстановитьДействиеПослеВыполнения(КлассРеализацииКоманды); КонецПроцедуры diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/cmd/\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/cmd/\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 f8c81fd..d8b2b6f 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/cmd/\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/cmd/\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" @@ -1,30 +1,56 @@ +// Имя параметра команды +// первая строка из массива строк, переданных при создании Перем Имя экспорт; // Строка + +// Описание параметра команды +// Используется при выводе справки Перем Описание Экспорт; // Строка -Перем ПодробноеОписание Экспорт; // Строка +// Подробное описание параметра команды +// Используется при выводе справки (запланировано) +Перем ПодробноеОписание Экспорт; // Строка + +// Содержит имя переменной окружения, откуда получать значение +// допустимо использование нескольких переменных окружения через пробел +// Используется при выводе справки Перем ПеременнаяОкружения Экспорт; // Строка -Перем Синонимы Экспорт; // Массив -Перем СкрытьЗначение Экспорт; // булево (скрывает в справке) +// Содержит синонимов параметра команды +Перем Синонимы Экспорт; // Массив + +// Содержит нормализованные наименования параметров +// для опций ("f force"): +// "-f", "--force" +// для аргументов ("ARG"): +// "ARG" +Перем НаименованияПараметров Экспорт; // Массив + +// Определяет необходимость показа значения по умолчанию параметра в справке. +// Значение "Истина" скрывает в справке, по умолчанию "Ложь" +Перем СкрытьЗначение Экспорт; // булево + +// Содержит признак истина, если значение получено из переменной окружения Перем УстановленаИзПеременнойОкружения Экспорт; // булево -Перем УстановленаПользователем Экспорт; // булево -Перем Значение Экспорт; //Значение по умолчанию -Перем ТипОпции Экспорт; -Перем ТипЭлементаОпции; -Перем ПеременнаяВыгрузки; -Перем ПеременнаяВыгрузкиУстановлена; +// Содержит признак истина, если значение установлено пользователем в строке использования +Перем УстановленаПользователем Экспорт; // булево +// Признак обязательности установки значения пользователем в строке использования +// при "истина", если значение не передано явно, будет вызывать исключение Перем ТребоватьУстановкиПользователем Экспорт; -Перем НеОбязательныйПараметр; - -Перем НаименованияПараметров Экспорт; +// Содержит значение параметра +// В том числе установленное значение по умолчанию +Перем Значение Экспорт; // Произвольный -Перем ТипПараметра; // Опция и аргумент +// Содержит тип параметра +Перем ТипОпции Экспорт; // Тип +Перем ТипЭлементаОпции; // Тип, для элементов, если ТипОпции = Тип("Массив") +Перем НеОбязательныйПараметр; // Булево +Перем ТипПараметра; // Опция и аргумент Перем ТипЗначенияПараметра; // Произвольный класс реализуемые несколько обязательных методов -Перем РазделительМассива; +Перем РазделительМассива; // Строка Процедура ПриСозданииОбъекта(ВходящийТипПараметра, ПолноеИмя, ЗначениеПоУмолчанию = "", ОписаниеПараметра = "", ПеременнаяОкруженияПараметра = "") @@ -37,7 +63,7 @@ ТипОпции = ТипЗнч(ЗначениеПоУмолчанию); ТипЭлементаОпции = ТипОпции; - Если ТипОпции = Тип("Булево") + Если ТипОпции = Тип("Булево") ИЛИ НЕ ВходящийТипПараметра = "опция"Тогда СкрытьЗначение = Истина; КонецЕсли; @@ -51,15 +77,13 @@ УстановленаПользователем = Ложь; УстановленаИзПеременнойОкружения = Ложь; - - ПеременнаяВыгрузкиУстановлена = Ложь; - + НеОбязательныйПараметр = Истина; Если ВходящийТипПараметра = "аргумент" Тогда НеОбязательныйПараметр = Ложь; КонецЕсли; - + ТипПараметра = ВходящийТипПараметра; РазделительМассива = Неопределено; @@ -67,29 +91,58 @@ КонецПроцедуры +// Возвращает истина, если тип параметра Массив +// +// Возвращаемое значение: +// булево Функция ЭтоМассив() Экспорт - //Сообщить(Тип("Массив") + " " + ТипЗнч(ТипОпции)) + Возврат ТипОпции = Тип("Массив"); - + КонецФункции +// Процедура очищает, Значение параметра, для типа Массив +// Процедура Очистить() Экспорт - + + Если Не ЭтоМассив() Тогда + Возврат; + КонецЕсли; + Значение.Очистить(); КонецПроцедуры +// Возвращает строковое представление значения параметра +// +// Возвращаемое значение: +// строка Функция ЗначениеВСтроку() Экспорт Возврат ТипЗначенияПараметра.ВСтроку(Значение); - + +КонецФункции + +// Возвращает истина, если данный параметр обязателен для указания +// +// Возвращаемое значение: +// булево +Функция ПолучитьОбязательностьВвода() Экспорт + + Возврат НЕ НеОбязательныйПараметр; + КонецФункции +// Процедура устанавливает значение параметра из входящего значения +// приводить к необходимому типу +// +// Параметры: +// ВходящееЗначение - строка - полученная строка при парсинге строки использования Процедура УстановитьЗначение(ВходящееЗначение) Экспорт - Если ЭтоМассив() + Если ЭтоМассив() И Не РазделительМассива = Неопределено Тогда - + МассивСтрок = СтрРазделить(ВходящееЗначение, РазделительМассива); Для каждого ЭлементМассива Из МассивСтрок Цикл Значение = ТипЗначенияПараметра.УстановитьЗначение(ВходящееЗначение, Значение); @@ -99,14 +152,12 @@ Значение = ТипЗначенияПараметра.УстановитьЗначение(ВходящееЗначение, Значение); КонецЕсли; - УстановленаПользователем = Истина; - Если ПеременнаяВыгрузкиУстановлена Тогда - СсылкаНаПеременную = Значение; - КонецЕсли; -КонецПроцедуры +КонецПроцедуры +// Процедура устанавливает значение параметра из переменной окружения +// Процедура ИзПеременнойОкружения() Экспорт Если ПустаяСтрока(ПеременнаяОкружения) Тогда @@ -114,22 +165,34 @@ КонецЕсли; МассивПеременныхОК = СтрРазделить(ПеременнаяОкружения, " "); - + Для каждого ПеременнаяО Из МассивПеременныхОК Цикл - ЗначениеИзПеременнойОкружения = ПолучитьПеременнуюСреды(ПеременнаяО); - + ЗначениеИзПеременнойОкружения = ПолучитьПеременнуюСреды(ПеременнаяО); + Если ЗначениеЗаполнено(ЗначениеИзПеременнойОкружения) Тогда - + УстановленаИзПеременнойОкружения = Истина; УстановитьЗначение(ЗначениеИзПеременнойОкружения); КонецЕсли; КонецЦикла; - + + УстановленаПользователем = Ложь; + КонецПроцедуры +#Область Текучих функций + +// Функция устанавливает переменную окружения для параметра команды +// возвращает текущий параметр команды +// +// Параметры: +// СтрокаПеременнаяОкружения - строка - имя переменной окружения, откуда получать значение +// допустимо использование нескольких переменных окружения через пробел +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды Функция ВОкружении(Знач СтрокаПеременнаяОкружения) Экспорт ПеременнаяОкружения = СтрокаПеременнаяОкружения; @@ -138,170 +201,300 @@ КонецФункции +// Функция устанавливает признак скрытости значения по умолчанию в справке +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды Функция СкрытьВСправке() Экспорт - + СкрытьЗначение = Истина; Возврат ЭтотОбъект; - + КонецФункции +// Функция устанавливает значение по умолчанию +// возвращает текущий параметр команды +// +// Параметры: +// ВходящееЗначение - произвольный - значение параметра по умолчанию +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды Функция ПоУмолчанию(ВходящееЗначение) Экспорт - + Значение = ВходящееЗначение; Возврат ЭтотОбъект; - + КонецФункции +// Функция устанавливает тип параметра "Булево" +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию Функция Флаговый() Экспорт - - ТипОпции = Тип("Булево"); - ТипЭлементаОпции = Тип("Булево"); - СкрытьЗначение = Истина; - ТипЗначенияПараметра = Новый ТипБулево(); - Возврат ЭтотОбъект; - + Возврат ТБулево(); + КонецФункции +// Функция устанавливает тип параметра "Булево" +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию Функция Флаг() Экспорт - + + Возврат ТБулево(); + +КонецФункции + +// Функция устанавливает тип параметра "Булево" +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию +Функция ТБулево() Экспорт + ТипОпции = Тип("Булево"); ТипЭлементаОпции = Тип("Булево"); СкрытьЗначение = Истина; - ТипЗначенияПараметра = Новый ТипБулево(); + ТипЗначенияПараметра = Новый ТипБулево(); Возврат ЭтотОбъект; - + КонецФункции +// Функция устанавливает тип параметра "Дата" +// возвращает текущий параметр команды +// +// Параметры: +// ФорматДаты - Строка - формат даты, при приведении к дате из строки параметра по умолчанию (yyyy-MM-dd_HH:mm:ss) +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию Функция ТДата(Знач ФорматДаты = "yyyy-MM-dd_HH:mm:ss" ) Экспорт - + ТипОпции = Тип("Дата"); ТипЭлементаОпции = Тип("Дата"); - ТипЗначенияПараметра = Новый ТипДатаВремя(ФорматДаты); - + ТипЗначенияПараметра = Новый ТипДатаВремя(ФорматДаты); + Возврат ЭтотОбъект; - + КонецФункции -Функция ПроизвольныйТип(Знач ТипЗначенияПараметра, Знач ТипОпции, ТипЭлементаОпции = Неопределено) Экспорт - - ТипОпции = ТипОпции; - ТипЭлементаОпции = ТипЭлементаОпции; - ТипЗначенияПараметра = ТипЗначенияПараметра; - +// Функция устанавливает тип параметра "Число" +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию +Функция ТЧисло() Экспорт + + ТипОпции = Тип("Число"); + ТипЭлементаОпции = ТипОпции; + ТипЗначенияПараметра = Новый ТипЧисло(); + Возврат ЭтотОбъект; + +КонецФункции + +// Функция устанавливает тип параметра "Строка" +// возвращает текущий параметр команды +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +// Вызов необязателен, автоматически определяется при создании параметра, +// если передано значение по умолчанию +Функция ТСтрока() Экспорт + + ТипОпции = Тип("Строка"); + ТипЭлементаОпции = ТипОпции; + ТипЗначенияПараметра = Новый ТипСтрока(); Возврат ЭтотОбъект; - + КонецФункции +// Функция устанавливает тип параметра "Массив" элементы "Дата" +// возвращает текущий параметр команды +// +// Параметры: +// ФорматДаты - Строка - формат даты, при приведении к дате из строки параметра по умолчанию (yyyy-MM-dd_HH:mm:ss) +// ВходящийРазделительМассива - символ - используется для разделения параметров при парсинге строки +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды Функция ТМассивДат(Знач ФорматДаты = "yyyy-MM-dd_HH:mm:ss", Знач ВходящийРазделительМассива = Неопределено) Экспорт - + ТипОпции = Тип("Массив"); ТипЭлементаОпции = Тип("Дата"); - ТипЗначенияПараметра = Новый ТипМассивДат(ФорматДаты); + ТипЗначенияПараметра = Новый ТипМассивДат(ФорматДаты); Значение = Новый Массив; Если Не ВходящийРазделительМассива = Неопределено Тогда РазделительМассива = ВходящийРазделительМассива; КонецЕсли; Возврат ЭтотОбъект; - + КонецФункции +// Функция устанавливает тип параметра "Массив" элементы "Число" +// возвращает текущий параметр команды +// +// Параметры: +// ВходящийРазделительМассива - символ - используется для разделения параметров при парсинге строки +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды Функция ТМассивЧисел(Знач ВходящийРазделительМассива = Неопределено) Экспорт - + ТипОпции = Тип("Массив"); ТипЭлементаОпции = Тип("Число"); - ТипЗначенияПараметра = Новый ТипМассивЧисел(); + ТипЗначенияПараметра = Новый ТипМассивЧисел(); Значение = Новый Массив; Если Не ВходящийРазделительМассива = Неопределено Тогда РазделительМассива = ВходящийРазделительМассива; КонецЕсли; Возврат ЭтотОбъект; - + КонецФункции +// Функция устанавливает тип параметра "Массив" элементы "Строки" +// возвращает текущий параметр команды +// +// Параметры: +// ВходящийРазделительМассива - символ - используется для разделения параметров при парсинге строки +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды Функция ТМассивСтрок(Знач ВходящийРазделительМассива = Неопределено) Экспорт - + ТипОпции = Тип("Массив"); ТипЭлементаОпции = Тип("Строка"); - ТипЗначенияПараметра = Новый ТипМассивСтрок(); + ТипЗначенияПараметра = Новый ТипМассивСтрок(); Значение = Новый Массив; Если Не ВходящийРазделительМассива = Неопределено Тогда РазделительМассива = ВходящийРазделительМассива; КонецЕсли; Возврат ЭтотОбъект; - -КонецФункции -Функция ТЧисло() Экспорт - - ТипОпции = Тип("Число"); - ТипЭлементаОпции = ТипОпции; - ТипЗначенияПараметра = Новый ТипЧисло(); - Возврат ЭтотОбъект; - КонецФункции -Функция ТСтрока() Экспорт - - ТипОпции = Тип("Строка"); - ТипЭлементаОпции = ТипОпции; - ТипЗначенияПараметра = Новый ТипСтрока(); - Возврат ЭтотОбъект; - -КонецФункции +// Функция устанавливает описание параметра для справки +// возвращает текущий параметр команды +// +// Параметры: +// НовыеОписание - строка - строка с новым описанием, отличным от переданного в момент создания +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +Функция Описание(Знач НовыеОписание) Экспорт -Функция Описание(НовыеОписание) Экспорт - Описание = Описание; Возврат ЭтотОбъект; - -КонецФункции - -Функция ВПеременную(СсылкаНаПеременную) Экспорт - - ПеременнаяВыгрузки = СсылкаНаПеременную; - ПеременнаяВыгрузкиУстановлена = Истина; - - Возврат ЭтотОбъект; КонецФункции +// Функция устанавливает дополнительный синоним/псевдоним параметра для справки +// возвращает текущий параметр команды +// +// Параметры: +// СтрокаПсевдонима - строка - строка с новым псевдонимом, отличным от переданного в момент создания +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды Функция Псевдоним(СтрокаПсевдонима) Экспорт - + Если Синонимы.Найти(СтрокаПсевдонима) = Неопределено Тогда Синонимы.Добавить(СтрокаПсевдонима); ПодготовитьНаименованияПараметров(); КонецЕсли; - - Возврат ЭтотОбъект; -КонецФункции - -Функция ПолучитьОбязательностьВвода() Экспорт - - Возврат НЕ НеОбязательныйПараметр; + Возврат ЭтотОбъект; КонецФункции +// Функция устанавливает признак обязательности указания данного параметра +// возвращает текущий параметр команды +// +// Параметры: +// Признак - булево - признак обязательности указания данного параметра (по умолчанию Истина) +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды Функция Обязательный(Знач Признак = Истина) Экспорт - + ТребоватьУстановкиПользователем = Признак; НеОбязательныйПараметр = Не Признак; Возврат ЭтотОбъект; КонецФункции -Функция ВФайле(Знач ПутьКФайлу, Знач МестоВфайле) Экспорт - - //Переменная = Значение; +// (ЗАГОТОВКА) Функция устанавливает путь и место в файле при получении настроек +// возвращает текущий параметр команды +// +// Параметры: +// ПутьКФайлу - строка - путь к файлу для чтения +// МестоВФайле - строка - путь в файле, в формате "general.force" +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +Функция ВФайле(Знач ПутьКФайлу, Знач МестоВФайле) Экспорт + + Возврат ЭтотОбъект; + +КонецФункции + +// Функция устанавливает произвольный тип параметра +// возвращает текущий параметр команды +// +// Параметры: +// ВходящийКлассЗначенияПараметра - класс - Произвольный класс, реализующий ряд обязательных функций +// ВходящийТипПараметра - тип - тип значения параметра +// ВходящийТипЭлементаПараметра - Тип - тип элементов значения параметра, если тип Массив +// +// Возвращаемое значение: +// ЭтотОбъект - класс ПараметрКоманды +Функция ПроизвольныйТип(Знач ВходящийКлассЗначенияПараметра, Знач ВходящийТипПараметра, ВходящийТипЭлементаПараметра = Неопределено) Экспорт + + ТипОпции = ВходящийТипПараметра; + ТипЭлементаОпции = ТипЭлементаОпции; + ТипЗначенияПараметра = ВходящийКлассЗначенияПараметра; Возврат ЭтотОбъект; КонецФункции +#КонецОбласти + +Функция ВстроенныеТипЗначенийПараметров() + + ВстроенныеТипы = Новый Соответствие; + + ВстроенныеТипы.Вставить("Булево", Новый ТипБулево); + ВстроенныеТипы.Вставить("Число", Новый ТипЧисло); + ВстроенныеТипы.Вставить("Дата", Новый ТипДатаВремя); + //ВстроенныеТипы.Вставить("Длительность", Новый ТипДлительность); + ВстроенныеТипы.Вставить("Строка", Новый ТипСтрока); + //ВстроенныеТипы.Вставить("МассивДлительностей", Новый ТипМассивДлительностей); + ВстроенныеТипы.Вставить("МассивЧисел", Новый ТипМассивЧисел); + ВстроенныеТипы.Вставить("МассивСтрок", Новый ТипМассивСтрок); + ВстроенныеТипы.Вставить("МассивДат", Новый ТипМассивДат); + + Возврат ВстроенныеТипы; + +КонецФункции + Функция ПодготовитьНаименованияПараметров() НаименованияПараметров = Новый Массив; @@ -318,22 +511,4 @@ КонецЦикла; -КонецФункции - -Функция ВстроенныеТипЗначенийПараметров() Экспорт - - ВстроенныеТипы = Новый Соответствие; - - ВстроенныеТипы.Вставить("Булево", Новый ТипБулево); - ВстроенныеТипы.Вставить("Число", Новый ТипЧисло); - ВстроенныеТипы.Вставить("Дата", Новый ТипДатаВремя); - //ВстроенныеТипы.Вставить("Длительность", Новый ТипДлительность); - ВстроенныеТипы.Вставить("Строка", Новый ТипСтрока); - //ВстроенныеТипы.Вставить("МассивДлительностей", Новый ТипМассивДлительностей); - ВстроенныеТипы.Вставить("МассивЧисел", Новый ТипМассивЧисел); - ВстроенныеТипы.Вставить("МассивСтрок", Новый ТипМассивСтрок); - ВстроенныеТипы.Вставить("МассивДат", Новый ТипМассивДат); - - Возврат ВстроенныеТипы; - КонецФункции \ No newline at end of file diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/lexer/\320\233\320\265\320\272\321\201\320\265\321\200.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/lexer/\320\233\320\265\320\272\321\201\320\265\321\200.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/lexer/\320\233\320\265\320\272\321\201\320\265\321\200.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/lexer/\320\233\320\265\320\272\321\201\320\265\321\200.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\220\321\200\320\263\321\203\320\274\320\265\320\275\321\202\321\213\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\220\321\200\320\263\321\203\320\274\320\265\320\275\321\202\321\213\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\220\321\200\320\263\321\203\320\274\320\265\320\275\321\202\321\213\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\220\321\200\320\263\321\203\320\274\320\265\320\275\321\202\321\213\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\222\321\201\320\265\320\236\320\277\321\206\320\270\320\270\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\222\321\201\320\265\320\236\320\277\321\206\320\270\320\270\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\222\321\201\320\265\320\236\320\277\321\206\320\270\320\270\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\222\321\201\320\265\320\236\320\277\321\206\320\270\320\270\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\237\320\260\321\200\321\201\320\265\321\200\320\276\320\262.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\237\320\260\321\200\321\201\320\265\321\200\320\276\320\262.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\237\320\260\321\200\321\201\320\265\321\200\320\276\320\262.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\237\320\260\321\200\321\201\320\265\321\200\320\276\320\262.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\233\321\216\320\261\320\276\320\271\320\241\320\270\320\274\320\262\320\276\320\273.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\233\321\216\320\261\320\276\320\271\320\241\320\270\320\274\320\262\320\276\320\273.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\233\321\216\320\261\320\276\320\271\320\241\320\270\320\274\320\262\320\276\320\273.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\233\321\216\320\261\320\276\320\271\320\241\320\270\320\274\320\262\320\276\320\273.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\236\320\277\321\206\320\270\320\270\320\227\320\260\320\262\320\265\321\200\321\210\320\265\320\275\320\270\320\265\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\236\320\277\321\206\320\270\320\270\320\227\320\260\320\262\320\265\321\200\321\210\320\265\320\275\320\270\320\265\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\236\320\277\321\206\320\270\320\270\320\227\320\260\320\262\320\265\321\200\321\210\320\265\320\275\320\270\320\265\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\236\320\277\321\206\320\270\320\270\320\227\320\260\320\262\320\265\321\200\321\210\320\265\320\275\320\270\320\265\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\236\320\277\321\206\320\270\321\217\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\236\320\277\321\206\320\270\321\217\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\236\320\277\321\206\320\270\321\217\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\236\320\277\321\206\320\270\321\217\320\237\320\260\321\200\321\201\320\265\321\200\320\260.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\237\320\260\321\200\321\201\320\265\321\200.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\237\320\260\321\200\321\201\320\265\321\200.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/parser/\320\237\320\260\321\200\321\201\320\265\321\200.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/parser/\320\237\320\260\321\200\321\201\320\265\321\200.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/path/\320\222\321\213\320\261\320\276\321\200\320\241\320\276\320\262\320\277\320\260\320\264\320\265\320\275\320\270\320\271.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/path/\320\222\321\213\320\261\320\276\321\200\320\241\320\276\320\262\320\277\320\260\320\264\320\265\320\275\320\270\320\271.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/path/\320\222\321\213\320\261\320\276\321\200\320\241\320\276\320\262\320\277\320\260\320\264\320\265\320\275\320\270\320\271.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/path/\320\222\321\213\320\261\320\276\321\200\320\241\320\276\320\262\320\277\320\260\320\264\320\265\320\275\320\270\320\271.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/path/\320\241\320\276\320\262\320\277\320\260\320\264\320\265\320\275\320\270\320\265.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/path/\320\241\320\276\320\262\320\277\320\260\320\264\320\265\320\275\320\270\320\265.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/path/\320\241\320\276\320\262\320\277\320\260\320\264\320\265\320\275\320\270\320\265.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/path/\320\241\320\276\320\262\320\277\320\260\320\264\320\265\320\275\320\270\320\265.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/tools/\320\247\321\202\320\265\320\275\320\270\320\265\320\241\321\202\321\200\320\276\320\272\320\270.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/tools/\320\247\321\202\320\265\320\275\320\270\320\265\320\241\321\202\321\200\320\276\320\272\320\270.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/tools/\320\247\321\202\320\265\320\275\320\270\320\265\320\241\321\202\321\200\320\276\320\272\320\270.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/tools/\320\247\321\202\320\265\320\275\320\270\320\265\320\241\321\202\321\200\320\276\320\272\320\270.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\221\321\203\320\273\320\265\320\262\320\276.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\221\321\203\320\273\320\265\320\262\320\276.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\221\321\203\320\273\320\265\320\262\320\276.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\221\321\203\320\273\320\265\320\262\320\276.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\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\242\320\270\320\277\320\224\320\260\321\202\320\260\320\222\321\200\320\265\320\274\321\217.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\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" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\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" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\224\320\273\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\224\320\273\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\224\320\273\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\224\320\273\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\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\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\224\320\260\321\202.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\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" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\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" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\241\321\202\321\200\320\276\320\272.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\241\321\202\321\200\320\276\320\272.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\241\321\202\321\200\320\276\320\272.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\241\321\202\321\200\320\276\320\272.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\247\320\270\321\201\320\265\320\273.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\247\320\270\321\201\320\265\320\273.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\247\320\270\321\201\320\265\320\273.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262\320\247\320\270\321\201\320\265\320\273.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\241\321\202\321\200\320\276\320\272\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\241\321\202\321\200\320\276\320\272\320\260.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\241\321\202\321\200\320\276\320\272\320\260.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\241\321\202\321\200\320\276\320\272\320\260.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\247\320\270\321\201\320\273\320\276.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\247\320\270\321\201\320\273\320\276.os" similarity index 100% rename from "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/types/\320\242\320\270\320\277\320\247\320\270\321\201\320\273\320\276.os" rename to "src/core/\320\232\320\273\320\260\321\201\321\201\321\213/internal/types/\320\242\320\270\320\277\320\247\320\270\321\201\320\273\320\276.os" diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\320\276\320\265\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\265.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\320\276\320\265\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\265.os" index 2219a73..62b1780 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\320\276\320\265\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\265.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\320\276\320\265\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\265.os" @@ -1,33 +1,20 @@ -Перем Команда; +// Класс ПараметрКоманды, для доступа к установленному значению из вне +Перем ФлагВерсия Экспорт; +// Строковое представление версии приложения Перем ВерсияПриложения Экспорт; + +Перем Команда; Перем НаименованиеПриложения; Перем ОписаниеПриложения; -Перем ДействиеВыполнения Экспорт; -Перем ДействиеПередВыполнением Экспорт; -Перем ДействиеПослеВыполнения Экспорт; - -Перем ФлагВерсия Экспорт; - -Перем ТипОпцииКоманды; - -Процедура ПриСозданииОбъекта(Знач Наименование, Знач Описание, Знач КлассРеализацииОсновныйКоманды = Неопределено) - - НаименованиеПриложения = Наименование; - ОписаниеПриложения = Описание; - - Если КлассРеализацииОсновныйКоманды = Неопределено Тогда - КлассРеализацииОсновныйКоманды = ЭтотОбъект; - КонецЕсли; - - Команда = Новый КомандаПриложения(Наименование, Описание, КлассРеализацииОсновныйКоманды, ЭтотОбъект); - - ТипОпцииКоманды = Новый Структура; - ТипОпцииКоманды.Вставить("Опция", "Опция"); - ТипОпцииКоманды.Вставить("Аргумент", "Аргумент"); - -КонецПроцедуры +// Процедура добавляет версию приложения, +// при вызове данной опции, показывается установленная версия и +// завершается выполнение с кодом (0) +// +// Параметры: +// Наименование - строка - имя опции, в строке допустимо задавать синоним через пробел, например "v version" +// СтрокаВерсии - строка - версия, приложения Процедура Версия(Наименование, СтрокаВерсии) Экспорт ВерсияПриложения = СтрокаВерсии; @@ -35,18 +22,31 @@ КонецПроцедуры +// Процедура позволяет переопределить стандартную строку использования приложения +// +// Параметры: +// СтрокаСпек - строка - переопределенная строка использования приложения Процедура УстановитьСпек(Знач СтрокаСпек) Экспорт Команда.Спек = СтрокаСпек; КонецПроцедуры +// Возвращает основную команду приложения +// +// Возвращаемое значение: +// Команда - класс КомандаПриложения Функция ПолучитьКоманду() Экспорт Возврат Команда; КонецФункции +// Основная процедура запуска приложения +// +// Параметры: +// АргументыКоманднойСтрокиВходящие - Массив - Элементы <Строка>, необзательный, +// Если, не передано считывает из АргументыКоманднойСтроки Процедура Запустить(АргументыКоманднойСтрокиВходящие = Неопределено) Экспорт Аргументы = АргументыКоманднойСтроки; @@ -60,36 +60,101 @@ КонецПроцедуры +// Функция добавляет команду приложение и возвращает экземпляр данной команды +// +// Параметры: +// ИмяКоманды - строка - в строке допустимо задавать синоним через пробел, например "exec e" +// ОписаниеКоманды - строка - описание команды для справки +// КлассРеализацииКоманды - объект - класс, объект реализующий функции выполнения команды. +// Так же используется, для автоматической настройки опций и параметров команды +// +// Возвращаемое значение: +// Команда - класс КомандаПриложения Функция ДобавитьКоманду(ИмяКоманды, ОписаниеКоманды, КлассРеализацииКоманды) Экспорт Возврат Команда.ДобавитьПодкоманду(ИмяКоманды, ОписаниеКоманды, КлассРеализацииКоманды); КонецФункции +// Процедура устанавливает процедуру "ВыполнитьКоманду" выполнения для приложения +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ВыполнитьКоманду" +// Процедура УстановитьОсновноеДействие(КлассРеализации, ИмяПроцедуры = "ВыполнитьКоманду") Экспорт Команда.УстановитьДействиеВыполнения(КлассРеализации, ИмяПроцедуры); КонецПроцедуры +// Процедура устанавливает процедуру "ПередВыполнениемКоманды" выполнения для приложения +// запускаемую перед выполнением "ВыполнитьКоманду" +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПередВыполнениемКоманды" +// Процедура УстановитьДействиеПередВыполнением(КлассРеализации, ИмяПроцедуры = "ПередВыполнениемКоманды") Экспорт Команда.УстановитьДействиеПередВыполнением(КлассРеализации, ИмяПроцедуры); КонецПроцедуры +// Процедура устанавливает процедуру "ПослеВыполненияКоманды" выполнения для приложения +// запускаемую после выполнением "ВыполнитьКоманду" +// +// Параметры: +// КлассРеализации - объект - класс, объект реализующий процедуру выполнения команды. +// ИмяПроцедуры - строка - имя процедуры, отличное от стандартного "ПослеВыполненияКоманды" +// Процедура УстановитьДействиеПослеВыполнения(КлассРеализации, ИмяПроцедуры = "ПослеВыполненияКоманды") Экспорт Команда.УстановитьДействиеПослеВыполнения(КлассРеализации, ИмяПроцедуры); КонецПроцедуры +// Функция добавляет опцию приложения и возвращает экземпляр данной опции +// +// Параметры: +// Имя - строка - имя опции, в строке допустимо задавать синоним через пробел, например "s some-opt" +// Значение - строка - значение опции по умолчанию +// Описание - объект - описание опции для справки. +// +// Возвращаемое значение: +// Команда - класс ПараметрКоманды +// +// Дополнительно смотри справку по классу ПараметрКоманды Функция Опция(Имя, Значение = "", Описание = "") Экспорт Возврат Команда.Опция(Имя, Значение, Описание); КонецФункции +// Функция добавляет аргумент приложения и возвращает экземпляр данной аргумента +// +// Параметры: +// Имя - строка - имя аргумента, в строке допустимо использование только из БОЛЬШИХ латинских букв, например "ARG" +// Значение - строка - значение аргумента по умолчанию +// Описание - объект - описание аргумента для справки. +// +// Возвращаемое значение: +// Команда - класс ПараметрКоманды +// +// Дополнительно смотри справку по классу ПараметрКоманды +Функция Аргумент(Имя, Значение = "", Описание = "") Экспорт + + Возврат Команда.Аргумент(Имя, Значение, Описание); + +КонецФункции + +// Предопределенная процедура выполнения приложения, если не задана процедура в классе. +// Выводит справку, по работе с приложением и завершает работу с кодом "1" +// Переопределяется, процедурой "УстановитьОсновноеДействие" +// +// Параметры: +// Команда - класс КомандаПриложения - инстанс класс, для доступа к опция и аргументам выполняемой команды +// Процедура ВыполнитьКоманду(Знач Команда) Экспорт Сообщить("Не корректное использование"+ Символы.ПС); @@ -98,8 +163,15 @@ КонецПроцедуры -Функция Аргумент(Имя, Значение = "", Описание = "") Экспорт - - Возврат Команда.Аргумент(Имя, Значение, Описание); +Процедура ПриСозданииОбъекта(Знач Наименование, Знач Описание, Знач КлассРеализацииОсновныйКоманды = Неопределено) -КонецФункции + НаименованиеПриложения = Наименование; + ОписаниеПриложения = Описание; + + Если КлассРеализацииОсновныйКоманды = Неопределено Тогда + КлассРеализацииОсновныйКоманды = ЭтотОбъект; + КонецЕсли; + + Команда = Новый КомандаПриложения(Наименование, Описание, КлассРеализацииОсновныйКоманды, ЭтотОбъект); + +КонецПроцедуры \ No newline at end of file