if not modules then modules = { } end modules ['anch-pos'] = {
version = 1.001,
comment = "companion to anch-pos.tex",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
--[[ldx--
We save positional information in the main utility table. Not only
can we store much more information in but it's also
more efficient.
--ldx]]--
local texprint, concat, format = tex.print, table.concat, string.format
jobpositions = jobpositions or { }
jobpositions.collected = jobpositions.collected or { }
jobpositions.tobesaved = jobpositions.tobesaved or { }
-- these are global since they are used often at the tex end
-- \the\dimexpr #2\ifnum\positionanchormode=\plusone-\MPx\pageanchor\fi\relax
-- \the\dimexpr #3\ifnum\positionanchormode=\plusone-\MPy\pageanchor\fi\relax
ptbs, pcol = jobpositions.tobesaved, jobpositions.collected -- global
local dx, dy = "0pt", "0pt"
local function initializer()
ptbs, pcol = jobpositions.tobesaved, jobpositions.collected
local p = pcol["page:0"] -- page:1
if p then
-- to be checked !
--~ dx, dy = p[2] or "0pt", p[3] or "0pt"
end
end
job.register('jobpositions.collected', jobpositions.tobesaved, initializer)
function jobpositions.copy(target,source)
jobpositions.collected[target] = jobpositions.collected[source] or ptbs[source]
end
function jobpositions.replace(name,...)
jobpositions.collected[name] = {...}
end
function jobpositions.doifelse(name)
commands.testcase(jobpositions.collected[name] or ptbs[name])
end
function jobpositions.MPp(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[1]) or '0' ) end
function jobpositions.MPx(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[2]) or '0pt') end
function jobpositions.MPy(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[3]) or '0pt') end
function jobpositions.MPw(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[4]) or '0pt') end
function jobpositions.MPh(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[5]) or '0pt') end
function jobpositions.MPd(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[6]) or '0pt') end
function jobpositions.MPx(id)
local jpi = pcol[id] or ptbs[id]
local x = jpi and jpi[2]
if x then
texprint(format('\\the\\dimexpr %s-%s\\relax',x,dx))
else
texprint('0pt')
end
end
function jobpositions.MPy(id)
local jpi = pcol[id] or ptbs[id]
local y = jpi and jpi[3]
if y then
texprint(format('\\the\\dimexpr %s-%s\\relax',y,dy))
else
texprint('0pt')
end
end
-- the following are only for MP so there we can leave out the pt
-- can be writes
function jobpositions.MPxy(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
texprint(format('(%s-%s,%s-%s)',jpi[2],dx,jpi[3],dy))
else
texprint('(0,0)')
end
end
function jobpositions.MPll(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
texprint(format('(%s-%s,%s-%s-%s)',jpi[2],dx,jpi[3],jpi[6],dy))
else
texprint('(0,0)')
end
end
function jobpositions.MPlr(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
texprint(format('(%s+%s-%s,%s-%s-%s)',jpi[2],jpi[4],dx,jpi[3],jpi[6],dy))
else
texprint('(0,0)')
end
end
function jobpositions.MPur(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
texprint(format('(%s+%s-%s,%s+%s-%s)',jpi[2],jpi[4],dx,jpi[3],jpi[5],dy))
else
texprint('(0,0)')
end
end
function jobpositions.MPul(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
texprint(format('(%s-%s,%s+%s-%s)',jpi[2],dx,jpi[3],jpi[5],dy))
else
texprint('(0,0)')
end
end
function jobpositions.MPpos(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
texprint(concat(jpi,',',1,6))
else
texprint('0,0,0,0,0,0')
end
end
function jobpositions.MPplus(id,n,default)
local jpi = pcol[id] or ptbs[id]
texprint((jpi and jpi[6+n]) or default)
end
function jobpositions.MPrest(id,default)
local jpi = pcol[id] or ptbs[id]
texprint((jpi and jpi[7] and concat(jpi,",",7,#jpi)) or default)
end