(At least internal) links are working

This commit is contained in:
Marcel Krüger 2020-06-05 23:49:03 +02:00
parent cb044ac8e4
commit 054a0f4110

View File

@ -146,7 +146,7 @@ local function get_action_attr(p, action)
local id = action.id local id = action.id
if file then if file then
assert(type(id) == "string") assert(type(id) == "string")
action_attr = action_attr .. "/S/GoToR/D" .. pdf_string(id) action_attr = action_attr .. "/S/GoToR/D" .. pdf_string(id) .. ">>"
else else
local dest = dests[id] local dest = dests[id]
if not dest then if not dest then
@ -154,9 +154,9 @@ local function get_action_attr(p, action)
dests[id] = dest dests[id] = dest
end end
if type(id) == "string" then if type(id) == "string" then
action_attr = action_attr .. "/S/GoTo/D" .. pdf_string(id) action_attr = action_attr .. "/S/GoTo/D" .. pdf_string(id) .. ">>"
else else
action_attr = string.format("%s/S/GoTo/D %i 0 R", action_attr, dest) action_attr = string.format("%s/S/GoTo/D %i 0 R>>", action_attr, dest)
end end
end end
end end
@ -165,7 +165,7 @@ end
local function write_link(p, link) local function write_link(p, link)
local quads = link.quads local quads = link.quads
local minX, maxX, minY, maxY = math.huge, -math.huge, math.huge, -math.huge local minX, maxX, minY, maxY = math.huge, -math.huge, math.huge, -math.huge
local attr = link.attr .. get_action_attr(link.action) local attr = link.attr .. get_action_attr(p, link.action)
assert(#quads%8==0) assert(#quads%8==0)
local quadStr = {} local quadStr = {}
for i=1,#quads,8 do for i=1,#quads,8 do
@ -181,11 +181,6 @@ local function write_link(p, link)
for i=1,#quads do quads[i] = nil end for i=1,#quads do quads[i] = nil end
link.objnum = nil link.objnum = nil
end end
local function linkcontext_set(linkcontext, p, x, y, list, level, kind)
for _,l in ipairs(linkcontext) do if l.level == level then
addlinkpoint(p, l, x, y, list, level, kind)
end end
end
local function addlinkpoint(p, link, x, y, list, kind) local function addlinkpoint(p, link, x, y, list, kind)
local quads = link.quads local quads = link.quads
local off = pdf.variable.linkmargin local off = pdf.variable.linkmargin
@ -210,6 +205,11 @@ local function addlinkpoint(p, link, x, y, list, kind)
link.annots = nil link.annots = nil
end end
end end
local function linkcontext_set(linkcontext, p, x, y, list, level, kind)
for _,l in ipairs(linkcontext) do if l.level == level then
addlinkpoint(p, l, x, y, list, level, kind)
end end
end
function do_start_link(prop, p, n, x, y, outer, _, level) function do_start_link(prop, p, n, x, y, outer, _, level)
local links = p.linkcontext local links = p.linkcontext
@ -371,7 +371,7 @@ local function scan_action()
error[[num style GoTo actions must be internal]] error[[num style GoTo actions must be internal]]
end end
action.id = token.scan_int() action.id = token.scan_int()
if not id > 0 then if action.id <= 0 then
error[[id must be positive]] error[[id must be positive]]
end end
elseif token.scan_keyword'name' then elseif token.scan_keyword'name' then
@ -512,7 +512,7 @@ token.luacmd("pdfextension", function(_, imm)
local id local id
if token.scan_keyword'num' then if token.scan_keyword'num' then
id = token.scan_int() id = token.scan_int()
if not id > 0 then if id <= 0 then
error[[id must be positive]] error[[id must be positive]]
end end
elseif token.scan_keyword'name' then elseif token.scan_keyword'name' then