X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fltj-direction.lua;h=107d27a897a5f4c0cae2de42d22832d24aff2629;hb=3fae82d64b193c794fdf2f1262d80bddc98ce5a8;hp=97f267820aa8a58e8dc978b109eeed5c615a1352;hpb=8aa7cca9f2480e060fc63b7a2652aa888f90079d;p=luatex-ja%2Fluatexja.git diff --git a/src/ltj-direction.lua b/src/ltj-direction.lua index 97f2678..107d27a 100644 --- a/src/ltj-direction.lua +++ b/src/ltj-direction.lua @@ -640,7 +640,10 @@ do local bh = getlist(b) local box_dir, dn = get_box_dir(b, ltjs.list_dir) -- 既に b の中身にあるwhatsit - + if (box_dir=dir_node_auto then -- dir_node としてカプセル化されている @@ -1056,45 +1059,7 @@ do end end --- append_to_vlist filter -do - 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); - end - node_write(g) - end - node_write(new_b) - tex.prevdepth = getfield(new_b, mirrored and 'height' or 'depth') - return nil -- do nothing on tex side - end - ltjb.add_to_callback('append_to_vlist_filter', - dir_adjust_append_vlist, - 'ltj.direction', 10000) -end +-- append_to_vlist filter: done in ltj-lineskip.lua -- finalize (executed just before \shipout) -- we supply correct pdfsavematrix nodes etc. inside dir_node @@ -1102,6 +1067,11 @@ do local finalize_inner local function finalize_dir_node(db,new_dir) local b = getlist(db) + if getid(b)==id_whatsit and getsubtype(b)==sid_user + and getfield(b, 'user_id')==DIR then + local ob = b; b = node_remove(b,b); setfield(db, 'head', b); + node_free(ob) + end finalize_inner(b) local w = getfield(b, 'width') local h = getfield(b, 'height')