docs: def _parseSpec(values):
  	"""
  	Split the argument string. Example:
  	
  	--arg name:value0,value1,key2=value2,key3=value3
  	
  	gets split into
  	
  	name, args, kwargs = (
  	    "name",
  	    (value0, value1),
  	    {"key2":value2, "key3":value3},
  	)
  	"""
  	split  = values.split(":", 1)
  	name   = split[0].strip()
  	rest   = split[1] if len(split) == 2 else ""
  	args   = []
  	kwargs = {}
  	
  	def carveRest(s, sep):
  		quotepairs = {"'": "'", "\"": "\"", "{":"}", "[":"]", "(":")"}
  		val   = ""
  		quote = ""
  		prevC = ""
  		for i, c in enumerate(s):
  			if quote:
  				if   c == quote[-1]  and prevC != "\\":
  					val    += c
  					prevC   = ""
  					quote   = quote[:-1]
  				elif c in quotepairs and prevC != "\\":
  					val    += c
  					prevC   = ""
  					quote  += quotepairs[c]
  				elif prevC == "\\":
  					val     = val[:-1]+c
  					prevC   = ""
  				else:
  					val    += c
  					prevC   = c
  			else:
  				if   c == sep:
  					break
  				elif c in quotepairs and prevC != "\\":
  					val    += c
  					prevC   = ""
  					quote  += quotepairs[c]
  				elif prevC == "\\":
  					val     = val[:-1]+c
  					prevC   = ""
  				else:
  					val    += c
  					prevC   = c
  			
  		return val, s[i+1:]
  	
  	while rest:
  		positionalVal, positionalRest = carveRest(rest, ",")
  		keywordKey,    keywordRest    = carveRest(rest, "=")
  		
  		#
  		# If the distance to the first "=" (or end-of-string) is STRICTLY
  		# shorter than the distance to the first ",", we have found a
  		# keyword argument.
  		#
  		
  		if len(keywordKey)<len(positionalVal):
  			key       = re.sub("\\s+", "", keywordKey)
  			val, rest = carveRest(keywordRest, ",")
  			try:    kwargs[key] = ast.literal_eval(val)
  			except: kwargs[key] = val
  		else:
  			if len(kwargs) > 0:
  				raise ValueError("Positional argument "+repr(r)+" found after first keyword argument!")
  			val, rest = positionalVal, positionalRest
  			try:    args += [ast.literal_eval(val)]
  			except: args += [val]
  	
  	return name, args, kwargs