Parse the string list *args* as a set of keyword arguments in a very
    simple-minded way, splitting on equals signs. Returns a
    :class:`pwkit.Holder` instance with attributes set to strings. The form
    ``+foo`` is mapped to setting ``foo = True`` on the :class:`pwkit.Holder`
    instance. If *args* is ``None``, ``sys.argv[1:]`` is used. Raises
    :exc:`KwargvError` on invalid arguments (i.e., ones without an equals sign
    or a leading plus sign).

def basic(args=None):
    """Parse the string list *args* as a set of keyword arguments in a very
    simple-minded way, splitting on equals signs. Returns a
    :class:`pwkit.Holder` instance with attributes set to strings. The form
    ``+foo`` is mapped to setting ``foo = True`` on the :class:`pwkit.Holder`
    instance. If *args* is ``None``, ``sys.argv[1:]`` is used. Raises
    :exc:`KwargvError` on invalid arguments (i.e., ones without an equals sign
    or a leading plus sign).

    """
    if args is None:
        import sys
        args = sys.argv[1:]

    parsed = Holder()

    for arg in args:
        if arg[0] == '+':
            for kw in arg[1:].split(','):
                parsed.set_one(kw, True)
            # avoid analogous -a,b,c syntax because it gets confused with -a --help, etc.
        else:
            t = arg.split('=', 1)
            if len(t) < 2:
                raise KwargvError('don\'t know what to do with argument "%s"', arg)
            if not len(t[1]):
                raise KwargvError('empty value for keyword argument "%s"', t[0])
            parsed.set_one(t[0], t[1])

    return parsed