summaryrefslogtreecommitdiff
path: root/bin/util.rb
diff options
context:
space:
mode:
Diffstat (limited to 'bin/util.rb')
-rw-r--r--bin/util.rb302
1 files changed, 0 insertions, 302 deletions
diff --git a/bin/util.rb b/bin/util.rb
deleted file mode 100644
index cd7974b..0000000
--- a/bin/util.rb
+++ /dev/null
@@ -1,302 +0,0 @@
-# coding: utf-8
-load 'pandoc.rb'
-require 'erb'
-require 'date'
-require 'set'
-require 'uri'
-
-$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",
-}
-
-$tag_names = {
- "DM" => "DMing Resource",
- "ES" => "Essay",
- "FF" => "Flash Fiction",
- "HB" => "Homebrew",
- "SS" => "Short Story",
- "WP" => "WIP",
-}
-
-$url = URI::parse('https://www.andrewdm.me')
-
-class Tag
- def initialize(abbr)
- @abbr = abbr
- end
- def abbr
- @abbr
- end
- def name
- $tag_names[@abbr]
- end
- def html
- return "<a class=\"tag #{abbr}\" href=\"/tags/#{abbr}.html\">#{name}</a>"
- end
-end
-
-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 showtitle ; @showtitle ||= ! pandoc['title'].nil? ; 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 content ; @content ||= pandoc.to('html5 '+(pandoc['pandoc_flags']||'')) ; end
- def head ; @head ||= pandoc['html_head_extra'] ; end
- def class ; @class ||= pandoc['class'] ; end
-
- def tags
- if @tags.nil?
- raw = pandoc['tags'] || []
- if raw.is_a?(String)
- raw = raw.split
- end
- @tags = raw.map{|tag|Tag.new(tag)}
- end
- @tags
- end
-
- def _published
- if @_published.nil?
- raw = pandoc['published']
- @_published = Date.parse(raw) unless raw.nil?
- end
- if @_published.nil?
- raw = `git log -n1 --reverse --format='%cI' -- #{infile}`
- @_published = DateTime.iso8601(raw) unless raw.empty?
- end
- @_published
- end
-
- def _updated
- if @_updated.nil?
- raw = pandoc['updated']
- @_updated = Date.parse(raw) unless raw.nil?
- end
- if @_updated.nil?
- raw = `git log -n1 --format='%cI' -- #{infile}`
- @_updated = DateTime.iso8601(raw) unless raw.empty?
- end
- @_updated
- end
-
- def published
- if @published.nil?
- unless _published.nil?
- @published = _published
- else
- unless _updated.nil?
- @published = _updated
- end
- end
- # sanity check
- unless _published.nil? or _updated.nil?
- if _updated < _published
- @published = _updated
- end
- end
- end
- @published
- end
-
- def updated
- if @updated.nil?
- unless _updated.nil?
- @updated = _updated
- else
- unless _published.nil?
- @updated = _published
- end
- end
- end
- @updated
- end
-
- def rights
- if published.nil? || updated.nil?
- years = ''
- else
- first = published.year
- last = updated.year
-
- years = `git log --date=format:'%Y' --format='%cd' -- .config/login.sh`.split('\n').map{|s|s.to_i}
- years.unshift(first)
- years.unshift(last)
-
- # Remove dups and git years outside of [first,last]
- # TODO: simplify year spans
- years = Set[*years.select{|i|i > first && i < last}].sort.join(', ')
- end
- @rights ||= "<p>The content of this page is Copyright © #{years} #{author.html}.</p>\n" +
- "<p>This page is licensed under the #{license.html} license.</p>"
- end
-
- def abssrcpath
- @srcpath ||= infile.sub(/^(src|out)\//, '/')
- end
- def absoutpath
- @outpath ||= abssrcpath.sub(/\.[^\/.]*$/, '.html').sub(/\/index[.]html$/, '')
- end
-
- def url
- @url ||= $url + absoutpath
- end
- def srcurl
- @srcurl ||= $url + abssrcpath
- end
-
- def breadcrumbs
- if @breadcrumbs.nil?
- bc = []
- u = url.path
- u = "/" if u == ""
- while u != "/"
- bc.unshift("<a href=\"#{u}\">#{File.basename(u, File.extname(u))}</a>")
- u = File.dirname(u)
- end
- bc.unshift("<a href=\"/\">Andrew D. Murrell</a>")
- @breadcrumbs = bc.join(' » ')
- end
- @breadcrumbs
- end
-
- def section
- return nil
- end
-end
-
-def html_escape(html)
- html
- .gsub('&', '&amp;')
- .gsub('>', '&gt;')
- .gsub('<', '&lt;')
-end
-
-class ExternPage
- def initialize(metadata)
- @metadata = metadata
- end
-
- def title
- @metadata['title']
- end
-
- def content
- nil
- end
-
- def tags
- if @tags.nil?
- raw = @metadata['tags'] || []
- if raw.is_a?(String)
- raw = raw.split
- end
- @tags = raw.map{|tag|Tag.new(tag)}
- end
- return @tags
- end
-
- def url
- return $url + @metadata['url']
- end
-
- def author
- Person.new(@metadata['author'] || "Andrew Murrell")
- end
-
- def published
- str = @metadata['published']
- if str.nil? and ! @metadata['updated'].nil?
- str = @metadata['updated']
- end
- return Date.parse(str)
- end
- def updated
- str = @metadata['updated']
- if str.nil? and ! @metadata['published'].nil?
- str = @metadata['published']
- end
- return Date.parse(str)
- end
-
- def section
- return @metadata['section']
- end
-end