summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2017-01-09 16:45:53 -0500
committerLuke Shumaker <lukeshu@sbcglobal.net>2017-01-09 16:45:53 -0500
commit5022d1a0df1534b1cbec1cbee23568f201ea1cc6 (patch)
tree559db39e2be5933c621a02c3f9874641b7f1a70c
parentf63a89bb8c494ea6b049285ec7c904d6d6136a88 (diff)
Implement actual file generation, go through fixing things.
-rw-r--r--.gitignore2
-rw-r--r--lib/category.rb2
-rw-r--r--lib/page_index.rb14
-rw-r--r--lib/page_local.rb11
-rw-r--r--lib/sitegen.rb49
-rw-r--r--tmpl/index.atom.erb10
-rw-r--r--tmpl/page.atom.erb19
-rw-r--r--tmpl/page.html.erb2
8 files changed, 85 insertions, 24 deletions
diff --git a/.gitignore b/.gitignore
index 6883828..a7d4477 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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>