shorts ::= '-' ( chars )* [ [ ' ' ] chars ] ;
(tokens, options)
| 332 | |
| 333 | |
| 334 | def parse_shorts(tokens, options): |
| 335 | """shorts ::= '-' ( chars )* [ [ ' ' ] chars ] ;""" |
| 336 | token = tokens.move() |
| 337 | assert token.startswith('-') and not token.startswith('--') |
| 338 | left = token.lstrip('-') |
| 339 | parsed = [] |
| 340 | while left != '': |
| 341 | short, left = '-' + left[0], left[1:] |
| 342 | similar = [o for o in options if o.short == short] |
| 343 | if len(similar) > 1: |
| 344 | raise tokens.error('%s is specified ambiguously %d times' % |
| 345 | (short, len(similar))) |
| 346 | elif len(similar) < 1: |
| 347 | o = Option(short, None, 0) |
| 348 | options.append(o) |
| 349 | if tokens.error is DocoptExit: |
| 350 | o = Option(short, None, 0, True) |
| 351 | else: # why copying is necessary here? |
| 352 | o = Option(short, similar[0].long, |
| 353 | similar[0].argcount, similar[0].value) |
| 354 | value = None |
| 355 | if o.argcount != 0: |
| 356 | if left == '': |
| 357 | if tokens.current() in [None, '--']: |
| 358 | raise tokens.error('%s requires argument' % short) |
| 359 | value = tokens.move() |
| 360 | else: |
| 361 | value = left |
| 362 | left = '' |
| 363 | if tokens.error is DocoptExit: |
| 364 | o.value = value if value is not None else True |
| 365 | parsed.append(o) |
| 366 | return parsed |
| 367 | |
| 368 | |
| 369 | def parse_pattern(source, options): |
no test coverage detected