build.lua

Sat, 11 Jul 2009 02:14:33 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Sat, 11 Jul 2009 02:14:33 +0100
changeset 6
cf40d55f8122
parent 5
951de9625338
child 8
6dc28a66f4d9
permissions
-rwxr-xr-x

Add util module and move first helper function into it

1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 require "LuaTemplates.templates"
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 require "LuaTemplates.parsers"
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 require "lfs"
6
cf40d55f8122 Add util module and move first helper function into it
Matthew Wild <mwild1@gmail.com>
parents: 5
diff changeset
4 require "util"
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 -- Config --
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 dofile(arg[1] or ".blogrc")
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 posts_dir = posts_dir or "_posts/"
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 layouts_dir = layouts_dir or "_layouts/"
2
80eb1f7784c4 Support for output_dir config option
Matthew Wild <mwild1@gmail.com>
parents: 1
diff changeset
12 output_dir = output_dir or "./"
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 -- - -- - --
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 -- Logging --
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 function make_msg(prefix, name) return function (fmt, ...) print(prefix, string.format(fmt, ...)); end end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 msg_info, msg_warn, msg_error = make_msg("II", "info"), make_msg("WW", "warn"), make_msg("EE", "error");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 -- -- - -- --
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 -- Append '/' to end of posts_dir if necessary
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 posts_dir = posts_dir:gsub("([^/])$", "%1/")
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22
2
80eb1f7784c4 Support for output_dir config option
Matthew Wild <mwild1@gmail.com>
parents: 1
diff changeset
23 -- Append '/' to end of output_dir if necessary
80eb1f7784c4 Support for output_dir config option
Matthew Wild <mwild1@gmail.com>
parents: 1
diff changeset
24 output_dir = output_dir:gsub("([^/])$", "%1/")
80eb1f7784c4 Support for output_dir config option
Matthew Wild <mwild1@gmail.com>
parents: 1
diff changeset
25
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 -- Append '/' to end of base_url if necessary
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 base_url = base_url:gsub("([^/])$", "%1/")
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 posts = {};
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 -- Read posts, interpret
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 for post_filename in lfs.dir(posts_dir:gsub("/$", "")) do
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 -- Ignore dotfiles
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 if not post_filename:match("^%.") then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 msg_info("Processing %s", post_filename);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 local post_file, err = io.open(posts_dir..post_filename);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 if post_file then
4
cebf96c3b522 Correctly parse file extension to determine post format
Matthew Wild <mwild1@gmail.com>
parents: 3
diff changeset
39 local post_format = post_filename:match("%.(%w+)$") or "text";
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 local post = { filename = post_filename, path = posts_dir..post_filename, format = post_format };
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 if not parsers[post_format] then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 msg_warn("Post format '%s' not supported", post_format);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 else
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 local inside_header, line_num = nil, 0;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 for line in post_file:lines() do
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 line_num = line_num + 1;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 if line:match("^%-%-%-") then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 if not inside_header then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 inside_header = true;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 else
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 inside_header = false;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 break;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 elseif not inside_header then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 break;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 else
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 local k,v = line:match("^(%w+):%s?(.*)$");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 if k and v then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 post[k] = v;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 else
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 msg_warn("Couldn't parse header at line %d", line_num);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 local post_data, err = post_file:read("*a");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 -- Parse post_data according to extension, add to post list
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 --msg_info("Parsing %s...", post_filename) --:gsub("%.[^%.]+$", ""):match("[^/]+"));
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 post.content = templates.load(parsers[post_format](post_data)):render{ page = post };
6
cf40d55f8122 Add util module and move first helper function into it
Matthew Wild <mwild1@gmail.com>
parents: 5
diff changeset
72 post.shorttile = make_short_title(post.title);
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 post.url = base_url..post.shorttitle.."/"
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 post.post = post
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 post.updated = post.updated or os.date("!%Y-%m-%dT%H:%M:%SZ", lfs.attributes(post.path).modification);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 if post.published then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 if not post.published:match("^%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d%:%d%dZ$") then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 msg_error("Post has invalid published date");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 table.insert(posts, post);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 else
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 msg_error("Failed to open %s, %s", post_filename, err);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 local layouts = setmetatable({ default = templates.init(layouts_dir.."default.html"); },
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 { __index = function (t, k) rawset(t, k, templates.init(layouts_dir..k..".html")); return rawget(t, k); end });
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 table.sort(posts, function (a, b)
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 do return (a.updated or "") < (b.updated or ""); end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93 if not a.updated then return true; end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 if not b.updated then return false; end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 local a_year, a_month, a_day = a.updated:match("(%d%d%d%d)%-(%d%d)%-(%d%d)");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96 local b_year, b_month, b_day = b.updated:match("(%d%d%d%d)%-(%d%d)%-(%d%d)");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
97 if b_year >= a_year then return true; end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98 if b_month >= a_month then return true; end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 if b_day >= a_day then return true; end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 return false;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 end);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 do
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 local shorttitles = {};
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 for _, post in ipairs(posts) do
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 while shorttitles[post.shorttitle] do
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 post.shorttitle = post.shorttitle:gsub("%~%d+$", "").."~"..((tonumber(post.shorttitle:match("%~(%d*)$")) or 0) + 1)
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 post.url = base_url..post.shorttitle.."/"
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 shorttitles[post.shorttitle] = post;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 msg_info("%s post%s processed", #posts, #posts ~= 1 and "s" or "");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 msg_info(" - - - ");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117
5
951de9625338 Fix potential skipping of published posts if prior posts weren't published
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
118 local unpublished, removed_posts = 0, {};
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 for n, post in ipairs(posts) do
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 if post.content and (not post.layout or layouts[post.layout]) then
2
80eb1f7784c4 Support for output_dir config option
Matthew Wild <mwild1@gmail.com>
parents: 1
diff changeset
121 lfs.mkdir(output_dir..post.shorttitle);
80eb1f7784c4 Support for output_dir config option
Matthew Wild <mwild1@gmail.com>
parents: 1
diff changeset
122 local outfile, err = io.open(output_dir..post.shorttitle.."/index.html", "w+");
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 if outfile then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 local layout = layouts[post.layout or "default"];
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 -- Link to the previous and next published posts
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 local i = 1;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 repeat
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 post.next = posts[n+i];
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 i = i + 1;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 until (not post.next) or post.next.published;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 i = 1;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133 repeat
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134 post.previous = posts[n-i];
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135 i = i + 1;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 until (not post.previous) or post.previous.published;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 post.id = n;
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139 outfile:write(layout:render(post));
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140 outfile:close();
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141 if not post.published then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
142 -- Not published yet, hide it
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
143 --msg_info("Hiding unpublished post");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144 unpublished = unpublished + 1;
5
951de9625338 Fix potential skipping of published posts if prior posts weren't published
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
145 table.insert(removed_posts, n);
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
146 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147 else
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 msg_error("Failed to write HTML: %s", err);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
149 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 if post.published then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 msg_info("Published: %s", post.shorttitle);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 else
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
153 msg_info("Generated: %s", post.shorttitle);
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
154 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
155 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
156 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
157
5
951de9625338 Fix potential skipping of published posts if prior posts weren't published
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
158 local removed = 0;
951de9625338 Fix potential skipping of published posts if prior posts weren't published
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
159 for _, n in ipairs(removed_posts) do
951de9625338 Fix potential skipping of published posts if prior posts weren't published
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
160 table.remove(posts, n-removed);
951de9625338 Fix potential skipping of published posts if prior posts weren't published
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
161 removed = removed + 1;
951de9625338 Fix potential skipping of published posts if prior posts weren't published
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
162 end
951de9625338 Fix potential skipping of published posts if prior posts weren't published
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
163
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
164 -- Do main page
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
165 local main_tpl = templates.init(layouts_dir.."/main.html");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
166
3
f22a275a3a33 Fix for index.html to be saved in output_dir
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
167 main_tpl:saverender(output_dir.."index.html", { title = blog_title, posts = posts });
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
168
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
169 msg_info("%s post%s published, %d post%s unpublished", #posts, #posts ~= 1 and "s" or "", unpublished, unpublished ~= 1 and "s" or "");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
170
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
171 msg_info(" - - - ");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
172
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
173 -- Do feed
2
80eb1f7784c4 Support for output_dir config option
Matthew Wild <mwild1@gmail.com>
parents: 1
diff changeset
174 local atom = io.open(output_dir.."feed/atom.xml.new", "w+");
1
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
175 atom:write[[<?xml version="1.0" encoding="UTF-8"?>
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
176 <feed xmlns="http://www.w3.org/2005/Atom">
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
177 ]]
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
178 atom:write("\t<id>", base_url, "</id>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
179 atom:write("\t<title>", blog_title, "</title>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
180 atom:write("\t<subtitle>", blog_subtitle, "</subtitle>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
181 atom:write("\t<link href='", base_url, "feed/atom.xml' rel='self' />\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
182 atom:write("\t<link href='", base_url, "' />\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
183
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
184 atom:write("\t<updated>", os.date "!%Y-%m-%dT%H:%M:%SZ", "</updated>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
185
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
186 for n, post in ipairs(posts) do
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
187 if n > 10 then break; end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
188 if post.published then
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
189 atom:write("<entry>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190 atom:write("\t<author>\n\t\t<name>", post.author or default_author or "Unknown Author", "</name>\n\t</author>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
191 atom:write("\t<id>", post.url, "</id>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
192 atom:write("\t<title>", post.title, "</title>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193 atom:write("\t<published>", post.published, "</published>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
194 atom:write("\t<updated>", post.updated, "</updated>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
195 atom:write("\t<link href='", post.url, "' />\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
196 atom:write("\t<content type='html'>\n", post.content:gsub("&", "&amp;"):gsub("<", "&lt;"), "\t</content>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
197 atom:write("</entry>\n");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
198 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199 end
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
200 atom:write("</feed>");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
201 atom:close();
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 os.rename("feed/atom.xml.new", "feed/atom.xml");
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203
74deddff1202 Add build.lua now that all Prosody-specific things are out of it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
204 msg_info("ATOM feed written to feed/atom.xml");

mercurial