-- local l = require("pandoc.logging") local read, json = pandoc.read, pandoc.json assert(#arg > 1, "\n" .. "[ERROR] usage: pandoc lua links.lua ...") 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