require 'rbst' module Gentoo class GLEPGenerator < Jekyll::Generator GLEP_DIR = 'glep/' def generate(site) site.data['gleps'] ||= [] Dir.chdir(GLEP_DIR) do Dir.glob('glep-[0-9][0-9][0-9][0-9].rst').reverse_each do |name| begin site.pages << GLEPPage.new(site, name) rescue # fail them silently end end end site.data['gleps'] = site.data['gleps'].sort { |a, b| a['number'] <=> b['number'] } end end class GLEPPage < Jekyll::Page def initialize(site, name) @site = site @base = @site.source @dir = GLEPGenerator::GLEP_DIR @name = "#{name.chomp('.rst')}.html" process(@name) read_yaml(File.join(@base, GLEPGenerator::GLEP_DIR), name) data['permalink'] = "/glep/#{@name}" data['layout'] = 'glep' data['nav1'] = 'inside-gentoo' data['nav2'] = 'gleps' data['extracss'] = ['glep.css'] lines = File.readlines(File.join(@base, GLEPGenerator::GLEP_DIR, name)) while not lines.empty? line = lines.shift @number = $1.to_i if line =~ /^GLEP: (.*)$/ @title = $1 if line =~ /^Title: (.*)$/ @version = $1 if line =~ /^Version: (.*)$/ @lastmodified = $1 if line =~ /^Last-Modified: (.*)$/ @author = $1 if line =~ /^Author: (.*)$/ @discussionsto = $1 if line =~ /^Discussions-To: (.*)$/ @status = $1 if line =~ /^Status: (.*)$/ @type = $1 if line =~ /^Type: (.*)$/ @contenttype = $1 if line =~ /^Content-Type: (.*)$/ @requires = $1 if line =~ /^Requires: (.*)$/ @created = $1 if line =~ /^Created: (.*)$/ @posthistory = $1 if line =~ /^Post-History: (.*)$/ @replaces = $1 if line =~ /^Replaces: (.*)$/ @replacedby = $1 if line =~ /^Replaced-By: (.*)$/ break if line.chomp.empty? end @content = RbST.new(".. contents::\n..\n\n" + lines.join('')).to_html( 'initial-header-level' => 2) glep_data = { 'number' => @number, 'title' => @title, 'version' => @version, 'lastmodified' => @lastmodified, 'author' => @author, 'discussionsto' => @discussionsto, 'status' => @status, 'type' => @type, 'contenttype' => @contenttype, 'requires' => @requires, 'created' => @created, 'posthistory' => @posthistory, 'replaces' => @replaces, 'replacedby' => @replacedby, } data.update(glep_data) site.data['gleps'] << glep_data.merge({ 'url' => data['permalink'] }) end end end