diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/pack-obj.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/pack-obj.lua | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/pack-obj.lua b/Master/texmf-dist/tex/context/base/mkiv/pack-obj.lua index cba0dcf8ff4..f68c1ba0c5e 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/pack-obj.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/pack-obj.lua @@ -27,6 +27,7 @@ local new_latelua = nuts.pool.latelua local settexdimen = tokens.setters.dimen local gettexbox = tokens.getters.box +local settexbox = tokens.setters.box local gettexdimen = tokens.getters.dimen local gettexcount = tokens.getters.count @@ -124,22 +125,37 @@ objects = { n = 0, } -function objects.register(ns,id,b,referenced) +local objects = objects + +function objects.register(ns,id,b,referenced,offset,mode) objects.n = objects.n + 1 - nodes.handlers.finalize(gettexbox(b)) - data[ns][id] = { - codeinjections.registerboxresource(b), -- a box number - gettexdimen("objectoff"), - referenced - } + nodes.handlers.finalize(gettexbox(b),"object") + if mode == 0 then + -- tex + data[ns][id] = { + codeinjections.registerboxresource(b), -- a box number + offset, + referenced or false, + mode, + } + else + -- box (backend) + data[ns][id] = { + codeinjections.registerboxresource(b,offset), -- a box number + false, + referenced, + mode, + } + end end -function objects.restore(ns,id) +function objects.restore(ns,id) -- why not just pass a box number here too (ok, we also set offset) local d = data[ns][id] if d then local index = d[1] local offset = d[2] local status = d[3] + local mode = d[4] local hbox = codeinjections.restoreboxresource(index) -- a nut ! if status then local list = getlist(hbox) @@ -149,10 +165,10 @@ function objects.restore(ns,id) setlink(list,page) end setbox("objectbox",hbox) - settexdimen("objectoff",offset) + settexdimen("objectoff",offset or 0) else setbox("objectbox",nil) - settexdimen("objectoff",0) + settexdimen("objectoff",0) -- for good old times end end @@ -161,7 +177,7 @@ function objects.dimensions(index) if d then return codeinjections.boxresourcedimensions(d[1]) else - return 0, 0, 0 + return 0, 0, 0, 0 end end @@ -184,13 +200,13 @@ end implement { name = "registerreferencedobject", - arguments = { "string", "string", "integer", true }, + arguments = { "string", "string", "integer", true, "dimension", "integer" }, actions = objects.register, } implement { name = "registerobject", - arguments = { "string", "string", "integer" }, + arguments = { "string", "string", "integer", false, "dimension", "integer" }, actions = objects.register, } @@ -238,15 +254,15 @@ implement { name = "getobjectdimensions", arguments = { "string", "string" }, actions = function(ns,id) - local o = data[ns][id] - local w, h, d = 0, 0, 0 - if d then - w, h, d = codeinjections.boxresourcedimensions(o[1]) + local object = data[ns][id] + local w, h, d, o = 0, 0, 0, 0 + if object then + w, h, d, o = codeinjections.boxresourcedimensions(object[1]) end settexdimen("objectwd",w or 0) settexdimen("objectht",h or 0) settexdimen("objectdp",d or 0) - settexdimen("objectoff",o[2]) + settexdimen("objectoff",o or #objects > 2 and object[2] or 0) end } |