docs: def parse_long(tokens, options):
      """long ::= '--' chars [ ( ' ' | '=' ) chars ] ;"""
      long, eq, value = tokens.move().partition('=')
      assert long.startswith('--')
      value = None if eq == value == '' else value
      similar = [o for o in options if o.long == long]
      if tokens.error is DocoptExit and similar == []:  # if no exact match
          similar = [o for o in options if o.long and o.long.startswith(long)]
      if len(similar) > 1:  # might be simply specified ambiguously 2+ times?
          raise tokens.error('%s is not a unique prefix: %s?' %
                             (long, ', '.join(o.long for o in similar)))
      elif len(similar) < 1:
          argcount = 1 if eq == '=' else 0
          o = Option(None, long, argcount)
          options.append(o)
          if tokens.error is DocoptExit:
              o = Option(None, long, argcount, value if argcount else True)
      else:
          o = Option(similar[0].short, similar[0].long,
                     similar[0].argcount, similar[0].value)
          if o.argcount == 0:
              if value is not None:
                  raise tokens.error('%s must not have an argument' % o.long)
          else:
              if value is None:
                  if tokens.current() in [None, '--']:
                      raise tokens.error('%s requires argument' % o.long)
                  value = tokens.move()
          if tokens.error is DocoptExit:
              o.value = value if value is not None else True
      return [o]