Skip to content

Commit

Permalink
Finish 0.9.6
Browse files Browse the repository at this point in the history
  • Loading branch information
khorevaa committed Jan 26, 2018
2 parents 19c78f6 + 2e3b6a8 commit 98c75eb
Show file tree
Hide file tree
Showing 5 changed files with 282 additions and 14 deletions.
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//

Описание.Имя("cli")
.Версия("0.9.5")
.Версия("0.9.6")
.Автор("Khorev Aleksey")
.АдресАвтора("[email protected]")
.Описание("Данный пакет облегчает создание консольных приложений на Oscript")
Expand Down
67 changes: 62 additions & 5 deletions src/core/Классы/cmd/КомандаПриложения.os
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,23 @@
// Произвольный - Значение - полученное значение в результате чтения строки использования или переменных окружения
Функция ЗначениеОпции(Знач ИмяОпции) Экспорт

Возврат ОпцииИндекс[ИмяОпции].Значение;
Если СтрНачинаетсяС(ИмяОпции, "-")
Или СтрНачинаетсяС(ИмяОпции, "--") Тогда
// Ничего не делаем переданы уже нормализированные опции
Иначе
Префикс = "-";
Если СтрДлина(ИмяОпции) > 1 Тогда
Префикс = "--";
КонецЕсли;
ИмяОпции = СтрШаблон("%1%2",Префикс,ИмяОпции);
КонецЕсли;

ОпцииИндекса = ОпцииИндекс[ИмяОпции];
Если ОпцииИндекса = Неопределено Тогда
ВызватьИсключение СтрШаблон("Ошибка получение значения опции <%1>. Опция не найдена в индексе опций команды", ИмяОпции);
КонецЕсли;

Возврат ОпцииИндекса.Значение;

КонецФункции

Expand All @@ -109,7 +125,12 @@
// Произвольный - Значение - полученное значение в результате чтения строки использования или переменных окружения
Функция ЗначениеАргумента(Знач ИмяАргумента) Экспорт

Возврат АргументыИндекс[ИмяАргумента].Значение;
АргументИндекса = АргументыИндекс[ВРег(ИмяАргумента)];
Если АргументИндекса = Неопределено Тогда
ВызватьИсключение СтрШаблон("Ошибка получение значения аргумента <%1>. Аргумент не найден в индексе аргументов команды", ИмяАргумента);
КонецЕсли;

Возврат АргументИндекса.Значение;

КонецФункции

Expand Down Expand Up @@ -196,7 +217,17 @@
ТаблицаОпций = ТаблицаАргументовДляСправки();
Для каждого СтрокаТаблицы Из ТаблицаОпций Цикл

КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК,СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));
КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК, СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));

Если Не ПустаяСтрока(СтрокаТаблицы.ДополнительноеОписание) Тогда
ДлинаДополнения = СтрДлина(СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование))+3;
МассивСтрок = СтрРазделить(СтрокаТаблицы.ДополнительноеОписание, Символы.ПС, Ложь);

Для каждого СтрокаОписания Из МассивСтрок Цикл
КонсольВывода.ВывестиСтроку(СтрШаблон("%1%2", ДополнитьСтрокуПробеламиДо(СтрокаОписания, ДлинаДополнения), Символы.ВК));
КонецЦикла;

КонецЕсли;

КонецЦикла;

Expand All @@ -211,7 +242,17 @@
ТаблицаОпций = ТаблицаОпцийДляСправки();
Для каждого СтрокаТаблицы Из ТаблицаОпций Цикл

КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК,СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));
КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК, СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));

Если Не ПустаяСтрока(СтрокаТаблицы.ДополнительноеОписание) Тогда
ДлинаДополнения = СтрДлина(СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование))+3;

МассивСтрок = СтрРазделить(СтрокаТаблицы.ДополнительноеОписание, Символы.ПС, Ложь);
Для каждого СтрокаОписания Из МассивСтрок Цикл
КонсольВывода.ВывестиСтроку(СтрШаблон("%1%2", ДополнитьСтрокуПробеламиДо(СтрокаОписания, ДлинаДополнения), Символы.ВК));
КонецЦикла;

КонецЕсли;

