+ local id_glue = node.id('glue')
+ local getglue = node.direct.getglue or
+ function(g)
+ return getfield(g,'width'), getfield(g,'stretch'), getfield(g,'shrink'),
+ getfield(g,'stretch_order'), getfield(g,'shrink_order')
+ end
+local setglue = luatexja.setglue
+ local function copy_glue (new_glue, old_glue, subtype, new_w)
+ setfield(new_glue, 'subtype', subtype)
+ local w,st,sp,sto,spo = getglue(to_direct(old_glue))
+ setglue(new_glue, new_w or w, st, sp, sto, spo)
+ end
+ local node_write = node.direct.write
+ local function dir_adjust_append_vlist(b, loc, prev, mirrored)
+ local old_b = to_direct(b)
+ local new_b = loc=='box' and
+ make_dir_whatsit(old_b, old_b, get_dir_count(), 'append_vlist') or old_b
+
+ if prev > -65536000 then
+ local d = tex.baselineskip.width - prev
+ - getfield(new_b, mirrored and 'depth' or 'height')
+ local g = node_new(id_glue)
+ if d < tex.lineskiplimit then
+ copy_glue(g, tex.lineskip, 1)
+ else
+ copy_glue(g, tex.baselineskip, 2, d);