summaryrefslogtreecommitdiffstats
path: root/_scripts
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2014-05-26 13:44:59 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2014-05-26 13:44:59 +0200
commit6104c4538a614d7bc91338f4b151a02b6e685e41 (patch)
treed5b2bdfa585411a8ec9fad661bd91359b0a7cd2a /_scripts
downloadalpine-mksite-6104c4538a614d7bc91338f4b151a02b6e685e41.tar.bz2
alpine-mksite-6104c4538a614d7bc91338f4b151a02b6e685e41.tar.xz
initial commit
Diffstat (limited to '_scripts')
-rw-r--r--_scripts/generate_page.lua67
1 files changed, 67 insertions, 0 deletions
diff --git a/_scripts/generate_page.lua b/_scripts/generate_page.lua
new file mode 100644
index 0000000..d6d60c3
--- /dev/null
+++ b/_scripts/generate_page.lua
@@ -0,0 +1,67 @@
+#!/usr/bin/lua
+
+markdown = require('discount')
+yaml = require('yaml')
+
+function read_markdown(file)
+ local f = assert(io.open(file))
+ local data = f:read("*a")
+ f:close()
+ local yml, md = data:match("^(%-%-%-.-%-%-%-)(.*)$")
+ local t
+ local pagename = file:gsub(".md$","")
+ if yml and md then
+ t = yaml.load(yml)
+ t.pagename = pagename
+ return t, markdown(md)
+ else
+ return {title=pagename, pagename=pagename}, markdown(data)
+ end
+end
+
+function read_layout(file)
+ -- try look for template for 'path/file.md' in this order:
+ -- path/file.template.html
+ -- layout.template.html
+ for _,t in pairs{file:gsub(".md$", ".template.html"),
+ "layout.template.html"} do
+ local f = io.open(t)
+ if f then
+ local data = f:read("*a")
+ f:close()
+ return data
+ end
+ end
+end
+
+function generate_navbar(active)
+ local f = assert(io.open("_navbar.yaml"))
+ local nav = yaml.load(f:read("*a"))
+ f:close()
+ local data = ""
+ for align, menu in pairs(nav) do
+ data = ('%s<span class="%s">'):format(data, align)
+ for _,t in pairs(menu) do
+ for label, ref in pairs(t) do
+ data = ('%s<a href="%s">%s</a>'):format(data,
+ ref, label)
+ end
+ end
+ data = data ..'</span>\n'
+ end
+ return data
+end
+
+function replace_tags(content, meta)
+ return content:gsub("{{(.-)}}", function(tag)
+ return meta[tag]
+ end)
+end
+
+page, content = read_markdown(assert(arg[1]))
+layout = read_layout(arg[1])
+page.navbar = generate_navbar()
+
+page.content = replace_tags(content, page)
+
+io.write((replace_tags(layout, page)))