def render(identifier, other_assigns={}, &block)
layout = @site.layouts.find { |l| l.identifier == identifier.cleaned_identifier }
raise Nanoc::Errors::UnknownLayout.new(identifier.cleaned_identifier) if layout.nil?
Nanoc::NotificationCenter.post(:visit_started, layout)
Nanoc::NotificationCenter.post(:visit_ended, layout)
captured_content = block_given? ? capture(&block) : nil
assigns = {
:content => captured_content,
:item => @item,
:item_rep => @item_rep,
:items => @items,
:layout => layout,
:layouts => @layouts,
:config => @config,
:site => @site
}.merge(other_assigns)
filter_name, filter_args = @site.compiler.rules_collection.filter_for_layout(layout)
raise Nanoc::Errors::CannotDetermineFilter.new(layout.identifier) if filter_name.nil?
filter_class = Nanoc::Filter.named(filter_name)
raise Nanoc::Errors::UnknownFilter.new(filter_name) if filter_class.nil?
filter = filter_class.new(assigns)
begin
Nanoc::NotificationCenter.post(:processing_started, layout)
result = filter.setup_and_run(layout.raw_content, filter_args)
if block_given?
erbout = eval('_erbout', block.binding)
erbout << result
''
else
result
end
ensure
Nanoc::NotificationCenter.post(:processing_ended, layout)
end
end