parameters: (tokens, options)
return_statement: return parsed
docstring: shorts ::= '-' ( chars )* [ [ ' ' ] chars ] ;
docstring_summary: shorts ::= '-' ( chars )* [ [ ' ' ] chars ] ;
docstring_tokens: shorts :: = - ( chars ) * [ [ ] chars ] ;
function: def parse_shorts(tokens, options):
      """shorts ::= '-' ( chars )* [ [ ' ' ] chars ] ;"""
      token = tokens.move()
      assert token.startswith('-') and not token.startswith('--')
      left = token.lstrip('-')
      parsed = []
      while left != '':
          short, left = '-' + left[0], left[1:]
          similar = [o for o in options if o.short == short]
          if len(similar) > 1:
              raise tokens.error('%s is specified ambiguously %d times' %
                                 (short, len(similar)))
          elif len(similar) < 1:
              o = Option(short, None, 0)
              options.append(o)
              if tokens.error is DocoptExit:
                  o = Option(short, None, 0, True)
          else:  # why copying is necessary here?
              o = Option(short, similar[0].long,
                         similar[0].argcount, similar[0].value)
              value = None
              if o.argcount != 0:
                  if left == '':
                      if tokens.current() in [None, '--']:
                          raise tokens.error('%s requires argument' % short)
                      value = tokens.move()
                  else:
                      value = left
                      left = ''
              if tokens.error is DocoptExit:
                  o.value = value if value is not None else True
          parsed.append(o)
      return parsed
function_tokens: def parse_shorts ( tokens , options ) : token = tokens . move ( ) assert token . startswith ( '-' ) and not token . startswith ( '--' ) left = token . lstrip ( '-' ) parsed = [ ] while left != '' : short , left = '-' + left [ 0 ] , left [ 1 : ] similar = [ o for o in options if o . short == short ] if len ( similar ) > 1 : raise tokens . error ( '%s is specified ambiguously %d times' % ( short , len ( similar ) ) ) elif len ( similar ) < 1 : o = Option ( short , None , 0 ) options . append ( o ) if tokens . error is DocoptExit : o = Option ( short , None , 0 , True ) else : # why copying is necessary here? o = Option ( short , similar [ 0 ] . long , similar [ 0 ] . argcount , similar [ 0 ] . value ) value = None if o . argcount != 0 : if left == '' : if tokens . current ( ) in [ None , '--' ] : raise tokens . error ( '%s requires argument' % short ) value = tokens . move ( ) else : value = left left = '' if tokens . error is DocoptExit : o . value = value if value is not None else True parsed . append ( o ) return parsed