From 3d989e2caf683d8300ae4e8191b81fd6fe0c0948 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 7 Jan 2017 00:14:22 -0500 Subject: more --- check.rb | 19 +++++++++++++++++-- lib/page_index.rb | 3 ++- lib/page_local.rb | 3 +++ lib/sitegen.rb | 27 +++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/check.rb b/check.rb index 5e2a4ba..2a9fbc6 100755 --- a/check.rb +++ b/check.rb @@ -1,4 +1,19 @@ #!/usr/bin/env ruby +require 'sitegen' require 'page_index' -top = IndexPage::new('src') -print top.local_input + +# Initialize the site generator +Sitegen::init + +# This should trigger a full recursive crawl, loadng everything into +# the sitegen. +IndexPage::new('src').local_input + +# Tell the sitegen which files we want +Sitegen.pages.each do |page| + Sitegen::want(page.local_outfile) +end +Sitegen::want('out/index.atom') + +# Dump dependencies as a Makefile +print Sitegen::Makefile() diff --git a/lib/page_index.rb b/lib/page_index.rb index 6354c8a..178525c 100644 --- a/lib/page_index.rb +++ b/lib/page_index.rb @@ -72,8 +72,9 @@ class IndexPage < LocalPage if File::exist?(yamlfile) deps.add(yamlfile) end - index_pages.each{|p|deps.merge(p.local_outfile[''])} + index_pages.select{|p|!p.is_a?(RemotePage)}.each{|p|deps.merge(p.local_depends[''])} @depends = { + '' => deps, "#{basename}/index.html" => deps.clone.merge(["tmpl/index.md.erb", "tmpl/page.html.erb"]), "#{basename}/index.atom" => deps.clone.merge(["tmpl/index.atom.erb", "tmpl/page.atom.erb"]), } diff --git a/lib/page_local.rb b/lib/page_local.rb index 5b2af3b..ad4e970 100644 --- a/lib/page_local.rb +++ b/lib/page_local.rb @@ -8,10 +8,12 @@ require 'license' require 'page' require 'pandoc' require 'person' +require 'sitegen' class LocalPage < Page def initialize(infile) @infile = infile + Sitegen::add(self) end # Some of this code looks a little weird because it is @@ -103,6 +105,7 @@ class LocalPage < Page if @depends.nil? basename = local_infile.sub(/^src/, 'out').sub(/\.[^\/.]*$/, '') @depends = { + '' => Set[local_infile], "#{basename}.html" => Set[local_infile, "tmpl/page.html.erb"], #"#{basename}.atom" => Set[local_infile, "tmpl/page.atom.erb"] } diff --git a/lib/sitegen.rb b/lib/sitegen.rb index e69de29..f565d20 100644 --- a/lib/sitegen.rb +++ b/lib/sitegen.rb @@ -0,0 +1,27 @@ +# coding: utf-8 +require 'set' + +module Sitegen + def self.init + @set = Set[] + @mk = {} + end + def self.add(page) + @set.add(page) + end + def self.pages + @set + end + def self.want(filename) + page = pages.select{|page|page.local_depends.keys.include?(filename)}.first + @mk[filename] = page + end + def self.Makefile() + str = '' + str += "all: #{@mk.keys.sort.join(' ')}\n" + @mk.each do |filename, page| + str += "#{filename}: #{page.local_depends[filename].sort.join(' ')}\n" + end + return str + end +end -- cgit v1.2.3