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
|
#!/usr/bin/env lua
local pretty = require"pl.pretty"
local dir = require"pl.dir"
local gumbo = require"gumbo"
local months = {
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
}
local function parse (stamp)
local year, month, day = stamp:match"(%d+)-(%d?%d)-(%d?%d)T?"
year, month, day = tonumber(year), tonumber(month), tonumber(day)
if not year or not month or not day then
return nil
end
return {year=year, month=month, day=day}
end
local function describe (date)
return string.format("%d %s", date.day, months[date.month])
end
local pages = dir.getfiles(".", "*.html")
local takeaways = {
["published-on"] = "published",
["last-modified-on"] = "modified",
}
local excludes = {
["index.html"] = true,
["graveyard_of_the_drawings.html"] = true,
["plop.html"] = true,
}
local posts = {}
for _, filename in pairs(pages) do
local document = gumbo.parseFile(filename)
local metas = document:getElementsByTagName"meta"
local properties = {title=document.title, filename=filename:sub(3), published=""}
for _, meta in ipairs(metas) do
local take = nil
for _, attribute in ipairs(meta.attributes) do
if attribute.name == "name" then
take = takeaways[attribute.value]
end
if take and attribute.name == "content" then
properties[take] = attribute.value
end
end
end
if properties.filename:match"^[^_]" and not excludes[properties.filename] then
table.insert(posts, properties)
end
end
table.sort(posts, function (lhs, rhs) return lhs.published > rhs.published end)
print("<table>")
local year = nil
for _, page in pairs(posts) do
local date = parse(page.published)
if date and year ~= date.year then
year = date.year
print(string.format("<tr><td><b>%d</b><td><td>", year))
end
print(string.format([[<tr><td>%s<td class="sep">•<td><a href="%s">%s</a>]], describe(date), page.filename, page.title))
end
print("</table>")
|