Skip to content

Commit 98c75eb

Browse files
committed
Finish 0.9.6
2 parents 19c78f6 + 2e3b6a8 commit 98c75eb

File tree

5 files changed

+282
-14
lines changed

5 files changed

+282
-14
lines changed

packagedef

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//
55

66
Описание.Имя("cli")
7-
.Версия("0.9.5")
7+
.Версия("0.9.6")
88
.Автор("Khorev Aleksey")
99
.АдресАвтора("[email protected]")
1010
.Описание("Данный пакет облегчает создание консольных приложений на Oscript")

src/core/Классы/cmd/КомандаПриложения.os

Lines changed: 62 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,23 @@
9696
// Произвольный - Значение - полученное значение в результате чтения строки использования или переменных окружения
9797
Функция ЗначениеОпции(Знач ИмяОпции) Экспорт
9898

99-
Возврат ОпцииИндекс[ИмяОпции].Значение;
99+
Если СтрНачинаетсяС(ИмяОпции, "-")
100+
Или СтрНачинаетсяС(ИмяОпции, "--") Тогда
101+
// Ничего не делаем переданы уже нормализированные опции
102+
Иначе
103+
Префикс = "-";
104+
Если СтрДлина(ИмяОпции) > 1 Тогда
105+
Префикс = "--";
106+
КонецЕсли;
107+
ИмяОпции = СтрШаблон("%1%2",Префикс,ИмяОпции);
108+
КонецЕсли;
109+
110+
ОпцииИндекса = ОпцииИндекс[ИмяОпции];
111+
Если ОпцииИндекса = Неопределено Тогда
112+
ВызватьИсключение СтрШаблон("Ошибка получение значения опции <%1>. Опция не найдена в индексе опций команды", ИмяОпции);
113+
КонецЕсли;
114+
115+
Возврат ОпцииИндекса.Значение;
100116

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

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

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

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

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

199-
КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК,СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));
220+
КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК, СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));
221+
222+
Если Не ПустаяСтрока(СтрокаТаблицы.ДополнительноеОписание) Тогда
223+
ДлинаДополнения = СтрДлина(СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование))+3;
224+
МассивСтрок = СтрРазделить(СтрокаТаблицы.ДополнительноеОписание, Символы.ПС, Ложь);
225+
226+
Для каждого СтрокаОписания Из МассивСтрок Цикл
227+
КонсольВывода.ВывестиСтроку(СтрШаблон("%1%2", ДополнитьСтрокуПробеламиДо(СтрокаОписания, ДлинаДополнения), Символы.ВК));
228+
КонецЦикла;
229+
230+
КонецЕсли;
200231

201232
КонецЦикла;
202233

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

214-
КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК,СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));
245+
КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК, СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));
246+
247+
Если Не ПустаяСтрока(СтрокаТаблицы.ДополнительноеОписание) Тогда
248+
ДлинаДополнения = СтрДлина(СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование))+3;
249+
250+
МассивСтрок = СтрРазделить(СтрокаТаблицы.ДополнительноеОписание, Символы.ПС, Ложь);
251+
Для каждого СтрокаОписания Из МассивСтрок Цикл
252+
КонсольВывода.ВывестиСтроку(СтрШаблон("%1%2", ДополнитьСтрокуПробеламиДо(СтрокаОписания, ДлинаДополнения), Символы.ВК));
253+
КонецЦикла;
254+
255+
КонецЕсли;
215256

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

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

@@ -721,6 +763,7 @@
721763

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

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

758802
Если Опции.Количество() = 0 Тогда
@@ -769,9 +813,10 @@
769813
ПеременныеОкружения = ФорматироватьПеременнуюОкруженияОпцииДляСправки(ОпцияСправки);
770814
ЗначениеОпции = ФорматироватьЗначениеОпцииДляСправки(ОпцияСправки);
771815
ОписаниеОпции = ОпцияСправки.Описание + " " + ПеременныеОкружения + " " + ЗначениеОпции;
772-
816+
773817
НоваяЗапись.Наименование = ИмяОпции;
774818
НоваяЗапись.Описание = ОписаниеОпции;
819+
НоваяЗапись.ДополнительноеОписание = ОпцияСправки.ПолучитьПодробноеОписание();
775820
НоваяЗапись.ДлинаНаименования = СтрДлина(ИмяОпции)+1;
776821

777822
КонецЦикла;
@@ -809,6 +854,18 @@
809854

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

857+
Функция ДополнитьСтрокуПробеламиДо(Знач НачальнаяСтрока, Знач КоличествоПробелов)
858+
859+
СтрокаПробелов = "";
860+
861+
Для Счетчик = 1 По КоличествоПробелов Цикл
862+
СтрокаПробелов = СтрокаПробелов + " ";
863+
КонецЦикла;
864+
865+
Возврат СтрокаПробелов + НачальнаяСтрока;
866+
867+
КонецФункции
868+
812869
Функция ФорматироватьИмяОпцииДляСправки(Знач КлассОпции)
813870

814871
КороткоеНаименование = "";

src/core/Классы/cmd/ПараметрКоманды.os

Lines changed: 92 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

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

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

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

9293
КонецПроцедуры
@@ -123,6 +124,23 @@
123124

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

