Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поддержка пустых и пробельных значений опций #81

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,11 @@
// Выполняет поиск аргумента в массиве входящих аргументов
//
// Параметры:
// ВходящиеАргументы - массив - входящие аргументы приложения
// КонтекстПоиска - Объект - класс "КонтекстПарсера"
// ВходящиеАргументы - Массив - входящие аргументы приложения
// КонтекстПоиска - Объект - ссылка на класс КонтекстПарсера
//
// Возвращаемое значение:
// Структура - структура описания токена
// * РезультатПоиска - булево - признак успешного поиска
// * Аргументы - Массив - массив оставшихся аргументов после поиска
// Объект.РезультатПоискаПараметра - ссылка на класс РезультатПоискаПараметра
//
Функция Поиск(Знач ВходящиеАргументы, КонтекстПоиска) Экспорт

Expand All @@ -29,30 +27,36 @@
Аргументы.Добавить(Арг);
КонецЦикла;

Результат = Новый Структура("РезультатПоиска, Аргументы", Аргумент.УстановленаИзПеременнойОкружения, Аргументы);
Результат = Новый РезультатПоискаПараметра(Аргументы, Аргумент.УстановленаИзПеременнойОкружения);

Лог.Отладка(" АргументыПарсера:
|УстановленаИзПеременнойОкружения <%1>
|УстановленаПользователем <%2>", Аргумент.УстановленаИзПеременнойОкружения, Аргумент.УстановленаПользователем);
Если Аргументы.Количество() = 0 Тогда

Если Аргумент.УстановленаИзПеременнойОкружения
И КонтекстПоиска.НеВключенныеАргументы[Аргумент] = Истина Тогда
Результат.РезультатПоиска = Ложь;
Результат.Найден = Ложь;
Иначе
КонтекстПоиска.НеВключенныеАргументы.Вставить(Аргумент, Истина);
КонецЕсли;

Если НЕ (Результат.Найден ИЛИ Аргумент.УстановленаИзПеременнойОкружения) Тогда
Результат.Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяАргумент(Аргумент.Имя);
КонецЕсли;

Возврат Результат;

КонецЕсли;

Если (НЕ КонтекстПоиска.СбросОпций И
СтрНачинаетсяС(Аргументы[0], "-")
И НЕ Аргументы[0] = "-")
ИЛИ ПустаяСтрока(Аргументы[0])
Тогда
Если ПустаяСтрока(Аргументы[0]) Тогда
Результат.Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяАргумент(Аргумент.Имя);
Возврат Результат;

КонецЕсли;

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

АргументКонтекст = КонтекстПоиска.Аргументы[Аргумент];
Expand All @@ -63,10 +67,11 @@
АргументКонтекст.Добавить(Аргументы[0]);
КонтекстПоиска.Аргументы.Вставить(Аргумент, АргументКонтекст);

Результат.РезультатПоиска = Истина;
Аргументы.Удалить(0);

Результат.Аргументы = Аргументы;
Результат.Найден = Истина;
Результат.Аргументы = Аргументы;

Возврат Результат;

КонецФункции
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,11 @@
// Выполняет поиск опций в массиве входящих аргументов
//
// Параметры:
// ВходящиеАргументы - массив - входящие аргументы приложения
// КонтекстПоиска - Объект - класс "КонтекстПарсера"
// ВходящиеАргументы - Массив - входящие аргументы приложения
// КонтекстПоиска - Объект - ссылка на класс КонтекстПарсера
//
// Возвращаемое значение:
// Структура - структура описания токена
// * РезультатПоиска - булево - признак успешного поиска
// * Аргументы - Массив - массив оставшихся аргументов после поиска
// Объект.РезультатПоискаПараметра - ссылка на класс РезультатПоискаПараметра
//
Функция Поиск(Знач ВходящиеАргументы, КонтекстПоиска) Экспорт

Expand All @@ -31,12 +29,10 @@
Аргументы.Добавить(Арг);
КонецЦикла;

Результат = Новый Структура("РезультатПоиска, Аргументы", Ложь, Аргументы);

РезультатПопыткиПоиска = ПопыткаПоиска(Аргументы, КонтекстПоиска);

Если НЕ РезультатПопыткиПоиска.РезультатПоиска Тогда
Возврат Результат;
Если НЕ РезультатПопыткиПоиска.Найден Тогда
Возврат Новый РезультатПоискаПараметра(Аргументы, Ложь, РезультатПопыткиПоиска.Ошибка);
КонецЕсли;

АргументыДляЦикла = РезультатПопыткиПоиска.Аргументы;
Expand All @@ -45,29 +41,23 @@

РезультатПопыткиПоискаВЦикле = ПопыткаПоиска(АргументыДляЦикла, КонтекстПоиска);

Если НЕ РезультатПопыткиПоискаВЦикле.РезультатПоиска Тогда
Результат.РезультатПоиска = Истина;
Результат.Аргументы = РезультатПопыткиПоискаВЦикле.Аргументы;
Возврат Результат;
Если НЕ РезультатПопыткиПоискаВЦикле.Найден Тогда
Возврат Новый РезультатПоискаПараметра(РезультатПопыткиПоискаВЦикле.Аргументы, Истина);
КонецЕсли;

АргументыДляЦикла = РезультатПопыткиПоискаВЦикле.Аргументы;

КонецЦикла;

Возврат Результат;
Возврат Новый РезультатПоискаПараметра(Аргументы, Ложь);

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

Функция ПопыткаПоиска(Знач Аргументы, КонтекстПоиска)

Результат = Новый Структура("РезультатПоиска, Аргументы", Ложь, Аргументы);

Если Аргументы.Количество() = 0
ИЛИ КонтекстПоиска.СбросОпций Тогда

Возврат Результат;

Возврат Новый РезультатПоискаПараметра(Аргументы, Ложь);
КонецЕсли;

Для каждого ОпцияПоиска Из Опции Цикл
Expand All @@ -84,23 +74,29 @@
РезультатПоиска = КлассПоиска.Поиск(Аргументы, КонтекстПоиска);

Лог.Отладка("Длина аргументов <%1> ", Аргументы.Количество());
Лог.Отладка("Результат поиска опции %1 = <%2>", ОпцияПоиска.Ключ.Имя, РезультатПоиска.РезультатПоиска);
Лог.Отладка("Результат поиска опции %1 = <%2>", ОпцияПоиска.Ключ.Имя, РезультатПоиска.Найден);
Лог.Отладка("Длина аргументов после поиска <%1> ", РезультатПоиска.Аргументы.Количество());

Если РезультатПоиска.РезультатПоиска Тогда
Если РезультатПоиска.Найден Тогда

Если ОпцияПоиска.Значение.УстановленаИзПеременнойОкружения Тогда

КонтекстПоиска.НеВключенныеОпции.Вставить(ОпцияПоиска.Значение, Истина);

КонецЕсли;

Возврат Новый Структура("РезультатПоиска, Аргументы", Истина, РезультатПоиска.Аргументы);
Возврат РезультатПоиска;

КонецЕсли;

Если ЗначениеЗаполнено(РезультатПоиска.Ошибка)
И ОшибкиПарсера.ОшибкаТребуетВнимания(РезультатПоиска.Ошибка) Тогда
Возврат Новый РезультатПоискаПараметра(Аргументы, Ложь, РезультатПоиска.Ошибка);
КонецЕсли;

КонецЦикла;

Возврат Новый Структура("РезультатПоиска, Аргументы", Ложь, Аргументы);
Возврат Новый РезультатПоискаПараметра(Аргументы, Ложь);

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

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
// Выполняет поиск любого парсера в массиве входящих аргументов
//
// Параметры:
// Аргументы - массив - входящие аргументы приложения
// КонтекстПоиска - Объект - класс "КонтекстПарсера"
// Аргументы - Массив - входящие аргументы приложения
// КонтекстПоиска - Объект - ссылка на класс КонтекстПарсера
//
// Возвращаемое значение:
// Структура - структура описания токена
// * РезультатПоиска - булево - признак успешного поиска
// * Аргументы - Массив - массив оставшихся аргументов после поиска
// Объект.РезультатПоискаПараметра - ссылка на класс РезультатПоискаПараметра
//
Функция Поиск(Аргументы, КонтекстПоиска) Экспорт

Результат = Новый Структура("РезультатПоиска, Аргументы", Истина, Аргументы);
Результат = Новый РезультатПоискаПараметра(Аргументы, Истина);

Возврат Результат;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
// Выполняет поиск парсера в массиве входящих аргументов
//
// Параметры:
// Аргументы - массив - входящие аргументы приложения
// КонтекстПоиска - Объект - класс "КонтекстПарсера"
// Аргументы - Массив - входящие аргументы приложения
// КонтекстПоиска - Объект - ссылка на класс КонтекстПарсера
//
// Возвращаемое значение:
// Структура - структура описания токена
// * РезультатПоиска - булево - признак успешного поиска
// * Аргументы - Массив - массив оставшихся аргументов после поиска
// Объект.РезультатПоискаПараметра - ссылка на класс РезультатПоискаПараметра
//
Функция Поиск(Аргументы, КонтекстПоиска) Экспорт

Результат = Новый Структура("РезультатПоиска, Аргументы", Истина, Аргументы);
Результат = Новый РезультатПоискаПараметра(Аргументы, Истина);

Возврат Результат;

Expand Down
Loading