@@ -156,55 +156,7 @@ bool cmdlinet::parse(int argc, const char **argv, const char *optstring)
156
156
clear ();
157
157
158
158
parse_optstring (optstring);
159
-
160
- for (int i=1 ; i<argc; i++)
161
- {
162
- if (argv[i][0 ]!=' -' )
163
- args.push_back (argv[i]);
164
- else
165
- {
166
- optionalt<std::size_t > optnr;
167
-
168
- if (argv[i][1 ]!=0 && argv[i][2 ]==0 )
169
- optnr=getoptnr (argv[i][1 ]); // single-letter option -X
170
- else if (argv[i][1 ]==' -' )
171
- optnr=getoptnr (argv[i]+2 ); // multi-letter option with --XXX
172
- else
173
- {
174
- // Multi-letter option -XXX, or single-letter with argument -Xval
175
- // We first try single-letter.
176
- optnr=getoptnr (argv[i][1 ]);
177
-
178
- if (!optnr.has_value ()) // try multi-letter
179
- optnr=getoptnr (argv[i]+1 );
180
- }
181
-
182
- if (!optnr.has_value ())
183
- {
184
- unknown_arg=argv[i];
185
- return true ;
186
- }
187
-
188
- options[*optnr].isset =true ;
189
-
190
- if (options[*optnr].hasval )
191
- {
192
- if (argv[i][2 ]==0 || options[*optnr].islong )
193
- {
194
- i++;
195
- if (i==argc)
196
- return true ;
197
- if (argv[i][0 ]==' -' && argv[i][1 ]!=0 )
198
- return true ;
199
- options[*optnr].values .push_back (argv[i]);
200
- }
201
- else
202
- options[*optnr].values .push_back (argv[i]+2 );
203
- }
204
- }
205
- }
206
-
207
- return false ;
159
+ return parse_arguments (argc, argv);
208
160
}
209
161
210
162
cmdlinet::option_namest cmdlinet::option_names () const
@@ -315,6 +267,57 @@ cmdlinet::get_argument_suggestions(const std::string &unknown_argument)
315
267
return final_suggestions;
316
268
}
317
269
270
+ bool cmdlinet::parse_arguments (int argc, const char **argv)
271
+ {
272
+ for (int i = 1 ; i < argc; i++)
273
+ {
274
+ if (argv[i][0 ] != ' -' )
275
+ args.push_back (argv[i]);
276
+ else
277
+ {
278
+ optionalt<std::size_t > optnr;
279
+
280
+ if (argv[i][1 ] != 0 && argv[i][2 ] == 0 )
281
+ optnr = getoptnr (argv[i][1 ]); // single-letter option -X
282
+ else if (argv[i][1 ] == ' -' )
283
+ optnr = getoptnr (argv[i] + 2 ); // multi-letter option with --XXX
284
+ else
285
+ {
286
+ // Multi-letter option -XXX, or single-letter with argument -Xval
287
+ // We first try single-letter.
288
+ optnr = getoptnr (argv[i][1 ]);
289
+
290
+ if (!optnr.has_value ()) // try multi-letter
291
+ optnr = getoptnr (argv[i] + 1 );
292
+ }
293
+
294
+ if (!optnr.has_value ())
295
+ {
296
+ unknown_arg = argv[i];
297
+ return true ;
298
+ }
299
+
300
+ options[*optnr].isset = true ;
301
+
302
+ if (options[*optnr].hasval )
303
+ {
304
+ if (argv[i][2 ] == 0 || options[*optnr].islong )
305
+ {
306
+ i++;
307
+ if (i == argc)
308
+ return true ;
309
+ if (argv[i][0 ] == ' -' && argv[i][1 ] != 0 )
310
+ return true ;
311
+ options[*optnr].values .push_back (argv[i]);
312
+ }
313
+ else
314
+ options[*optnr].values .push_back (argv[i] + 2 );
315
+ }
316
+ }
317
+ }
318
+ return false ;
319
+ }
320
+
318
321
cmdlinet::option_namest::option_names_iteratort::option_names_iteratort (
319
322
const cmdlinet *command_line,
320
323
std::size_t index)
0 commit comments