127+
// Возвращает подробное описание для справки
128+
//
129+
// Возвращаемое значение:
130+
// строка
131+
Функция ПолучитьПодробноеОписание() Экспорт
132+
133+
ВстроенныеТипы = ВстроенныеТипЗначенийПараметров();
134+
ОпределенныйТип = ВстроенныеТипы[Строка(ТипЗнч(ТипЗначенияПараметра))];
135+
Если ОпределенныйТип = Неопределено
136+
Или Тип("ТипПеречисление") = ОпределенныйТип Тогда
137+
ПодробноеОписаниеПараметра = ТипЗначенияПараметра.ПодробноеОписание();
138+
КонецЕсли;
139+
140+
Возврат ПодробноеОписаниеПараметра;
141+
142+
КонецФункции
143+
126144
// Возвращает истина, если данный параметр обязателен для указания
127145
//
128146
// Возвращаемое значение:
@@ -475,21 +493,87 @@
475493

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

496+
// Функция устанавливает тип параметра "Перечисление"
497+
// возвращает текущий параметр команды
498+
//
499+
// Параметры:
500+
// ДоступныеПеречисления - Соответсвие
501+
// Ключ - Строка
502+
// Значение - Структура ("Наименование, Значение, ДополнительнаяСправка")
503+
// Возвращаемое значение:
504+
// ЭтотОбъект - класс ПараметрКоманды
505+
// Вызов необязателен, автоматически определяется при создании параметра,
506+
// если передано значение по умолчанию
507+
Функция ТПеречисление(Знач ДоступныеПеречисления = Неопределено) Экспорт
508+
509+
ТипОпции = ТипЗнч(Неопределено);
510+
ТипЭлементаОпции = ТипОпции;
511+
ТипЗначенияПараметра = Новый ТипПеречисление();
512+
513+
Если Не ДоступныеПеречисления = Неопределено Тогда
514+
ТипЗначенияПараметра.УстановитьПеречисления(ДоступныеПеречисления);
515+
КонецЕсли;
516+
517+
Возврат ЭтотОбъект;
518+
519+
КонецФункции
520+
521+
// Функция устанавливает произвольный тип параметра
522+
// возвращает текущий параметр команды
523+
//
524+
// Параметры:
525+
// НаименованиеПеречисления - строка - пользовательное значение перечисления
526+
// ЗначениеПеречисления - произвольный - системное значение перечисления
527+
// ДополнительнаяСправкаПеречисления - строка - дополнительная строка для справки
528+
//
529+
Функция Перечисление(Знач НаименованиеПеречисления, Знач ЗначениеПеречисления = Неопределено, Знач ДополнительнаяСправкаПеречисления = "") Экспорт
530+
531+
Если Не ТипЗнч(ТипЗначенияПараметра) = Тип("ТипПеречисление") Тогда
532+
ВызватьИсключение "Указание перечисления допустимо только для типа параметра перечисление";
533+
КонецЕсли;
534+
535+
Если ЗначениеПеречисления = Неопределено Тогда
536+
ЗначениеПеречисления = НаименованиеПеречисления;
537+
КонецЕсли;
538+
539+
ТипЗначенияПараметра.ДобавитьПеречисление(НаименованиеПеречисления, ЗначениеПеречисления, ДополнительнаяСправкаПеречисления);
540+
541+
Возврат ЭтотОбъект;
542+
543+
КонецФункции
544+
545+
// Функция устанавливает признак обязательности указания данного параметра
546+
// возвращает текущий параметр команды
547+
//
548+
// Параметры:
549+
// Признак - булево - признак обязательности указания данного параметра (по умолчанию Истина)
550+
//
551+
// Возвращаемое значение:
552+
// ЭтотОбъект - класс ПараметрКоманды
553+
Функция ПодробноеОписание(Знач ВходящееПодробноеОписание) Экспорт
554+
555+
ПодробноеОписаниеПараметра = ВходящееПодробноеОписание;
556+
557+
Возврат ЭтотОбъект;
558+
559+
КонецФункции
560+
478561
#КонецОбласти
479562

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

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

484-
ВстроенныеТипы.Вставить("Булево", Новый ТипБулево);
485-
ВстроенныеТипы.Вставить("Число", Новый ТипЧисло);
486-
ВстроенныеТипы.Вставить("Дата", Новый ТипДатаВремя);
567+
ВстроенныеТипы.Вставить("ТипБулево", Тип("ТипБулево"));
568+
ВстроенныеТипы.Вставить("ТипЧисло", Тип("ТипЧисло"));
569+
ВстроенныеТипы.Вставить("ТипДатаВремя", Тип("ТипДатаВремя"));
487570
//ВстроенныеТипы.Вставить("Длительность", Новый ТипДлительность);
488-
ВстроенныеТипы.Вставить("Строка", Новый ТипСтрока);
571+
ВстроенныеТипы.Вставить("ТипСтрока", Тип("ТипСтрока"));
489572
//ВстроенныеТипы.Вставить("МассивДлительностей", Новый ТипМассивДлительностей);
490-
ВстроенныеТипы.Вставить("МассивЧисел", Новый ТипМассивЧисел);
491-
ВстроенныеТипы.Вставить("МассивСтрок", Новый ТипМассивСтрок);
492-
ВстроенныеТипы.Вставить("МассивДат", Новый ТипМассивДат);
573+
ВстроенныеТипы.Вставить("ТипМассивЧисел", Тип("ТипМассивЧисел"));
574+
ВстроенныеТипы.Вставить("ТипМассивСтрок", Тип("ТипМассивСтрок"));
575+
ВстроенныеТипы.Вставить("ТипМассивДат", Тип("ТипМассивДат"));
576+
ВстроенныеТипы.Вставить("ТипПеречисление", Тип("ТипПеречисление"));
493577

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

0 commit comments

Comments
 (0)