class Bake::Arguments

def extract(arguments)

def extract(arguments)
	while argument = arguments.first
		if /^--(?<name>.*)$/ =~ argument
			# Consume the argument:
			arguments.shift
			
			if name.empty?
				break
			end
			
			name = normalize(name)
			
			# Extract the trailing arguments:
			@options[name] = extract_arguments(name, arguments)
		elsif /^(?<name>.*?)=(?<value>.*)$/ =~ argument
			# Consume the argument:
			arguments.shift
			
			name = name.to_sym
			
			# Extract the single argument:
			@options[name] = extract_argument(name, value)
		elsif @ordered.size < @arity
			_, name = @parameters.shift
			value = arguments.shift
			
			# Consume it:
			@ordered << extract_argument(name, value)
		else
			break
		end
	end
	
	return @ordered, @options
end