КонецЦикла;
КонсольВывода.ВывестиСтроку("");
Expand Down Expand Up @@ -707,6 +748,7 @@
Таблица.Колонки.Добавить("Наименование");
Таблица.Колонки.Добавить("Описание");
Таблица.Колонки.Добавить("ДлинаНаименования");
Таблица.Колонки.Добавить("ДополнительноеОписание");

Для каждого КлючЗначение Из Аргументы Цикл

Expand All @@ -721,6 +763,7 @@

НоваяЗапись.Наименование = ИмяОпции;
НоваяЗапись.Описание = ОписаниеОпции;
НоваяЗапись.ДополнительноеОписание = АргументСправки.ПолучитьПодробноеОписание();
НоваяЗапись.ДлинаНаименования = СтрДлина(ИмяОпции)+1;

КонецЦикла;
Expand Down Expand Up @@ -753,6 +796,7 @@
Таблица = новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Наименование");
Таблица.Колонки.Добавить("Описание");
Таблица.Колонки.Добавить("ДополнительноеОписание");
Таблица.Колонки.Добавить("ДлинаНаименования");

Если Опции.Количество() = 0 Тогда
Expand All @@ -769,9 +813,10 @@
ПеременныеОкружения = ФорматироватьПеременнуюОкруженияОпцииДляСправки(ОпцияСправки);
ЗначениеОпции = ФорматироватьЗначениеОпцииДляСправки(ОпцияСправки);
ОписаниеОпции = ОпцияСправки.Описание + " " + ПеременныеОкружения + " " + ЗначениеОпции;

НоваяЗапись.Наименование = ИмяОпции;
НоваяЗапись.Описание = ОписаниеОпции;
НоваяЗапись.ДополнительноеОписание = ОпцияСправки.ПолучитьПодробноеОписание();
НоваяЗапись.ДлинаНаименования = СтрДлина(ИмяОпции)+1;

КонецЦикла;
Expand Down Expand Up @@ -809,6 +854,18 @@

КонецФункции

Функция ДополнитьСтрокуПробеламиДо(Знач НачальнаяСтрока, Знач КоличествоПробелов)

СтрокаПробелов = "";

Для Счетчик = 1 По КоличествоПробелов Цикл
СтрокаПробелов = СтрокаПробелов + " ";
КонецЦикла;

Возврат СтрокаПробелов + НачальнаяСтрока;

КонецФункции

Функция ФорматироватьИмяОпцииДляСправки(Знач КлассОпции)

КороткоеНаименование = "";
Expand Down
100 changes: 92 additions & 8 deletions src/core/Классы/cmd/ПараметрКоманды.os
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

// Подробное описание параметра команды
// Используется при выводе справки (запланировано)
Перем ПодробноеОписание Экспорт; // Строка
Перем ПодробноеОписаниеПараметра Экспорт; // Строка

// Содержит имя переменной окружения, откуда получать значение
// допустимо использование нескольких переменных окружения через пробел
Expand Down Expand Up @@ -87,6 +87,7 @@
ТипПараметра = ВходящийТипПараметра;

РазделительМассива = Неопределено;
ПодробноеОписаниеПараметра = "";
ПодготовитьНаименованияПараметров();

КонецПроцедуры
Expand Down Expand Up @@ -123,6 +124,23 @@

КонецФункции

// Возвращает подробное описание для справки
//
// Возвращаемое значение:
// строка
Функция ПолучитьПодробноеОписание() Экспорт

ВстроенныеТипы = ВстроенныеТипЗначенийПараметров();
ОпределенныйТип = ВстроенныеТипы[Строка(ТипЗнч(ТипЗначенияПараметра))];
Если ОпределенныйТип = Неопределено
Или Тип("ТипПеречисление") = ОпределенныйТип Тогда
ПодробноеОписаниеПараметра = ТипЗначенияПараметра.ПодробноеОписание();
КонецЕсли;

Возврат ПодробноеОписаниеПараметра;

КонецФункции

// Возвращает истина, если данный параметр обязателен для указания
//
// Возвращаемое значение:
Expand Down Expand Up @@ -475,21 +493,87 @@

КонецФункции

