summaryrefslogtreecommitdiff
path: root/lib
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 /lib
parentf63a89bb8c494ea6b049285ec7c904d6d6136a88 (diff)
Implement actual file generation, go through fixing things.
Diffstat (limited to 'lib')
-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
4 files changed, 69 insertions, 7 deletions
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