update `pandoc` data dir
parent
eb30a5edb1
commit
4cfa96175e
|
@ -5,12 +5,14 @@ assert(#arg == 2, "\n" ..
|
|||
"[ERROR] usage: pandoc lua sitemap.lua <index file> <output file>")
|
||||
local index_file, output_file = table.unpack(arg)
|
||||
|
||||
local node_len = 1
|
||||
local node_list, node_map = {}, {}
|
||||
local function collect (fp)
|
||||
local f = assert(io.open(fp), "\n" ..
|
||||
"[ERROR] could not open " .. fp .. " for reading.")
|
||||
table.insert(node_list, fp)
|
||||
node_map[fp] = { order = #node_list, nodes = {} }
|
||||
if fp:len() > node_len then node_len = fp:len() end -- track node len
|
||||
local data = f:read("a")
|
||||
f:close()
|
||||
local visited = {}
|
||||
|
@ -34,69 +36,64 @@ local L = {
|
|||
SW = "'", S = "-", SE = "'",
|
||||
}
|
||||
|
||||
local arma = {}
|
||||
local list = {}
|
||||
local armb = {}
|
||||
for i,node in ipairs(node_list) do
|
||||
arma[i] = {}
|
||||
list[i] = node
|
||||
armb[i] = {}
|
||||
local arm_a, arm_b = {}, {}
|
||||
for i,_ in ipairs(node_list) do
|
||||
arm_a[i], arm_b[i] = {}, {}
|
||||
end
|
||||
|
||||
local function reverse (t)
|
||||
for i=1,#t//2 do
|
||||
t[i],t[#t-i+1] = t[#t-i+1],t[i]
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
local arm_row_len = 1
|
||||
for _,node in ipairs(node_list) do
|
||||
local a_node = node_map[node]
|
||||
for _,node in ipairs(a_node["nodes"]) do
|
||||
local a = a_node["order"]
|
||||
local b = node_map[node]["order"]
|
||||
|
||||
local i1 = 1
|
||||
local ia = math.min(a,b)
|
||||
local ib = math.max(a,b)
|
||||
local iz = #node_list
|
||||
local wing = a < b and arma or armb
|
||||
local node_a = node_map[node]
|
||||
for _,node in ipairs(node_a["nodes"]) do
|
||||
local a, b = node_a["order"], node_map[node]["order"]
|
||||
local i_a, i_b = math.min(a,b), math.max(a,b)
|
||||
local arm = a < b and arm_a or arm_b
|
||||
|
||||
-- find the first free column
|
||||
local col = 1
|
||||
while true do
|
||||
for i=ia,ib do
|
||||
local cell = wing[i][col]
|
||||
for i=i_a,i_b do
|
||||
local cell = arm[i][col]
|
||||
if cell ~= nil and cell ~= L.X then
|
||||
col = col + 1
|
||||
goto continue
|
||||
end
|
||||
end
|
||||
break
|
||||
::continue::
|
||||
col = col + 1
|
||||
end
|
||||
if col == 1 then col = 2 end
|
||||
local a_row = wing[ia]
|
||||
if a_row[1] == nil or a_row[1] == L.X then
|
||||
a_row[1] = a < b and L.N or L.L
|
||||
col = col == 1 and 2 or col
|
||||
if col > arm_row_len then arm_row_len = col end -- track row len
|
||||
|
||||
-- layout starting row
|
||||
local row_a = arm[i_a]
|
||||
if row_a[1] == nil or row_a[1] == L.X then
|
||||
row_a[1] = a < b and L.N or L.L
|
||||
end
|
||||
for i=1,col-1 do
|
||||
if a_row[i] == nil or a_row[i] == L.X then a_row[i] = L.N end
|
||||
for i=2,col-1 do
|
||||
if row_a[i] == nil or row_a[i] == L.X then row_a[i] = L.N end
|
||||
end
|
||||
a_row[col] = a < b and L.NW or L.NE
|
||||
for i=ia+1,ib-1 do
|
||||
row_a[col] = a < b and L.NW or L.NE
|
||||
|
||||
-- layout rows between start and end
|
||||
for i=i_a+1,i_b-1 do
|
||||
local row_i = arm[i]
|
||||
for j=1,col-1 do
|
||||
if wing[i][j] == nil then wing[i][j] = L.X end
|
||||
if row_i[j] == nil then row_i[j] = L.X end
|
||||
end
|
||||
wing[i][col] = L.W
|
||||
row_i[col] = L.W
|
||||
end
|
||||
local b_row = wing[ib]
|
||||
if b_row[1] == nil or b_row[1] == L.X then
|
||||
b_row[1] = a < b and L.R or L.S
|
||||
|
||||
-- layout ending row
|
||||
local row_b = arm[i_b]
|
||||
if row_b[1] == nil or row_b[1] == L.X then
|
||||
row_b[1] = a < b and L.R or L.S
|
||||
end
|
||||
for i=1,col-1 do
|
||||
if b_row[i] == nil or b_row[i] == L.X then b_row[i] = L.S end
|
||||
for i=2,col-1 do
|
||||
if row_b[i] == nil or row_b[i] == L.X then row_b[i] = L.S end
|
||||
end
|
||||
b_row[col] = L.SW
|
||||
row_b[col] = a < b and L.SW or L.SE
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -108,26 +105,21 @@ table.insert(lines, "<h1>sitemap</h1>")
|
|||
table.insert(lines, "</header>")
|
||||
table.insert(lines, "<pre>")
|
||||
|
||||
-- pad right wing
|
||||
local arma_pad = 1
|
||||
for _,len in pairs(arma) do
|
||||
if #len > arma_pad then arma_pad = #len end
|
||||
end
|
||||
-- pad node names
|
||||
local node_pad = 1
|
||||
for _,s in pairs(list) do
|
||||
if s:len() > node_pad then node_pad = s:len() end
|
||||
end
|
||||
for i,node in ipairs(node_list) do
|
||||
local line = {}
|
||||
local node_padded = ("%-"..node_len.."s"):format(node)
|
||||
local node_anchor = node_padded:gsub("(.+)%.md", "<a href=\"%1.html\">%1</a>")
|
||||
local row_a, row_b = arm_a[i], arm_b[i]
|
||||
|
||||
for i,v in ipairs(list) do
|
||||
local row = {}
|
||||
local v = ("%-"..node_pad.."s"):format(v)
|
||||
local a = v:gsub("(.+)%.md", "<a href=\"%1.html\">%0</a>")
|
||||
table.insert(row, (("%"..arma_pad.."s"):format(table.concat(reverse(arma[i])))))
|
||||
table.insert(row, ((" %s "):format(a)))
|
||||
table.insert(row, (table.concat(armb[i])))
|
||||
-- reverse arm a row
|
||||
for j=1,#row_a//2 do
|
||||
row_a[j], row_a[#row_a-j+1] = row_a[#row_a-j+1], row_a[j]
|
||||
end
|
||||
|
||||
table.insert(lines, table.concat(row))
|
||||
table.insert(line, (("%"..arm_row_len.."s"):format(table.concat(row_a))))
|
||||
table.insert(line, ((" %s "):format(node_anchor)))
|
||||
table.insert(line, (table.concat(row_b)))
|
||||
table.insert(lines, table.concat(line))
|
||||
end
|
||||
table.insert(lines, "</pre>")
|
||||
table.insert(lines, "</article>")
|
||||
|
@ -138,7 +130,7 @@ local f = io.open(output_file)
|
|||
local data_old
|
||||
if f then data_old = f:read("a"); f:close() end
|
||||
|
||||
-- write to output_file if data changed
|
||||
-- write to output_file if no output_file yet or data changed
|
||||
if not data_old or data ~= data_old then
|
||||
local f = assert(io.open(output_file, "w"), "\n" ..
|
||||
"[ERROR] could not open " .. output_file .. " for writing.")
|
||||
|
|
Loading…
Reference in New Issue