lib/compiler.rb in nanoc-1.2 vs lib/compiler.rb in nanoc-1.3
- old
+ new
@@ -37,35 +37,27 @@
# Compile all pages
pages = compile_pages(uncompiled_pages)
# Put pages in their layouts
pages.each do |page|
- # Prepare layout content
- content = nil
- context = { :page => page.merge(:_content_filename => nil), :pages => pages }
- layout = layout_for_page(page)
+ # Skip pages that should not be outputed
+ next if page.skip_output
+
begin
- case layout[:type]
- when :eruby
- content = layout[:content].eruby(context)
- when :haml
- content = layout[:content].haml(context)
- when :markaby
- content = layout[:content].markaby(context)
- when :liquid
- content = layout[:content].liquid(context)
- end
+ # Prepare layout content
+ content = layouted_page(page, pages)
+
+ # Write page with layout
+ FileManager.create_file(path_for_page(page)) { content }
rescue => exception
- $stderr.puts "Exception occured while layouting page" +
+ $stderr.puts "Exception occured while layouting page " +
"'#{page[:_content_filename]}' in layout '#{page[:layout]}':" unless $quiet
$stderr.puts exception unless $quiet
$stderr.puts exception.backtrace.join("\n") unless $quiet
exit
end
- # Write page with layout
- FileManager.create_file(path_for_page(page)) { content }
end
end
private
@@ -131,30 +123,64 @@
end
end
# Compiles the given pages and returns the compiled pages
def compile_pages(a_pages)
- a_pages.inject([]) do |pages, page|
+ # Create page objects from given pages
+ given_pages = []
+ a_pages.each { |page| given_pages << Page.new(page) }
+
+ # Create arrays for two kinds of pages
+ compiled_pages = []
+ uncompiled_pages = []
+ given_pages.each { |page| uncompiled_pages << page }
+
+ # Compile all pages
+ given_pages.each do |page|
# Read page
- content = File.read(page[:_content_filename])
+ content = File.read(page._content_filename)
- # Filter page
+ # Compile page
begin
- content = content.filter(page[:filters], :assigns => { :page => Page.new(page), :pages => pages })
+ content = content.filter(page.filters, :assigns => { :page => page, :pages => uncompiled_pages + compiled_pages })
rescue Exception => exception
- $stderr.puts "Exception occured while compiling page" +
+ $stderr.puts "Exception occured while compiling page " +
"'#{page[:_content_filename]}':" unless $quiet
$stderr.puts exception unless $quiet
$stderr.puts exception.backtrace.join("\n") unless $quiet
exit
end
+ # Move from uncompiled to compiled
+ uncompiled_pages -= [ page ]
+ compiled_pages += [ page ]
+
# Create compiled page
- compiled_page = page.merge( :content => content )
+ page[:content] = content
+ end
- # Remember page
- pages + [ Page.new(compiled_page) ]
+ # Return all pages
+ compiled_pages
+ end
+
+ # Layouts the page
+ def layouted_page(a_page, a_pages)
+ context = { :page => a_page.merge(:_content_filename => nil), :pages => a_pages }
+ layout = layout_for_page(a_page)
+
+ content = nil
+ case layout[:type]
+ when :eruby
+ content = layout[:content].eruby(context)
+ when :haml
+ content = layout[:content].haml(context)
+ when :markaby
+ content = layout[:content].markaby(context)
+ when :liquid
+ content = layout[:content].liquid(context)
end
+
+ content
end
end
end