diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2017-01-09 16:45:53 -0500 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2017-01-09 16:45:53 -0500 |
commit | 5022d1a0df1534b1cbec1cbee23568f201ea1cc6 (patch) | |
tree | 559db39e2be5933c621a02c3f9874641b7f1a70c | |
parent | f63a89bb8c494ea6b049285ec7c904d6d6136a88 (diff) |
Implement actual file generation, go through fixing things.
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | lib/category.rb | 2 | ||||
-rw-r--r-- | lib/page_index.rb | 14 | ||||
-rw-r--r-- | lib/page_local.rb | 11 | ||||
-rw-r--r-- | lib/sitegen.rb | 49 | ||||
-rw-r--r-- | tmpl/index.atom.erb | 10 | ||||
-rw-r--r-- | tmpl/page.atom.erb | 19 | ||||
-rw-r--r-- | tmpl/page.html.erb | 2 |
8 files changed, 85 insertions, 24 deletions
@@ -1,4 +1,2 @@ /out/ -/www/ .tmp* -.var* diff --git a/lib/category.rb b/lib/category.rb index 266da34..b60c82e 100644 --- a/lib/category.rb +++ b/lib/category.rb @@ -15,6 +15,6 @@ class Category return "<a class=\"tag #{abbr}\" href=\"/tags/#{abbr}.html\">#{name}</a>" end def atom - return "<category term=\"#{term}\" label=\"#{name}\" />" + return "<category term=\"#{abbr}\" label=\"#{name}\" />" end end diff --git a/lib/page_index.rb b/lib/page_index.rb index 178525c..fed7e5f 100644 --- a/lib/page_index.rb +++ b/lib/page_index.rb @@ -41,6 +41,17 @@ class IndexPage < LocalPage end @pages end + def index_pages_leaves + ret = Set[] + index_pages.each do |page| + if page.is_a?(IndexPage) + ret.merge(page.index_pages) + else + ret.add(page) + end + end + return ret + end def index_link(cururl, depth) ret = '' @@ -61,6 +72,9 @@ class IndexPage < LocalPage _metadata['title'] end + def local_intype + return 'markdown' + end def local_outfile local_infile.sub(/^src/, 'out')+"/index.html" end diff --git a/lib/page_local.rb b/lib/page_local.rb index ca3aa31..da8689d 100644 --- a/lib/page_local.rb +++ b/lib/page_local.rb @@ -21,15 +21,16 @@ class LocalPage < Page def local_infile ; @infile ; end def local_input ; @input ||= File::read(local_infile); end - def _pandoc - if @pandoc.nil? + def local_intype types = { 'md' => 'markdown' } - ext = File::extname(local_infile).gsub(/^[.]/, '') - type = types[ext] || ext - @pandoc = Pandoc::load(type, local_input) + return types[ext] || ext + end + def _pandoc + if @pandoc.nil? + @pandoc = Pandoc::load(local_intype, local_input) if @pandoc['pandoc_format'] @pandoc = Pandoc::load(@pandoc['pandoc_format'], local_input) diff --git a/lib/sitegen.rb b/lib/sitegen.rb index c6e89e9..765cfbd 100644 --- a/lib/sitegen.rb +++ b/lib/sitegen.rb @@ -1,5 +1,6 @@ # coding: utf-8 require 'date' +require 'fileutils' require 'set' module Sitegen @@ -60,6 +61,52 @@ module Sitegen end def self.generate(target) - # TODO + case + when @mk[target].nil? + raise "No rule to make target '#{target}'. Stop." + when target.end_with?(".atom") + write_ifchanged(target) do |file| + file.puts('<?xml version="1.0" encoding="utf-8"?>') + file.print(@mk[target].atom) + end + when target.end_with?(".html") + write_ifchanged(target) do |file| + file.print(@mk[target].html) + end + else + raise "No rule to make target '#{target}'. Stop." + end + end + + def self.write_ifchanged(outfilename) + tmpfilename = "#{File::dirname(outfilename)}/.tmp#{File::basename(outfilename)}" + + # Write our stuff to tmpfile + FileUtils::mkdir_p(File::dirname(tmpfilename)) + tmpfile = File::new(tmpfilename, 'wb') + begin + yield tmpfile + rescue Exception => e + tmpfile.close + File::unlink(tmpfilename) + raise e + end + tmpfile.close + + # Now see if we should replace outfile with tmpfile + same = false + begin + if FileUtils::compare_file(tmpfilename, outfilename) + same = true + end + rescue Errno::ENOENT + end + + # And actually do so + if same + File::unlink(tmpfilename) + else + File::rename(tmpfilename, outfilename) + end end end diff --git a/tmpl/index.atom.erb b/tmpl/index.atom.erb index 54e4b72..8719d05 100644 --- a/tmpl/index.atom.erb +++ b/tmpl/index.atom.erb @@ -1,12 +1,12 @@ <feed xmlns="http://www.w3.org/2005/Atom"> - <title>AndrewDM.me <%= @title %></title> + <title><%= atom_title %></title> <link rel="self" type="application/atom+xml" href="./index.atom"/> <link rel="alternate" type="text/html" href="./"/> <link rel="alternate" type="text/markdown" href="./index.md"/> - <updated><%= @pages.map{|p|p.updated}.sort.last.rfc3339 %></updated> - <author><%= Person.new("Andrew Murrell").atom %></author> - <id><%= $url %></id> + <updated><%= index_pages_leaves.map{|p|p.atom_updated}.sort.last.to_datetime.rfc3339 %></updated> + <author><%= Person.new(Config::get.default_author).atom %></author> + <id><%= url %></id> - <% @pages.sort_by{|p| p.updated}.reverse.each do |page| %><%=@page.atom %><% end %> + <% index_pages_leaves.sort_by{|p|p.atom_updated}.reverse.each do |page| %><%= page.atom %><% end %> </feed> diff --git a/tmpl/page.atom.erb b/tmpl/page.atom.erb index ea37ea5..d690974 100644 --- a/tmpl/page.atom.erb +++ b/tmpl/page.atom.erb @@ -1,10 +1,11 @@ -<entry xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" type="text/html" href="<%= page.url %>"/> - <id><%= page.url %></id> - <updated><%= page.updated.rfc3339 %></updated> - <published><%= page.published.rfc3339 %></published> - <title><%= page.title %></title> - <author><%= page.author.atom %></author> - <% if page.content %><content type="html"><%= html_escape(page.content) %></content><% end %> - <% if page.rights %><rights type="html"><%= html_escape(page.rights) %></rights><% end %> +<% require 'siteutil' %><entry xmlns="http://www.w3.org/2005/Atom"> + <link rel="alternate" type="text/html" href="<%= url %>"/> + <id><%= url %></id> + <updated><%= atom_updated.to_datetime.rfc3339 %></updated> + <published><%= atom_published.to_datetime.rfc3339 %></published> + <title><%= atom_title %></title> + <author><%= atom_author.atom %></author> + <% atom_categories.each do |c| %><%= c.atom %><% end %> + <% if atom_content %><content type="html"><%= SiteUtil::html_escape(atom_content) %></content><% end %> + <% if atom_rights %><rights type="html"><%= SiteUtil::html_escape(atom_rights) %></rights><% end %> </entry> diff --git a/tmpl/page.html.erb b/tmpl/page.html.erb index dae08eb..fb5ddaa 100644 --- a/tmpl/page.html.erb +++ b/tmpl/page.html.erb @@ -29,7 +29,7 @@ </article> <footer> <%= atom_rights %> - <p>Page source: <a href="<%= url.route_to(local_srcurl) %>"><%= File.basename(local_srcurl.to_s) %></a></p> + <% if local_srcurl %><p>Page source: <a href="<%= url.route_to(local_srcurl) %>"><%= File.basename(local_srcurl.to_s) %></a></p><% end %> <p>Website source: <a href="https://git.andrewdm.me/www.git">www.git</a></p> </footer> </body> |