// Функция устанавливает тип параметра "Перечисление"
// возвращает текущий параметр команды
//
// Параметры:
// ДоступныеПеречисления - Соответсвие
// Ключ - Строка
// Значение - Структура ("Наименование, Значение, ДополнительнаяСправка")
// Возвращаемое значение:
// ЭтотОбъект - класс ПараметрКоманды
// Вызов необязателен, автоматически определяется при создании параметра,
// если передано значение по умолчанию
Функция ТПеречисление(Знач ДоступныеПеречисления = Неопределено) Экспорт

ТипОпции = ТипЗнч(Неопределено);
ТипЭлементаОпции = ТипОпции;
ТипЗначенияПараметра = Новый ТипПеречисление();

Если Не ДоступныеПеречисления = Неопределено Тогда
ТипЗначенияПараметра.УстановитьПеречисления(ДоступныеПеречисления);
КонецЕсли;

Возврат ЭтотОбъект;

КонецФункции

// Функция устанавливает произвольный тип параметра
// возвращает текущий параметр команды
//
// Параметры:
// НаименованиеПеречисления - строка - пользовательное значение перечисления
// ЗначениеПеречисления - произвольный - системное значение перечисления
// ДополнительнаяСправкаПеречисления - строка - дополнительная строка для справки
//
Функция Перечисление(Знач НаименованиеПеречисления, Знач ЗначениеПеречисления = Неопределено, Знач ДополнительнаяСправкаПеречисления = "") Экспорт

Если Не ТипЗнч(ТипЗначенияПараметра) = Тип("ТипПеречисление") Тогда
ВызватьИсключение "Указание перечисления допустимо только для типа параметра перечисление";
КонецЕсли;

Если ЗначениеПеречисления = Неопределено Тогда
ЗначениеПеречисления = НаименованиеПеречисления;
КонецЕсли;

ТипЗначенияПараметра.ДобавитьПеречисление(НаименованиеПеречисления, ЗначениеПеречисления, ДополнительнаяСправкаПеречисления);

Возврат ЭтотОбъект;

КонецФункции

// Функция устанавливает признак обязательности указания данного параметра
// возвращает текущий параметр команды
//
// Параметры:
// Признак - булево - признак обязательности указания данного параметра (по умолчанию Истина)
//
// Возвращаемое значение:
// ЭтотОбъект - класс ПараметрКоманды
Функция ПодробноеОписание(Знач ВходящееПодробноеОписание) Экспорт

ПодробноеОписаниеПараметра = ВходящееПодробноеОписание;

Возврат ЭтотОбъект;

КонецФункции

#КонецОбласти

Функция ВстроенныеТипЗначенийПараметров()

ВстроенныеТипы = Новый Соответствие;

ВстроенныеТипы.Вставить("Булево", Новый ТипБулево);
ВстроенныеТипы.Вставить("Число", Новый ТипЧисло);
ВстроенныеТипы.Вставить("Дата", Новый ТипДатаВремя);
ВстроенныеТипы.Вставить("ТипБулево", Тип("ТипБулево"));
ВстроенныеТипы.Вставить("ТипЧисло", Тип("ТипЧисло"));
ВстроенныеТипы.Вставить("ТипДатаВремя", Тип("ТипДатаВремя"));
//ВстроенныеТипы.Вставить("Длительность", Новый ТипДлительность);
ВстроенныеТипы.Вставить("Строка", Новый ТипСтрока);
ВстроенныеТипы.Вставить("ТипСтрока", Тип("ТипСтрока"));
//ВстроенныеТипы.Вставить("МассивДлительностей", Новый ТипМассивДлительностей);
ВстроенныеТипы.Вставить("МассивЧисел", Новый ТипМассивЧисел);
ВстроенныеТипы.Вставить("МассивСтрок", Новый ТипМассивСтрок);
ВстроенныеТипы.Вставить("МассивДат", Новый ТипМассивДат);
ВстроенныеТипы.Вставить("ТипМассивЧисел", Тип("ТипМассивЧисел"));
ВстроенныеТипы.Вставить("ТипМассивСтрок", Тип("ТипМассивСтрок"));
ВстроенныеТипы.Вставить("ТипМассивДат", Тип("ТипМассивДат"));
ВстроенныеТипы.Вставить("ТипПеречисление", Тип("ТипПеречисление"));

Возврат ВстроенныеТипы;

Expand Down
Loading

0 comments on commit 98c75eb

Please sign in to comment.