bavbavhaus.net/pandoc/bavbavhaus.lua

54 lines
1.7 KiB
Lua

local l = require("pandoc.logging")
local read = pandoc.read
assert(#arg == 2, "\n" ..
"[ERROR] usage: pandoc lua collect_deps.lua <index file> <output file")
local index_file, output_file = table.unpack(arg)
local f = assert(io.open(index_file), "\n" ..
"[ERROR] could not open " .. index_file .. " for reading.")
local data = f:read("a")
f:close()
local visited = {}
local lines = {}
local all_target = "all: "
local all_prereqs = {}
local sitemap_target = "public_html/sitemap.html.part: "
local sitemap_prereqs = {}
local function collect (fp)
local f = assert(io.open(fp), "\n" ..
"[ERROR] could not open " .. fp .. " for reading.")
visited[fp] = true
local target = fp:gsub("(.+)%.md", "public_html/%1.html")
table.insert(all_prereqs, target)
table.insert(sitemap_prereqs, fp)
local prereqs = { fp }
local data = f:read("a")
f:close()
read(data):walk({ Link = function (link)
if not link.target:find(".%.md$") then return end
local f = io.open(link.target)
if f == nil then return else f:close() end
if visited[link.target] then return end
local prereq = link.target:gsub("(.+)%.md", "public_html/%1.html.part")
table.insert(prereqs, prereq)
collect(link.target)
end })
table.insert(prereqs, "public_html/sitemap.html.part")
target = ("%s: "):format(target)
table.insert(lines, table.concat({ target, table.concat(prereqs, " ") }))
end
collect(arg[1])
table.insert(lines, 1, table.concat({ all_target, table.concat(all_prereqs, " ") }))
table.insert(lines, table.concat({ sitemap_target, table.concat(sitemap_prereqs, " ") }))
local f = assert(io.open(output_file, "w"), "\n" ..
"[ERROR] could not open " .. output_file .. " for writing.")
f:write(table.concat(lines, "\n"))
f:close()