diff options
Diffstat (limited to 'Master/texmf-dist/tex/luatex/luatexja/ltj-direction.lua')
-rw-r--r-- | Master/texmf-dist/tex/luatex/luatexja/ltj-direction.lua | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/Master/texmf-dist/tex/luatex/luatexja/ltj-direction.lua b/Master/texmf-dist/tex/luatex/luatexja/ltj-direction.lua index c54842a86b6..970a3f75972 100644 --- a/Master/texmf-dist/tex/luatex/luatexja/ltj-direction.lua +++ b/Master/texmf-dist/tex/luatex/luatexja/ltj-direction.lua @@ -168,6 +168,8 @@ do end end end + local node_next_node, node_tail_node = node.next, node.tail + local insert_after_node = node.insert_after function luatexja.direction.set_list_direction_hook(v) local lv = tex_nest.ptr -- must be >= 1 if not v then @@ -178,10 +180,12 @@ do elseif v=='adj' then v = get_adjust_dir_count() end - local h = to_direct(tex_nest[lv].head) - local w = dir_pool[v]() - insert_after(h, h, w) - tex_nest[lv].tail = to_node(node_tail(w)) + local h = tex_nest[lv].head + local hn = node.next(h) + hn = (hn and hn.id==id_local) and hn or h + local w = to_node(dir_pool[v]()) + insert_after_node(h, hn, w) + tex_nest[lv].tail = node_tail_node(w) ensure_tex_attr(attr_icflag, 0) ensure_tex_attr(attr_dir, 0) end @@ -203,7 +207,7 @@ do "To change direction in an align, \n" .. "you shold use \\hbox or \\vbox.") else - local h = (lv==0) and tex.lists.page_head or tex_nest[lv].head.next + local h = (lv==0) and tex.lists.page_head or tex_nest[lv].head.next local flag,w = test_list(h,lv) if flag==0 then if lv==0 and not page_direction then @@ -218,8 +222,15 @@ do elseif flag==1 then node_set_attr(w, attr_dir, v) if lv==0 then page_direction = v end - else - if lv==0 then page_direction = v end + elseif lv==0 then + page_direction = v + else -- flag == 2: need to create dir whatsit. + local h = tex_nest[lv].head + local hn = node.next(h) + hn = (hn and hn.id==id_local) and hn or h + local w = to_node(dir_pool[v]()) + insert_after_node(h,hn,w) + tex_nest[lv].tail = node_tail_node(w) end ensure_tex_attr(attr_icflag, 0) end @@ -234,7 +245,7 @@ local function create_dir_whatsit(hd, gc, new_dir) getsubtype(hd)==sid_user and getfield(hd, 'user_id')==DIR then set_attr(hd, attr_icflag, get_attr_icflag(hd) + PROCESSED_BEGIN_FLAG) - local n = node_next(hd) + local n =node_next(hd) if n then set_attr(n, attr_icflag, get_attr_icflag(n) + PROCESSED_BEGIN_FLAG) |