1 #!/usr/bin/ruby -w
     
2 
     3 require 'asciidoctor'
     
4 require 'erb'
     
5 require 'pathname'
     
6 #require 'fileutils'
     
7 
     8 generate_all = (ARGV.length == 1 and ARGV[0] == '-a')
     
9 if generate_all
    
10   puts "Generating all pages!"
    
11 end
    
12 
    13 # Read the page template
    
14 template_file = 'template.html'
    
15 template = File.read(template_file)
    
16 @erb = ERB.new(template)
    
17 @erb.filename = template_file
    
18 
    19 new_pages = []
    
20 mod_pages = []
    
21 
    22 def make_page(infile, outfile)
    
23   # note: safe mode 1 allows include[] macros but paths must be within parent dir
    
24   doc = Asciidoctor.load_file infile, header_footer: false, safe: 1
    
25 
    26   # Set vars used in template - note that the "_" prefix prevents an
    
27   # 'assigned but unused variable' warning in Ruby.
    
28   _title     = doc.attributes['title'] || "Untitled Page"
    
29   _subtitle  = doc.attributes['subtitle'] || ""
    
30   _created   = doc.attributes['created'] || ""
    
31   _updated   = doc.attributes['updated'] || ""
    
32   _updated_reason   = doc.attributes['updated_reason'] || ""
    
33   _tags      = doc.attributes['tags'] || ""
    
34   _draft     = doc.attributes['draft'] || ""
    
35   _body      = doc.convert
    
36   _generated = Time.now
    
37   _copyright_year = Time.now.strftime("%Y")
    
38   _pkgblog   = false
    
39   _cards     = false
    
40 
    41   # see if it's a pkgblog path - super dumb/easy way :-)
    
42   if infile.to_s =~ /pkgblog/
    
43     _pkgblog = true
    
44   end
    
45 
    46   # see if it's a cards/ path - super dumb/easy way :-)
    
47   if infile.to_s =~ /cards/
    
48     _cards = true
    
49   end
    
50 
    51 
    52   File.open(outfile, 'w') do |f|
    
53     f.puts @erb.result(binding)
    
54   end
    
55 end
    
56 
    57 Pathname.glob("src/**/*.adoc").each do |infile|
    
58   needs_update = false
    
59 
    60   # Wow, replacing ".adoc" not with ".html", but with NOTHING!
    
61   outfile = infile.sub_ext('')
    
62 
    63   #puts "input: #{infile} (#{infile.mtime})"
    
64 
    65   if not outfile.exist?
    
66     needs_update = true
    
67     new_pages << outfile
    
68   else
    
69     if (outfile.mtime < infile.mtime) or generate_all
    
70       needs_update = true
    
71       mod_pages << outfile
    
72     end
    
73   end
    
74 
    75   if needs_update
    
76     make_page infile, outfile
    
77   end
    
78 end
    
79 
    80 puts "NEW: #{new_pages.join(' ')}"
    
81 puts "MOD: #{mod_pages.join(' ')}"