def layout(layout_identifier)
raise Nanoc3::Errors::CannotLayoutBinaryItem.new(self) if self.binary?
snapshot(:pre) unless @content[:pre]
layout = layout_with_identifier(layout_identifier)
filter, filter_name, filter_args = filter_for_layout(layout)
@item.site.compiler.stack.push(layout)
Nanoc3::NotificationCenter.post(:filtering_started, self, filter_name)
@content[:last] = filter.run(layout.raw_content, filter_args)
Nanoc3::NotificationCenter.post(:filtering_ended, self, filter_name)
@item.site.compiler.stack.pop
snapshot(:post)
end