#!/usr/bin/env lua
require "jorvick.util"
local commands = {};
function commands.build()
require "jorvick.build";
end
function commands.publish(post)
local f, err = io.open(post);
if not f then
print("Can't open post: "..(err or "unknown error"));
end
local f2, err = io.open(post..".published", "w+");
local in_header;
for line in f:lines() do
if in_header == nil and line:match("^%-%-%-%s*$") then
in_header = true;
elseif in_header == true and line:match("^%-%-%-%s*$") then
f2:write("published: "..os.date("!%Y-%m-%dT%H:%M:%SZ"), "\n");
in_header = false;
end
f2:write(line, "\n");
end
f:close();
f2:close();
os.rename(post..".published", post);
print("Post marked as published. Run build to update site.");
end
function commands.create(...)
local title = table.concat({...}, " ");
if #title == 0 then
title = os.date("New Post %Y-%m-%d");
end
local filename = posts_dir..make_short_title(title)..".markdown";
print("Creating post: "..filename)
local f = io.open(filename, "r");
if f then print("File already exists or is unreadable"); return; end
f = io.open(filename, "w+");
if not f then
print("File not writeable");
return;
end
-- YAML
f:write("---\n");
f:write("title: ", title, "\n");
f:write("layout: post\n");
f:write("tags: \n");
f:write("x-published: \n");
f:write("---\n\n");
f:close();
local blog_editor = os.getenv("BLOG_EDITOR");
if blog_editor then
blog_editor = blog_editor:gsub("%U+", { LINE = "8", POST = filename });
else
blog_editor = (os.getenv("EDITOR") or "nano").." +8 "..filename;
end
os.execute(blog_editor);
end
function commands.help()
print "Jorvick - Blog Generator"
print ""
print "Commands:"
print " create - Create a new blank post with a title"
print " publish - Mark a post as published and stamp it with a date"
print " build - Generate the HTML files and feed for all posts"
print ""
end
local command = arg[1] or "help";
table.remove(arg, 1);
(commands[command] or commands.help)(unpack(arg));