bavbavhaus.net/pandoc/links.lua

38 lines
1.1 KiB
Lua
Raw Normal View History

2024-04-12 22:30:16 +02:00
-- local l = require("pandoc.logging")
local read, json = pandoc.read, pandoc.json
assert(#arg > 1, "\n" ..
"[ERROR] usage: pandoc lua links.lua <destination file> <input file>...")
2024-04-22 23:44:54 +02:00
local destination_filepath = arg[1]
local filepaths_arr = {}
local filepaths_map = {}
for i = 2, #arg do
table.insert(filepaths_arr, arg[i])
filepaths_map[arg[i]] = {}
2024-04-12 22:30:16 +02:00
end
2024-04-22 23:44:54 +02:00
for _,filepath in ipairs(filepaths_arr) do
2024-04-12 22:30:16 +02:00
local f = assert(io.open(filepath), "\n" ..
"[ERROR] could not open " .. filepath)
local data = f:read("a")
f:close()
local visited_map = {}
read(data):walk({
Link = function (link)
2024-04-22 23:44:54 +02:00
if not filepaths_map[link.target] then return end
2024-04-12 22:30:16 +02:00
if visited_map[link.target] then return end
2024-04-22 23:44:54 +02:00
table.insert(filepaths_map[filepath], link.target)
2024-04-12 22:30:16 +02:00
visited_map[link.target] = true
end
})
end
2024-04-22 23:44:54 +02:00
local data = json.encode(filepaths_map)
2024-04-12 22:30:16 +02:00
local f = io.open(destination_filepath)
if f == nil or f:read("a") ~= data then
local f = assert(io.open(destination_filepath, "w"), "\n" ..
"[ERROR] could not open " .. destination_filepath .. " for writing")
f:write(data)
f:close()
end