bavbavhaus.net/pandoc/links.lua

43 lines
1.3 KiB
Lua

-- 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>...")
local destination_filepath
local input_filepaths = {}
local input_filepaths_keys = {}
for _, option in ipairs(arg) do
if destination_filepath == nil then
destination_filepath = option
else
table.insert(input_filepaths, option)
input_filepaths_keys[option] = { json.null }
end
end
for _,filepath in ipairs(input_filepaths) do
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)
if not input_filepaths_keys[link.target] then return end
if visited_map[link.target] then return end
table.insert(input_filepaths_keys[filepath], link.target)
table.insert(input_filepaths_keys[link.target], 1, filepath)
visited_map[link.target] = true
end
})
end
local data = json.encode(input_filepaths_keys)
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