summaryrefslogtreecommitdiff
path: root/bin/util.rb
blob: ce910074f6d1825815fdee4d4ec1ad8d3ea2aa28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# coding: utf-8
load 'pandoc.rb'
require 'erb'
require 'date'

$license_urls = {
	"CC BY-SA-3.0" => 'https://creativecommons.org/licenses/by-sa/3.0/',
	'WTFPL-2' => "http://www.wtfpl.net/txt/copying/",
}
$person_uris = {
	"Luke Shumaker" => "https://lukeshu.com/",
	"Andrew Murrell" => "https://andrewdm.me/",
}
$person_emails = {
	"Luke Shumaker" => "lukeshu@parabola.nu",
	"Andrew Murrell" => "ImFromNASA@gmail.com",
}

class Person
	def initialize(name)
		@name = name
	end
	def name
		@name
	end
	def uri
		$person_uris[@name]
	end
	def email
		$person_emails[@name]
	end
	def html
		if not email.nil?
			return "<a href=\"mailto:#{email}\">#{name}</a>"
		elsif not uri.nil?
			return "<a href=\"#{uri}\">#{name}</a>"
		else
			return @name
		end
	end
	def atom
		ret = ""
		ret += "<name>#{name}</name>" unless name.nil?
		ret += "<uri>#{uri}</uri>" unless uri.nil?
		ret += "<email>#{email}</email>" unless email.nil?
	end
end

class License
	def initialize(name)
		@name = name
	end
	def name
		@name
	end
	def url
		$license_urls[@name]
	end
	def html
		"<a href=\"#{url}\">#{name}</a>"
	end
end

class Page
	def initialize(infile)
		@infile = infile
	end

	def infile ; @infile                      ; end
	def input  ; @input ||= File.read(infile) ; end
	def pandoc
		if @pandoc.nil?
			types = {
				'md' => 'markdown'
			}

			ext = File.extname(infile).gsub(/^[.]/, '')
			type = types[ext] || ext
			@pandoc = Pandoc::load(type, input)

			if @pandoc['pandoc_format']
				@pandoc = Pandoc::load(@pandoc['pandoc_format'], input)
			end
		end
		@pandoc
	end

	def title   ; @title   ||=             pandoc['title']   || input.split("\n",2).first ; end
	def author  ; @author  ||= Person.new( pandoc['author']  || "Andrew Murrell")         ; end
	def license ; @license ||= License.new(pandoc['license'] || "CC BY-SA-3.0")           ; end
	def date    ; @date    ||= Date.parse(pandoc['date']) unless pandoc['date'].nil?      ; end
	def slug    ; @slug    ||= infile.sub(/\..*$/,'').sub(/^.*\//,'')                     ; end
	def content ; @content ||= pandoc.to('html5 '+(pandoc['pandoc_flags']||''))           ; end
	def head    ; @head    ||= pandoc['html_head_extra']                                  ; end

	def rights
		@rights ||= "<p>The content of this page is Copyright © #{date.year unless date.nil?} #{author.html}.</p>\n" +
					"<p>This page is licensed under the #{license.html} license.</p>"
	end

	def breadcrumbs
		@breadcrumbs ||= '<a href="/">Andrew Murrell</a> » ' + ( (slug == 'index') ? "blog" : "<a href=/blog>blog</a> » #{slug}" )
	end
end

def html_escape(html)
	html
		.gsub('&', '&amp;')
		.gsub('>', '&gt;')
		.gsub('<', '&lt;')
end