class Phlex::SGML

def __nested_tokens__(tokens)

def __nested_tokens__(tokens)
	buffer = +""
	i, length = 0, tokens.length
	while i < length
		token = tokens[i]
		case token
		when String
			if i > 0
				buffer << " " << token
			else
				buffer << token
			end
		when Symbol
			if i > 0
				buffer << " " << token.name.tr("_", "-")
			else
				buffer << token.name.tr("_", "-")
			end
		when Integer, Float, Phlex::SGML::SafeObject
			if i > 0
				buffer << " " << token.to_s
			else
				buffer << token.to_s
			end
		when Array
			if token.length > 0
				if i > 0
					buffer << " " << __nested_tokens__(token)
				else
					buffer << __nested_tokens__(token)
				end
			end
		when nil
			# Do nothing
		else
			raise Phlex::ArgumentError.new("Invalid token type: #{token.class}.")
		end
		i += 1
	end
	buffer.gsub('"', "&quot;")
end