2
2
3
3
Перем Опция Экспорт ; // ПараметрКоманды - Ссылка на класс опции
4
4
Перем ОпцииИндекс Экспорт ; // Соответствие - Ссылка на текущий индекс опций
5
- Перем Обязательный Экспорт ; // Булево
6
5
7
6
Перем Лог ;
8
7
9
- Процедура ПриСозданииОбъекта (КлассОпции , Индекс , ОбязательнаяОпция = Истина )
8
+ Процедура ПриСозданииОбъекта (КлассОпции , Индекс )
10
9
11
10
Лог.Отладка("Создан парсер для опции %1" , КлассОпции.Имя);
12
11
Опция = КлассОпции;
13
12
ОпцииИндекс = Индекс;
14
- Обязательный = ОбязательнаяОпция;
15
13
16
14
КонецПроцедуры
17
15
42
40
43
41
Результат.Найден = Опция.УстановленаИзПеременнойОкружения;
44
42
45
- Если Обязательный И НЕ (Результат.Найден ИЛИ КонтекстПоиска.СбросОпций) Тогда
46
- Результат.Ошибка = ОшибкаОжидаетсяОпция(Опция.Имя);
43
+ Если НЕ (Результат.Найден ИЛИ КонтекстПоиска.СбросОпций) Тогда
44
+ Результат.Ошибка = ОшибкиПарсера. ОшибкаОжидаетсяОпция(Опция.Имя);
47
45
КонецЕсли ;
48
46
49
47
Возврат Результат;
128
126
КлассОпции = ОпцииИндекс[Имя];
129
127
Если КлассОпции = Неопределено Тогда
130
128
Лог.Отладка("Неопределенная опция: %1" , Строка (Имя));
131
- Результат.Ошибка = ОшибкаНеожидаемаяОпция(Имя);
129
+ Результат.Ошибка = ОшибкиПарсера. ОшибкаНеожидаемаяОпция(Имя);
132
130
Возврат Результат;
133
131
КонецЕсли ;
134
132
135
133
Если Не КлассОпции.Имя = Опция.Имя Тогда
136
- Результат.Ошибка = ОшибкаОжидаетсяВместо (Опция.Имя, Имя);
134
+ Результат.Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяОпцияВместо (Опция.Имя, Имя);
137
135
Результат.ДополнительныеСвойства.ПрибавочныйИндекс = 1 ;
138
136
Возврат Результат;
139
137
КонецЕсли ;
140
138
141
139
Значение = Сред (ТекущийАргумент, 4 );
142
140
143
141
Если ПустаяСтрока (СокрЛП (Значение)) Тогда
144
- Результат.Ошибка = СтрШаблон ( "Опция %1 должна содержать значение после знака =" , Имя);
142
+ Результат.Ошибка = ОшибкиПарсера.ОшибкаТребуетсяЗначениеПослеЗнакаРавноДляОпции( Имя);
145
143
Возврат Результат;
146
144
КонецЕсли ;
147
145
179
177
180
178
Если КлассОпции = Неопределено Тогда
181
179
Лог.Отладка("Неопределенная опция: %1" , Строка (ИмяОпции));
182
- Ошибка = ? (Ошибка = Неопределено , ОшибкаНеожидаемаяОпция(ИмяОпции), Ошибка);
180
+ Ошибка = ? (Ошибка = Неопределено , ОшибкиПарсера. ОшибкаНеожидаемаяОпция(ИмяОпции), Ошибка);
183
181
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка);
184
182
КонецЕсли ;
185
183
191
189
Если Не КлассОпции.Имя = Опция.Имя Тогда
192
190
ИИ = ИИ + 1 ;
193
191
Лог.Отладка("Не нашли опцию %1, %2 <> %3" , ИмяОпции, КлассОпции.Имя, Опция.Имя);
194
- Ошибка = ОшибкаОжидаетсяВместо (Опция.Имя, ИмяОпции);
192
+ Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяОпцияВместо (Опция.Имя, ИмяОпции);
195
193
Продолжить ;
196
194
КонецЕсли ;
197
195
225
223
226
224
Если Аргументы.Вграница() - Индекс = 0 Тогда
227
225
Если Не КлассОпции.Имя = Опция.Имя Тогда
228
- Ошибка = ОшибкаОжидаетсяВместо (Опция.Имя, ИмяОпции);
226
+ Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяОпцияВместо (Опция.Имя, ИмяОпции);
229
227
Иначе
230
- Ошибка = ОшибкаТребуетсяЗначение (ИмяОпции);
228
+ Ошибка = ОшибкиПарсера.ОшибкаТребуетсяЗначениеДляОпции (ИмяОпции);
231
229
КонецЕсли ;
232
230
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка);
233
231
КонецЕсли ;
234
232
235
233
Если Не КлассОпции.Имя = Опция.Имя Тогда
236
- Ошибка = ОшибкаОжидаетсяВместо (Опция.Имя, ИмяОпции);
234
+ Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяОпцияВместо (Опция.Имя, ИмяОпции);
237
235
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка, 2 );
238
236
КонецЕсли ;
239
237
240
238
Значение = Аргументы[Индекс + 1 ];
241
239
Лог.Отладка("Значение найденной опции равно <%1>" , Значение);
242
240
243
241
Если СтрНачинаетсяС (Значение, "-" ) Тогда
244
- Возврат РезультатПоискаОтрицательный(Аргументы, ОшибкаТребуетсяЗначение (ИмяОпции));
242
+ Возврат РезультатПоискаОтрицательный(Аргументы, ОшибкиПарсера.ОшибкаТребуетсяЗначениеДляОпции (ИмяОпции));
245
243
КонецЕсли ;
246
244
247
245
ОпцииКонтекст = КонтекстПоиска.Опции[Опция];
270
268
КонецЕсли ;
271
269
272
270
Если Не КлассОпции.Имя = Опция.Имя Тогда
273
- Ошибка = ОшибкаОжидаетсяВместо (Опция.Имя, ИмяОпции);
271
+ Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяОпцияВместо (Опция.Имя, ИмяОпции);
274
272
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка, 1 );
275
273
КонецЕсли ;
276
274
299
297
300
298
КонецЦикла ;
301
299
302
- Ошибка = ? (Обязательный, ОшибкаНеожидаемаяОпция(ТекущийАргумент), Неопределено );
300
+ Если Не ЗначениеЗаполнено (Ошибка) Тогда
301
+ Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяОпция(Опция.Имя);
302
+ КонецЕсли ;
303
303
304
304
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка, 1 );
305
305
320
320
Лог.Отладка("Класс опции по имени %1" , КлассОпции);
321
321
322
322
Если КлассОпции = Неопределено Тогда
323
- Ошибка = ОшибкаНеожидаемаяОпция(ИмяОпции);
323
+ Ошибка = ОшибкиПарсера. ОшибкаНеожидаемаяОпция(ИмяОпции);
324
324
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка);
325
325
КонецЕсли ;
326
326
329
329
Лог.Отладка("Строка содержит <=> второй элемент массива %1" , МассивСтрокаАргумента[1 ]);
330
330
331
331
Если Не КлассОпции.Имя = Опция.Имя Тогда
332
- Ошибка = ОшибкаОжидаетсяВместо (Опция.Имя, ИмяОпции);
332
+ Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяОпцияВместо (Опция.Имя, ИмяОпции);
333
333
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка, 1 );
334
334
КонецЕсли ;
335
335
336
336
Значение = МассивСтрокаАргумента[1 ];
337
337
338
338
Если ПустаяСтрока (Значение) Тогда
339
- Ошибка = ОшибкаТребуетсяЗначение (ИмяОпции);
339
+ Ошибка = ОшибкиПарсера.ОшибкаТребуетсяЗначениеДляОпции (ИмяОпции);
340
340
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка);
341
341
КонецЕсли ;
342
342
356
356
Или КлассОпции.ТипОпции = Тип ("Массив" ) И КлассОпции.ТипЭлементаОпции = Тип ("Булево" ) Тогда
357
357
358
358
Если Не КлассОпции.Имя = Опция.Имя Тогда
359
- Ошибка = ОшибкаОжидаетсяВместо (Опция.Имя, ИмяОпции);
359
+ Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяОпцияВместо (Опция.Имя, ИмяОпции);
360
360
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка, 1 );
361
361
КонецЕсли ;
362
362
377
377
378
378
Если Аргументы.Количество() - Индекс < 2 Тогда
379
379
Если Не КлассОпции.Имя = Опция.Имя Тогда
380
- Ошибка = ОшибкаОжидаетсяВместо (Опция.Имя, ИмяОпции);
380
+ Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяОпцияВместо (Опция.Имя, ИмяОпции);
381
381
Иначе
382
- Ошибка = ОшибкаТребуетсяЗначение (ИмяОпции);
382
+ Ошибка = ОшибкиПарсера.ОшибкаТребуетсяЗначениеДляОпции (ИмяОпции);
383
383
КонецЕсли ;
384
384
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка);
385
385
КонецЕсли ;
386
386
387
387
Если Не КлассОпции.Имя = Опция.Имя Тогда
388
- Ошибка = ОшибкаОжидаетсяВместо (Опция.Имя, ИмяОпции);
388
+ Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяОпцияВместо (Опция.Имя, ИмяОпции);
389
389
Возврат РезультатПоискаОтрицательный(Аргументы, Ошибка, 2 );
390
390
КонецЕсли ;
391
391
392
392
Значение = Аргументы[Индекс + 1 ];
393
393
394
394
Если СтрНачинаетсяС (Значение, "-" ) Тогда
395
- Возврат РезультатПоискаОтрицательный(Аргументы, ОшибкаТребуетсяЗначение (ИмяОпции));
395
+ Возврат РезультатПоискаОтрицательный(Аргументы, ОшибкиПарсера.ОшибкаТребуетсяЗначениеДляОпции (ИмяОпции));
396
396
КонецЕсли ;
397
397
398
398
Лог.Отладка("Значение длинной опции <%1>" , Значение);
399
399
400
400
Если ПустаяСтрока (Значение) Тогда
401
- Возврат РезультатПоискаОтрицательный(Аргументы, ОшибкаТребуетсяЗначение (ИмяОпции));
401
+ Возврат РезультатПоискаОтрицательный(Аргументы, ОшибкиПарсера.ОшибкаТребуетсяЗначениеДляОпции (ИмяОпции));
402
402
КонецЕсли ;
403
403
404
404
ОпцииКонтекст = КонтекстПоиска.Опции[Опция];
446
446
Возврат РезультатПоиска;
447
447
КонецФункции
448
448
449
- Функция ОшибкаТребуетсяЗначение (Имя )
450
- Возврат СтрШаблон ("Опция %1 должна содержать значение" , ВосстановитьТиреПередОпцией(Имя));
451
- КонецФункции
452
-
453
- Функция ОшибкаНеожидаемаяОпция (Имя )
454
- Возврат СтрШаблон ("Неожидаемая опция %1" , ВосстановитьТиреПередОпцией(Имя));
455
- КонецФункции
456
-
457
- Функция ОшибкаОжидаетсяОпция (Имя )
458
- Возврат СтрШаблон ("Ожидается опция %1" , ВосстановитьТиреПередОпцией(Имя));
459
- КонецФункции
460
-
461
- Функция ОшибкаОжидаетсяВместо (Имя , ИмяВместо )
462
- Если Не Обязательный Тогда
463
- Возврат Неопределено ;
464
- КонецЕсли ;
465
-
466
- Возврат СтрШаблон ("Ожидается опция %1 вместо %2" ,
467
- ВосстановитьТиреПередОпцией(Имя),
468
- ВосстановитьТиреПередОпцией(ИмяВместо));
469
- КонецФункции
470
-
471
- Функция ВосстановитьТиреПередОпцией (Имя )
472
-
473
- Если СтрНачинаетсяС (Имя, "-" ) Тогда
474
- Возврат Имя;
475
- КонецЕсли ;
476
-
477
- Если СтрДлина (Имя) > 1 Тогда
478
- Возврат "--" + Имя;
479
- Иначе
480
- Возврат "-" + Имя;
481
- КонецЕсли ;
482
-
483
- КонецФункции
484
-
485
449
Лог = Логирование.ПолучитьЛог("oscript.lib.cli_class_opt" );
0 commit comments