summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/spac-ver.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2018-02-19 19:19:07 +0100
committerContext Git Mirror Bot <phg42.2a@gmail.com>2018-02-19 19:19:07 +0100
commit9bb459e9fedcad94579973ccd07ad9e78d0734c8 (patch)
treee01ac3174e8891a6e6004c88cb46f220312a2bfc /tex/context/base/mkiv/spac-ver.lua
parent5321d35d68ce0acb71b46bddac1d8cab8eca3fcc (diff)
downloadcontext-9bb459e9fedcad94579973ccd07ad9e78d0734c8.tar.gz
2018-02-19 19:05:00
Diffstat (limited to 'tex/context/base/mkiv/spac-ver.lua')
-rw-r--r--tex/context/base/mkiv/spac-ver.lua56
1 files changed, 47 insertions, 9 deletions
diff --git a/tex/context/base/mkiv/spac-ver.lua b/tex/context/base/mkiv/spac-ver.lua
index 67363c4ed..1cd78ce70 100644
--- a/tex/context/base/mkiv/spac-ver.lua
+++ b/tex/context/base/mkiv/spac-ver.lua
@@ -53,6 +53,7 @@ local texgetdimen = tex.getdimen
local texset = tex.set
local texsetdimen = tex.setdimen
local texnest = tex.nest
+local texgetbox = tex.getbox
local buildpage = tex.triggerbuildpage
@@ -2005,20 +2006,50 @@ do
directives.register("vspacing.resetprevdepth",function(v) reset = v end)
trackers.register ("vspacing.resetprevdepth",function(v) trace = v end)
+ -- use getid and getnext
+
function vspacing.resetprevdepth()
if reset then
local head = texlists.hold_head
- local skip = 0
- while head and head.id == insert_code do
- head = head.next
- skip = skip + 1
- end
if head then
- outer.prevdepth = 0
+ head = tonut(head)
+ local skip = 0
+ while head and getid(head) == insert_code do
+ head = getnext(head)
+ skip = skip + 1
+ end
+ if head then
+ outer.prevdepth = 0
+ end
+ if trace then
+ report("prevdepth %s at page %i, skipped %i, value %p",
+ head and "reset" or "kept",texgetcount("realpageno"),skip,outer.prevdepth)
+ end
end
- if trace then
- report("prevdepth %s at page %i, skipped %i, value %p",
- head and "reset" or "kept",texgetcount("realpageno"),skip,outer.prevdepth)
+ end
+ end
+
+ local trace = false
+
+ trackers.register("vspacing.forcestrutdepth",function(v) trace = v end)
+
+ function vspacing.forcestrutdepth(n,depth,trace_mode)
+ local box = texgetbox(n)
+ if box then
+ box = tonut(box)
+ local dp = getdepth(box)
+ if dp < depth then
+ local head = getlist(box)
+ if head then
+ local tail = find_node_tail(head)
+ if tail and getid(tail) == hlist_code then
+ setdepth(tail,depth)
+ outer.prevdepth = depth
+ if trace or trace_mode > 0 then
+ nuts.setvisual(tail,"depth")
+ end
+ end
+ end
end
end
end
@@ -2043,6 +2074,13 @@ do
}
implement {
+ name = "forcestrutdepth",
+ arguments = { "integer", "dimension", "integer" },
+ actions = vspacing.forcestrutdepth,
+ scope = "private"
+ }
+
+ implement {
name = "vspacingsetamount",
actions = vspacing.setskip,
scope = "private",