def HTree.expand_template(*args, &block)
if block
template = block.call
binding = block
else
pathname = args.shift
obj = args.shift
if pathname.respond_to? :read
template = pathname.read.untaint
if template.respond_to? :charset
template = Iconv.conv(HTree::Encoder.internal_charset, template.charset, template)
end
else
template = File.read(pathname).untaint
end
binding = eval("lambda {|context_object| context_object.instance_eval 'binding'}",
HTree::EmptyBindingObject.empty_binding).call(obj)
end
out = args.shift || $stdout
encoding = args.shift || HTree::Encoder.internal_charset
if !args.empty?
raise ArgumentError, "wrong number of arguments"
end
HTree::TemplateCompiler.new.expand_template(template, out, encoding, binding)
end