From 84d611c78ac65113ed8cc7838994669de270d4d0 Mon Sep 17 00:00:00 2001 From: Aki Date: Tue, 3 Sep 2024 21:35:27 +0200 Subject: Sketched generate-atom to generate RSS/Atom feeds along with index --- generate-index.lua | 70 ++++-------------------------------------------------- 1 file changed, 5 insertions(+), 65 deletions(-) (limited to 'generate-index.lua') diff --git a/generate-index.lua b/generate-index.lua index 1ab4db4..b53beb2 100755 --- a/generate-index.lua +++ b/generate-index.lua @@ -1,78 +1,18 @@ #!/usr/bin/env lua -local config = require"pl.config" -local dir = require"pl.dir" -local gumbo = require"gumbo" -local tablex = require"pl.tablex" - - -local function parse (stamp) - local year, month, day, hour, min, sec = stamp:match"(%d+)-(%d?%d)-(%d?%d)T(%d?%d):(%d?%d):(%d?%d)" - return { - year = tonumber(year), - month = tonumber(month), - day = tonumber(day), - hour = tonumber(hour), - min = tonumber(min), - sec = tonumber(sec), - } -end - - -local function describe (date) - -- strftime(3) still does not support printing day of month without leading zero or space. - return string.format("%d %s", date.day, os.date("%B", os.time(date))) -end - - -config = config.read(arg[1] or "huh.conf") or {} -config.excludes = tablex.makeset(config.excludes or {}) - - -local function matches (str) - if config.pattern then - return str:match(config.pattern) - end - return str -end - - -local pages = dir.getfiles(".", "*.html") -local takeaways = { - ["published-on"] = "published", - ["last-modified-on"] = "modified", -} -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 matches(properties.filename) and not config.excludes[properties.filename] then - table.insert(posts, properties) - end -end -table.sort(posts, function (lhs, rhs) return lhs.published > rhs.published end) +local datetime = require"huh.datetime" +local config = require"huh.config".load(arg[1]) +local posts = require"huh.blog".posts(config) print[[]] local year = nil local previous = nil for _, page in pairs(posts) do - local date = parse(page.published) + local date = datetime.parse(page.published) if date and year ~= date.year then year = date.year previous = nil print(string.format("
%d", year)) end - date = describe(date) + date = datetime.describe(date) if date == previous then date = "" else -- cgit v1.1